r611 - in trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer: . Input Input/cdaudio Input/mpg123 Input/vorbis Input/wav Output Output/OSS Output/alsa Output/esd Visualization Visualization/blur_scope beep images intl libbeep po
jiang_li at sita.openmoko.org
jiang_li at sita.openmoko.org
Thu Jan 25 08:03:13 CET 2007
Author: jiang_li
Date: 2007-01-25 07:50:09 +0100 (Thu, 25 Jan 2007)
New Revision: 611
Added:
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ABOUT-NLS
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/AUTHORS
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/COPYING
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ChangeLog
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/FAQ
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/INSTALL
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/configure.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/README
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/common.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/configure.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct36_3dnow.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_3dnow.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_MMX.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_i386.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_2to1.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_3dnow.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_4to1.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_MMX.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i386.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i586.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/equalizer.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/fileinfo.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getcpuflags.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/http.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/huffman.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_content.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_text.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_url.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_header.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_tag.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/l2tables.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer1.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer2.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer3.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mp3.xpm
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/tabinit.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/xmms-id3.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/configure.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/fileinfo.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/ogg.xpm
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/NEWS
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/about.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/audio.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/configure.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/convert.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/init.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/mixer.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/soundcard.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/about.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/audio.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/configure.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/init.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/about.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/audio.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/configure.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esd.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esdout.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/init.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/mixer.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/README
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_8.s
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/config.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/autogen.sh
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep-media-player.1.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/.Makefile.swp
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/bmp.desktop.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/build.list
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/debug.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dnd.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt1.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mkdtemp.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pixmaps.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/plugin.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.pc.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.spec.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in~
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/configure.ac
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/bg-music-player.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-menu.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-white-p.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-white.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-list.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-nexttrack.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-pause.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-play.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-previoustrack.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-repeat.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-shuffle.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/icon-musicplayer-song.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/icon-musicplayer-time.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-01.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-02.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-03.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-04.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-05.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-06.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-07.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-08.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-09.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-10.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-11.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-12.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--1.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--2.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--3.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-0.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-1.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-2.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-3.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-00.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-01.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-02.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-03.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-04.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-05.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-06.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-07.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-08.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-09.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-10.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/slider-bar.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/slider_btn.png
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ChangeLog
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/VERSION
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/bindtextdom.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/config.charset
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcgettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcigettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcngettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dgettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dngettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/eval-plural.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/explodename.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/finddomain.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettextP.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gmo.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/hash-string.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/intl-compat.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/l10nflist.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/libgnuintl.h.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadinfo.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadmsgcat.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/locale.alias
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localealias.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localename.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/log.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ngettext.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/osdep.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.y
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-add.sin
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-del.sin
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/textdomain.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/Makefile.am
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_gconf.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_rcfile.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_gnome.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_stdio.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.c
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.h
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ltmain.sh
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ChangeLog
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/LINGUAS
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars.template
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/POTFILES.in
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Rules-quot
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/bmp.pot
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/boldquot.sed
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at boldquot.header
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at quot.header
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/insert-header.sin
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/quot.sed
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/remove-potcdate.sin
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/stamp-po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.po
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.gmo
trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.po
Log:
This commit operation commit the source of simplemediaplayer to svn server for the first time.
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ABOUT-NLS
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ABOUT-NLS 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ABOUT-NLS 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,625 @@
+Notes on the Free Translation Project
+*************************************
+
+ Free software is going international! The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+Quick configuration advice
+==========================
+
+ If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+ Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'. Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the GNU `gettext' own
+library will be used. This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is _not_ required. Installers may use
+special options at configuration time for changing the default
+behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will respectively bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might be not what is desirable. You
+should use the more recent version of the GNU `gettext' library. I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+ As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your country by running the command
+`locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+Translating Teams
+=================
+
+ For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request at li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation at iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+ Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of May 2003.
+The matrix shows, in regard of each package, for which languages PO
+files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files am az be bg ca cs da de el en en_GB eo es
+ +-------------------------------------------+
+ a2ps | [] [] [] [] |
+ aegis | () |
+ anubis | |
+ ap-utils | |
+ bash | [] [] [] |
+ batchelor | |
+ bfd | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bluez-pin | [] [] |
+ clisp | |
+ clisp | [] [] [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ darkstat | () [] |
+ diffutils | [] [] [] [] [] [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] [] [] |
+ fetchmail | [] () [] [] [] [] |
+ fileutils | [] [] [] |
+ findutils | [] [] [] [] [] [] |
+ flex | [] [] [] [] |
+ gas | [] |
+ gawk | [] [] [] [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext | [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] [] [] [] [] |
+ gliv | |
+ glunarclock | [] [] [] |
+ gnucash | () [] |
+ gnucash-glossary | [] () [] |
+ gnupg | [] () [] [] [] [] |
+ gpe-calendar | [] |
+ gpe-conf | [] |
+ gpe-contacts | [] |
+ gpe-edit | |
+ gpe-login | [] |
+ gpe-ownerinfo | [] |
+ gpe-sketchbook | [] |
+ gpe-timesheet | |
+ gpe-today | [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] |
+ gpsdrive | () () () |
+ grep | [] [] [] [] [] |
+ gretl | [] |
+ hello | [] [] [] [] [] [] |
+ id-utils | [] [] |
+ indent | [] [] [] [] |
+ jpilot | [] [] [] [] |
+ jwhois | [] |
+ kbd | [] [] [] [] [] |
+ ld | [] [] |
+ libc | [] [] [] [] [] [] |
+ libgpewidget | [] |
+ libiconv | [] [] [] [] [] |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lingoteach_lessons | () () |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] [] |
+ make | [] [] [] |
+ man-db | [] () [] [] () |
+ mysecretdiary | [] [] [] |
+ nano | [] () [] [] [] |
+ nano_1_0 | [] () [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] [] |
+ ptx | [] [] [] [] [] |
+ python | |
+ radius | |
+ recode | [] [] [] [] [] [] |
+ screem | |
+ sed | [] [] [] [] [] |
+ sh-utils | [] [] [] |
+ sharutils | [] [] [] [] [] [] |
+ sketch | [] () [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] [] [] |
+ tin | () () |
+ util-linux | [] [] [] [] [] |
+ vorbis-tools | [] [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] [] [] [] [] |
+ xchat | [] [] [] |
+ xpad | |
+ +-------------------------------------------+
+ am az be bg ca cs da de el en en_GB eo es
+ 0 1 4 2 31 17 54 60 14 1 4 12 56
+
+ et fa fi fr ga gl he hr hu id it ja ko
+ +----------------------------------------+
+ a2ps | [] [] [] () () |
+ aegis | |
+ anubis | [] |
+ ap-utils | [] |
+ bash | [] [] |
+ batchelor | [] |
+ bfd | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] [] |
+ bluez-pin | [] [] [] [] |
+ clisp | |
+ clisp | [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] [] |
+ darkstat | () [] [] [] |
+ diffutils | [] [] [] [] [] [] [] |
+ e2fsprogs | |
+ enscript | [] [] |
+ error | [] [] [] [] |
+ fetchmail | [] |
+ fileutils | [] [] [] [] [] |
+ findutils | [] [] [] [] [] [] [] [] [] [] [] |
+ flex | [] [] |
+ gas | [] |
+ gawk | [] [] |
+ gcal | [] |
+ gcc | [] |
+ gettext | [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] |
+ gimp-print | [] [] |
+ gliv | () |
+ glunarclock | [] [] [] [] |
+ gnucash | [] |
+ gnucash-glossary | [] |
+ gnupg | [] [] [] [] [] [] [] |
+ gpe-calendar | [] |
+ gpe-conf | |
+ gpe-contacts | [] |
+ gpe-edit | [] [] |
+ gpe-login | [] |
+ gpe-ownerinfo | [] [] [] |
+ gpe-sketchbook | [] |
+ gpe-timesheet | [] [] [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] |
+ gprof | [] [] |
+ gpsdrive | () [] () () |
+ grep | [] [] [] [] [] [] [] [] [] [] [] |
+ gretl | [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] |
+ indent | [] [] [] [] [] [] [] [] |
+ jpilot | [] () |
+ jwhois | [] [] [] [] |
+ kbd | [] |
+ ld | [] |
+ libc | [] [] [] [] [] [] |
+ libgpewidget | [] [] [] |
+ libiconv | [] [] [] [] [] [] [] [] |
+ lifelines | () |
+ lilypond | [] |
+ lingoteach | [] [] |
+ lingoteach_lessons | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | |
+ make | [] [] [] [] [] [] |
+ man-db | [] () () |
+ mysecretdiary | [] [] |
+ nano | [] [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] |
+ ptx | [] [] [] [] [] [] [] |
+ python | |
+ radius | |
+ recode | [] [] [] [] [] [] |
+ screem | |
+ sed | [] [] [] [] [] [] [] [] |
+ sh-utils | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] |
+ sketch | [] |
+ soundtracker | [] [] [] |
+ sp | [] () |
+ tar | [] [] [] [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] [] [] [] |
+ tin | [] () |
+ util-linux | [] [] [] [] () [] |
+ vorbis-tools | [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] |
+ wget | [] [] [] [] [] [] [] [] |
+ xchat | [] [] [] |
+ xpad | |
+ +----------------------------------------+
+ et fa fi fr ga gl he hr hu id it ja ko
+ 20 1 15 73 14 24 8 10 30 31 19 31 9
+
+ lg lt lv ms nb nl nn no pl pt pt_BR ro
+ +----------------------------------------+
+ a2ps | [] [] () () () [] [] |
+ aegis | () |
+ anubis | [] [] |
+ ap-utils | () |
+ bash | [] |
+ batchelor | |
+ bfd | |
+ binutils | |
+ bison | [] [] [] [] |
+ bluez-pin | [] |
+ clisp | |
+ clisp | [] |
+ coreutils | [] |
+ cpio | [] [] [] |
+ darkstat | [] [] [] [] |
+ diffutils | [] [] [] |
+ e2fsprogs | |
+ enscript | [] [] |
+ error | [] [] |
+ fetchmail | () () |
+ fileutils | [] |
+ findutils | [] [] [] [] |
+ flex | [] |
+ gas | |
+ gawk | [] |
+ gcal | |
+ gcc | |
+ gettext | [] |
+ gettext-runtime | [] |
+ gettext-tools | |
+ gimp-print | [] |
+ gliv | [] |
+ glunarclock | [] |
+ gnucash | |
+ gnucash-glossary | [] [] |
+ gnupg | |
+ gpe-calendar | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] |
+ gpe-edit | [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-timesheet | [] [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | () () () |
+ grep | [] [] [] [] |
+ gretl | |
+ hello | [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] |
+ indent | [] [] [] |
+ jpilot | () () |
+ jwhois | [] [] [] |
+ kbd | |
+ ld | |
+ libc | [] [] [] [] |
+ libgpewidget | [] [] |
+ libiconv | [] [] |
+ lifelines | |
+ lilypond | [] |
+ lingoteach | |
+ lingoteach_lessons | |
+ lynx | [] [] |
+ m4 | [] [] [] [] |
+ mailutils | |
+ make | [] [] |
+ man-db | [] |
+ mysecretdiary | [] |
+ nano | [] [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] [] [] |
+ parted | [] [] [] |
+ ptx | [] [] [] [] [] [] [] |
+ python | |
+ radius | |
+ recode | [] [] [] |
+ screem | |
+ sed | [] [] |
+ sh-utils | [] |
+ sharutils | [] |
+ sketch | [] |
+ soundtracker | |
+ sp | |
+ tar | [] [] [] [] [] [] |
+ texinfo | [] |
+ textutils | [] |
+ tin | |
+ util-linux | [] [] |
+ vorbis-tools | [] [] |
+ wastesedge | |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] |
+ xchat | [] [] |
+ xpad | [] |
+ +----------------------------------------+
+ lg lt lv ms nb nl nn no pl pt pt_BR ro
+ 0 0 2 11 7 26 3 4 18 15 34 34
+
+ ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
+ +-------------------------------------------+
+ a2ps | [] [] [] [] [] | 16
+ aegis | () | 0
+ anubis | [] [] | 5
+ ap-utils | () | 1
+ bash | [] | 7
+ batchelor | | 1
+ bfd | [] [] [] | 7
+ binutils | [] [] [] | 7
+ bison | [] [] | 13
+ bluez-pin | | 7
+ clisp | | 0
+ clisp | | 5
+ coreutils | [] [] [] [] [] | 14
+ cpio | [] [] [] | 13
+ darkstat | [] () () | 9
+ diffutils | [] [] [] [] | 21
+ e2fsprogs | [] | 3
+ enscript | [] [] [] | 11
+ error | [] [] [] | 14
+ fetchmail | [] | 7
+ fileutils | [] [] [] [] [] [] | 15
+ findutils | [] [] [] [] [] [] | 27
+ flex | [] [] [] | 10
+ gas | [] | 3
+ gawk | [] [] | 9
+ gcal | [] [] | 4
+ gcc | [] | 4
+ gettext | [] [] [] [] [] [] | 15
+ gettext-runtime | [] [] [] [] [] [] | 16
+ gettext-tools | [] [] | 5
+ gimp-print | [] [] | 10
+ gliv | | 1
+ glunarclock | [] [] [] | 11
+ gnucash | [] [] | 4
+ gnucash-glossary | [] [] [] | 8
+ gnupg | [] [] [] [] | 16
+ gpe-calendar | [] | 5
+ gpe-conf | | 3
+ gpe-contacts | [] | 4
+ gpe-edit | [] | 5
+ gpe-login | [] | 5
+ gpe-ownerinfo | [] | 7
+ gpe-sketchbook | [] | 5
+ gpe-timesheet | [] | 6
+ gpe-today | [] | 6
+ gpe-todo | [] | 6
+ gphoto2 | [] [] | 9
+ gprof | [] [] | 7
+ gpsdrive | [] [] | 3
+ grep | [] [] [] [] | 24
+ gretl | | 2
+ hello | [] [] [] [] [] | 33
+ id-utils | [] [] [] | 11
+ indent | [] [] [] [] | 19
+ jpilot | [] [] [] [] [] | 10
+ jwhois | () () [] [] | 10
+ kbd | [] [] | 8
+ ld | [] [] | 5
+ libc | [] [] [] [] | 20
+ libgpewidget | | 6
+ libiconv | [] [] [] [] [] [] | 21
+ lifelines | [] | 2
+ lilypond | [] | 4
+ lingoteach | | 2
+ lingoteach_lessons | () | 0
+ lynx | [] [] [] [] | 14
+ m4 | [] [] [] | 15
+ mailutils | | 2
+ make | [] [] [] [] | 15
+ man-db | [] | 6
+ mysecretdiary | [] [] | 8
+ nano | [] [] [] | 15
+ nano_1_0 | [] [] [] | 15
+ opcodes | [] [] | 9
+ parted | [] [] | 13
+ ptx | [] [] [] | 22
+ python | | 0
+ radius | | 0
+ recode | [] [] [] [] | 19
+ screem | [] | 1
+ sed | [] [] [] [] [] | 20
+ sh-utils | [] [] [] | 13
+ sharutils | [] [] [] [] | 16
+ sketch | [] | 5
+ soundtracker | [] | 7
+ sp | [] | 3
+ tar | [] [] [] [] [] | 24
+ texinfo | [] [] [] [] | 13
+ textutils | [] [] [] [] [] | 15
+ tin | | 1
+ util-linux | [] [] | 14
+ vorbis-tools | [] | 7
+ wastesedge | | 0
+ wdiff | [] [] [] [] | 17
+ wget | [] [] [] [] [] [] [] | 25
+ xchat | [] [] [] | 11
+ xpad | | 1
+ +-------------------------------------------+
+ 50 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
+ 97 domains 32 19 16 0 56 0 48 10 1 1 12 23 913
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If May 2003 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+Using `gettext' in new packages
+===============================
+
+ If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`translation at iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/AUTHORS
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/AUTHORS 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/AUTHORS 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,138 @@
+BMP - beep media player (C) GPL 2003-2005
+
+Authors alphabetically
+----------------------
+
+Artem Baguinski <artm at v2.nl>
+Edward Brocklesby <ejb at goth.net>
+Chong Kai Xiong <descender at phreaker.net>
+Milosz Derezynski <m.derezynski at arcor.de>
+David Lau <coder_sku at users.sourceforge.net>
+Ole Andre Vadla Ravnaas <oleavr at jblinux.net>
+Michiel Sikkes <michiel at eyesopened.nl>
+
+ClearSky skin by Will Reinhart <willsan at xepher.net>
+
+
+Patch Authors
+-------------
+
+Andrei Badea
+Peter Behroozi
+Bernard Blackham
+Oliver Blin
+David Le Brun
+Tomas Bzatek
+Liviu Danicel
+Jon Dowland
+Artur Frysiak
+Sebastian Kapfer
+Lukas Koberstein
+Dan Korostelev
+Oliver Lehmann
+Jolan Luff
+Mike Lundy
+Michael Marineau
+Tim-Philipp Muller
+Julien Portalier
+Andrew Ruder
+Olivier Samyn
+John Spray
+Takashi Iwai
+Martijn Vernooij
+Thierry Vignaud
+
+
+Translators
+-----------
+
+Brazilian Portuguese - Philipi Pinto <philipi at gmx.net>
+Breton - Thierry Vignaud <tvignaud at mandrakesoft.com>
+Czech - Jan Narovec <jnarovec at students.zcu.cz>
+Dutch - Laurens Buhler <masterpe at xs4all.nl>
+German - Matthias Debus <psic4t at netbands.de>
+Georgian - George Machitidze <giomac at global-erty.net>
+Greek - Kouzinopoulos Haris <haris at mpa.gr>
+ Stavros Giannouris <stavrosg2002 at freemail.gr>
+Finnish - Pauli Virtanen <pauli.virtanen at hut.fi>
+French - David Le Brun <david at dyn-ns.net>
+Hindi - Dhananjaya Sharma <dysxhi at yahoo.co.in>
+Hungarian - Laszlo Dvornik <dvornik at gnome.hu>
+Italian - Alessio D'Ascanio <otaku at fastwebnet.it>
+Japanese - Takeshi Aihana <aihana at gnome.gr.jp>
+Korean - DongCheon Park <dcpark at kaist.ac.kr>
+Lithuanian - Rimas Kudelis <rq at akl.lt>
+Macedonian - Arangel Angov <ufo at linux.net.mk>
+Polish - Jacek Wolszczak <shutdownrunner at o2.pl>
+Romanian - Liviu Danicel <liviu.danicel at spymac.com>
+Russian - Pavlo Bohmat <bohm at ukr.net>
+ Dan Korostelev <dan at ats.energo.ru>
+ Vitaly Lipatov <lav at altlinux.ru>
+Simplified Chinese - Chong Kai Xiong <descender at phreaker.net>
+Traditional Chinese - Chao-Hsiung Liao <pesder.liao at msa.hinet.net>
+Slovak - Pavel Kanzelsberger <kanzels at zmail.sk>
+Spanish - Francisco Javier F. Serrador <serrador at cvs.gnome.org>
+Swedish - Martin Persenius <martin at persenius.net>
+Ukrainian - Mykola Lynnyk<definer at users.sf.net>
+Welsh - Edward Brocklesby <ejb at goth.net>
+ (Based on XMMS from Rhoslyn Prys <rhoslyn.prys at meddal.org.uk>)
+
+
+(please tell us if we left your name out)
+
+-
+
+Based on:
+
+XMMS - X Multimedia System (C)1998-2003
+
+ Main Programming: Peter Alm
+
+ Additional Programming: Håvard Kvålen
+ Derrik Pates
+
+ With Additional Help: Sean Atkinson
+ Jorn Baayen
+ James M. Cape
+ Anders Carlsson (effect plugins)
+ Chun-Chung Chen (xfont patch)
+ Tim Ferguson (joystick plugin)
+ Ben Gertzfield
+ Vesa Halttunen
+ Logan Hanks
+ Eric L. Hernes (FreeBSD patches)
+ Ville Herva
+ higway (MMX)
+ Michael Hipp and others (MPG123 engine)
+ Olle Hällnäs (compiling fixes)
+ David Jacoby
+ Osamu Kayasono (3DNow!)
+ Lyle B Kempler
+ J. Nick Koston (MikMod plugin)
+ Aaron Lehmann
+ Johan Levin (echo + stereo plugin)
+ Eric Lindvall
+ Colin Marquardt
+ Willem Monsuwe
+ John Riddoch (Solaris plugin)
+ Josip Rodin
+ Pablo Saratxaga (i18n)
+ Carl van Schaik (pro logic plugin)
+ Jörg Schuler
+ Charles Sielski (irman plugin)
+ Espen Skoglund
+ Matthieu Sozeau (ALSA plugin)
+ Kimura Takuhiro (3DNow!)
+ Zinx Verituse
+ Ryan Weaver (RPMs among other things)
+ Chris Wilson
+ Dave Yearke
+ Stephan K. Zitz
+
+ Default skin: Leonard "Blayde" Tan
+ Robin Sylvestre (Equalizer and Playlist)
+ Thomas Nilsson (New titles, and cleanups)
+
+ Homepage and Graphics: Thomas Nilsson
+
+ Support and Docs: Olle Hällnäs
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/COPYING
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/COPYING 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/COPYING 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,340 @@
+ 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
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ChangeLog
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ChangeLog 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ChangeLog 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,8259 @@
+2005-10-22 18:41 descender
+
+ * bmp.spec.in, icons/Makefile.am (release_0_9_7_1):
+ * bmp.spec.in, icons/Makefile.am: Relocate icon back into
+ $prefix/share/pixmaps/.
+
+2005-10-22 18:27 descender
+
+ * configure.ac (release_0_9_7_1):
+ * configure.ac: Add hack to stop libtool from checking for
+ C++/F77.
+
+2005-10-22 18:20 descender
+
+ * AUTHORS, NEWS, bmp.spec.in (release_0_9_7_1):
+ * bmp.spec.in: See %changelog * NEWS: Add note on BMPx. *
+ AUTHORS: Update.
+
+2005-10-22 17:46 descender
+
+ * m4/libtool.m4 (release_0_9_7_1):
+ * libtool.m4: Remove, let autoconf find the system installed file
+ to avoid version mismatches with libtool, etc. script when using
+ libtoolize.
+
+2005-10-22 17:08 descender
+
+ * scripts/armageddon.sh (release_0_9_7_1):
+ * armageddon.sh: Remove Makevars.template, not Makevars.
+
+2005-10-22 16:59 descender
+
+ * compile, depcomp, install-sh, ltmain.sh (release_0_9_7_1):
+ * depcomp, compile, ltmain.sh, install-sh: Remove, pulled in by
+ autogen.sh.
+
+2005-10-22 16:45 descender
+
+ * configure.ac (release_0_9_7_1):
+ * configure.ac: Replace C compiler check with AC_LANG([C]).
+
+2005-10-22 16:41 descender
+
+ * autogen.sh, scripts/armageddon.sh, scripts/cleanall.sh,
+ scripts/code-stats.sh, scripts/cvs2cl.pl,
+ scripts/gen-auto-scripts.sh, scripts/genesis.sh,
+ scripts/make-dist.sh, scripts/rm-backups.sh (release_0_9_7_1):
+ * autogen.sh: Update from HEAD. * scripts/: Update scripts from
+ HEAD.
+
+2005-10-22 16:38 descender
+
+ * po/insert-header.sin, po/quot.sed, po/remove-potcdate.sin,
+ config.guess, config.rpath, config.sub (release_0_9_7_1):
+ * Remove.
+
+2005-10-22 16:36 descender
+
+ * m4/: codeset.m4, gettext.m4, glibc21.m4, iconv.m4, intdiv0.m4,
+ inttypes-pri.m4, inttypes.m4, inttypes_h.m4, isc-posix.m4,
+ lcmessage.m4, lib-ld.m4, lib-link.m4, lib-prefix.m4, nls.m4,
+ po.m4, progtest.m4, stdint_h.m4, uintmax_t.m4, ulonglong.m4
+ (release_0_9_7_1):
+ * Remove, pulled in by autogen.sh.
+
+2005-10-22 16:32 descender
+
+ * po/: Rules-quot, boldquot.sed (release_0_9_7_1):
+ * Rules-quot, boldquot.sed: Remove, pulled in by autogen.sh.
+
+2005-10-22 16:31 descender
+
+ * po/: Makefile.in.in, Makevars.template, en at boldquot.header,
+ en at quot.header (release_0_9_7_1):
+ * Makevars.template: Remove unneeded. * Makefile.in.in,
+ en at boldquot.header, en at quot.header: Pulled in by autogen.sh.
+
+2005-10-22 16:28 descender
+
+ * missing, mkinstalldirs (release_0_9_7_1):
+ * missing, mkinstalldirs: Remove, pulled in by autogen.sh.
+
+2005-10-22 16:23 descender
+
+ * TODO (release_0_9_7_1):
+ * TODO: Remove, unused.
+
+2005-10-22 16:21 descender
+
+ * skin/Makefile (release_0_9_7_1):
+ * Makefile: Remove, generated by autoconf.
+
+2005-10-22 16:13 descender
+
+ * skin/Makefile.in (release_0_9_7_1):
+ * Makefile.in: Remove, generated by automake.
+
+2005-10-22 15:43 descender
+
+ * NEWS (release_0_9_7_1):
+ * NEWS: Add entry for 0.9.7.1 release.
+
+2005-10-22 15:39 descender
+
+ * FAQ, NEWS (release_0_9_7_1):
+ * NEWS, FAQ: Add 'no longer maintained' note and point user to
+ BMP Wiki.
+
+2005-10-22 14:47 descender
+
+ * po/zh_CN.po (release_0_9_7_1):
+ * zh_CN.po: Update Simplified Chinese translation.
+
+2005-10-22 14:42 descender
+
+ * po/bmp.pot (release_0_9_7_1):
+ * bmp.pot: Update PO template.
+
+2005-10-22 14:16 descender
+
+ * po/hu.po (release_0_9_7_1):
+ * hu.po: Update Hungarian translation (Dvornik László).
+
+2005-10-16 22:53 quirk_fr
+
+ * po/fr.po: Updated french translation
+
+2005-10-16 22:45 descender
+
+ * AUTHORS, beep/about.c (release_0_9_7_1):
+ * AUTHORS, beep/about.c: Update translation credits.
+
+2005-10-16 22:18 descender
+
+ * po/el.po (release_0_9_7_1):
+ * el.po: Update Greek translation (Stavros Giannouris).
+
+2005-10-16 01:21 descender
+
+ * configure.ac (release_0_9_7_1):
+ * configure.ac: Bump version to 0.9.7.1.
+
+2005-10-16 01:20 descender
+
+ * AUTHORS, beep/bmp.desktop.in, icons/Makefile.am, icons/bmp.png,
+ icons/bmp.svg (release_0_9_7_1):
+ * icons/bmp.svg: Remove. * icons/Makefile.am: Install icon in
+ $(datadir)/icons/hicolor/48x48/pixmaps. * beep/bmp.desktop.in,
+ icons/bmp.png: New icon from BMPx. * AUTHORS: Update copyleft
+ date.
+
+2005-10-16 00:48 descender
+
+ * po/ka.po (release_0_9_7_1):
+ * ka.po: Update Georgian translation (George Machitidze).
+
+2005-09-13 09:47 descender
+
+ * po/uk.po (release_0_9_7_1):
+ * uk.po: Merge Ukrainian translation update from HEAD.
+
+2005-09-13 09:46 descender
+
+ * po/uk.po:
+ * uk.po: Update Ukrainian translation (Mykola Lynnyk).
+
+2005-09-05 06:36 descender
+
+ * beep/controlsocket.c (release_0_9_7_1):
+ * beep/controlsocket.c: Merge fix for #331 from HEAD.
+
+2005-09-05 06:20 descender
+
+ * beep/controlsocket.c:
+ * controlsocket.c (ctrlsocket_func): Fix crash when output plugin
+ returns zero volume for one channel, and does not return the
+ other i.e. -1 (#331, Mike Lundy).
+
+2005-08-28 04:10 descender
+
+ * beep/input.c (release_0_9_7_1):
+ * input.c (input_get_song_info): Merge crash fix from HEAD.
+
+2005-08-28 04:07 descender
+
+ * beep/input.c:
+ * input.c (input_get_song_info): Initialize tmp to NULL to avoid
+ crashing if input plugins do not set the title when getting song
+ info.
+
+2005-08-27 19:20 descender
+
+ * beep/main.c, beep/main.h, libbeep/vfs.h, libbeep/vfs_gnome.c,
+ libbeep/vfs_stdio.c (release_0_9_7_1):
+ * beep/main.c, beep/main.h, libbeep/vfs.h, libbeep/vfs_gnome.c,
+ libbeep/vfs_stdio.h: Merge VFS initialization changes from HEAD.
+
+2005-08-27 19:04 descender
+
+ * beep/signals.c:
+ * signals.c (signal_install_handler_full): New function.
+ (signal_handlers_init): Register handler for SIGINT.
+
+2005-08-27 19:01 descender
+
+ * beep/main.c, beep/main.h, libbeep/vfs.h, libbeep/vfs_gnome.c,
+ libbeep/vfs_stdio.c:
+ * beep/main.h: Remove unnecessary GNOME VFS header file #include.
+ * beep/main.c: Use vfs_init() to initialize VFS subsystem. *
+ libbeep/vfs_gnome.c, libbeep/vfs_stdio.c: New vfs_init()
+ function.
+
+2005-08-22 13:56 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/hi.po (release_0_9_7_1):
+ * po/LINGUAS, po/hi.po, AUTHORS, beep/about.c: Merge new Hindi
+ translation from HEAD.
+
+2005-08-22 13:51 descender
+
+ * po/LINGUAS, po/hi.po, AUTHORS, beep/about.c:
+ * po/LINGUAS, po/hi.po: New Hindi translation by Dhananjaya
+ Sharma. * AUTHORS, beep/about.c: Update translator list.
+
+2005-08-22 13:51 descender
+
+ * po/hi.po (release_0_9_7_1): file hi.po was added on branch
+ release_0_9_7_1 on 2005-08-22 05:56:03 +0000
+
+2005-08-11 15:25 descender
+
+ * libbeep/beepctrl.c, libbeep/beepctrl.h, beep/controlsocket.c,
+ beep/controlsocket.h, beep/playlist.c, beep/playlist.h
+ (release_0_9_7_1):
+ * libbeep/beepctrl.c, libbeep/beepctrl.h, beep/controlsocket.c,
+ beep/controlsocket.h, beep/playlist.c, beep/playlist.h: Merge new
+ XMMS 1.2.11 remote queue and playlist advancement control code
+ from HEAD.
+
+2005-08-11 15:15 descender
+
+ * beep/controlsocket.c:
+ controlsocket.c (ctrlsocket_func): Replace tab with spaces.
+
+2005-08-11 15:06 descender
+
+ * beep/controlsocket.h:
+ * controlsocket.h: XMMS moved CMD_IS_ADVANCE and
+ CMD_TOGGLE_ADVANCE to the end for backward compatibility (after
+ Fatal overheard my complaint in #bmp
+ >:), we follow suit.
+
+2005-08-09 13:54 descender
+
+ * beep/: prefswin.c, glade/prefswin.glade:
+ * prefswin.glade: Remove redundant hbox which contains only
+ category_view's scrolled window. * prefswin.c
+ (on_category_view_realize): Move size allocation code for
+ category view from on_category_view_realize1, remove needless
+ run-time typecasts, fix problem restoring category_view item
+ selection across sessions, remove unused code, rename iconview to
+ icon_view. (change_category): Rename treepath to tree_path.
+
+2005-08-09 12:15 descender
+
+ * beep/prefswin.c:
+ * prefswin.c (on_category_view_realize1): Replace incorrect use
+ of gtk_tree_path_new_from_indices() with
+ gtk_tree_path_new_first(). (prefswin_keypress): Rename to
+ on_prefswin_key_press_event.
+
+2005-08-09 11:54 descender
+
+ * beep/: controlsocket.c, playlist.c, playlist.h:
+ * controlsocket.c (ctrlsocket_func): Wrong function name, should
+ be playlist_queue_get_length() instead of
+ get_playlist_queue_length(). * playlist.c
+ (playlist_queue_remove): Change pos to guint. * playlist.h
+ (playlist_queue_remove, playlist_queue_get_length): Add
+ prototype.
+
+2005-08-09 11:31 descender
+
+ * libbeep/: beepctrl.c, beepctrl.h:
+ * beepctrl.c, beepctrl.h (xmms_remote_toggle_advance,
+ xmms_remote_is_ advance): New libxmms 1.2.11 functions.
+
+2005-08-09 11:21 descender
+
+ * beep/: controlsocket.c, controlsocket.h:
+ * controlsocket.h: Match protocol command numbers with XMMS CVS.
+ * controlsocket.c (ctrlsocket_func): Add playlist queue control
+ handling (#299), add handler for CMD_IS_ADVANCE.
+
+2005-08-09 10:32 descender
+
+ * beep/playlist.c, libbeep/beepctrl.c, libbeep/beepctrl.h:
+ * beep/playlist.c, beep/playlist.h, libbeep/beepctrl.c,
+ libbeep/beepctrl.h: Add XMMS 1.2.11 remote playlist queue control
+ (patch by Erik Jensen, with minor modifications).
+
+2005-08-09 10:14 descender
+
+ * Output/: esd/mixer.c, OSS/mixer.c (release_0_9_7_1):
+ * esd/mixer.c, OSS/mixer.c: Merge fix for #300 from HEAD.
+
+2005-08-09 10:09 descender
+
+ * Output/: OSS/mixer.c, esd/mixer.c:
+ * OSS/mixer.c (oss_get_volume, oss_set_volume): Change cmd to
+ long (Oliver Lehmann, fixes #300). * ESD/mixer.c
+ (esd_get_oss_volume, esd_set_oss_volume): Change cmd to long
+ (Oliver Lehmann, fixes #300).
+
+2005-08-09 09:29 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Remove redundant GtkAlignment for Playback
+ page, name label for Playback page for easier identification.
+
+2005-08-09 09:20 descender
+
+ * beep/mainwin.c:
+ * mainwin.c, ui/mainwin.xml: Restore window roll-up toggles in
+ player window popup.
+
+2005-08-09 08:41 descender
+
+ * beep/Makefile.am, Input/Makefile.am, Input/mpg123/Makefile.am,
+ libbeep/Makefile.am, Input/vorbis/Makefile.am,
+ Input/wav/Makefile.am, Visualization/Makefile.am,
+ Visualization/blur_scope/Makefile.am, Output/Makefile.am,
+ Output/OSS/Makefile.am, Output/alsa/Makefile.am,
+ Output/esd/Makefile.am (release_0_9_7_1):
+ * beep/Makefile.am, libbeep/Makefile.am, Input/Makefile.am,
+ Input/mpg123/Makefile.am, Input/vorbis/Makefile.am,
+ Input/wav/Makefile.am, Visualization/Makefile.am,
+ Visualization/blur_scope/Makefile.am, Output/Makefile.am,
+ Output/OSS/Makefile.am, Output/alsa/Makefile.am,
+ Output/esd/Makefile.am: Merge GNOME VFS and GConf linkage fixes
+ from HEAD, merge Autoconf output variable to Makefile variable
+ changes from HEAD.
+
+2005-08-09 08:28 descender
+
+ * beep/Makefile.am:
+ * Makefile.am (beep_CFLAGS): Change $(top_builddir) to
+ $(top_srcdir).
+
+2005-08-09 08:00 descender
+
+ * libbeep/Makefile.am:
+ * Makefile.am (libbeep_la_LIBADD): Break up flags. (INCLUDES):
+ Break up flags, correct path to libintl and top directory.
+
+2005-08-09 07:40 descender
+
+ * beep/: mainwin.c, playlistwin.c:
+ * mainwin.c (mainwin_create_popups): Unref action group after
+ insert. * playlistwin.c (mainwin_create_popup_menus): Unref
+ action group after insert, rename function to
+ playlistwin_create_popups().
+
+2005-08-09 06:04 descender
+
+ * beep/pluginenum.c (release_0_9_7_1):
+ * pluginenum.c (plugin_system_cleanup): Print plugin filename
+ along with error when plugin fails to load.
+
+2005-08-09 06:01 descender
+
+ * beep/pluginenum.c:
+ * pluginenum.c: Print plugin filename along with error when
+ plugin fails to load.
+
+2005-08-09 05:35 descender
+
+ * bmp.spec.in:
+ * bmp.spec.in: Fix typo in %changelog.
+
+2005-08-09 05:08 descender
+
+ * bmp.spec.in:
+ * bmp.spec.in: Update BuildRequires.
+
+2005-08-09 04:08 descender
+
+ * beep/: Makefile.am, signals.c, signals.h:
+ * Makefile.am, signals.c, signals.h: New signal handler setup
+ code using sigaction().
+
+2005-08-09 03:11 descender
+
+ * beep/main.c:
+ * main.c: Remove unused #includes (gdk/gdkx.h, X11/Xlib.h,
+ X11/xatom.h).
+
+2005-08-09 02:59 descender
+
+ * beep/main.c:
+ * main.c (get_feature_list): Add SMlib to feature list string.
+ (main): Add session management support.
+
+2005-08-09 02:43 descender
+
+ * Input/Makefile.am, Input/mpg123/Makefile.am,
+ Input/vorbis/Makefile.am, Input/wav/Makefile.am,
+ Output/Makefile.am, Output/OSS/Makefile.am,
+ Output/alsa/Makefile.am, Output/esd/Makefile.am,
+ Visualization/Makefile.am, Visualization/blur_scope/Makefile.am:
+ * Input/Makefile.am Input/mpg123/Makefile.am,
+ Input/vorbis/Makefile.am, Input/wav/Makefile.am,
+ Output/Makefile.am, Output/OSS/Makefile.am,
+ Output/alsa/Makefile.am Output/esd/Makefile.am,
+ Visualization/Makefile.am, Visualization/blur_scope/Makefile.am:
+ Replace @VAR@ with $(VAR), remove all redundant linkage with
+ GNOME VFS and GConf.
+
+2005-08-09 02:25 descender
+
+ * configure.ac:
+ * configure.ac: Add test for SMlib, rename BEEP_DEFINES to
+ BMP_DEFINES, use AC_LANG(C) in place of
+ AC_PROG_CC/AC_C_INLINE/AC_C_CONST, replace 'test "x$var" =
+ "xyes"' with 'test "$var" = "yes"', revert deadchip's change of
+ AC_CONFIG_HEADERS to AM_CONFIG_HEADER. * beep/Makefile.am:
+ Remove redundant linkage with GNOME VFS and GConf, replace @VAR@
+ with $(VAR) for better customizability. * libbeep/Makefile.am:
+ Add linkage with GNOME VFS and GConf.
+
+2005-08-07 11:43 descender
+
+ * beep/session.c:
+ * session.c (session_start): Fix typo.
+
+2005-08-07 03:24 descender
+
+ * po/LINGUAS, AUTHORS, beep/about.c, po/ka.po (release_0_9_7_1):
+ * po/LINGUAS, po/ka.po: Add Georgian translation from HEAD. *
+ AUTHORS, beep/about.c: Merge translation credits update from
+ HEAD.
+
+2005-08-07 03:16 descender
+
+ * po/ka.po (release_0_9_7_1): file ka.po was added on branch
+ release_0_9_7_1 on 2005-08-06 19:24:40 +0000
+
+2005-08-07 03:16 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/ka.po:
+ * po/LINGUAS, po/ka.po: New Georgian translation by George
+ Machitidze. * AUTHORS, beep/about.c: Add Georgian translator.
+
+2005-08-04 04:22 descender
+
+ * beep/Makefile.am:
+ * Makefile.am: Include new SMlib code into build.
+
+2005-08-04 03:54 descender
+
+ * beep/: session.c, session.h:
+ * session.c, session.h: New session management code using SMlib.
+
+2005-08-02 08:25 descender
+
+ * README:
+ * README: Update Glib, GTK+ and libglade version requirements
+ (Ashar Voultoiz, #310).
+
+2005-08-02 08:12 descender
+
+ * beep/: playlist.c (release_0_9_7_1), playlist.c:
+ * playlist.c (playback_check_pos_current): Change local variables
+ to gint, fixes #289.
+
+2005-08-02 02:49 descender
+
+ * beep/: input.h (release_0_9_7_1), input.h:
+ * input.h (get_input_paused, get_input_playing): Remove
+ prototypes, the actual functions are already renamed.
+
+2005-08-02 02:16 descender
+
+ * beep/: util.c, util.h (release_0_9_7_1), util.c, util.h:
+ * util.c, util.h (create_dblsize_image): Remove doublesize
+ scaler, unused.
+
+2005-08-02 01:21 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c (playlistwin_keypress): Restore accidentally
+ removed handling code for Page Up (#302, Ashar Voultoiz).
+
+2005-08-01 04:09 descender
+
+ * beep/main.c:
+ * main.c (segfault_handler): Restore original message and add
+ text to tell user settings and playlist has been saved.
+ (sigint_handler, sigterm_handler): Don't print message for normal
+ termination. (main): Remove needless (void) casts.
+
+2005-08-01 04:04 descender
+
+ * beep/input.c:
+ * input.c (input_show_unplayable_files): Use gtk_container_add()
+ to add scroll window instead.
+
+2005-08-01 03:20 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Rename mouse wheel options (suggested in #315).
+
+2005-08-01 03:14 descender
+
+ * beep/about.c:
+ * about.c (show_about_window): Comment out or remove unused
+ variables, remove errorneous freeing of 'filename' which is a
+ literal string.
+
+2005-08-01 02:59 descender
+
+ * beep/textbox.h:
+ * textbox.h: Remove TEXTBOX_SCROLL_TIMEOUT macro, not used
+ anymore.
+
+2005-08-01 02:56 descender
+
+ * beep/: util.c, glade/addfiles.glade:
+ * util.c, glade/addfiles.glade: Revert last changes, need to
+ review the way we handle windows so that focus and always-on-top
+ works reasonably uniformly or sanely across various WMs.
+
+2005-07-31 15:59 descender
+
+ * beep/glade/prefswin.glade (release_0_9_7_1):
+ * prefswin.glade: Rename mouse wheel options (suggested in #315).
+
+2005-07-07 05:12 mderezynski
+
+ * configure.ac, beep/about.c, beep/images/Makefile.am,
+ beep/images/logo.png, beep/images/logo.xpm: [no log message]
+
+2005-07-05 22:28 mderezynski
+
+ * beep/glade/: prefswin.glade: [no log message]
+
+2005-07-05 21:57 mderezynski
+
+ * beep/prefswin.c: [no log message]
+
+2005-07-05 21:56 mderezynski
+
+ * beep/images/logo.xpm: beep/images/logo.xpm: New logo!
+
+2005-07-05 20:33 mderezynski
+
+ * TODO: TODO: Added items for 0.9.7.1
+
+2005-07-05 18:30 mderezynski
+
+ * skin/: README, balance.bmp, cbuttons.bmp, eq_ex.bmp, eqmain.bmp,
+ main.bmp, monoster.bmp, nums_ex.bmp, playpaus.bmp, pledit.bmp,
+ pledit.txt, posbar.bmp, shufrep.bmp, text.bmp, titlebar.bmp,
+ viscolor.txt, volume.bmp: beep/skin: Re-added skin
+
+2005-07-05 18:29 mderezynski
+
+ * skin/: README, balance.bmp, cbuttons.bmp, eq_ex.bmp, eqmain.bmp,
+ main.bmp, monoster.bmp, nums_ex.bmp, playpaus.bmp, pledit.bmp,
+ pledit.txt, posbar.bmp, shufrep.bmp, text.bmp, titlebar.bmp,
+ viscolor.txt, volume.bmp: -nil-
+
+2005-07-05 18:26 mderezynski
+
+ * skin/: README, eqmain.bmp, main.bmp, nums_ex.bmp, pledit.bmp,
+ shufrep.bmp, titlebar.bmp: bmp/skin: Made modifications to the
+ ClearSky skin to make it "more BMPish"
+
+2005-07-05 18:22 mderezynski
+
+ * beep/: about.c, main.c, main.h, mainwin.c, mainwin.h, prefswin.c,
+ skinwin.c, textbox.c, textbox.h, images/logo.xpm:
+ beep/playlistwin.c: Window focusing fixes beep/skinwin.c: Changes
+ in the code to accomodate for the new "Resume playback on
+ startup" option beep/textbox.c: Removed the "***" seperator
+ string (looks silly) beep/util.c: (Don't remember)
+ beep/mainwin.c, beep/main.c: Signal handling fixes. SIGSEGV,
+ SIGTERM and SIGINT now properly exit the application (save
+ configuration and current playlist and do general system
+ shutdown) beep/hints.h: Made functions for keep windows always on
+ top public beep/about.c: Changes to accomodate for new about logo
+ images/logo.xpm: New about logo
+
+2005-07-05 18:17 mderezynski
+
+ * beep/: prefswin.c, glade/prefswin.glade: [no log message]
+
+2005-07-04 22:13 mderezynski
+
+ * beep/: hints.c, hints.h, mainwin.c, playlistwin.c, skinwin.c,
+ util.c, images/Makefile.am, images/appearance.png,
+ images/bmp_eq.xpm, images/bmp_player.xpm,
+ images/bmp_playlist.xpm, images/eq.png, images/mouse.png,
+ images/playback.png, images/playlist.png, images/plugins.png:
+ beep/hints.c: beep/hints.h: Made functions for setting
+ always-on-top public
+
+ beep/playlistwin.c: Added/Fixed accelerators and focusing
+
+ beep/prefswin.c: beep/skinwin.c: Preferences functionality
+ fixes
+
+ beep/images/: Fixed/Changed prefswin icons
+
+ beep/images/bmp_player.xpm: beep/images/bmp_playlist.xpm:
+ beep/images/bmp_eq.xpm: New backdrop like the new prefswin
+ icons
+
+ beep/ui/mainwin.xml: beep/mainwin.c: Removed "Roll up" (shade)
+ actions from the menu as discussed previously on #bmp
+
+ glade/addfiles.glade: Changes in the Filechooser dialog to
+ close on ESC
+
+ glade/prefswin.glade: Preferences window changes
+
+2005-07-04 22:11 mderezynski
+
+ * beep/prefswin.c: [no log message]
+
+2005-07-04 22:07 mderezynski
+
+ * beep/: glade/addfiles.glade, glade/prefswin.glade, prefswin.c:
+ [no log message]
+
+2005-07-02 22:02 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Fix realize signal for output_plugin_cbox, name
+ and rename some widgets.
+
+2005-06-30 19:18 descender
+
+ * po/it.po (release_0_9_7_1):
+ * it.po: Merge Italian translation update from HEAD.
+
+2005-06-28 20:14 descender
+
+ * beep/: main.c, mainwin.c:
+ * main.c (main): Change GTK+ version check to check for 2.6.0. *
+ mainwin.c: Change Play/Pause/Previous/Next/Stop actions to use
+ the new GTK_STOCK_MEDIA* icons in GTK+ 2.6, use GTK_STOCK_ABOUT
+ for About.
+
+2005-06-28 14:11 descender
+
+ * po/LINGUAS, po/uk.po, AUTHORS, beep/about.c (release_0_9_7_1):
+ * AUTHORS, beep/about.c, po/LINGUAS, po/uk.po: Merge new
+ Ukrainian translation in HEAD.
+
+2005-06-28 14:02 descender
+
+ * po/uk.po (release_0_9_7_1): file uk.po was added on branch
+ release_0_9_7_1 on 2005-06-28 06:11:04 +0000
+
+2005-06-28 14:02 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/uk.po:
+ * AUTHORS, beep/about.c: Update translation credits. * LINGUAS,
+ po/uk.po: New Ukrainian translation by Mykola Lynnyk.
+
+2005-06-28 13:24 descender
+
+ * po/it.po:
+ * it.po: Update Italian translation (Alessio D'Ascanio).
+
+2005-06-23 05:21 descender
+
+ * configure.ac:
+ * configure.ac: Bump GLib and GTK+ version requirement to 2.6.0,
+ and libglade to 2.5.0 for use of GtkIconView in Preferences
+ Window.
+
+2005-06-23 05:02 descender
+
+ * beep/prefswin.c:
+ * prefswin.c: Fix alignment of categories[] initializer list.
+ (on_category_view_realize) Replace incorrect use of
+ gtk_tree_path_new_from_indices() with gtk_tree_path_new_first(),
+ remove unused variables and code.
+
+2005-06-20 05:40 mderezynski
+
+ * beep/: mainwin.c, prefswin.c: * Fixed Drag-n-Drop with/from KDE
+
+2005-06-20 05:30 descender
+
+ * skin/: Makefile, Makefile.in:
+ * Makefile, Makefile.in: remove, accidentally checked in,
+ generated by autotools
+
+2005-06-20 04:09 mderezynski
+
+ * PLAYLIST, beep/mainwin.h, beep/playback.c, beep/playlist.c,
+ beep/playlistwin.c, beep/prefswin.c, beep/glade/prefswin.glade,
+ beep/images/Makefile.am, beep/images/appearance.png,
+ beep/images/eq.png, beep/images/mouse.png,
+ beep/images/playback.png, beep/images/playlist.png,
+ beep/images/plugins.png, beep/images/skin.png, po/cy.po,
+ po/de.po, po/el.po, po/it.po, po/ko.po, po/pt_BR.po, po/ro.po,
+ po/sk.po, po/sv.po, skin/Makefile, skin/Makefile.in: * Migrated
+ preferences window category list from GtkTreeView to GtkIconView
+ * New icons for preferences window * Fixed problem where main
+ window song information would remain even when playback stopped
+ and/or playlist is empty
+
+2005-06-15 08:28 descender
+
+ * beep/main.h (release_0_9_7_1):
+ * main.h: rename log file to 'log'
+
+2005-06-13 21:12 descender
+
+ * po/zh_CN.po:
+ * zh_CN.po: Merge typo fix from release_0_9_7_1.
+
+2005-06-13 21:10 descender
+
+ * po/zh_CN.po (release_0_9_7_1):
+ * zh_CN.po: Correct typo.
+
+2005-06-13 21:01 descender
+
+ * configure.ac (release_0_9_7_1):
+ * configure.ac: Forgot to remove beep/defskin/Makefile from
+ output list.
+
+2005-06-13 19:43 descender
+
+ * beep/playlistwin.c (release_0_9_7_1):
+ * playlistwin.c: Change 'New Playlist' accelerator to ctrl-N,
+ clean up GtkItemFactory code slightly.
+
+2005-06-13 19:11 descender
+
+ * AUTHORS, beep/about.c (release_0_9_7_1):
+ * AUTHORS, beep/about.c: Merge skin credits change from HEAD.
+
+2005-06-13 19:04 descender
+
+ * Makefile.am, configure.ac, beep/Makefile.am, skin/Makefile,
+ skin/Makefile.am, skin/Makefile.in, skin/README,
+ skin/balance.bmp, skin/cbuttons.bmp, skin/eq_ex.bmp,
+ skin/eqmain.bmp, skin/main.bmp, skin/monoster.bmp,
+ skin/nums_ex.bmp, skin/playpaus.bmp, skin/pledit.bmp,
+ skin/pledit.txt, skin/posbar.bmp, skin/shufrep.bmp,
+ skin/text.bmp, skin/titlebar.bmp, skin/viscolor.txt,
+ skin/volume.bmp (release_0_9_7_1):
+ * Merge new skin from HEAD
+
+2005-06-08 02:09 descender
+
+ * AUTHORS, beep/about.c:
+ * AUTHORS, beep/about.c: Update skin credits.
+
+2005-06-08 02:01 descender
+
+ * skin/Makefile (release_0_9_7_1): file Makefile was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:57 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/Makefile.am (release_0_9_7_1): file Makefile.am was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:57 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/Makefile.in (release_0_9_7_1): file Makefile.in was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:57 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/README (release_0_9_7_1): file README was added on branch
+ release_0_9_7_1 on 2005-06-13 11:04:57 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/balance.bmp (release_0_9_7_1): file balance.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:58 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/cbuttons.bmp (release_0_9_7_1): file cbuttons.bmp was added
+ on branch release_0_9_7_1 on 2005-06-13 11:04:58 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/eq_ex.bmp (release_0_9_7_1): file eq_ex.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:58 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/eqmain.bmp (release_0_9_7_1): file eqmain.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:58 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/main.bmp (release_0_9_7_1): file main.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:59 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/monoster.bmp (release_0_9_7_1): file monoster.bmp was added
+ on branch release_0_9_7_1 on 2005-06-13 11:04:59 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/nums_ex.bmp (release_0_9_7_1): file nums_ex.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:59 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/playpaus.bmp (release_0_9_7_1): file playpaus.bmp was added
+ on branch release_0_9_7_1 on 2005-06-13 11:04:59 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/pledit.bmp (release_0_9_7_1): file pledit.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:04:59 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/pledit.txt (release_0_9_7_1): file pledit.txt was added on
+ branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/posbar.bmp (release_0_9_7_1): file posbar.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/shufrep.bmp (release_0_9_7_1): file shufrep.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/text.bmp (release_0_9_7_1): file text.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/titlebar.bmp (release_0_9_7_1): file titlebar.bmp was added
+ on branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/viscolor.txt (release_0_9_7_1): file viscolor.txt was added
+ on branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * skin/volume.bmp (release_0_9_7_1): file volume.bmp was added on
+ branch release_0_9_7_1 on 2005-06-13 11:05:00 +0000
+
+2005-06-08 02:01 descender
+
+ * Makefile.am, configure.ac, beep/Makefile.am, skin/Makefile,
+ skin/Makefile.am, skin/Makefile.in, skin/README,
+ skin/balance.bmp, skin/cbuttons.bmp, skin/eq_ex.bmp,
+ skin/eqmain.bmp, skin/main.bmp, skin/monoster.bmp,
+ skin/nums_ex.bmp, skin/playpaus.bmp, skin/pledit.bmp,
+ skin/pledit.txt, skin/posbar.bmp, skin/shufrep.bmp,
+ skin/text.bmp, skin/titlebar.bmp, skin/viscolor.txt,
+ skin/volume.bmp:
+ * replace default skin with ClearSky by Will Reinhart *
+ configure.ac, {,beep}/Makefile.am: move skin directory from
+ beep/defskin/ to skin/
+
+2005-05-19 23:19 descender
+
+ * po/mk.po:
+ * mk.po: Merge Macedonian translation update from
+ release_0_9_7_1.
+
+2005-05-19 23:08 descender
+
+ * po/mk.po (release_0_9_7_1):
+ * mk.po: Macedonian translation update (Arangel Angov).
+
+2005-05-13 17:39 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Merge fix for bogus values returned by
+ xmms_remote_get_info() from RELEASE_0_9_7_1.
+
+2005-05-10 02:34 mderezynski
+
+ * beep/: equalizer.c, main.c, mainwin.c, playlistwin.c (HEADLESS):
+ Beginn of making BMP run headless
+
+2005-05-10 02:13 mderezynski
+
+ * Input/mpg123/fileinfo.c, beep/input.c: Removed internal used of
+ deprecatd XmmsEntry and replaced it with standard GtkEntry
+
+2005-05-09 16:45 larne
+
+ * beep/mainwin.c (release_0_9_7_1): disable mainwin_info scrolling
+ when shaded, fixes high CPU utilisation problem (#288)
+
+2005-05-09 16:42 larne
+
+ * beep/mainwin.c: disable mainwin_info scrolling when shaded, fixes
+ high CPU utilisation problem (#288)
+
+2005-05-02 08:54 descender
+
+ * beep/prefswin.c (release_0_9_7_1):
+ * prefswin.c: Merge general/visualization plugin About dialog fix
+ from HEAD.
+
+2005-05-02 08:42 descender
+
+ * beep/prefswin.c:
+ * prefswin.c: Fix general/visualization plugin About dialogs not
+ opening correctly.
+
+2005-04-22 05:39 mderezynski
+
+ * PLAYLIST:
+
+ This file describes the features of the current playlist systems.
+ It's a small help for us for redesigning the playlist subsystem.
+
+2005-04-12 17:27 descender
+
+ * po/pl.po:
+ * pl.po: Update Polish translation (Jacek Wolszczak).
+
+2005-03-30 21:35 descender
+
+ * autogen.sh:
+ * autogen.sh: Remove redundant gettextize call.
+
+2005-03-29 15:28 descender
+
+ * po/Makevars:
+ * po/Makevars: Re-add (Carl Fûrstenberg).
+
+2005-03-28 10:07 descender
+
+ * AUTHORS, beep/about.c, po/ru.po:
+ * AUTHORS, beep/about.c, po/ru.po: Merge Russian translation
+ update from release_0_9_7_1.
+
+2005-03-28 09:55 descender
+
+ * AUTHORS, beep/about.c (release_0_9_7_1):
+ * AUTHORS, beep/about.c: Update translation credits.
+
+2005-03-28 09:45 descender
+
+ * po/ru.po (release_0_9_7_1):
+ * ru.po: Update Russian translation (Vitaly Lipatov).
+
+2005-03-28 09:36 descender
+
+ * beep/: about.c, equalizer.c (release_0_9_7_1):
+ * about.c: Update copyright end year to 2005. * equalizer.c:
+ Bring 'delete preset' and 'delete autoload preset' dialog to
+ front when activated if they already exist.
+
+2005-03-28 09:20 descender
+
+ * configure.ac, beep/Makefile.am, beep/equalizer.c, beep/mainwin.c,
+ beep/playlistwin.c:
+ * configure.ac, beep/ui/Makefile.am: New makefile for UI files.
+ * beep/mainwin.c, beep/ui/mainwin.xml: Move UI XML description
+ into external file. * beep/equalizer.c,
+ beep/ui/equalizerwin.xml: Move UI XML description into external
+ file. * beep/playlistwin.c, beep/ui/playlistwin.xml: Move UI XML
+ description into external file.
+
+2005-03-28 08:50 descender
+
+ * beep/: about.c, controlsocket.c, equalizer.c, main.c, main.h,
+ mainwin.c, playlistwin.c, pluginenum.c:
+ about.c: Change copyright string end year to 2005.
+ (generate_credit_list): Split *item++ into *item and item++ to
+ fix crash. controlsocket.c: Print debug messages when binding
+ and closing control socket. equalizer.c: Port equalizer preset
+ popup menu to GtkUIManager. main.c: Print debug messages when
+ loading and saving settings. main.h: Change log filename from
+ 'bmp.log' to 'log' for consistency sake. mainwin.c
+ (mainwin_create_window): Trap delete event instead of destroy for
+ main window for quitting BMP. (action_quit): Hide windows after
+ removing idle function to avoid drawing into them in idle
+ function. playlistwin.c: Fix 'sort selected by full path' and
+ 'sort selected by date' options not triggering the appropriate
+ handlers. pluginenum.c: Print debug message when shutting down
+ plugin system, minor spacing cleanups.
+
+2005-03-28 05:32 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c: Fix playlist selection popup menu, fix missing
+ queue toggle option.
+
+2005-03-26 05:29 descender
+
+ * scripts/cvs2cl.pl:
+ * cvs2cl.pl: Update to latest.
+
+2005-03-26 05:25 descender
+
+ * autogen.sh, scripts/armageddon.sh, scripts/cleanall.sh,
+ scripts/gen-auto-scripts.sh, scripts/make-dist.sh,
+ scripts/rm-backups.sh:
+ * autogen.sh: Add help screen, informational messages and option
+ to skip cvs2cl.pl run from gen-auto-scripts.sh. * armageddon.sh:
+ Update. * scripts/rm-backups.sh: Use 'grep x y' instead of 'cat
+ y | grep x'. * scripts/gen-auto-scripts.sh: Remove, replaced by
+ autogen.sh. * scripts/make-dist.sh: Remove, pretty much useless.
+ * scripts/cleanall.sh: Remove, replaced by armageddon.sh.
+
+2005-03-26 05:01 descender
+
+ * scripts/: code-stats.sh, genesis.sh:
+ * code-stats.sh: Remove, sloccount is better anyway. *
+ genesis.sh: Replaced by autogen.sh.
+
+2005-03-26 04:39 descender
+
+ * configure.ac:
+ * configure.ac: Jack gettext version up to 0.14.1.
+
+2005-03-26 04:38 descender
+
+ * ABOUT-NLS, autogen.sh, config.guess, config.rpath, config.sub,
+ depcomp, install-sh, ltmain.sh, missing, mkinstalldirs,
+ po/Makefile.in.in, po/Makevars, po/Makevars.template,
+ po/Rules-quot, po/boldquot.sed, po/en at boldquot.header,
+ po/en at quot.header, po/insert-header.sin, po/quot.sed,
+ po/remove-potcdate.sin:
+ * Remove auto-generated files. * autogen.sh: Don't call
+ gen-auto-scripts.sh, run autotools manually.
+
+2005-03-26 04:20 descender
+
+ * m4/: codeset.m4, gettext.m4, glibc21.m4, iconv.m4, intdiv0.m4,
+ inttypes-pri.m4, inttypes.m4, inttypes_h.m4, isc-posix.m4,
+ lcmessage.m4, lib-ld.m4, lib-link.m4, lib-prefix.m4, nls.m4,
+ po.m4, progtest.m4, stdint_h.m4, uintmax_t.m4, ulonglong.m4:
+ * Remove gettext m4 files.
+
+2005-03-26 04:12 descender
+
+ * m4/libtool.m4:
+ * libtool.m4: Update to 1.5.14.
+
+2005-03-26 03:35 descender
+
+ * beep/playlist.c (release_0_9_7_1):
+ * playlist.c: Apply fix for #260 from HEAD.
+
+2005-03-26 03:32 descender
+
+ * beep/playlist.c:
+ * playlist.c (playlist_remove_dead_files): Fix NULL pointer
+ dereference when playlist position is the last entry and the
+ associated file is 'dead' (#260, Simon Morgan).
+
+2005-03-25 23:33 descender
+
+ * beep/: Makefile.am, beep.wmconfig (release_0_9_7_1):
+ * Makefile.am, beep.wmconfig: Remove beep.wmconfig.
+
+2005-03-25 23:03 descender
+
+ * beep/: about.c, beep_logo.xpm, images/Makefile.am,
+ images/logo.xpm:
+ * Makefile.am, about.c, beep_logo.xpm, images/logo.xpm: Move and
+ rename beep_logo.xpm to images/logo.xpm, fixes make distcheck
+ error (was missing beep_logo.xpm).
+
+2005-03-25 20:40 descender
+
+ * beep/: Makefile.am, beep.wmconfig:
+ * Makefile.am: Add bmp.schemas to distribution, remove
+ beep.wmconfig. * beep.wmconfig: Remove obsolete file.
+
+2005-03-25 20:37 descender
+
+ * beep/bmp.schemas:
+ * bmp.schemas: New GConf schema.
+
+2005-03-25 17:52 descender
+
+ * beep/: bmp.desktop.in (release_0_9_7_1), bmp.desktop.in:
+ * bmp.desktop.in: Put in trailing semicolon for MimeType value.
+
+2005-03-23 22:49 descender
+
+ * Output/OSS/OSS.c, Output/OSS/about.c, Output/OSS/configure.c,
+ Output/alsa/about.c, Output/alsa/alsa.c, Output/alsa/audio.c,
+ Output/alsa/configure.c, Output/esd/about.c,
+ Output/esd/configure.c, Output/esd/esd.c,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c:
+ * Output/OSS/OSS.c, Output/OSS/about.c, Output/OSS/configure.c,
+ Output/alsa/about.c, Output/alsa/alsa.c, Output/alsa/configure.c,
+ Output/esd/about.c, Output/esd/configure.c, Output/esd/esd.c,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c: * Output/alsa/audio.c
+ (alsa_setup): Make alsa_buffer_time unsigned.
+
+2005-03-23 22:31 descender
+
+ * Input/: cdaudio/cdaudio.c, cdaudio/cdinfo.c, cdaudio/configure.c,
+ mpg123/configure.c, mpg123/fileinfo.c, mpg123/http.c,
+ mpg123/id3_frame_content.c, mpg123/mpg123.c, vorbis/configure.c,
+ vorbis/fileinfo.c, vorbis/http.c, vorbis/vorbis.c, wav/wav.c:
+ * cdaudio/cdaudio.c, cdaudio/cdinfo.c, cdaudio/configure.c,
+ mpg123/configure.c, mpg123/fileinfo.c,
+ mpg123/id3_frame_content.c, mpg123/mpg123.c, vorbis/configure.c,
+ vorbis/fileinfo.c, vorbis/vorbis.c, wav/wav.c: Change _() to
+ Q_(). * mpg123/http.c, vorbis/http.c (http_buffer_loop): Change
+ err_len to type socklen_t. Change _() to Q_().
+
+2005-03-23 20:33 descender
+
+ * beep/Makefile.am:
+ * Makefile.am: Remove entries for non-existent files (were
+ removed during shuffling of image files).
+
+2005-03-23 20:15 descender
+
+ * beep/about.c, beep/eq_slider.c, beep/equalizer.c, beep/glade.c,
+ beep/input.c, beep/logger.c, beep/main.c, beep/mainwin.c,
+ beep/playback.c, beep/playlistwin.c, beep/prefswin.c,
+ beep/util.c, libbeep/titlestring.c:
+ * beep/about.c beep/eq_slider.c beep/equalizer.c beep/glade.c,
+ beep/input.c, beep/logger.c, beep/main.c, beep/mainwin.c,
+ beep/playback.c, beep/playlistwin.c, beep/prefswin.c,
+ beep/util.c, libbeep/titlestring.c: Use Q_() instead of _() for
+ translation.
+
+2005-03-23 19:34 descender
+
+ * configure.ac:
+ * configure.ac: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE,
+ use AS_HELP_STRING to mark help strings, remove AC_C_BIGENDIAN,
+ lower case of first character of each option help string.
+
+2005-03-23 12:55 descender
+
+ * beep/: main.c, main.h, mainwin.c, skinwin.c (release_0_9_7_1):
+ * main.[ch], mainwin.c, skinwin.c: Merge accelerator map support
+ from HEAD.
+
+2005-03-23 12:10 descender
+
+ * beep/playlist.h (release_0_9_7_1):
+ * playlist.h: Merge gcc4 error fix from HEAD.
+
+2005-03-23 12:09 descender
+
+ * beep/playlist.h:
+ * playlist.c: Remove superfluous extern declaration of
+ playlist_format_suffixes causing gcc4 to error.
+
+2005-03-14 11:53 descender
+
+ * beep/: main.c, main.h, mainwin.c, skinwin.c:
+ * main.[ch], mainwin.c, skinwin.c: Load and save accelerator map
+ to ~/.bmp/accels.
+
+2005-03-14 07:29 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/fi.po (release_0_9_7_1):
+ * AUTHORS, beep/about.c, po/LINGUAS, po/fi.po: Add new Finnish
+ translation from HEAD.
+
+2005-03-14 07:05 descender
+
+ * AUTHORS, po/LINGUAS, po/fi.po, beep/about.c:
+ * po/fi.po, po/LINGUAS: Add Finnish translation by Pauli
+ Virtanen. * AUTHORS, beep/about.c: Update translation credits.
+
+2005-03-07 07:08 descender
+
+ * Output/alsa/: configure.c, init.c (release_0_9_7_1):
+ * configure.c, init.c: Merge fix for #253 from HEAD.
+
+2005-03-07 07:05 descender
+
+ * Output/alsa/: configure.c, init.c:
+ * configure.c, init.c: Change multi-thread mode setting value
+ type to bool, save period time (#253, Andrei Badea).
+
+2005-02-27 07:52 descender
+
+ * beep/logger.c:
+ * logger.c: Merge infinite recursion fix from release_0_9_7_1.
+
+2005-02-26 18:34 descender
+
+ * Input/vorbis/fileinfo.c (release_0_9_7_1):
+ * fileinfo.c: Merge fix for #244 from HEAD.
+
+2005-02-26 18:33 descender
+
+ * Input/vorbis/fileinfo.c:
+ * fileinfo.c: Fix typo in date field name (#244, Kazuki Shimura).
+
+2005-02-23 06:15 descender
+
+ * beep/logger.c (release_0_9_7_1):
+ * logger.c (log_to_file): Avoid infinite recursion when a
+ g_return_if_fail() predicate fails.
+
+2005-02-05 20:28 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/zh_TW.po:
+ * AUTHORS, beep/about.c, po/LINGUAS, po/zh_TW.po: Merge
+ translation update from release_0_9_7_1 branch.
+
+2005-02-05 20:24 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/zh_TW.po (release_0_9_7_1):
+
+ * po/zh_TW.po, po/LINGUAS: Add Traditional Chinese translation by
+ Chao-Hsiung Liao. * AUTHORS, beep/about.c: Update translation
+ credits.
+
+2005-02-05 19:57 descender
+
+ * beep/mainwin.c (release_0_9_7_1):
+ * mainwin.c (playback_get_sample_params): Fix assignments; fixes
+ bogus values returned by xmms_remote_get_info().
+
+2005-01-30 23:05 descender
+
+ * beep/images/play.png:
+ * play.png: Re-add, went missing after image file migration from
+ beep/.
+
+2005-01-28 11:11 descender
+
+ * beep/: controlsocket.c, equalizer.c, mainwin.c, mainwin.h,
+ playback.c, playlistwin.c, prefswin.c, util.c, util.h:
+ * mainwin.[ch], equalizer.c, playlistwin.c, controlsocket.c,
+ playback.c, prefswin.c, util.[ch]: Port main window popup code to
+ GtkUIManager.
+
+2005-01-28 07:03 descender
+
+ * beep/play.png:
+ * play.png: Forgot to remove during last commit.
+
+2005-01-28 06:57 descender
+
+ * beep/: Makefile.am, build.list, info.h, info.png, main.c,
+ mainwin.c, mainwin.h, na.xpm, playlist.c, playlist.png,
+ playlistwin.c, queue.png, images/Makefile.am, images/info.png,
+ images/na.xpm:
+ * Makefile.am, images/Makefile.am: Adjust build depedencies due
+ to icon relocation. * info.png, na.xpm: Move to images/. *
+ build.list: Remove, no longer needed. * queue.png: Remove unused
+ icon. * info.h: Redundant, info.png already exists. * main.c:
+ Add custom stock (oxymoron?) icon registration, remove some
+ redundant constants. * mainwin.[ch], playlist.c, playlistwin.c:
+ Port playlist editor menus to GtkUIManager.
+
+2005-01-27 05:27 descender
+
+ * po/br.po:
+ * br.po: Update Breton translation (Thierry Vignaud).
+
+2005-01-26 13:56 descender
+
+ * beep/: effect.c, effect.h, general.c, general.h, input.c,
+ input.h, output.c, output.h, playback.c, playlist.c, playlist.h,
+ plugin.h, pluginenum.c, visualization.c, visualization.h:
+ * playlist.[ch]: Change playlist entry comparators to take const
+ PlaylistEntry * arguments. * pluginenum.c: Factor out code from
+ add_plugin(). * general.[ch], input.[ch], output.[ch],
+ effect.[ch], visualization.[ch]: Change plugin system data to
+ statically allocated structs.
+
+2005-01-22 03:32 descender
+
+ * po/br.po:
+ * br.po: Update Breton translation (Thierry Vignaud).
+
+2005-01-15 18:14 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c: Invert delete options in playlist editor's
+ delete popup menu.
+
+2005-01-15 18:09 descender
+
+ * Output/alsa/audio.c:
+ audio.c: Use GThread instead of pthread for new multi-thread
+ mode, untabify code from last patch.
+
+2005-01-15 17:56 descender
+
+ * libbeep/titlestring.c:
+ * titlestring.c: Replace macro statement wrappers with
+ G_STMT_BEGIN/G_STMT_END.
+
+2005-01-15 17:06 descender
+
+ * beep/playlist_list.c:
+ * playlist_list.c: Fix text clipping for 'non-ASCII' playlist
+ entries.
+
+2005-01-15 04:40 descender
+
+ * beep/playlistwin.c: playlistwin.c: Work around #214 by ignoring
+ double/triple clicks on playlist editor resize hotspot (David Le
+ Brun).
+
+2005-01-15 04:33 descender
+
+ * Output/alsa/: alsa.h, audio.c, configure.c, init.c:
+ * alsa.h, audio.c, configure.c, init.c: Apply BMP port of XMMS
+ ALSA patch by Takashi Iwai (Thierry Vignaud).
+
+2005-01-08 13:39 descender
+
+ * beep/playlistwin.c:
+ playlistwin.c: Add .m3u if user does not specify extension when
+ saving playlists (John Spray).
+
+2005-01-08 13:23 descender
+
+ * beep/: playlist.c, playlist.h, playlistwin.c:
+ * playlist.[ch]: Add playlist_format_get_from_name(). *
+ playlistwin.c: HIGify unknown playlist format dialog message.
+
+2005-01-08 11:55 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c: Fix capitalization of Load/Save Playlist dialog,
+ change reject button to Cancel.
+
+2005-01-08 11:41 descender
+
+ * beep/: playback.c, playlist.c, playlist.h:
+ * playlist.[ch], playback.c: Limit
+ playlist/shuffle_list/queued_list to file scope (static).
+
+2005-01-07 01:10 descender
+
+ * beep/: equalizer.c, main.c, main.h, mainwin.c, pluginenum.c,
+ skin.c, skinwin.c:
+ * mainwin.c: Readd Queue button for JTF dialog. * main.[ch],
+ pluginenum.c, skin.c, skinwin.c, equalizer.c: Use one single
+ array to hold path strings.
+
+2004-12-31 07:13 descender
+
+ * beep/: eq_graph.c, eq_slider.c, equalizer.c, hslider.c,
+ mainwin.c, menurow.c, monostereo.c, number.c, pbutton.c,
+ playlist_list.c, playlist_slider.c, playlistwin.c, playstatus.c,
+ sbutton.c, svis.c, tbutton.c, textbox.c, vis.c, widget.c,
+ widget.h:
+ * Rename Widget methods.
+
+2004-12-25 01:57 descender
+
+ * beep/: playlist.c, playlist.h, playlistwin.c:
+ * playlist.[ch] Refactor playlist saving code according to format
+ type. turn playlist_add*() macros to actual functions. *
+ playlistwin.c: Minor renaming, factor out dialog code from
+ playlistwin_save_playlist().
+
+2004-12-12 03:28 descender
+
+ * beep/playlist.c (release_0_9_7):
+ * playlist.c: Merge fix for #186 from HEAD.
+
+2004-12-12 02:46 descender
+
+ * beep/playlist.c:
+ * playlist.c (playlist_load_m3u): Initialize ext_len to -1, fixes
+ #186 (David Le Brun).
+
+2004-12-11 13:14 descender
+
+ * po/: cs.po, es.po, hu.po, lt.po (release_0_9_7):
+ * cs.po, es.po, hu.po, lt.po: Merge updated translations from
+ HEAD.
+
+2004-12-11 00:08 msikkes
+
+ * po/: cs.po, es.po, hu.po, ja.po: * Updated cs, es, hu and ja
+ translations.
+
+2004-12-09 02:01 descender
+
+ * po/de.po (release_0_9_7):
+ * de.po: Update German translation (Matthias Debus).
+
+2004-12-07 06:11 descender
+
+ * po/ja.po (release_0_9_7):
+ * ja.po: Update Japanese translation (Takeshi Aihana).
+
+2004-12-07 01:02 er-ku
+
+ * po/lt.po: New release coming, eh?
+
+2004-12-05 04:47 descender
+
+ * beep/mainwin.c (release_0_9_7):
+ * mainwin.c: Merge repeat/shuffle menu fix from HEAD.
+
+2004-12-05 04:11 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Fix shuffle/repeat status synchronization with play
+ menu, remove playlist advance option from play menu,
+ miscellaneous code cosmetic changes.
+
+2004-12-04 21:11 masterpe
+
+ * po/nl.po: - Fixed some added fuzzies in the dutch translation
+
+2004-12-04 20:29 quirk_fr
+
+ * po/fr.po: - Updated french translation for the coming release
+
+2004-12-04 20:10 descender
+
+ * po/: bmp.pot, zh_CN.po:
+ * bmp.pot: Update template (hopefully the last time for 0.9.7).
+ * zh_CN.po: Fix/add translations.
+
+2004-12-04 20:05 descender
+
+ * beep/: controlsocket.c, mainwin.c, playlistwin.c,
+ glade/addfiles.glade:
+ * glade/addfiles.glade: Remove trailing space after 'Close Dialog
+ on Add'. * mainwin.c, controlsocket.c: Fixed repeat and shuffle
+ accelerators, push repeat/shuffle GUI feedback into
+ mainwin_repeat/shuffle_pushed(), move 'No Playlist Advance'
+ ItemFactoryEntry into play menu, remove 'BMP' suffix from 'Add
+ Folders' dialog title, correct 'Add Internet Address' dialog
+ title (was 'Add URL'). * playlistwin.c: Fix capitalization of
+ 'Add Internet Address...' option.
+
+2004-12-04 18:21 masterpe
+
+ * po/nl.po: - Updated the dutch translation for pending 0.9.7
+ release
+
+2004-12-04 18:16 descender
+
+ * NEWS, README, TODO:
+ * README: Add note on BMP Wiki. * NEWS: Update changes since
+ 0.9.7 RC2. * TODO: Reorganise the information a little.
+
+2004-12-04 17:29 descender
+
+ * Input/cdaudio/configure.c, Input/mpg123/fileinfo.c,
+ Input/mpg123/http.c, Input/vorbis/fileinfo.c,
+ Input/vorbis/http.c, Input/wav/wav.c, Output/OSS/OSS.c,
+ Visualization/blur_scope/blur_scope.c, Output/OSS/OSS.h,
+ Output/OSS/about.c, Output/OSS/audio.c, Output/OSS/configure.c,
+ Output/OSS/init.c, Output/OSS/mixer.c, Output/esd/audio.c,
+ Output/esd/configure.c, Output/esd/esdout.h, Output/esd/mixer.c:
+ * Fix up license headers.
+
+2004-12-04 17:04 descender
+
+ * beep/: controlsocket.c, controlsocket.h, dock.c, dock.h,
+ effect.c, effect.h, eq_graph.c, eq_graph.h, eq_slider.c,
+ eq_slider.h, equalizer.c, equalizer.h, general.c, general.h,
+ glade.c, glade.h, hints.c, hints.h, input.c, input.h, logger.c,
+ logger.h, main.c, main.h, mainwin.c, mainwin.h, menurow.c,
+ menurow.h, monostereo.c, monostereo.h, number.c, number.h,
+ output.c, output.h, pbutton.c, pbutton.h, playback.c, playback.h,
+ playlist_list.c, playlist_list.h, playlist_popup.c,
+ playlist_popup.h, playlist_slider.c, playlist_slider.h,
+ playlistwin.c, playlistwin.h, plugin.h, pluginenum.c,
+ pluginenum.h, prefswin.c, prefswin.h, sbutton.c, sbutton.h,
+ skin.c, skin.h, skinwin.c, skinwin.h, svis.c, svis.h, tbutton.c,
+ tbutton.h, textbox.c, textbox.h, urldecode.c, urldecode.h,
+ util.c, util.h, vis.c, vis.h, visualization.c, visualization.h,
+ widget.c, widget.h, xml_document.h:
+ * Fix up license headers.
+
+2004-12-04 17:03 descender
+
+ * beep/: about.c, xml_document.c:
+ * about.c (show_about_window): Set dialog hint for About window.
+ * xml_document.c: Add license header, fix up ugliness of last run
+ of indent.
+
+2004-12-04 15:21 descender
+
+ * bmp.spec.in:
+ * bmp.spec.in: See %changelog.
+
+2004-12-04 14:41 descender
+
+ * beep/: mainwin.c, mainwin.h, playlistwin.c:
+ * mainwin.[ch], playlistwin.c: Remove last hack used to fix
+ playback accelerators.
+
+2004-12-04 10:18 descender
+
+ * po/: POTFILES.in, bmp.pot:
+ * POTFILES.in: Add file glade/addfiles.glade (was missing). *
+ bmp.pot: Update template.
+
+2004-12-04 07:09 msikkes
+
+ * NEWS: * Added some items for the release.
+
+2004-12-04 05:33 msikkes
+
+ * README: * Cleaned up the readme a bit.
+
+2004-12-04 04:29 msikkes
+
+ * beep/playlistwin.c: * Added accels from the mainwindow to the
+ playlist.
+
+2004-12-03 06:38 descender
+
+ * beep/: controlsocket.c, equalizer.c, main.c, mainwin.c,
+ mainwin.h, playlistwin.c:
+ * main.c, mainwin.[ch], equalizer.c, playlistwin.c,
+ controlsocket.c: Refactor menu related code (a few more
+ accelerators not recognized when playlist editor is in focus),
+ miscellaneous cleanups.
+
+2004-12-03 05:12 descender
+
+ * configure.ac:
+ * configure.ac: Set libglade version requirement (2.3.1).
+
+2004-12-01 22:08 descender
+
+ * AUTHORS, beep/about.c, beep/util.c:
+ AUTHORS, beep/about.c: Update patch credits. beep/util.c: Fix
+ problem with relaunching Add Files dialog after Esc was pressed
+ to close it.
+
+2004-12-01 21:35 descender
+
+ * configure.ac, Input/mpg123/layer3.c, beep/output.c:
+ * configure.ac: Add switch to use XMMS (mpg123-only)
+ equalization. * beep/output.c (produce_audio): Split out filter
+ independent code into output_to_plugin(), don't apply IIR filter
+ if XMMS equalization enabled. * Input/mpg123/layer3.c
+ (mpg123_do_layer3): Filter samples if XMMS equalization enabled.
+
+2004-12-01 19:09 descender
+
+ * beep/: util.c, glade/addfiles.glade:
+ * util.c, glade/addfiles.glade: Push some Add Files dialog widget
+ creation code into glade file, skip taskbar hint.
+
+2004-12-01 07:58 descender
+
+ * AUTHORS:
+ * AUTHORS: fix name spelling.
+
+2004-12-01 05:57 msikkes
+
+ * beep/mainwin.c: * Changed 'Always On Top' accel to <control>o
+
+2004-11-30 06:31 msikkes
+
+ * beep/playlistwin.c: Modified some accels to fix ambigous ones.
+
+2004-11-30 05:50 msikkes
+
+ * AUTHORS:
+ * Changed my addy.
+
+2004-11-30 03:41 descender
+
+ * AUTHORS:
+ * AUTHORS: Update patch credits.
+
+2004-11-30 03:20 msikkes
+
+ * README, beep/main.c: * Added note for packagers to README about
+ experimental gnome-vfs support. * HACK: Added workaround for bug
+ #129 so the playlist is always unshaded at startup
+
+2004-11-30 03:13 descender
+
+ * po/bmp.pot:
+ * bmp.pot: Update POT file.
+
+2004-11-30 03:08 descender
+
+ * beep/mainwin.c:
+ * mainwin.c (mainwin_eject_pushed): Revert eject button behaviour
+ (#194).
+
+2004-11-28 01:06 quirk_fr
+
+ * po/fr.po: - Updated french translation
+
+2004-11-21 03:34 descender
+
+ * po/de.po:
+ * de.po: Update German translation (Matthias Debus).
+
+2004-11-20 17:29 descender
+
+ * m4/pkg.m4:
+ * pkg.m4: Update (function name is now quoted).
+
+2004-11-20 15:08 descender
+
+ * beep/: controlsocket.c, mainwin.c, mainwin.h:
+ * mainwin.c, mainwin.h, controlsocket.h: Hide some playback
+ sample parameters (bitrate, frequency, channels).
+
+2004-11-17 17:22 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/pt_BR.po:
+ * po/LINGUAS, po/pt_BR.po: Add Brazilian Portuguese translation
+ by Philipi Pinto. * AUTHORS: Fix unknowningly encoded
+ characters. * AUTHORS, beep/about.c: Update translators.
+
+2004-11-16 13:50 descender
+
+ * configure.ac, Output/alsa/audio.c:
+ * configure.ac: Add endianness check using AC_C_BIGENDIAN. *
+ Output/alsa/audio.c: Fix warning message typo (#199).
+
+2004-11-16 12:46 descender
+
+ * Output/alsa/configure.c:
+ * configure.c: Fix (swap) ALSA preferences dialog Ok and Cancel
+ button order.
+
+2004-11-16 12:30 descender
+
+ * beep/: equalizer.h, input.c, input.h, main.c:
+ * main.c, equalizer.h, input.[ch]: Rewrite
+ get_disabled_iplugins_str() with GString, use macros for default
+ preset filenames.
+
+2004-11-07 22:58 er-ku
+
+ * po/lt.po: Updating lithuanian translation. However, * "View"
+ isn't translated perfectly (yet); * 19 quite specific to audio
+ strings not yet translated at all...
+
+2004-11-06 08:53 descender
+
+ * beep/: input.h, main.c, mainwin.c, pluginenum.c, pluginenum.h:
+ * main.c: Remove trailing colon from 'disabled_iplugins' config
+ value string output. * mainwin.c, pluginenum.*, input.h: Minor
+ renamings.
+
+2004-11-01 13:05 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Fix toggle button state for shuffle and repeat on
+ start (Andrei Badea).
+
+2004-10-31 15:22 masterpe
+
+ * po/nl.po: - Updated the dutch translation
+
+2004-10-24 08:24 descender
+
+ * Input/mpg123/: configure.c, mpg123.c:
+ * Input/mpg123/configure.c, Input/mpg123/mpg123.c: Remove Glib
+ warning when mpg123_id3_encoding_list is NULL (SF #1020503).
+
+2004-10-24 07:54 descender
+
+ * beep/: util.c, glade/addfiles.glade:
+ * util.c: Fixed 'Add Files' dialog not opening, fixed all
+ compiler warnings, correctly mark all translatable strings,
+ miscellaneous cleanups. * glade/addfiles.glade: Set dialog hint
+ for 'Add Files' dialog window.
+
+2004-10-22 03:41 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c, util.c:
+
+ * Fixed Shuffle and Repeat
+
+2004-10-22 01:55 descender
+
+ * po/mk.po:
+ * mk.po: Update Macedonian translation (Arangel Angov).
+
+2004-10-17 16:58 descender
+
+ * beep/: controlsocket.c, mainwin.h:
+ * controlsocket.c (ctrlsocket_func): Change type of len to
+ socklen_t. * mainwin.h: Remove externs that were declared as
+ statics in mainwin.c.
+
+2004-10-17 09:16 descender
+
+ * beep/images/bmp_playlist.xpm:
+ * bmp_playlist.xpm: Revert playlist window icon.
+
+2004-10-16 05:59 descender
+
+ * beep/controlsocket.c, beep/controlsocket.h, beep/main.c,
+ libbeep/beepctrl.c, libbeep/beepctrl.h:
+ * beep/controlsocket.[ch], libbeep/beepctrl.[ch]: Add ability to
+ activate main window remotely (Andrei Badea). * beep/main.c: Add
+ command option (-a,--activate) to activate main window (Andrei
+ Badea).
+
+2004-10-16 00:26 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/mk.po:
+ * po/LINGUAS, po/mk.po: Add Macedonian translation by Arangel
+ Angov. * AUTHORS, beep/about.c: Add Macedonian translator.
+
+2004-10-08 20:28 descender
+
+ * acinclude.m4, bmp.pc.in, configure.ac:
+ * acinclude.m4: Add ADD_PC_REQUIRES macro. * configure.ac,
+ bmp.pc.in: Set pkg-config file requires for optional
+ dependencies.
+
+2004-10-08 19:35 descender
+
+ * beep/main.c:
+ * main.c (dump_version): Print list of features (eg. GConf, GNOME
+ VFS), and print full application name (instead of package name).
+
+2004-10-08 19:14 descender
+
+ * beep/: mainwin.c, playlistwin.c, playlistwin.h:
+ * mainwin.c, playlistwin.[ch]: Eject button now invokes playlist
+ selection dialog instead.
+
+2004-10-08 15:31 descender
+
+ * beep/: mainwin.c, playlistwin.c:
+ * mainwin.c, playlistwin.c: Fix compiler warnings and GTK+
+ runtime warnings.
+
+2004-10-08 13:51 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c: Remove unused code, fix track info dialog launch
+ with shortcut (#176), miscellaneous clean ups.
+
+2004-10-08 12:34 descender
+
+ * beep/skin.c:
+ * skin.c (skin_draw_pixmap): Check if pixmap is NULL (Artur
+ Frysiak, #185).
+
+2004-10-01 23:55 mderezynski
+
+ * beep/images/appearance.png:
+
+ New appearance icon
+
+2004-09-27 06:00 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c:
+
+ blah! BLAH!
+
+2004-09-27 05:40 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c, glade/prefswin.glade:
+
+ Some menu changes, some this-and-that
+
+2004-09-26 20:14 descender
+
+ * revision.h, beep/main.c:
+ * beep/main.c, revision.h: Revert revision printing code for now
+ (until revup.py can be properly called with ciabot).
+
+2004-09-26 19:50 descender
+
+ * revision.h: * Bump revision (revup.py)
+
+2004-09-26 19:50 descender
+
+ * configure.ac:
+ * configure.ac: Test commit.
+
+2004-09-26 19:05 descender
+
+ * beep/main.c:
+ * Dummy commit to test revup.py
+
+2004-09-26 18:45 descender
+
+ * beep/main.c:
+ * Test commit.
+
+2004-09-26 18:21 descender
+
+ * beep/main.c:
+ * main.c: Test commit.
+
+2004-09-26 17:52 descender
+
+ * beep/main.c:
+ * main.c (dump_version): Print revision number.
+
+2004-09-26 17:48 descender
+
+ * revision.h:
+ * revision.h: Add include guard (also to test commit).
+
+2004-09-26 15:51 descender
+
+ * beep/main.c:
+ * main.c: Include "revision.h" for tree revision number (also to
+ test revup script).
+
+2004-09-26 15:44 descender
+
+ * revision.h:
+ * revision.h: New include file to track tree revision
+
+2004-09-26 06:49 mderezynski
+
+ * beep/images/bmp_eq.xpm:
+
+ Revert to old red icons (the green ones were butt ugly weren't
+ they)
+
+2004-09-26 06:41 descender
+
+ * AUTHORS, beep/about.c:
+ * AUTHORS, about.c: Add Czech translator to credits.
+
+2004-09-26 05:48 descender
+
+ * po/: LINGUAS, cs.po:
+ * LINGUAS, cs.po: Add Czech translation by Jan Narovec.
+
+2004-09-25 21:05 quirk_fr
+
+ * po/fr.po: - Improved few translations
+
+2004-09-25 09:49 mderezynski
+
+ * beep/playlistwin.c:
+
+ Fixed queue_pixbuf compile problem
+
+2004-09-25 09:18 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c, util.c:
+
+ Some updates
+
+2004-09-23 06:58 quirk_fr
+
+ * po/fr.po: - Updated french translation
+
+2004-09-20 02:01 mderezynski
+
+ * beep/: mainwin.c, mainwin.h, playlistwin.c, util.c:
+
+ Changes to the filechooser, menu changes
+
+2004-09-19 11:53 mderezynski
+
+ * beep/: beep_logo.xpm, mainwin.c, playlistwin.c, prefswin.c,
+ util.c:
+
+ revised about logo; menu changes; removed Add Folders because of
+ currently broken GtkFileChooser
+
+2004-09-19 08:16 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c:
+
+ Changed menu order once again
+
+2004-09-19 08:13 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c:
+
+ Menus now pop up to the top (over pl window) instead of to the
+ bottom out of it
+
+2004-09-19 07:15 mderezynski
+
+ * beep/: mainwin.c, playlist.c, playlistwin.c, util.c:
+
+ Menu changes, GTK menus for playlist buttons instead of custom
+ ones
+
+2004-09-19 02:59 oleavr
+
+ * beep/glade/Makefile.am: Added a missing backslash so that
+ addfiles.glade gets installed.
+
+2004-09-19 02:42 mderezynski
+
+ * beep/queue.png:
+
+ Added icon for queue toggle
+
+2004-09-19 02:41 mderezynski
+
+ * beep/glade/addfiles.glade:
+
+ Added .glade file for filebrowser
+
+2004-09-19 02:40 mderezynski
+
+ * beep/: build.list, main.c, main.h, mainwin.c, playlist.h,
+ playlistwin.c, util.c, glade/Makefile.am:
+
+ Changed and fixed up filebrowser
+
+2004-09-17 07:45 mderezynski
+
+ * Input/cdaudio/cdaudio.c:
+
+ Commit enable Equalizer for CD Audio patch
+
+2004-09-17 07:42 mderezynski
+
+ * beep/beep_logo.xpm:
+
+ Replaced green logo with red one (Should have been commited long
+ time ago)
+
+2004-09-08 16:27 descender
+
+ * beep/playlist.c:
+ * playlist.c (playlist_queue_position): Remove #ifdef (Michael
+ Marineau, #169).
+
+2004-09-06 23:26 er-ku
+
+ * po/lt.po: very minor fix for one string
+
+2004-09-06 23:23 er-ku
+
+ * po/lt.po: new translations and translators added.
+
+2004-09-03 09:29 descender
+
+ * AUTHORS, beep/about.c, po/sk.po:
+ * AUTHORS, beep/about.c: Update translation credits. * po/sk.po:
+ Fix mismatched fields.
+
+2004-09-03 07:53 descender
+
+ * po/: LINGUAS, sk.po:
+ * LINGUAS, sk.po: Add Slovak translation by Pavel Kanzelsberger.
+
+2004-09-02 06:04 descender
+
+ * po/hu.po:
+ * hu.po: Update Hungarian translation (Laszlo Dvornik).
+
+2004-09-01 07:18 descender
+
+ * po/el.po:
+ * el.po: Update Greek translation (Kouzinopoulos Haris).
+
+2004-08-31 18:23 descender
+
+ * scripts/gen-auto-scripts.sh:
+ * gen-auto-scripts.sh (run_or_die): Fix exit code output.
+
+2004-08-31 18:16 descender
+
+ * autogen.sh, scripts/gen-auto-scripts.sh:
+ * autogen.sh, scripts/gen-auto-scripts.sh: Fix portability issues
+ with '!' (damn Bash).
+
+2004-08-31 17:12 descender
+
+ * beep/: equalizer.c, mainwin.c, skin.c, skin.h:
+ * skin.c, skin.h: Reorder and rename window mask IDs, remove
+ 'shaded' parameter from skin_get_mask(). * equalizer.c,
+ mainwin.c: Fix window-shade transparency problem (closes #109).
+
+2004-08-31 16:28 descender
+
+ * beep/mainwin.c:
+ * mainwin.c (mainwin_create): Remove call to
+ mainwin_set_shape_mask (removes startup warning about skin !=
+ NULL).
+
+2004-08-29 12:59 descender
+
+ * beep/equalizer.c:
+ * equalizer.c (equalizer_presets_menu_cb): Remove residue break
+ statement.
+
+2004-08-29 12:53 descender
+
+ * beep/: equalizer.c, mainwin.c, util.c, util.h:
+ * equalizer.c, util.c, util.h: Refactor preset load/save UI code,
+ port preset load/save to VFS. * mainwin.c: Remove unused code.
+
+2004-08-29 11:03 descender
+
+ * beep/playlistwin.h:
+ * playlistwin.h: Change playlist default font size to point 10.
+
+2004-08-29 09:29 descender
+
+ * beep/skin.c:
+ * skin.c (init_skins): Fix crash on Solaris during first run of
+ BMP (#165).
+
+2004-08-29 09:23 descender
+
+ * beep/plugin.h:
+ * plugin.h: Remove plugin struct comments, replace
+ xmms_get_gentitle_format()'s const with G_CONST_RETURN.
+
+2004-08-29 09:03 descender
+
+ * NEWS:
+ * NEWS: Update changes.
+
+2004-08-29 08:51 descender
+
+ * Input/mpg123/: configure.c, mpg123.c, mpg123.h:
+ * configure.c, mpg123.c, mpg123.h: Add multiple encoding support
+ for trying ID3 title conversion.
+
+2004-08-29 07:35 descender
+
+ * beep/: effect.c, effect.h, input.c, input.h, main.c, mainwin.c,
+ output.c, output.h, pluginenum.c, pluginenum.h, util.c,
+ visualization.c, visualization.h:
+ * effect.[ch], input.[ch], output.[ch], visualization.[ch]: Use
+ typedef'ed structs for *PluginData. * main.c: Use
+ PLUGIN_FILENAME to construct OSS plugin filename. * mainwin.c:
+ Make some functions static, rename scan_cd_input_plugin() to
+ can_play_cd(). * pluginenum.h: Add PLUGIN_FILENAME macro. *
+ util.c: Change close button to cancel for preset file selector.
+
+2004-08-29 07:22 quirk_fr
+
+ * po/fr.po: - Update French translation
+
+2004-08-29 07:01 descender
+
+ * AUTHORS:
+ * AUTHORS: Correct typo.
+
+2004-08-29 06:59 descender
+
+ * po/bmp.pot:
+ * bmp.pot: Sync PO template.
+
+2004-08-29 06:54 descender
+
+ * po/pl.po:
+ * pl.po: Update Polish translation (Jacek Wolszczak).
+
+2004-08-29 06:47 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Replaced unnecessary gtk_item_factory_get_widget()
+ calls in menu callbacks with their 3rd parameter, replace
+ CHECK_SET macro with check_set() function, replace gtk_exit()
+ with gtk_main_quit().
+
+2004-08-28 09:38 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Replace deprecated gtk_timeout_*() calls with
+ g_timeout_add() and g_source_remove().
+
+2004-08-28 07:40 descender
+
+ * AUTHORS, po/LINGUAS, po/ro.po, beep/about.c:
+ * po/LINGUAS, po/ro.po: Add Romanian translation by Liviu
+ Danicel. * AUTHORS, beep/about.c: Update translation credits.
+
+2004-08-28 06:12 descender
+
+ * AUTHORS, beep/about.c:
+ * AUTHORS, beep/about.c: Change LD's name on request.
+
+2004-08-27 04:06 masterpe
+
+ * po/nl.po: - Updated the dutch translation
+
+2004-08-27 04:02 descender
+
+ * beep/about.c:
+ * about.c: Left out artm :p
+
+2004-08-27 03:32 descender
+
+ * beep/about.c, po/LINGUAS, po/el.po, AUTHORS:
+ * po/LINGUAS, po/el.po: Add Greek translation by Kouzinopoulos
+ Haris. * beep/about.c, AUTHORS: Update translation credits.
+
+2004-08-27 01:04 mderezynski
+
+ * beep/images/bmp_player.xpm:
+
+ reverted icon to red style one
+
+2004-08-26 18:49 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/br.po:
+ * po/br.po: New Breton translation by Thierry Vignaud. *
+ LINGUAS: Add Breton and Hungarian (was missing). * AUTHORS,
+ beep/about.c: Update translation credits.
+
+2004-08-25 01:27 descender
+
+ * AUTHORS, beep/about.c, po/hu.po:
+ * po/hu.po: Add Hungarian translation by Laszlo Dvornik. *
+ AUTHORS, beep/about.c: Update credits.
+
+2004-08-25 01:13 descender
+
+ * po/de.po:
+ * de.po: Update German translation (Matthias Debus).
+
+2004-08-24 05:33 mderezynski
+
+ * beep/: beep_logo.xpm, glade/prefswin.glade, images/bmp_eq.xpm,
+ images/bmp_player.xpm, images/bmp_playlist.xpm:
+
+ New GFX!
+
+2004-08-24 01:30 mderezynski
+
+ * beep/util.c:
+
+ Fixed usage semantics also for Add files and improved visual
+ response
+
+2004-08-24 01:23 mderezynski
+
+ * beep/mainwin.c:
+
+ Fixed usage semantics (Add dir dialog does now first close, then
+ the directory contents are added instead of reverse)
+
+2004-08-23 21:16 descender
+
+ * po/: it.po, ja.po:
+ * it.po: Update Italian translation (Alessio D'Ascanio). *
+ ja.po: Update Japanese translation (Takeshi Aihana).
+
+2004-08-23 20:35 descender
+
+ * beep/about.c:
+ * about.c: Removed superfluous ':'.
+
+2004-08-23 19:46 descender
+
+ * beep/controlsocket.c, Output/OSS/audio.c:
+ * beep/controlsocket.c, Output/OSS/audio.c: Add missing
+ <sys/time.h> includes (Closes #162).
+
+2004-08-23 06:31 er-ku
+
+ * po/lt.po: no comments
+
+2004-08-22 21:30 descender
+
+ * beep/Makefile.am, po/POTFILES.in:
+ * beep/Makefile.am: Add build.list for distribution. *
+ po/POTFILES.in: Remove equalizerwin_preset_menu.glade.
+
+2004-08-22 07:31 descender
+
+ * beep/: playlist.c, playlistwin.c:
+ * playlist.c (playlist_remove_dead_files): Proper fix for
+ removing unavailable ('dead') files, log invalid playlist
+ entries. * playlistwin.c (playlistwin_set_geometry_hints): Fix
+ incorrect base width.
+
+2004-08-22 06:33 descender
+
+ * beep/mainwin.c:
+ * mainwin.c (mainwin_jump_to_file): Replaced gtk_widget_show()
+ calls with gtk_widget_show_all(). (mainwin_jump_to_file,
+ mainwin_jump_to_file_edit_cb): Use alias for playlist entry.
+
+2004-08-22 04:51 descender
+
+ * beep/glade/: Makefile.am, equalizerwin_preset_menu.glade:
+ * Makefile.am, equalizer_preset_menu.glade: Remove unused Glade
+ file.
+
+2004-08-22 04:49 descender
+
+ * beep/about.c:
+ * about.c: Fix indentation (perfectionism at work).
+
+2004-08-22 04:47 descender
+
+ * beep/about.c:
+ * about.c: Update credits, fix compiler warning.
+
+2004-08-22 04:39 descender
+
+ * AUTHORS:
+ * AUTHORS: Update credits.
+
+2004-08-22 04:28 descender
+
+ * NEWS:
+ * NEWS: Add notes on 0.9.7 rc1.
+
+2004-08-22 00:24 mderezynski
+
+ * beep/: playlist.c, playlistwin.c:
+
+ Fixed playlist sort functions
+
+2004-08-21 23:49 mderezynski
+
+ * beep/playlist.c:
+
+ Removed unused variables declarations
+
+2004-08-21 23:48 mderezynski
+
+ * beep/playlist.c:
+
+ Fixed "remove dead files"
+
+2004-08-21 23:35 mderezynski
+
+ * beep/playlist.c:
+
+ intermediate changes
+
+2004-08-21 21:15 descender
+
+ * beep/playlist.c:
+ * playlist.c: Fix "/tmp" error when m3u playlist contains empty
+ lines (Julien Portalier, #133).
+
+2004-08-21 21:04 descender
+
+ * Input/mpg123/id3_frame_text.c:
+ * id3_get_text(): Fix ID3v2 comments (Peter Behroozi). Closes
+ #153.
+
+2004-08-21 20:05 descender
+
+ * Input/vorbis/vorbis.c:
+ * vorbis.c (vorbis_process_data): Remove superfluous
+ g_mutex_unlock() call.
+
+2004-08-21 19:38 descender
+
+ * Output/alsa/configure.c:
+ * configure.c (alsa_configure): Fix GTK+ warning (using
+ gtk_widget_grab_default before packing button into window).
+
+2004-08-21 10:20 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c: Remove unused physical file deletion functions.
+
+2004-08-21 10:01 descender
+
+ * beep/: Makefile.am, audio.inf, audio.png, build.list, folder.png:
+
+ * Remove unused icons.
+
+2004-08-21 09:57 descender
+
+ * beep/play.png:
+ * play.png: Crop and resized icon to 16x16.
+
+2004-08-21 09:20 descender
+
+ * po/zh_CN.po:
+ * Updated zh_CN translation.
+
+2004-08-21 08:28 descender
+
+ * beep/: mainwin.c, util.c:
+ * util.c: Use GtkComboBoxEntry for 'Add URL' dialog, fix memory
+ leak when cropping URL history, make 'Add URL' dialog close
+ when user enters URL in entry box. * mainwin.c: Move
+ mainwin_url_window into mainwin_show_add_url_window().
+
+2004-08-21 06:45 mderezynski
+
+ * beep/: about.c, beep_logo.xpm, glade/prefswin.glade:
+
+ about.c: small fixes for the list view (remove selection, add
+ shadow) beep_logo.xpm: new logo glade/prefswin.glade: made skin
+ list taller
+
+2004-08-21 04:19 mderezynski
+
+ * beep/playlist_list.c:
+
+ Fixed track times would overdraw parts of the skin
+
+2004-08-17 03:28 quirk_fr
+
+ * po/fr.po: - Updated translations for new function copy/paste tags
+
+2004-08-17 03:25 quirk_fr
+
+ * po/fr.po: - Updated translations
+
+2004-08-15 06:30 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Make JTT dialog non-modal, remove track length
+ display since it not sync with track changes.
+
+2004-08-15 06:09 descender
+
+ * beep/: mainwin.c, util.c, util.h, equalizer.c, mainwin.h,
+ playlistwin.c:
+ * util.c, util.h: Added functions create_menu() and
+ make_submenu(). * mainwin.c, mainwin.h: Fix accelerators (#152);
+ use stock buttons, reverse button order and set window type
+ hint for 'Jump to Time' dialog; use new convenience functions
+ (above). * playlistwin.c: Fix 'Playback' menu accelerators,
+ remove jump options from 'Playlist' menu, use new convenience
+ functions. * equalizerwin.c: Use new convenience functions.
+
+2004-08-14 02:47 descender
+
+ * Input/vorbis/fileinfo.c:
+ * fileinfo.c: Activate save button when genre is changed (#148).
+
+2004-08-14 02:25 masterpe
+
+ * po/nl.po: - Some small updates and sanifications to the dutch
+ translation
+
+2004-08-13 19:27 descender
+
+ * po/bmp.pot:
+ * bmp.pot: Update PO template.
+
+2004-08-13 19:14 descender
+
+ * beep/: main.c, mainwin.c, mainwin.h, playlistwin.c:
+ * main.c, mainwin.c, mainwin.h, playlistwin.c: Fix playback
+ submenu of playlist editor.
+
+2004-08-13 18:39 descender
+
+ * beep/main.c:
+ * main.c: Removed unused code, mark options no longer in use.
+
+2004-08-13 18:14 descender
+
+ * beep/: main.c, playlistwin.c, prefswin.c, textbox.c,
+ glade/prefswin.glade:
+ * main.c, prefswin.c, textbox.c, glade/prefswin.glade: Remove
+ option to disable smooth title scrolling. * playlistwin.c: Fix
+ up indentation screw-ups by last run of indent.
+
+2004-08-13 17:55 descender
+
+ * beep/: equalizer.c, mainwin.c, playlistwin.c:
+ * equalizer.c, mainwin.c, playlistwin.c: Renamed some items in
+ 'Options' menu.
+
+2004-08-13 17:31 descender
+
+ * Input/mpg123/fileinfo.c:
+ * Input/mpg123/fileinfo.c: Mark copy/paste album tags buttons as
+ translatable.
+
+2004-08-13 04:16 descender
+
+ * beep/: equalizer.c, mainwin.c:
+ * mainwin.c, equalizer.c: Removed 'Reload skin' option, renamed
+ 'Show Graphical Equalizer' to 'Show Equalizer' (yes I'm
+ fickle-minded).
+
+2004-08-13 04:04 descender
+
+ * beep/: equalizer.c, mainwin.c:
+ * mainwin.c, equalizer.c: Removed 'Focus Playlist Editor' from
+ Options menu, renamed 'Show Graphical EQ' option to 'Show
+ Graphical Equalizer'.
+
+2004-08-13 03:41 descender
+
+ * beep/: equalizer.c, equalizer.h, main.c, main.h, mainwin.c,
+ playlistwin.c, skin.c, skin.h, svis.c, vis.c, vis.h:
+ * Removed doublesize and easymove.
+
+2004-08-12 21:05 descender
+
+ * beep/mainwin.c:
+ * mainwin.c (mainwin_jump_to_file): Prevent spawning of multiple
+ JTF dialogs (#149), set JTF window type hint to dialog (#150).
+
+2004-08-12 06:16 masterpe
+
+ * po/nl.po: - Small update to the dutch translation
+
+2004-08-10 12:26 descender
+
+ * beep/playback.c:
+ * playback.c: Fixed compilation problem with gcc 2.95.x (Jolan
+ Luff, closes #144).
+
+2004-08-08 23:12 quirk_fr
+
+ * po/fr.po: - Better translation
+
+2004-08-04 20:33 artm
+
+ * beep/: Makefile.am, bmp-playlist.c, bmp-playlist.h
+ (new-playlist): new playlist - now compiles :-)
+
+2004-08-04 19:09 artm
+
+ * beep/: bmp-playlist.c, bmp-playlist.h (new-playlist): new
+ playlist - initial version, gtktreemodel implementation
+
+2004-08-03 18:02 mderezynski
+
+ * beep/: playlist.c, playlist_list.c:
+
+ Fix crash when queueing remote files (Closes #106)
+
+2004-08-02 16:12 artm
+
+ * Input/mpg123/fileinfo.c: id3v2 editing user interface
+ enhancements: - validating tracknumbers - show tracknumbers
+ padding zero on saving / copying - tab jumps out of the comment
+ field
+
+2004-07-31 08:48 descender
+
+ * po/de.po:
+ * de.po: Fixed "Queue Toggle" translation (closes #117).
+
+2004-07-31 05:01 descender
+
+ * beep/main.c:
+ * main.c: Equalizer preamp is now saved (Eugene Marcotte, closes
+ #136).
+
+2004-07-31 03:57 artm
+
+ * Input/mpg123/fileinfo.c: Album tags copy'n'paste version 1
+
+2004-07-31 02:15 descender
+
+ * Input/mpg123/: configure.c, http.c, mpg123.c, mpg123.h:
+ * configure.c, http.c, mpg123.c, mpg123.h: Enable Shoutcast title
+ metadata all the time.
+
+2004-07-31 01:09 artm
+
+ * Input/mpg123/fileinfo.c: Fixed warnings about unused functions in
+ fileinfo.c
+
+2004-07-31 00:09 larne
+
+ * configure.ac, Input/mpg123/Makefile.am, Input/mpg123/fileinfo.c,
+ po/bmp.pot, po/cy.po, po/de.po, po/es.po, po/fr.po, po/it.po,
+ po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/ru.po,
+ po/sv.po, po/zh_CN.po: Next iteration of id3v2 patch from artm.
+ His changelog:
+
+ * no more id3v1/v2 tabs -> user doesn't care. * comment field is
+ multiline text editor (try to enter something long, you can press
+ enter to add newlines) * total album tracks editing support
+ (saved in track number frame as <TRACK NO>/<TOTAL TRACKS> *
+ better autoconfig test (will work with compression disabled
+ builds of id3lib on systems without libz) + prints wether id3v2
+ is enabled in the configure summary
+
+2004-07-30 16:57 larne
+
+ * beep/mainwin.c, beep/mainwin.h, beep/playlistwin.c, po/cy.po,
+ po/de.po, po/es.po, po/it.po, po/ko.po, po/nl.po, po/pl.po,
+ po/sv.po: - make mainwin_jump_to_{file,time} in mainwin.c public;
+ used for the new "Jump to File" and "Jump to Time" menu items
+ in the playlistwin's popup menu. This fixes JTF shortcuts
+ being broken.
+
+2004-07-30 05:20 descender
+
+ * Input/mpg123/mpg123.c:
+ * mpg123.c (get_song_info): Fix check for HTTP streams (David Le
+ Brun, closes #128).
+
+2004-07-30 05:19 quirk_fr
+
+ * po/fr.po: Updated translations
+
+2004-07-29 00:53 descender
+
+ * po/ru.po, beep/mainwin.c:
+ * po/ru.po: Russian translation update (Dan Korostelev). *
+ beep/mainwin.c: Hiding main window now hides from taskbar and
+ Alt-Tab list (Dan Korostelev).
+
+2004-07-27 00:09 er-ku
+
+ * po/lt.po: New strings arrived!
+
+2004-07-26 19:58 descender
+
+ * AUTHORS, beep/about.c:
+ * AUTHORS, beep/about.c: Added Italian translator to credits
+ list.
+
+2004-07-26 19:53 descender
+
+ * po/: ja.po, LINGUAS, it.po:
+ * LINGUAS, it.po: Added Italian translation by Alessio D'Ascanio.
+ * ja.po: Updated Japanese translation (Takeshi Aihana).
+
+2004-07-26 18:26 masterpe
+
+ * po/nl.po: - Final tweaks for 0.9.7 (I hope)
+
+2004-07-24 10:00 descender
+
+ * bmp.spec.in:
+ * bmp.spec.in: Fix GNOME VFS configure flag (closes #130).
+
+2004-07-21 20:47 masterpe
+
+ * po/nl.po: Adherence to standard translations, more polishing.
+ Must be getting tiresome reading this.
+
+2004-07-21 19:49 descender
+
+ * Input/wav/wav.h:
+ * wav.h: Fix localization of WAV plugin name.
+
+2004-07-21 19:47 descender
+
+ * Input/vorbis/configure.c:
+ * configure.c: Fix localization.
+
+2004-07-21 17:00 masterpe
+
+ * po/nl.po: Finally found a good translation for "presets", some
+ other small tweaks aswell
+
+2004-07-21 05:47 descender
+
+ * configure.ac, Input/mpg123/Makefile.am, Input/mpg123/common.c,
+ Input/mpg123/fileinfo.c, Input/mpg123/id3.c, Input/mpg123/id3.h,
+ Input/mpg123/id3_frame.c, Input/mpg123/id3_frame_content.c,
+ Input/mpg123/id3_frame_text.c, Input/mpg123/id3_frame_url.c,
+ Input/mpg123/id3_tag.c, Input/mpg123/mpg123.h,
+ Input/mpg123/xmms-id3.h:
+ * Applied Artem Baguinski's id3v2 editing patch, rename
+ Input/mpg123/id3.h to xmms-id3.h.
+
+2004-07-20 17:57 masterpe
+
+ * po/nl.po: Oops, forgot something, corrected.
+
+2004-07-20 17:45 masterpe
+
+ * po/nl.po: Updated the Dutch translation
+
+2004-07-19 21:43 descender
+
+ * AUTHORS, beep/about.c:
+ * AUTHORS, beep/about.c: Add Dan Korostelev (Russian translation
+ update, mpg123 plugin id3 encoding patch) and Laurens Buhler
+ (Dutch translator).
+
+2004-07-19 20:04 masterpe
+
+ * po/nl.po: * po/nl.po: Polished up the translation
+
+2004-07-19 05:09 masterpe
+
+ * po/nl.po: Modified Files: po/nl.po
+
+ * L. Buhler Updated the dutch translation
+
+2004-07-19 04:43 quirk_fr
+
+ * po/fr.po: - Updated french translation
+
+2004-07-19 04:26 masterpe
+
+ * po/nl.po: Modified Files: po/nl.po
+
+ * L. Buhler Updated the Dutch translation
+
+2004-07-18 16:49 descender
+
+ * po/: bmp.pot, zh_CN.po:
+ * bmp.pot: Update PO template. * zh_CN.po: Update Simplified
+ Chinese translation.
+
+2004-07-18 16:36 descender
+
+ * Input/: mpg123/configure.c, vorbis/configure.c:
+ * Input/mpg123/configure.c, Input/vorbis/configure.c: HIGify
+ mpg123/vorbis plugin configuration dialog title.
+
+2004-07-18 16:30 descender
+
+ * beep/: Makefile.am, beep_eq.xpm, beep_mini.xpm,
+ beep_playlist.xpm, equalizer.c, main.c, playlistwin.c,
+ images/Makefile.am, images/bmp_eq.xpm, images/bmp_player.xpm,
+ images/bmp_playlist.xpm:
+ * main.c, playlistwin.c, equalizer.c: Use new window icons. *
+ beep_mini.xpm: Remove. * images/bmp_player.xpm: New BMP player
+ window icon (from icons/bmp.svg). * images/bmp_eq.xpm,
+ images/bmp_playlist.xpm: Moved and renamed from
+ beep_playlist.xpm and beep_eq.xpm * Makefile.am: Update according
+ to file changes.
+
+2004-07-18 16:03 descender
+
+ * beep/: Makefile.am, build.list, cda.png, harddisk.png,
+ jump_time.png, jump_to.h, jump_to.png:
+ * Makefile.am, build.list: Remove unused icons. * cda.png,
+ harddisk.png, jump_time.png, jump_to.png: Remove unused icons. *
+ jump_to.h: Remove unused file.
+
+2004-07-18 15:33 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Remove Plugin->Settings tab.
+
+2004-07-18 14:10 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Changed Preferences window's 'delete-event'
+ handler to gtk_widget_hide_on_delete() (was gtk_widget_hide()).
+
+2004-07-18 12:04 descender
+
+ * po/nl.po:
+ * nl.po: Fixed broken msgstrs.
+
+2004-07-17 20:05 descender
+
+ * Input/mpg123/mpg123.c: * mpg123.c: Applied ID3 encoding patch
+ update (Dan Korostelev).
+
+2004-07-16 08:11 msikkes
+
+ * AUTHORS: Woops, forgot to add Laurens last name. Here it is.
+
+2004-07-16 08:10 msikkes
+
+ * po/ru.po: Russian translation update by Dan Korostelev
+ <dan at ats.energo.ru>
+
+2004-07-16 08:08 msikkes
+
+ * AUTHORS: Added Laurens to the Translators section in AUTHORS file
+ for his Dutch translation. CVS:
+
+2004-07-16 08:06 msikkes
+
+ * po/: LINGUAS, nl.po: - Added nl to LINGUAS - Added Dutch
+ translation by Laurens <masterpe at xs4all.nl>
+
+2004-07-12 17:21 descender
+
+ * beep/playlistwin.c:
+ * playlistwin.c (playlistwin_create_window): Undo last change
+ (put back playlistwin_set_geometry_hints).
+
+2004-07-12 16:32 descender
+
+ * beep/: main.c, mainwin.c, playlist.c, skinwin.c, util.c:
+ * util.c (filebrowser_on_response): Close (destroy) dialog on
+ add. * mainwin.c (dirbrowser_on_response): Close (hide) dialog
+ on add. * main.c (main): Show main window last and playlist
+ editor second last so that main window gets initial focus (if
+ it's not visible, then playlist editor gets the focus).
+
+2004-07-12 16:05 descender
+
+ * beep/: main.c, mainwin.c, mainwin.h, playlistwin.c:
+ * main.c (bmp_default_config): Make BMP load metadata on view
+ (demand) by default. * main.c (main), mainwin.[ch]
+ (create_popups): Fix crash when starting with main window
+ shaded. * playlistwin.c (playlistwin_create_window): Don't set
+ geometry hints here, it is already set via the main window menu
+ handler.
+
+2004-07-11 21:25 descender
+
+ * beep/: main.c, main.h, prefswin.c:
+ * main.c, main.h: Fixed incorrect default titlestring preset
+ (should be 'ARTIST - TITLE', was 'TITLE'), removed some unused
+ code. * prefswin.c (on_titlestring_cbox_realize): Test for
+ preset with n_titlestring_presets.
+
+2004-07-11 18:52 descender
+
+ * beep/: prefswin.c, skinwin.c, glade/prefswin.glade:
+ * skinwin.c (skin_view_realize): Don't update skin view here.
+ (skin_vew_update): Set skin view cursor (skin) after update
+ loop. * prefswin.c: Skin view now updates only the first time it
+ turns visible after Preferences window is launched, added some
+ convenience functions, fixed compiler warnings. *
+ glade/prefswin.glade: Give skin view scrolled window a name, add
+ visibility notify event callback for skin view, remove requires
+ on GNOME (ugh).
+
+2004-07-10 22:49 mderezynski
+
+ * beep/: prefswin.c, glade/prefswin.glade:
+
+ prefswin.c: Added effect plugins view, configuration etc
+ glade/prefswin.glade: GtkHPane instead of fixed layout, effect
+ plugins tab
+
+2004-07-10 21:33 mderezynski
+
+ * beep/: prefswin.c, glade/prefswin.glade:
+
+ prefswin.c: Enabled visualization plugins configure and info
+ glade/prefswin.glade: Set the category selection view width to
+ 140px default
+
+2004-07-10 20:39 quirk_fr
+
+ * po/fr.po: -Updated translations
+
+2004-07-10 13:04 descender
+
+ * Input/mpg123/: configure.c, mpg123.c, mpg123.h:
+ * configure.ac, mpg123.c, mpg123.h: Applied Dan Korostelev's
+ patch to let user configure encoding to assume for ID3 tags.
+
+2004-07-09 12:37 descender
+
+ * beep/: main.c, mainwin.c, mainwin.h, playlistwin.c, skin.c,
+ skin.h:
+ * playlistwin.c: Remove playlistwin_play_menu* and use
+ mainwin_play_menu*, replaced icon for 'New List' with
+ GTK_STOCK_NEW. * main.c, mainwin.c, mainwin.h (create_popups):
+ Rename function to mainwin_create_popups(), call it in
+ mainwin_create() instead of main(). Added some more stock
+ icons to menu popups.
+
+2004-07-09 01:54 descender
+
+ * Input/vorbis/fileinfo.c:
+ * fileinfo.c (vorbis_file_info_box): Convert filename to UTF-8
+ for display, fix compilation error with ALL_VORBIS_TAGS
+ defined.
+
+2004-07-08 09:48 descender
+
+ * Input/mpg123/fileinfo.c, Input/vorbis/fileinfo.c,
+ beep/playlist.c, libbeep/configdb_rcfile.c, libbeep/vfs.h,
+ libbeep/vfs_gnome.c, libbeep/vfs_stdio.c:
+ * configdb_rcfile.c (bmp_cfg_db_open): Use g_build_filename() in
+ place of g_strconcat(). * vfs_stdio.c, vfs_gnome.c, vfs.h:
+ Implement vfs_is_writeable() and vfs_truncate(). *
+ Input/*/fileinfo.c: Complete porting file handling code to VFS
+ using the two new functions above. * playlist.c: Indentation
+ fixes.
+
+2004-07-07 23:32 descender
+
+ * beep/util.h:
+ * util.h (util_create_add_url_window): Rename to
+ util_add_url_dialog_new(), also fixes compiler warning.
+
+2004-07-07 23:30 descender
+
+ * beep/prefswin.c:
+ * prefswin.c (create_prefs_window): Remove 'playlist_update'
+ widget.
+
+2004-07-07 21:43 descender
+
+ * beep/: mainwin.c, mainwin.h, playlist.c, playlistwin.c,
+ skinwin.c, util.c, util.h:
+ * mainwin.c, mainwin.h, playlistwin.c, util.c, util.h: Clean up
+ filebrowser and dirbrowser code. * skinwin.c
+ (skin_view_update): Don't hide skin list during update. *
+ playlist.c (playlist_dir_find_files): Replace while loop with
+ for.
+
+2004-07-07 20:47 descender
+
+ * beep/util.c:
+ * util.c: Clean up file browser signal handling.
+ (filebrowser_add_files): Remove g_free() in loop (made
+ extraneous by last commit).
+
+2004-07-07 19:57 descender
+
+ * beep/: equalizer.c, playlistwin.c, util.c:
+ * equalizer.c, playlistwin.c, util.c: Fixed memory leaks
+ associated with filenames returned with
+ gtk_file_chooser_get_filename*().
+
+2004-07-07 19:47 descender
+
+ * beep/mainwin.c:
+ * mainwin.c: Generalize and rename directory browser functions.
+
+2004-07-07 18:25 descender
+
+ * beep/: input.c, visualization.c:
+ * input.c: (input_show_unplayable_files): HIGify dialog i.e. use
+ GtkMessageDialog, and expander to show/hide file list. *
+ visualization.c: Minor clean-ups.
+
+2004-07-07 18:01 descender
+
+ * beep/: playback.c, playlistwin.c, prefswin.c:
+ * playback.c: HIGify 'No output plugin' dialog. * prefswin.c:
+ Stop playback when user changes output plugin. * playlistwin.c:
+ Removed unused code. (playlistwin_set_shade): Combine the two
+ gtk_window_resize(), put playlistwin_set_geometry_hints() after
+ dock_shade() call.
+
+2004-07-07 16:07 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Remove GNOME requires line (wtf is wrong with
+ Glade?).
+
+2004-07-07 15:56 descender
+
+ * beep/: bmp.desktop.in, main.c, mainwin.c, prefswin.c, prefswin.h,
+ visualization.c:
+ * bmp.desktop.in (Terminal): Replace 0 with false. * prefswin.c
+ (change_category): Swap arguments. (prefswin_set_category): New
+ function. * prefswin.c, prefswin.h, visualization.c: Remove
+ prefswin_plugins_rescan() and prefswin_show_vis_plugins_page().
+ * mainwin.c: Remove 'Visualization Plugins' option in
+ mini-visualizer popup. * main.c: Indentation fix.
+
+2004-07-07 15:30 descender
+
+ * bmp.pc.in:
+ * bmp.pc.in (Name): Change to 'BMP'. (Requires): Remove
+ gthread-2.0, add glib-2.0.
+
+2004-07-07 15:27 descender
+
+ * beep/: prefswin.c, glade/prefswin.glade:
+ * prefswin.glade: Hide equalizer preset list and action buttons.
+ * prefswin.c: Moved change_category(), indentation fixes.
+
+2004-07-07 14:54 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: Added missing 'realize' handler for
+ playlist_show_pl_numbers.
+
+2004-07-07 14:08 descender
+
+ * libbeep/: configdb.h, configdb_gconf.c, configdb_rcfile.c:
+ * configdb.h: Make ConfigDb opaque. * configdb_gconf.c,
+ configdb_rcfile.c: Define _ConfigDb, indentation fixes.
+
+2004-07-07 13:51 descender
+
+ * libbeep/: vfs.h, vfs_gnome.c, vfs_stdio.c:
+ * vfs.h: changed 1st argument of vfs_fwrite() to type
+ gconstpointer, make VFSFile opaque, add <stdio.h> include for
+ SEEK_* macros * vfs_gnome.c, vfs_stdio.c: define _VFSFile struct,
+ indentation fixes
+
+2004-07-07 09:11 descender
+
+ * po/LINGUAS, po/ru.po, AUTHORS, beep/about.c:
+ * LINGUAS, ru.po: added Russian translation by Pavlo Bohmat *
+ AUTHORS, about.c: added Pavlo Bohmat to translator list
+
+2004-07-06 17:41 descender
+
+ * bmp.spec.in:
+ * bmp.spec.in: follow Fedora packaging guidelines as far as
+ possible
+
+2004-07-06 15:28 descender
+
+ * po/zh_CN.po:
+ * zh_CN.po: updated Simplifie Chinese translation
+
+2004-07-06 13:20 descender
+
+ * AUTHORS, beep/about.c, po/LINGUAS, po/ko.po:
+ LINGUAS, ko.po: added Korean translation by DongCheon Park
+ AUTHORS, about.c: added Korean translator to credits list
+
+2004-07-06 05:55 quirk_fr
+
+ * po/fr.po: - Updated translation
+
+2004-07-06 05:44 msikkes
+
+ * Input/vorbis/fileinfo.c: Fixed a typo. A comment wasn't closed
+ properly which blocked compiling.
+
+2004-07-05 09:54 mderezynski
+
+ * beep/mainwin.c:
+
+ fix typo
+
+2004-07-05 09:33 mderezynski
+
+ * Input/mpg123/fileinfo.c, Input/vorbis/fileinfo.c, beep/skinwin.c,
+ beep/util.c, beep/glade/prefswin.glade:
+
+ Input/mpg123/fileinfo.c, Input/vorbis/fileinfo.c: Disabled file
+ stat() check when using GNOME VFS beep/skinwin.c: hide skin
+ treeview while building the list beep/glade/prefswin.glade: Some
+ button order changes beep/util.c: Filebrowser changes. Open will
+ invoke a dialog with "Open (files)" and "Close (dialog)" *only*
+ now, and "Add" from the playlist with "Add" and "Close" only, so
+ that there is a unique way for both procedures which is easier to
+ grasp intuitively
+
+2004-07-04 20:22 descender
+
+ * Output/alsa/configure.c:
+ * configure.c: replaced GTK signal calls with GSignal equivalents
+ (also fixes compiler warnings)
+
+2004-07-04 20:08 descender
+
+ * beep/prefswin.c:
+ * prefswin.c (on_pl_metadata_on_display_toggled):
+ cfg.get_info_on_demand wrongly set (inverted)
+
+2004-07-04 19:54 descender
+
+ * beep/: main.c, plugin.h:
+ * main.c, plugin.h: fixed compiler warning (make
+ xmms_get_gentitle_format return const gchar *, instead of gchar
+ *)
+
+2004-07-04 19:39 descender
+
+ * beep/glade/prefswin.glade:
+ * prefswin.glade: hide category notebook tabs (accidentally made
+ visible during last edit, silly Glade provides no better way to
+ switch tabs)
+
+2004-07-04 19:36 descender
+
+ * beep/: main.c, prefswin.c, skin.c, glade/prefswin.glade:
+ * main.c, skin.c: indentation fixes * prefswin.c,
+ glade/prefswin.glade: fixed compiler warnings, pushed some signal
+ connection calls to libglade, custom title string entry now
+ inserts tags at cursor position instead of end, custom title
+ string setting no longer lost after every session
+
+2004-07-03 08:29 descender
+
+ * beep/logger.h:
+ * logger.h: fixed log file size threshold to 512kb (was 512)
+
+2004-07-02 00:27 mderezynski
+
+ * beep/: main.c, main.h, prefswin.c, skin.c, skin.h,
+ glade/prefswin.glade:
+ Added option to turn custom cursors off internally and into
+ preferences window
+
+2004-07-01 17:09 mderezynski
+
+ * beep/: main.c, main.h, prefswin.c, util.c, util.h,
+ glade/prefswin.glade:
+
+ main.c, main.h, prefswin.c, util.c, util.h, glade/prefswin.glade
+
+2004-06-30 07:53 descender
+
+ * beep/glade.c:
+ * glade.c (map_connect_func): add GCallback->gpointer cast to
+ shut Sun CC up
+
+2004-06-30 06:07 mderezynski
+
+ * beep/logger.c:
+
+ Removed unneccessary include for stdio_ext.h
+
+2004-06-30 05:53 mderezynski
+
+ * beep/logger.c:
+
+ Fix compile problem (added include for sys/stat.h)
+
+2004-06-30 05:13 descender
+
+ * beep/: glade.h, logger.c, logger.h:
+ * glade.h: change FuncMap::function type to GCallback * logger.c,
+ logger.h: truncate log file on start-up, set threshold size to
+ 512kb (closes #89)
+
+2004-06-30 04:41 quirk_fr
+
+ * po/fr.po: - Updated translation - Fixed few mistakes
+
+2004-06-29 02:30 er-ku
+
+ * po/lt.po: Cosmetic changes to conform with common policy:
+
+ Nuostatos >> nustatymai Katalogas >> aplankas
+
+2004-06-29 02:02 er-ku
+
+ * po/lt.po: translation update
+
+2004-06-28 22:19 larne
+
+ * configure.ac, beep/glade.c, beep/glade.h, po/fr.po: compile fixes
+
+2004-06-28 21:25 larne
+
+ * po/POTFILES.in: - lets try removing the correct file...
+
+2004-06-28 21:16 larne
+
+ * po/POTFILES.in: - remove dirbrowser.c
+
+2004-06-28 09:35 descender
+
+ * beep/: input.c, main.c, mainwin.c, plugin.h, pluginenum.c,
+ pluginenum.h, prefswin.c, skinwin.c:
+ - fixed compiler warnings introduced in last commit - renamed Add
+ Folders dialog title to 'Add Folders' - hide instead of
+ destroying Add Folders dialog on close - revert
+ InputPlugin::set_info() signature to gchar * for title (save
+ plugin writers' headaches) - renamed pluginmatrix to
+ plugin_matrix - fixed memory leak when replacing keys in
+ plugin_matrix - fixed incorrect value comparator for
+ plugin_matrix - fixed memory leak in skin_view_update() - trivial
+ clean-ups
+
+2004-06-28 06:30 mderezynski
+
+ * beep/playlist_list.c:
+ rendering problem fixed (number column seperator was drawn too
+ short)
+
+2004-06-28 06:11 mderezynski
+
+ * beep/: mainwin.c, prefswin.c:
+ Dropping a font on mainwin now also updates the GtkFontButton in
+ the preferences window
+
+2004-06-28 05:36 mderezynski
+
+ * beep/: mainwin.c, mainwin.h, prefswin.c:
+ When dropping a skin file on the main window, the skin view gets
+ updated accordingly now. I had to g_signal_connect() a mainwin
+ signal inside prefswin.c for that because we only there have
+ access to prefswin's glade XML. Well.
+
+2004-06-28 05:02 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c, prefswin.c, skinwin.c,
+ skinwin.h, util.c, glade/prefswin.glade:
+
+ Skin view now always scrolls to the currently active skin
+
+2004-06-28 01:54 mderezynski
+
+ * beep/: mainwin.c, playlistwin.c:
+
+ changed "Add Directories" to "Add Folders" (menus)
+
+2004-06-28 01:17 mderezynski
+
+ * beep/: main.c, mainwin.c, playlistwin.c, util.c,
+ glade/Makefile.am, glade/dirbrowser.glade:
+
+ indentation
+
+2004-06-28 00:56 mderezynski
+
+ * beep/: Makefile.am, dirbrowser.c, dirbrowser.h, main.c,
+ mainwin.c, playlistwin.c, util.c, glade/dirbrowser.glade:
+
+ dirbrowser.c, dirbrowser.h, Makefile.am, main.c, mainwin.c,
+ playlistwin.c, glade/dirbrowser.glade, util.c: Replaced custom
+ dirbrowser trough GtkFileChooser in SELECT_FOLDER mode, removed
+ dirbrowser.c/.h, incorporated code into mainwin.c
+
+2004-06-27 08:54 descender
+
+ * Input/cdaudio/configure.c, Input/mpg123/configure.c,
+ Input/mpg123/fileinfo.c, Input/vorbis/configure.c,
+ Input/vorbis/fileinfo.c, Output/OSS/configure.c,
+ Output/alsa/configure.c, Output/esd/configure.c,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c, beep/equalizer.c,
+ beep/output.c, beep/plugin.h, beep/prefswin.c, beep/util.c,
+ beep/glade/dirbrowser.glade, libbeep/dirbrowser.c:
+ - fixed various windows hidden below always-on-top main player
+ windows (closes #107) - corrected preset dialogs' button order -
+ replace gdk_window_raise() calls with gtk_window_present() -
+ minor clean-ups
+
+2004-06-27 06:31 descender
+
+ * beep/glade/prefswin.glade:
+ - revert window hint type to dialog
+
+2004-06-27 06:18 descender
+
+ * beep/glade/prefswin.glade:
+ - HIGification - added title format combo box entry
+
+2004-06-26 20:16 descender
+
+ * Input/mpg123/mpg123.c, Visualization/blur_scope/blur_scope.c,
+ beep/eq_graph.c, beep/main.c, beep/playlist_popup.c,
+ beep/playlistwin.c, beep/skin.c, beep/skin.h, beep/textbox.c:
+ - replaced gdk_{gc,pixmap,pixbuf}_unref()s with g_object_unref()
+ - miscellaneous minor clean-ups
+
+2004-06-26 18:51 quirk_fr
+
+ * po/fr.po: - updated translation
+
+2004-06-26 16:25 descender
+
+ * beep/controlsocket.c:
+ - fixed freeze when adding unplayable files with third-party
+ applications, thanks to Bernard Blackham (closes #54)
+
+2004-06-26 01:06 descender
+
+ * AUTHORS, po/bmp.pot, po/cy.po, po/de.po, po/es.po, po/fr.po,
+ po/ja.po, po/lt.po, po/pl.po, po/sv.po, po/zh_CN.po:
+ - updated AUTHORS - sync po/pot files
+
+2004-06-26 01:02 descender
+
+ * configure.ac, libbeep/configdb_gconf.c, beep/Makefile.am,
+ beep/about.c, beep/beep.desktop.in, beep/bmp.desktop.in,
+ beep/logger.h, beep/main.c, libbeep/rcfile.c, libbeep/rcfile.h,
+ beep/prefswin.c, beep/skin.c, beep/glade/prefswin.glade,
+ icons/Makefile.am, icons/beep.svg, icons/bmp.svg:
+ - renamed beep.{svg,desktop.in} to bmp.{svg,desktop.in} - renamed
+ font labels to 'player:' and 'playlist:' - minor clean-ups
+
+2004-06-26 00:22 descender
+
+ * bmp.pc.in:
+ - add search path to library flags (closes #110)
+
+2004-06-25 09:43 descender
+
+ * beep/controlsocket.c, libbeep/beepctrl.c:
+ - fixed {write,read}_all() usage, thanks to Sebatian Kapfer
+ (closes #102)
+
+2004-06-25 09:01 descender
+
+ * beep/controlsocket.c, libbeep/beepctrl.c:
+ - fixed incorrect return count for write_all() and read_all()
+ when socket read/writes time out
+
+2004-06-24 22:46 descender
+
+ * bmp.spec.in:
+ - added optional build support for GConf and GNOME VFS - fixed
+ file list
+
+2004-06-24 21:18 descender
+
+ * Input/: mpg123/fileinfo.c, vorbis/fileinfo.c, vorbis/vorbis.c:
+ - fixed gtk_widget_grab_default() warnings with the MPEG tag
+ editor - fixed crash when opening track information for vorbis
+ streams (closes #30) - changed MPEG and vorbis tag editor title
+ format to "filename - BMP" - removed some unused code
+
+2004-06-24 13:24 descender
+
+ * beep/: equalizer.c, mainwin.c, playlistwin.c:
+ - set window roles for player, playlist and equalizer window
+ (closes #88, thanks to Jon Dowland)
+
+2004-06-24 12:55 descender
+
+ * Input/vorbis/fileinfo.c, beep/prefswin.c:
+ - stop BMP from crashing when vorbis file comments are not of the
+ form "x=y" - removed superfluous empty category in preferences
+ window
+
+2004-06-24 11:20 descender
+
+ * Input/vorbis/: fileinfo.c, vcedit.c, vcedit.h:
+ - fixed vorbis tag editor treating comment field names in a
+ case-sensitive manner - fixed memory leak in
+ get_comment_list_hash() (now hash_table_from_vorbis_comment())
+
+2004-06-23 07:50 descender
+
+ * libbeep/: Makefile.am, configfile.c, configfile.h:
+ - re-add configfile.[ch] for backward compatibility
+
+2004-06-23 07:19 descender
+
+ * beep/: dirbrowser.c, equalizer.c, glade.c, playlist_list.c,
+ playlist_popup.c, playlistwin.c, prefswin.c, skin.c:
+ - fixed compiler warnings - fixed screwed up indentations (indent
+ is still too dumb) - removed some unused code
+
+2004-06-23 06:58 descender
+
+ * po/de.po:
+ - update German translation (Matthias Debus)
+
+2004-06-22 01:59 mderezynski
+
+ * beep/: playlist_popup.c, skin.c:
+
+ playlist_popup.c: Fixes Bug #84: Add files expanded list appears
+ in upper left
+
+2004-06-22 00:39 mderezynski
+
+ * beep/skin.c:
+
+ skin.c, util.c: Fixed bug when loading skin without custom
+ cursors the app wouldn't set the current default theme's standard
+ cursor
+
+2004-06-21 22:31 mderezynski
+
+ * beep/skin.c:
+
+ skin.c: Added (simplified) support for Winamp2 skin cursors using
+ Xcursor
+
+2004-06-21 22:00 mderezynski
+
+ * beep/: playback.c, prefswin.c, glade/prefswin.glade,
+ images/Makefile.am, images/eq.png, images/mouse.png,
+ images/playlist.png:
+
+ beep/images/eq.png: New File
+ beep/images/playlist.png: Small changes
+ beep/images/mouse.png: Small changes
+ beep/images/Makefile.am: Added eq.png beep/glade/prefswin.glade:
+ Default size of category list now 120px
+
+2004-06-21 20:04 mderezynski
+
+ * beep/: mainwin.c, playlist_list.c, playlistwin.c:
+
+ dock.c, mainwin.c, playlist_list.c, playlistwin.c, util.c: Fixes
+ Bug #24: cannot un-windowshade playlist when started as
+ windowshade
+
+2004-06-21 02:48 mderezynski
+
+ * Input/cdaudio/cdaudio.c, Input/cdaudio/cddb.c,
+ Input/cdaudio/cdinfo.c, Input/cdaudio/configure.c,
+ Input/cdaudio/http.c, Input/mpg123/common.c,
+ Input/mpg123/configure.c, Input/mpg123/dct64.c,
+ Input/mpg123/dct64_i386.c, Input/mpg123/decode.c,
+ Input/mpg123/decode_2to1.c, Input/mpg123/decode_4to1.c,
+ Input/mpg123/decode_i386.c, Input/mpg123/dxhead.c,
+ Input/mpg123/equalizer.c, Input/mpg123/fileinfo.c,
+ Input/mpg123/getbits.c, Input/mpg123/http.c, Input/mpg123/id3.c,
+ Input/mpg123/id3_frame.c, Input/mpg123/id3_frame_content.c,
+ Input/mpg123/id3_frame_text.c, Input/mpg123/id3_frame_url.c,
+ Input/mpg123/id3_tag.c, Input/mpg123/layer1.c,
+ Input/mpg123/layer2.c, Input/mpg123/layer3.c,
+ Input/mpg123/mpg123.c, Input/mpg123/tabinit.c,
+ Input/vorbis/configure.c, Input/vorbis/fileinfo.c,
+ Input/vorbis/http.c, Input/vorbis/vcedit.c,
+ Input/vorbis/vorbis.c, Input/wav/wav.c, Output/OSS/OSS.c,
+ Output/OSS/about.c, Output/OSS/audio.c, Output/OSS/configure.c,
+ Output/OSS/convert.c, Output/OSS/init.c, Output/OSS/mixer.c,
+ Output/alsa/about.c, Output/alsa/alsa.c, Output/alsa/audio.c,
+ Output/alsa/configure.c, Output/alsa/init.c, Output/esd/about.c,
+ Output/esd/audio.c, Output/esd/configure.c, Output/esd/esd.c,
+ Output/esd/init.c, Output/esd/mixer.c,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c, beep/about.c,
+ beep/controlsocket.c, beep/dirbrowser.c, beep/dock.c,
+ beep/dock.h, beep/effect.c, beep/eq_graph.c, beep/eq_slider.c,
+ beep/eq_slider.h, beep/equalizer.c, beep/fft.c,
+ beep/fullscreen.c, beep/general.c, beep/getopt.c, beep/getopt.h,
+ beep/getopt1.c, beep/glade.c, beep/glade.h, beep/hints.c,
+ beep/hslider.c, beep/iir.c, beep/iir.h, beep/input.c,
+ beep/main.c, beep/main.h, beep/mainwin.c, beep/menurow.c,
+ beep/mkdtemp.c, beep/monostereo.c, beep/number.c, beep/output.c,
+ beep/output.h, beep/pbutton.c, beep/pbutton.h, beep/playback.c,
+ beep/playlist.c, beep/playlist_list.c, beep/playlist_list.h,
+ beep/playlist_popup.c, beep/playlist_slider.c,
+ beep/playlistwin.c, beep/playstatus.c, beep/plugin.h,
+ beep/pluginenum.c, beep/pluginenum.h, beep/prefswin.c,
+ beep/sbutton.c, beep/skin.c, beep/skinwin.c, beep/softvolume.c,
+ beep/svis.c, beep/tbutton.c, beep/textbox.c, beep/urldecode.c,
+ beep/util.c, beep/util.h, beep/vis.c, beep/vis.h,
+ beep/visualization.c, beep/widget.c, beep/widget.h,
+ beep/xml_document.c, libbeep/beepctrl.c,
+ libbeep/configdb_gconf.c, libbeep/configdb_rcfile.c,
+ libbeep/dirbrowser.c, libbeep/formatter.c, libbeep/rcfile.c,
+ libbeep/titlestring.c, libbeep/util.c, libbeep/vfs_gnome.c,
+ libbeep/vfs_stdio.c, libbeep/xconvert.c, libbeep/xentry.c:
+
+ indentation....
+
+2004-06-21 02:44 mderezynski
+
+ * beep/: mainwin.c, output.c, playlistwin.c:
+
+ mainwin.c, playlistwin.c: Slight menu changes
+
+2004-06-21 01:22 mderezynski
+
+ * Input/vorbis/fileinfo.c:
+ Input/vorbis/fileinfo.c Fixes another crash problem with
+ OGG Vorbis file (replaced string vector usage with
+ GHashTable, saved approx. 100 lines of code.....)
+
+2004-06-20 23:42 mderezynski
+
+ * Input/vorbis/fileinfo.c, Input/vorbis/vcedit.c,
+ Input/vorbis/vcedit.h, beep/dirbrowser.c, beep/playlist_list.c,
+ beep/util.c, beep/glade/dirbrowser.glade:
+
+ Input/vorbis/* Fixes Bug #46: Crash on vorbis file info dialog
+ save
+
+ beep/playlist_list.c Minor list rendering changes
+
+ beep/dirbrowser.c beep/glade/dirbrowser.glade Changes to make
+ the main controls of dirbrowser look like our GtkFileChooser
+
+2004-06-20 03:17 mderezynski
+
+ * beep/: dirbrowser.c, playlist_list.c, glade/dirbrowser.glade:
+
+ dirbrowser.c: Added add file on double click functionality
+ glade/dirbrowser.glade: Some more layout changes playlist_list.c:
+ Reverted track number seperator to old behaviour (snap to zero if
+ no files present)
+
+2004-06-20 02:05 mderezynski
+
+ * beep/: dirbrowser.c, playlist_list.c, playlistwin.c,
+ glade/dirbrowser.glade:
+
+ playlistwin.c, playlist_list.c: Fixes Bug #51: long text and file
+ names overlap edge of playlist dirbrowser.c,
+ glade/dirbrowser.glade: Removed "Add all" button ("Add" remains),
+ and added "Select All" and "Select None" buttons instead
+
+2004-06-19 23:08 mderezynski
+
+ * beep/main.c:
+
+ Fixes bug #70 and #72
+
+2004-06-14 22:24 er-ku
+
+ * po/lt.po: Commented out plural strings, as BMP wouldn't compile
+ with them
+
+2004-06-14 22:10 er-ku
+
+ * po/lt.po: minor fix
+
+2004-06-14 21:59 er-ku
+
+ * po/lt.po: some stuff updated ;)`
+
+2004-06-14 01:27 mderezynski
+
+ * beep/: equalizer.c, main.c:
+
+ Fixes Bug #21 (equalizer window not respecting always on top
+ after restart) Patch provided by Patrick Sudowe
+ (Patrick.Sudowe at web.de)
+
+2004-06-13 00:35 quirk_fr
+
+ * po/fr.po: Updated translations
+
+2004-06-03 12:27 descender
+
+ * beep/: dirbrowser.c, glade/dirbrowser.glade:
+ - fixed add button - fixed memory leaks in
+ on_dirview_row_selected() and fb_enq_play() - removed useless
+ (and locale-incorrect) sort comparator for file view
+
+2004-06-03 10:10 descender
+
+ * beep/: dirbrowser.c, dirbrowser.h, glade.c, playlistwin.c,
+ glade/dirbrowser.glade:
+ beep/glade.c: make glade_xml_signal_autoconnect_map() resolve
+ linked in symbols as well beep/dirbrowser.[ch],
+ beep/glade/dirbrowser.glade: clean up beep/playlistwin.c: clean
+ up
+
+2004-05-30 03:07 descender
+
+ * beep/playlistwin.c:
+ - fixed loading and saving of playlist using playlist editor
+
+2004-05-28 06:35 mderezynski
+
+ * beep/prefswin.c:
+
+ Enabled visualization plugin enable/disable toggle
+
+2004-05-28 06:06 descender
+
+ * po/pl.po:
+ - update Polish translation (Jacek Wolszczak)
+
+2004-05-28 04:45 descender
+
+ * bmp.spec.in:
+ - update RPM spec file (add libglade2 dependencies)
+
+2004-05-28 04:30 descender
+
+ * beep/equalizer.c:
+ - remove client event callback for equalizer window widget
+
+2004-05-26 23:57 descender
+
+ * beep/prefswin.c:
+ - fixed compiler warnings
+
+2004-05-26 09:09 descender
+
+ * beep/glade/prefswin.glade:
+ - last commit broken
+
+2004-05-26 09:08 descender
+
+ * beep/: equalizer.c, prefswin.c:
+ - moved equalizer configuration into preferences window, removed
+ 'Configure Equalizer' from equalizer menu
+
+2004-05-26 07:35 descender
+
+ * beep/glade/prefswin.glade:
+ - added directory preset filename and file preset extension entry
+ boxes - added GtkAlignments to mouse page - set plugin view
+ scrolled window policies to automatic
+
+2004-05-26 06:27 mderezynski
+
+ * beep/glade/prefswin.glade:
+
+ Changes to "Appearance" tab
+
+2004-05-26 05:39 mderezynski
+
+ * beep/prefswin.c:
+
+ Added support and prefswin tab for visualization plugins
+ (enable/disable not functional yet)
+
+2004-05-26 05:11 descender
+
+ * po/: bmp.pot, cy.po, de.po, es.po, fr.po, ja.po, lt.po, pl.po,
+ sv.po, zh_CN.po:
+ - sync pot/po files
+
+2004-05-26 05:00 descender
+
+ * beep/glade/prefswin.glade:
+ - last commit broken
+
+2004-05-26 05:00 descender
+
+ * beep/prefswin.c:
+ - added equalizer page to preferences window
+
+2004-05-26 03:37 descender
+
+ * beep/skinwin.c:
+ - fixed memory leak in skin_view_on_cursor_changed() (temporary
+ string not freed)
+
+2004-05-26 02:41 mderezynski
+
+ * beep/glade/prefswin.glade:
+
+ Added vis plugins tab (not functional yet!)
+
+2004-05-26 01:33 descender
+
+ * beep/: general.c, general.h, input.c, input.h, main.c,
+ pluginenum.c, util.c, util.h:
+ - minor cleanups
+
+2004-05-25 23:40 descender
+
+ * beep/util.c:
+ - fixed translation of '(invalid UTF-8)' text appended to
+ non-UTF8 strings
+
+2004-05-25 08:35 descender
+
+ * beep/: mainwin.c, playlist.c:
+ playlist.c: fixed memory leak in __playlist_ins_with_info()
+ mainwin.c: fixed memory leak in play_medium()
+
+2004-05-25 06:27 mderezynski
+
+ * beep/glade/prefswin.glade:
+
+ swapped main window font/playlist font (seems to be more handy
+ now)
+
+2004-05-24 10:25 descender
+
+ * beep/: mainwin.c, playback.c, playback.h:
+ - use GStaticMutex instead of GMutex for main window title lock -
+ added bmp_playback_seek_relative() for relative time seeking
+
+2004-05-24 09:51 descender
+
+ * beep/: equalizer.c, hints.c, mainwin.c, mainwin.h, playlistwin.c,
+ prefswin.c, util.c:
+ - revert main window to app-paintable again
+
+2004-05-24 09:37 descender
+
+ * beep/mainwin.c:
+ - fixed transparency problem with main window
+
+2004-05-24 09:07 descender
+
+ * beep/: equalizer.c, equalizer.h, mainwin.c, playlistwin.c:
+ mainwin.c, playlistwin.c: don't trap client events for main
+ window and playlist editor equalizer.[ch]: use
+ gtk_window_present() instead of gdk_window_raise(), make
+ equalizer_set_shape_mask() and equalizer_set_back_pixmp() static,
+ added code to build preset list view with GtkTreeView
+
+2004-05-23 06:23 mderezynski
+
+ * beep/glade/prefswin.glade:
+
+ Set plugin configuration/about buttons to insensitive by default
+ (no plugins -> can't choose it)
+
+2004-05-22 08:37 mderezynski
+
+ * Output/alsa/: alsa.c, alsa.h, audio.c, configure.c, init.c:
+
+ Updated to alsa from current XMMS CVS
+
+2004-05-22 07:11 descender
+
+ * po/de.po:
+ - updated German translation (Matthias Debus)
+
+2004-05-22 05:57 larne
+
+ * beep/mainwin.c: - fix bug #68 (Main window position not saved) -
+ configure_event signal was connected to mainwin, not
+ mainwin_window.
+
+2004-05-20 14:37 descender
+
+ * beep/about.c, beep/glade/prefswin.glade, Output/esd/esd.c:
+ - last commit broken
+
+2004-05-20 14:36 descender
+
+ * po/zh_CN.po:
+ - updated credits in About dialog - fixed ESD plugin title
+ localization - fixed button box padding for general plugin tab -
+ fixed and updated zh_CN translation
+
+2004-05-19 07:33 descender
+
+ * beep/glade/prefswin.glade:
+ - last commit broken
+
+2004-05-19 07:32 descender
+
+ * po/zh_CN.po:
+ - fixed pango markups of 'Preferences Window' plugin tab labels -
+ updated and fixed zh_CN translations
+
+2004-05-19 02:44 larne
+
+ * beep/: main.c, mainwin.c, playback.c, playlist.c: - apply patch
+ from Bernard B <mailto:b-lythebugzilla at blackham.com.au> to fix
+ Xlib/threading issues causing hangs. This appears to close bug
+ #40 <URL:http://www.lythe.org.uk/bugs/show_bug.cgi?id=40>. -
+ restore saving of playlist position on exit which I broke in the
+ config cleanups (this could do with a review because it's a bit
+ of a hack).
+
+2004-05-16 01:49 mderezynski
+
+ * beep/: equalizer.c, hints.c, mainwin.c, mainwin.h, playlistwin.c,
+ prefswin.c, util.c:
+
+ equalizer.c, hints.c, mainwin.c, mainwin.h, playlistwin.c,
+ prefswin.c, util.c: (supposedly) fixed theme change bug
+
+2004-05-15 20:38 quirk_fr
+
+ * po/fr.po: Updated translations
+
+2004-05-13 10:09 descender
+
+ * beep/util.c:
+ - 'Add URL' dialog now closes on adding (bug #60)
+
+2004-05-13 10:02 descender
+
+ * beep/: playlistwin.c, equalizer.c, mainwin.c:
+ - fixed infamous GTK+ theme change bug (bug #36)
+
+2004-05-12 09:58 descender
+
+ * beep/glade/prefswin.glade:
+ - last commit broken
+
+2004-05-12 09:57 descender
+
+ * beep/: glade.c, glade.h, prefswin.c:
+ - added glade_xml_signal_autoconnect_map() - use
+ glade_xml_signal_autoconnect() for 'Preferences window' - shorten
+ spin buttons for mouse wheel scroll playlist / change volume
+ settings
+
+2004-05-12 07:02 descender
+
+ * beep/: glade.c, glade.h, prefswin.c, glade/prefswin.glade:
+ beep/glade.[ch]: added glade_xml_get_widget_warn()
+ beep/prefswin.c, beep/glade/prefswin.glade: fixed GLib warnings
+ and 'Pause between songs' widget ordering
+
+2004-05-12 05:54 descender
+
+ * beep/glade/prefswin.glade:
+ - last commit broken
+
+2004-05-12 05:53 descender
+
+ * beep/prefswin.c:
+ - give more intelligible names to widgets and respective
+ callbacks - make plugin list view callbacks GtkTreeView-centric
+ for easier auto-connection later - fixed memory leak with font
+ name string when font is changed - set category/plugin list view
+ headers with glade instead of using explicit GTK calls -
+ miscellaneous cleanups
+
+2004-05-11 15:14 descender
+
+ * beep/: Makefile.am, dirbrowser.c, glade.c, glade.h, prefswin.c,
+ util.c, util.h:
+ - move glade_xml_new_or_die() into glade.c/glade.h
+
+2004-05-11 14:50 descender
+
+ * beep/glade/dirbrowser.glade:
+ - give more intelligible names to dirbrowser widgets
+
+2004-05-11 13:07 descender
+
+ * beep/: dirbrowser.c, main.c, mainwin.c, playlistwin.c,
+ prefswin.c, util.c, util.h:
+ - HIGified and i18ned glade-file-load error dialog - marked 'Add
+ Directories' dialog file list headers as translatable - give
+ intelligible names to dirbrowser widgets - fixed memory leaks in
+ 'Add Directories' dialog - speeded up 'Add Directories' word
+ matching filter - cleaned up 'Add Directories' dialog code -
+ avoid double calls to shade/unshade playlistwin when toggled with
+ popup menu
+
+2004-05-11 08:58 descender
+
+ * bmp.pc.in:
+ - removed bmp from include path provided with --cflags
+
+2004-05-11 07:39 descender
+
+ * AUTHORS:
+ - update credits
+
+2004-05-10 23:42 descender
+
+ * beep/mainwin.c:
+ - sped up Jump To File matching (bug #56, thanks to Bernard
+ Blackham) - removed bogus g_free() on stack allocated time_str in
+ mainwin_jump_to_time() (fixes #19, Bernard Blackham) - fixed
+ memory leaks in mainwin_jump_to_file_match() - fixed memory leak
+ in mainwin_jump_to_time_cb() (Bernard Blackham) - clicking Jump
+ in Jump To File dialog without selections no longer crashes (bug
+ #58, Bernard Blackham)
+
+2004-05-10 22:20 er-ku
+
+ * po/lt.po: media plugins table captions added
+
+2004-05-10 21:36 descender
+
+ * beep/prefswin.c:
+ - added tab for general plugins (thanks to Oliver Blin)
+
+2004-05-10 01:03 quirk_fr
+
+ * po/fr.po: Updated translations
+
+2004-05-09 23:01 descender
+
+ * po/LINGUAS:
+ - added Polish to LINGUAS
+
+2004-05-09 22:58 descender
+
+ * po/pl.po:
+ - added Polish translation by Jacek Wolszczak
+ <shutdownrunner at o2.pl>
+
+2004-05-07 12:46 descender
+
+ * beep/util.c:
+ - standardize on "A_dd all" (button) for 'Add File' and 'Add
+ Directory' dialog
+
+2004-05-07 12:39 descender
+
+ * beep/skinwin.c:
+ - don't show n/a skins (without thumbnail and main.bmp)
+
+2004-05-07 12:04 descender
+
+ * po/zh_CN.po:
+ - fixed colons and mpg123 plugin description spacing
+
+2004-05-07 11:54 descender
+
+ * beep/prefswin.c, Output/OSS/OSS.c, Output/alsa/alsa.c:
+ - fixed localisation of visualization, output plugin descriptions
+ and preferences window categories
+
+2004-05-07 11:52 descender
+
+ * po/zh_CN.po:
+ - updated translations
+
+2004-05-07 08:31 descender
+
+ * libbeep/: Makefile.am, configdb.h, dirbrowser.h, formatter.h,
+ rcfile.h, vfs.h:
+ Makefile.am: add libbeep/rcfile.h to header installation
+ libbeep/configdb.h, libbeep/dirbrowser.h, libbeep/rcfile.h:
+ replace C linkage statements with G_BEGIN_DECLS/G_END_DECLS
+ libbeep/formatter.h, libbeep/vfs.h: surround prototypes with
+ G_BEGIN_DECLS/G_END_DECLS
+
+2004-05-05 05:45 descender
+
+ * beep/debug.h:
+ - useless commit to test CIA bot script
+
+2004-05-05 05:35 descender
+
+ * beep/: dock.c, playlistwin.c:
+ - shading/unshading playlist editor now pushes windows attached
+ to its base again - removed useless function
+ dock.c:configure_event()
+
+2004-05-05 05:02 descender
+
+ * beep/glade/dirbrowser.glade:
+ - renamed directory browser window title to 'Add Directories',
+ without the 'BMP:'
+
+2004-05-05 04:51 descender
+
+ * beep/: dock.c, dock.h, equalizer.c, equalizer.h, mainwin.c,
+ mainwin.h, playlistwin.c, playlistwin.h:
+ - {mainwin,playlistwin,equalizerwin}_set_decorated() factored
+ into dock_window_set_decorated() - fixed equalizer and playlist
+ window added twice into dock
+
+2004-05-05 04:24 descender
+
+ * beep/: dock.c, dock.h, equalizer.c, mainwin.c, playlist.c,
+ playlistwin.c, pluginenum.c, util.c, visualization.c:
+ - replaced dock_set_uposition(), dock_get_widget_pos(),
+ gdk_window_get_size() with gtk_window_move(),
+ gtk_window_get_position() and gtk_window_get_size(). - fixed
+ some weird indentations
+
+2004-05-04 00:33 larne
+
+ * configure.ac, beep/dirbrowser.c: - change libbeep soversion to 2,
+ with the cfg_db changes it's not compatible to 0.9.6.1's.
+
+2004-05-03 23:51 larne
+
+ * beep/mainwin.c: - re-add 'no playlist advance' to Options menu
+ which disappeared somewhere. Patch from
+ b-lythebugzilla at blackham.com.au (Bernard B) (Closes: #49)
+
+2004-05-03 23:46 larne
+
+ * beep/dirbrowser.c, beep/prefswin.c, beep/util.c, beep/util.h,
+ po/bmp.pot, po/cy.po, po/de.po, po/es.po, po/fr.po, po/ja.po,
+ po/lt.po, po/sv.po, po/zh_CN.po: - give an error when glade files
+ can't be loaded, rather than just crashing.
+
+2004-05-03 04:40 descender
+
+ * m4/pkg.m4:
+ - added pkgconfig's aclocal script
+
+2004-05-03 01:50 descender
+
+ * beep/util.c:
+ - ability to set the unzip/tar command (for decompressing skin
+ archives) using UNZIPCMD/TARCMD environment variables restored
+
+2004-05-03 01:33 descender
+
+ * beep/prefswin.c:
+ - marked preferences window category list as translatable
+
+2004-05-03 01:11 descender
+
+ * Input/cdaudio/configure.c, Input/mpg123/configure.c,
+ Input/vorbis/configure.c, Input/vorbis/fileinfo.c,
+ Output/OSS/about.c, Output/OSS/configure.c, Output/alsa/about.c,
+ Output/alsa/configure.c, Output/esd/about.c,
+ Output/esd/configure.c:
+ - restore localisation of input and output plugin configuration
+ and information dialogs - removed redundant code in
+ Input/vorbis/fileinfo.c
+
+2004-05-02 11:20 descender
+
+ * beep/util.h:
+ - restore localisation of playlist editor popup menu and mpg123
+ file info dialog
+
+2004-05-02 10:47 descender
+
+ * beep/input.c, beep/main.c, beep/main.h, libbeep/beepctrl.c,
+ Input/mpg123/fileinfo.c, Input/mpg123/mpg123.c,
+ Input/vorbis/fileinfo.c, Input/vorbis/vorbis.c,
+ libbeep/formatter.c:
+ beep/main.c, beep/main.h: fixed compilation error with missing
+ #define for BMP_SKIN_THUMB_DIR_BASENAME beep/util.h,
+ Input/mpg123/fileinfo.c: restore localisation of playlist editor
+ popup menu and mpg123 file info dialog Input/mpg123/mpg123.c,
+ Input/vorbis/vorbis.c: removed unused return_tag_value_by_name()
+ functions in mpg123 and vorbis plugins Input/vorbis/vorbis.c:
+ removed superfluous and incorrect UTF-8 conversion of vorbis file
+ tags input.c: fixed memory leak with temporary string in
+ input_is_enabled() libbeep/formatter.c, libbeep/beepctrl.c: use
+ '#ifdef HAVE_CONFIG_H' instead of '#if defined(HAVE_CONFIG_H)'
+ for consistency
+
+2004-05-02 08:35 descender
+
+ * beep/prefswin.c:
+ - plugin configuration and information dialogs are no longer
+ hidden by preferences window - minor cleanups
+
+2004-05-02 07:42 descender
+
+ * beep/mainwin.c:
+ - uncommented mainwin_set_title() call in mainwin_set_info_text()
+ to fix freeze on changing to track with UTF-8 tags (bugzilla #40)
+
+2004-05-02 07:39 descender
+
+ * beep/: prefswin.c, skinwin.c, skinwin.h:
+ - fixed memory leaks with temporary strings in
+ skin_get_thumbnail() - moved skin view realization code in
+ prefswin.c into skinwin.c
+
+2004-05-02 05:34 larne
+
+ * beep/playlistwin.h: - make playlist default width the same as the
+ mainwin
+
+2004-05-02 04:50 larne
+
+ * libbeep/titlestring.c: - use gstring instead of a static buffer
+ for titlestring
+
+2004-05-01 21:07 descender
+
+ * beep/util.c:
+ - removed 'Add selected' button from 'Add Files' dialog
+ (redundant, 'Add' button provides same functionality) - reordered
+ 'Add Files' dialog button order to match 'Add Directories' dialog
+
+2004-05-01 19:54 descender
+
+ * beep/playlist.c:
+ - fixed freeze when removing a track that is being played
+ (bugzilla #41)
+
+2004-05-01 00:14 larne
+
+ * beep/: equalizer.c, playlistwin.c, util.c, util.h: - change some
+ more gtkfilebrowsers to gtkfilechoosers
+
+2004-04-30 11:35 larne
+
+ * beep/: equalizer.c, playlist.c, util.c, util.h: - use
+ gtkfilechooser in equalizerwin
+
+2004-04-30 08:17 descender
+
+ * beep/: Makefile.am, mainwin.c:
+ - fixed gtk_check_menu_item_set_active() warning - remove i18n.h
+ from Makefile.am
+
+2004-04-30 05:57 larne
+
+ * Input/cdaudio/cdaudio.h: - solaris needs sys/types.h
+
+2004-04-30 04:38 descender
+
+ * compile, Input/cdaudio/cdaudio.c:
+ - added 'compile' script from automake - fixed compilation error
+ on FBSD with struct stat
+
+2004-04-29 22:53 descender
+
+ * configure.ac, beep/i18n.h.in:
+ - removed beep/i18n.h.in
+
+2004-04-29 22:44 descender
+
+ * Output/OSS/OSS.c, Output/OSS/OSS.h, Output/OSS/about.c,
+ Output/OSS/audio.c, Output/OSS/configure.c, Output/OSS/init.c,
+ Output/OSS/mixer.c, Output/alsa/about.c, Output/alsa/alsa.c,
+ Output/alsa/alsa.h, Output/alsa/configure.c, Output/alsa/init.c,
+ Output/esd/about.c, Output/esd/audio.c, Output/esd/configure.c,
+ Output/esd/esd.c, Output/esd/esdout.h, Output/esd/init.c,
+ Output/esd/mixer.c, Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c:
+ - use glib/gi18n.h instead of i18n.h - pushed config.h includes
+ into main plugin headers - use #include <> for libbeep includes -
+ moved out file specific includes out of main plugin headers -
+ removed weird check for libasound.so.2 from ALSA output plugin
+
+2004-04-29 22:20 descender
+
+ * Input/: cdaudio/cdaudio.c, cdaudio/cdaudio.h, cdaudio/cddb.c,
+ cdaudio/cdinfo.c, cdaudio/configure.c, mpg123/common.c,
+ mpg123/configure.c, mpg123/equalizer.c, mpg123/fileinfo.c,
+ mpg123/http.c, mpg123/id3.h, mpg123/id3_frame_content.c,
+ mpg123/layer2.c, mpg123/layer3.c, mpg123/mpg123.c,
+ mpg123/mpg123.h, mpg123/tabinit.c, vorbis/configure.c,
+ vorbis/fileinfo.c, vorbis/http.c, vorbis/vorbis.c, wav/wav.c,
+ wav/wav.h:
+ - use glib/i18n.h instead of i18n.h - use #include <> for libbeep
+ includes - shifted #includes around
+
+2004-04-29 22:00 descender
+
+ * libbeep/: dirbrowser.c, titlestring.c, util.c, xentry.c:
+ - use glib/gi18n-lib.h instead of i18n.h
+
+2004-04-29 21:59 descender
+
+ * beep/: about.c, eq_slider.c, equalizer.c, input.c, logger.c,
+ main.c, mainwin.c, playback.c, playlistwin.c, util.c, util.h:
+ - use glib/gi18n.h instead of i18n.h
+
+2004-04-29 21:46 descender
+
+ * Input/vorbis/alternative.make:
+ - removed redundant file
+
+2004-04-29 20:16 descender
+
+ * Input/mpg123/layer1.c, Input/mpg123/layer2.c,
+ Input/mpg123/layer3.c, Input/vorbis/vorbis.c, beep/Makefile.am,
+ Input/wav/wav.c:
+ - fixed make distcheck i.e. included iir.h into Makefile.am, use
+ #include "beep/output.h" instead of "output.h" in input plugin
+ sources
+
+2004-04-29 19:16 er-ku
+
+ * po/lt.po: a small fix for a small typo...
+
+2004-04-29 19:12 descender
+
+ * configure.ac:
+ - new usage of AC_INIT/AM_INIT_AUTOMAKE - added build host and
+ target check (AC_CANONICAL_HOST/AC_CANONICAL_TARGET)
+
+2004-04-29 19:02 er-ku
+
+ * po/lt.po: latest updates
+
+2004-04-29 03:38 descender
+
+ * po/: bmp.pot, cy.po, de.po, es.po, fr.po, ja.po, lt.po, sv.po,
+ zh_CN.po:
+ - German translation update from Matthias - sync po/pot files
+ with code
+
+2004-04-28 07:52 descender
+
+ * libbeep/util.c:
+ - removal of real-time scheduling capability check,
+ xmms_check_realtime_priority() now always return FALSE
+
+2004-04-28 07:20 descender
+
+ * configure.ac, libbeep/util.h:
+ - removal of real-time scheduling capability check,
+ xmms_check_realtime_priority() now always return FALSE
+
+2004-04-27 18:35 descender
+
+ * beep/prefswin.c:
+ - fixed crash with closing preferences window (without clicking
+ close button) and then reopening it
+
+2004-04-25 06:58 quirk_fr
+
+ * po/fr.po: Fixed display problem
+
+2004-04-25 06:45 quirk_fr
+
+ * po/fr.po: Better translations
+
+2004-04-22 16:51 er-ku
+
+ * po/lt.po: "\n" bug fixed. BMP wouldn't compile with yesterday's
+ version. My fault....
+
+2004-04-22 15:46 descender
+
+ * beep/prefswin.c:
+ - fixed incorrect object casts i.e. GtkTreeSelection<->GtkWidget,
+ GtkWidget<->GtkTreeModel - introduced GtkToggleButton casts for
+ radio buttons to avoid warnings - replaced plain C casts with
+ GObject casts i.e. GTK_WIDGET() - replaced InputPlugin and
+ OutputPlugin casts with INPUT_PLUGIN()/OUTPUT_PLUGIN() macros -
+ commented out unused variables to avoid compiler warnings -
+ removed semicolons after function scope end brace
+
+2004-04-22 06:05 mderezynski
+
+ * beep/: mainwin.c, prefswin.c, glade/prefswin.glade,
+ images/Makefile.am, images/plugins.png:
+
+ images/plugins.png, images/Makefile.am: added icon for "plugins"
+ mainwin.c, prefswin.c, glade/Makefile.am glade/prefswin.glade:
+ prefswin WIP
+
+2004-04-22 01:34 descender
+
+ * configure.ac:
+ - fixed locale path problem causing BMP not to find translations
+
+2004-04-21 23:03 er-ku
+
+ * po/lt.po: updating stuff....
+
+2004-04-21 08:11 mderezynski
+
+ * beep/glade/prefswin.glade:
+
+ prefswin.glade: reverted an accidental change
+
+2004-04-21 07:32 mderezynski
+
+ * configure.ac:
+
+ configure.ac: added beep/images/Makefile
+
+2004-04-21 07:23 mderezynski
+
+ * beep/: Makefile.am, mainwin.c, prefswin.c, images/Makefile.am,
+ images/appearance.png, images/mouse.png, images/playlist.png:
+
+ Added icons to prefswin sections
+
+2004-04-21 05:15 quirk_fr
+
+ * po/fr.po: Update translations
+
+2004-04-21 04:21 mderezynski
+
+ * beep/: playlist.c, prefswin.c, glade/prefswin.glade:
+
+ playlist.c, prefswin.c, glade/prefswin.glade: new prefswin WIP
+
+2004-04-20 12:12 descender
+
+ * po/: POTFILES.in, bmp.pot, cy.po, de.po, es.po, fr.po, ja.po,
+ lt.po, sv.po, zh_CN.po:
+ - removed libbeep/configfile.c (removed from CVS) from POTFILES -
+ sync po/pot files
+
+2004-04-20 11:57 descender
+
+ * AUTHORS, beep/about.c, po/cy.po:
+ - added basic project and copyright information into About dialog
+ - moved Welsh translation history in About dialog into its po
+ file - moved Ole Andre up to Developers section in AUTHORS -
+ sorted contributor names according to last name - fixed spelling
+ of Tim's last name
+
+2004-04-20 11:49 descender
+
+ * po/: LINGUAS, es.po:
+ - added Spanish translation by Francisco Javier F. Serrador
+
+2004-04-20 10:12 larne
+
+ * beep/prefswin.c: more prefswin fixes
+
+2004-04-20 10:06 larne
+
+ * beep/: main.c, prefswin.c: fix sunpro cc warnings
+
+2004-04-20 08:42 mderezynski
+
+ * beep/prefswin.c:
+
+ prefswin.c, glade/prefswin.glade: more prefswin WIP
+
+2004-04-20 08:03 mderezynski
+
+ * beep/playlistwin.c: [no log message]
+
+2004-04-20 07:44 mderezynski
+
+ * beep/: prefswin.c, glade/prefswin.glade:
+
+ prefswin.c, glade/prefswin.glade: WIP
+
+2004-04-20 06:55 larne
+
+ * beep/: dirbrowser.c, dirbrowser.h, input.h, main.c, mainwin.c,
+ mainwin.h, playback.c, pluginenum.c, prefswin.c: add standard
+ copyright header to files without
+
+2004-04-20 06:23 larne
+
+ * AUTHORS, beep/about.c: change cy credits
+
+2004-04-20 05:53 mderezynski
+
+ * beep/: beep_logo.xpm, mainwin.c, prefswin.c,
+ glade/prefswin.glade:
+
+ beep_logo.xpm: changed mainwin.c: minor changes prefswin.c: WIP
+ glade/prefswin.glade: WIP
+
+2004-04-20 05:38 larne
+
+ * beep/: equalizer.c, input.h, main.c, mainwin.c, playback.c,
+ pluginenum.c, prefswin.c, skinwin.c, visualization.c: fix
+ warnings in prefswin and a couple of other places
+
+2004-04-20 03:22 mderezynski
+
+ * beep/: main.c, main.h, prefswin.c:
+
+ main.c, main.h, prefswin.c: fixed saving of disabled input
+ plugins
+
+2004-04-20 02:17 mderezynski
+
+ * beep/prefswin.c:
+
+ prefswin.c: readded
+
+2004-04-20 02:16 mderezynski
+
+ * beep/: input.c, input.h, main.c, mainwin.c, playback.c,
+ playback.h, pluginenum.c, pluginenum.h, prefswin.c, skinwin.c,
+ skinwin.h, glade/prefswin.glade: [no log message]
+
+2004-04-20 00:38 descender
+
+ * beep/about.c:
+ - ported GtkCList code to GtkTreeView/GtkListStore - replaced
+ XMMS credits text with BMP
+
+2004-04-19 21:51 descender
+
+ * beep/main.c:
+ - ran indent - replaced sizeof(x)/sizeof(*x) with G_N_ELEMENTS -
+ removed periods from '--help' screen option descriptions - change
+ '-n' option description to include BMP
+
+2004-04-19 21:37 descender
+
+ * README:
+ - revised README to fit BMP
+
+2004-04-19 19:54 descender
+
+ * FAQ:
+ - adapted FAQ for BMP
+
+2004-04-19 18:34 descender
+
+ * po/POTFILES.in, beep/glade/Makefile.am,
+ beep/glade/equalizerwin_preset_menu.glade:
+ - added glade file for equalizerwin's preset menu
+
+2004-04-19 14:55 descender
+
+ * configure.ac, beep/Makefile.am, scripts/cvs2cl.pl,
+ scripts/gen-auto-scripts.sh:
+ configure.ac: fail if location of X11 headers and libraries are
+ not found beep/Makefile.am: add "@X_PRE_LIBS@ -lX11
+ @X_EXTRA_LIBS" scripts/cvs2cl.pl: update to 2.53
+ scripts/gen-auto-scripts.sh: generate branch names, tags and tag
+ dates in ChangeLog
+
+2004-04-19 13:52 descender
+
+ * configure.ac, beep/Makefile.am:
+ - check for X11 using AC_PATH_XTRA
+
+2004-04-19 12:49 larne
+
+ * configure.ac, Input/mpg123/common.c, Input/mpg123/dxhead.c,
+ Input/wav/wav.c, Visualization/blur_scope/blur_scope.c,
+ beep/controlsocket.c, beep/dirbrowser.c, beep/getopt.c,
+ beep/main.h, beep/mainwin.c, beep/mkdtemp.c, beep/playlist.c,
+ beep/playlist_list.c, beep/playlistwin.c, beep/prefswin.c,
+ beep/skin.c, beep/textbox.c, beep/util.c, beep/util.h,
+ beep/visualization.c, libbeep/beepctrl.c, libbeep/dirbrowser.c,
+ libbeep/xconvert.c: - fix compile warnings with sunpro cc
+
+2004-04-19 12:17 mderezynski
+
+ * beep/prefswin.c:
+
+ prefswin.c: added seperate column for 'enabled' checkboxes (input
+ plugins)
+
+2004-04-19 11:54 mderezynski
+
+ * po/POTFILES.in:
+
+ POTFILES.in: added prefswin.glade
+
+2004-04-19 11:53 mderezynski
+
+ * beep/: input.c, main.c, playback.c, pluginenum.c, prefswin.c:
+
+ input.c, main.c, playback.c, pluginenum.c, prefswin.c: Added
+ capability to disable input plugins back, sanifications
+
+2004-04-19 11:51 mderezynski
+
+ * libbeep/rcfile.c:
+
+ rcfile.c: sanifications
+
+2004-04-19 07:39 mderezynski
+
+ * beep/: Makefile.am, main.c, main.h, prefswin.c, skinwin.c:
+
+ main.c, main.h, skinwin.c: Added functionality for persistent
+ skin thumbnails
+
+2004-04-19 06:20 oleavr
+
+ * beep/Makefile.am: Added missing @GCONF_LIBS@ to LDADD.
+
+2004-04-19 03:13 oleavr
+
+ * .cvsignore, beep/main.c, beep/glade/.cvsignore,
+ libbeep/.cvsignore: Renamed configuration key "convert_%20" to
+ "convert_twenty" for compatibility with GConf. Added missing
+ .cvsignore entries and a .cvsignore file for beep/glade/.
+
+2004-04-19 02:44 oleavr
+
+ * configure.ac, Input/cdaudio/Makefile.am, Input/cdaudio/cdaudio.c,
+ Input/cdaudio/cdaudio.h, Input/cdaudio/cdinfo.c,
+ Input/cdaudio/configure.c, Input/mpg123/Makefile.am,
+ Input/mpg123/configure.c, Input/mpg123/mpg123.c,
+ Input/mpg123/mpg123.h, Input/vorbis/Makefile.am,
+ Input/vorbis/configure.c, Input/vorbis/vorbis.c,
+ Input/wav/Makefile.am, Output/OSS/Makefile.am, Output/OSS/OSS.h,
+ Output/OSS/configure.c, Output/OSS/init.c,
+ Output/alsa/Makefile.am, Output/alsa/alsa.h,
+ Output/alsa/configure.c, Output/alsa/init.c,
+ Output/esd/Makefile.am, Output/esd/configure.c,
+ Output/esd/init.c, Visualization/blur_scope/Makefile.am,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c, beep/Makefile.am,
+ beep/equalizer.c, beep/main.c, beep/mainwin.c, beep/playback.c,
+ beep/playlist.c, beep/softvolume.c, libbeep/Makefile.am,
+ libbeep/configdb.h, libbeep/configdb_gconf.c,
+ libbeep/configdb_rcfile.c, libbeep/configfile.c,
+ libbeep/configfile.h, libbeep/rcfile.c, libbeep/rcfile.h: Merge
+ new configuration backend abstraction API with gconf support.
+ Ported existing code to use the new API.
+
+2004-04-19 00:44 oleavr
+
+ * libbeep/: vfs.h, vfs_gnome.c, vfs_stdio.c: The vfs-files back in
+ their new home.
+
+2004-04-19 00:31 oleavr
+
+ * beep/: vfs.h, vfs_gnome.c, vfs_stdio.c: Removed beep/vfs*.[ch],
+ as they're now in libbeep.
+
+2004-04-19 00:25 oleavr
+
+ * configure.ac, Input/mpg123/id3.h, Input/mpg123/mpg123.h,
+ Input/vorbis/vcedit.h, Input/vorbis/vorbis.c,
+ Input/vorbis/vorbis.h, Input/wav/wav.h, Output/OSS/configure.c,
+ Output/alsa/configure.c, beep/Makefile.am, beep/output.c,
+ beep/output.h, beep/playlist.c, beep/plugin.h, beep/pluginenum.c,
+ libbeep/Makefile.am: Small adjustments related to beep/vfs*.[ch]
+ being moved to libbeep, as well as misc fixes lead to by compiler
+ warnings.
+
+2004-04-19 00:25 mderezynski
+
+ * beep/: dirbrowser.c, prefswin.c, glade/Makefile.am,
+ glade/prefswin.glade:
+
+ prefswin.c: Added new libglade-based prefs window
+
+2004-04-19 00:20 mderezynski
+
+ * beep/: prefswin.c, util.c:
+
+ prefswin.c: Removed for readding new prefswin
+
+2004-04-18 19:57 descender
+
+ * Input/mpg123/Makefile.am, Input/vorbis/Makefile.am,
+ Output/OSS/Makefile.am, Output/alsa/Makefile.am,
+ Visualization/blur_scope/Makefile.am:
+ - removed @PTHREAD_LIBS@ from all plugins' Makefile.am
+
+2004-04-18 19:37 descender
+
+ * configure.ac:
+ - removed pthread check from configure
+
+2004-04-18 19:34 descender
+
+ * Output/: OSS/OSS.h, OSS/audio.c, esd/audio.c, esd/esdout.h:
+ - replaced pthread usage with gthread in OSS/ESD output plugins
+
+2004-04-18 19:26 descender
+
+ * Input/: mpg123/http.c, mpg123/mpg123.c, vorbis/configure.c,
+ vorbis/fileinfo.c, vorbis/http.c, wav/wav.h:
+ - replaced pthread usage with gthread completely for vorbis and
+ mpg123 plugins - removed unnecessary pthread.h #includes
+
+2004-04-18 19:16 descender
+
+ * Input/mpg123/mpg123.c, Input/vorbis/vorbis.c, beep/equalizer.c,
+ beep/mainwin.c, beep/playlistwin.c:
+ - use gthread instead of pthread usage with vorbis and mpg123
+ plugins - removed gdk_window_set_group() calls for mainwin,
+ equalizerwin and playlistwin
+
+2004-04-18 10:47 larne
+
+ * configure.ac, Input/vorbis/vorbis.c, beep/iir.c, beep/iir.h: -
+ iir fixes.. remove the aligned stuff 'cos its not useful afaics -
+ warnings in libvorbis missing output.h - change configure to
+ check for XOpenDisplay in libX11
+
+2004-04-18 10:21 larne
+
+ * configure.ac, beep/iir.c, beep/iir.h: - solaris/non-gcc fixes
+
+2004-04-18 07:12 larne
+
+ * beep/main.c: - clean up config stuff to use tables rather than a
+ load of read/write_blah()
+
+2004-04-17 20:14 descender
+
+ * configure.ac, scripts/gen-auto-scripts.sh:
+ - fixed configure check for existing BMP installtion -
+ autogen.sh/gen-auto-scripts.sh now defaults to autoreconf if
+ available
+
+2004-04-15 21:02 descender
+
+ * beep/glade/dirbrowser.glade:
+ - fixed dirbrowser hpane position (was all the way to the left)
+
+2004-04-15 19:43 descender
+
+ * po/POTFILES.in:
+ - added beep/glade/dirbrowser.glade into POTFILES - removed
+ beep/sm.c (gone) from POTFILES
+
+2004-04-15 15:57 descender
+
+ * beep/: dirbrowser.h, equalizer.c, main.c, mainwin.c, mainwin.h,
+ skin.c, skin.h, skinwin.c, skinwin.h, widget.c, widget.h:
+ - fixed compiler warnings on undeclared functions - fall back to
+ default skin if the one configured is not found - show error
+ dialog and exit when BMP cannot find default skin to fallback on
+ (bug #932008) - fixed always-on-top not honoured on startup (bug
+ #932995) - hook gnome_vfs_shutdown() to exit()
+
+2004-04-15 12:01 descender
+
+ * beep/mainwin.c:
+ - factored out code from mainwin_idle_func() into
+ idle_func_change_song() and idle_func_update_song_info()
+
+2004-04-15 09:45 descender
+
+ * beep/mainwin.c:
+ - move 'About BMP' option from 'Options' submenu to top-level -
+ replace sizeof(x)/sizeof(x[0]) with G_N_ELEMENTS()
+
+2004-04-15 06:43 descender
+
+ * libbeep/: dirbrowser.c, titlestring.h, util.c:
+ - util.h: replaced extern "C" {} with G_BEGIN_DECLS and
+ G_END_DECLS - text in xmms_show_message() dialogs not longer
+ editable by user - pack xmms_show_dialog() text view and button
+ widgets into GtkDialog's vbox and action_area instead
+
+2004-04-15 04:38 descender
+
+ * indent.pro:
+ - added profile for formatting BMP code with the indent utility
+
+2004-04-15 03:50 descender
+
+ * beep/mainwin.c:
+ - fixed no-output-device error dialog not showing -
+ no-output-device error dialog is now modal - use HIG text markups
+ for no-audio-cd and no-output-device error dialogs
+
+2004-04-14 22:16 larne
+
+ * beep/prefswin.c: fix a typo
+
+2004-04-14 18:26 larne
+
+ * beep/: main.c, main.h, playlistwin.c, prefswin.c: add 'mouse
+ wheel scrolls playlist by' option
+
+2004-04-14 08:02 descender
+
+ * beep/: vfs.h, vfs_gnome.c, vfs_stdio.c:
+ - add VFS source files from Ole Andre's GtkFileChooser and GNOME
+ VFS patch
+
+2004-04-14 07:53 descender
+
+ * AUTHORS, configure.ac, Input/mpg123/Makefile.am,
+ Input/mpg123/common.c, Input/mpg123/dxhead.c,
+ Input/mpg123/fileinfo.c, Input/mpg123/http.c, Input/mpg123/id3.c,
+ Input/mpg123/id3.h, Input/mpg123/id3_frame_content.c,
+ Input/mpg123/id3_frame_text.c, Input/mpg123/id3_frame_url.c,
+ Input/mpg123/id3_header.h, Input/mpg123/id3_tag.c,
+ Input/mpg123/mpg123.c, Input/mpg123/mpg123.h,
+ Input/vorbis/Makefile.am, Input/vorbis/fileinfo.c,
+ Input/vorbis/http.c, Input/vorbis/vcedit.c,
+ Input/vorbis/vcedit.h, Input/vorbis/vorbis.c,
+ Input/vorbis/vorbis.h, Input/wav/Makefile.am, Input/wav/wav.c,
+ Input/wav/wav.h, beep/Makefile.am, beep/input.c, beep/main.c,
+ beep/main.h, beep/mainwin.c, beep/playlist.c, beep/sm.c,
+ beep/sm.h, beep/util.c, libbeep/titlestring.c:
+ - applied Ole Andre's GtkFileChooser and GNOME VFS patch -
+ removed SMlib support code - removed AC_SUBSTs for corresponding
+ PKG_CHECK_MODULES (PKG_CHECK_MODULES already runs AC_SUBSTs) -
+ fixed compiler warnings with libbeep/titlestring.c - mark
+ description of title format tag '%{n:...%}' as translatable
+
+2004-04-14 02:32 mderezynski
+
+ * TODO, beep/dirbrowser.c, beep/glade/Makefile.am,
+ beep/glade/bmpxmlui.glade, beep/glade/dirbrowser.glade:
+
+ TODO: Updated beep/dirbrowser.c: Re-enabled code for checking
+ files with the input plugins beep/glade/Makefile.am: renamed
+ bmpxmlui.glade to dirbrowser.glade beep/glade/bmpxmlui.glade:
+ removed/renamed beep/glade/dirbrowser.glade: added/renamed
+
+2004-04-12 11:49 larne
+
+ * libbeep/titlestring.c: - support for %{...%} in titlestring
+ [merge from newplug]
+
+2004-04-12 09:43 larne
+
+ * beep/dirbrowser.c: - fix problem when dbrc didn't exist.. its now
+ created. (someone needs to review this and add code to warn
+ the user about it...)
+
+2004-04-12 09:00 larne
+
+ * beep/: dirbrowser.c, eq_slider.c: - fix all warnings in
+ dirbrowser.c ... i'm not entirely sure what some of this code
+ does, but it appears to work.
+
+2004-04-12 08:32 larne
+
+ * beep/: eq_slider.c, equalizer.c, widget.c, widget.h: - make mouse
+ wheel actually move eq sliders. (this was a leftover from gtk1
+ and never fixed)
+
+2004-04-12 08:09 larne
+
+ * beep/: iir.c, iir.h: - i forgot to add these files
+
+2004-04-12 08:02 larne
+
+ * Input/mpg123/Makefile.am, Input/mpg123/layer1.c,
+ Input/mpg123/layer2.c, Input/mpg123/layer3.c,
+ Input/vorbis/vorbis.c, Input/wav/wav.c, beep/Makefile.am,
+ beep/equalizer.c, beep/main.c, beep/main.h, beep/output.c,
+ beep/output.h, beep/playback.c, beep/prefswin.c: - new equalizer,
+ based on eq-xmms. appears to work, but please test it for any
+ problems.. particularly non-mp3/vorbis plugins.
+
+ note that this means non-bmp (ie: xmms) input plugins will not
+ be passed through the eq.. this isn't really a problem ('cos
+ they
+ weren't before either) but a way to make it work might be nice.
+
+ [merge from newplug (now a dead branch, everything on it will
+ be merged into HEAD eventually (hi JK :))]
+
+2004-04-12 00:42 descender
+
+ * configure.ac, libbeep/acinclude.m4:
+ - use AC_CONFIG_HEADERS instead of AM_CONFIG_HEADER - added
+ missing beep/i18n.h to AC_CONFIG_HEADERS list - removed
+ libbeep/acinclude.m4 (now unused)
+
+2004-04-10 10:45 descender
+
+ * Input/wav/wav.c:
+ - minor string handling cleanups in wav.c:get_title()
+
+2004-04-10 10:35 descender
+
+ * Input/: mpg123/mpg123.c, vorbis/vorbis.c:
+ - vorbis plugin now correctly returns directory name with titles
+ with '%F' format tag - fixed silly UTF-8 conversion bug in vorbis
+ plugin (g_locale_to_utf8() instead of g_locale_from_utf8()) - #if
+ 0'ed out mpg123 and vorbis_return_tag_value_by_name() - minor
+ cleanups
+
+2004-04-10 08:01 descender
+
+ * acinclude.m4, configure.ac, m4/beep.m4, m4/libxml.m4:
+ - set autoconf prerequisite version to >= 2.5 - replaced
+ AM_{PROG_LIBTOOL,ENABLE_STATIC,ENABLE_SHARED} with new
+ AC_{PROG_LIBTOOL,ENABLE_STATIC,ENABLE_SHARED} - removed macro
+ aliases in acinclude.m4 - removed unused m4 macro files
+
+2004-04-10 07:30 descender
+
+ * configure.ac, beep/Makefile.am, beep/main.c,
+ libbeep/configure.ac, scripts/gen-auto-scripts.sh:
+ - fused configure scripts (configure.ac and libbeep/configure.ac)
+ - removed ./configure check for zlib, OpenGL and SMlib - removed
+ X11R6 session management code from main.c
+
+2004-04-06 13:40 descender
+
+ * AUTHORS, po/LINGUAS, po/bmp.pot, po/cy.po, po/de.po, po/fr.po,
+ po/ja.po, po/lt.po, po/sv.po, po/zh_CN.po:
+ - added Dutch translation (Matthias Debus) - sync po/pot files
+ with code
+
+2004-04-05 05:13 descender
+
+ * configure.ac, beep/Makefile.am, beep/dirbrowser.c,
+ beep/glade/Makefile.am:
+ - added installation of glade XML files - fixed dirbrowser glade
+ file path - use g_warning() instead of g_error() when glade UI
+ for dirbrowser cannot be loaded
+
+2004-04-05 04:44 descender
+
+ * bmp.spec.in:
+ - update RPM spec build dependencies (gtk 2.4, alsa 1.0)
+
+2004-04-05 04:37 descender
+
+ * Makefile.am, beep-config.in, beep.m4, beep.pc.in, beep.spec.in,
+ bmp.pc.in, bmp.spec.in, configure.ac:
+ - rename beep.pc.in and beep.spec.in to bmp.pc.in and bmp.spec.in
+ respectively - remove m4 macro and beep-config - set name field
+ to 'bmp' (from 'beep') in bmp.pc.in - update configure.ac
+ accordingly
+
+2004-04-05 04:06 mderezynski
+
+ * beep/glade/bmpxmlui.glade:
+
+ glade/bmpxmlui.glade: dirbrowser xml ui
+
+2004-04-05 04:02 mderezynski
+
+ * beep/: dirbrowser.c, dirbrowser.h:
+
+ dirbrowser.c, dirbrowser.h: re-imported for libglade
+
+2004-04-05 03:43 mderezynski
+
+ * beep/: dirbrowser.c, dirbrowser.h, main.c:
+
+ main.c: modified for libgladed dir browser dirbrowser.c,
+ dirbrowser.h: removed for re-importing with libglade
+
+2004-04-05 03:37 descender
+
+ * configure.ac, beep/equalizer.c, beep/logger.c, beep/logger.h,
+ beep/main.c, beep/mainwin.c, beep/playlist.c, beep/playlistwin.c,
+ beep/playlistwin.h, beep/prefswin.c, beep/skinwin.c, beep/util.c:
+
+ - use gtk_window_set_default_icon() instead of using
+ gtk_window_set_icon() individually - use g_return_if_fail()
+ instead of g_assert() in file logger - use
+ gtk_window_has_toplevel_focus() to check window focus - minor
+ cleanups
+
+2004-03-31 01:47 descender
+
+ * beep/: playlistwin.c, playlistwin.h, prefswin.c:
+ - check and log illegal playlistwin sizes (hack to fix
+ shade/unshade crash) - hide playlistwin_focus with
+ playlistwin_has_focus()
+
+2004-03-27 19:44 descender
+
+ * beep/: equalizer.c, equalizer.h, main.c, prefswin.c:
+ - added equalizerwin_has_focus() to hide equalizerwin_focus -
+ hide various equalizerwin variables - update run-time GTK version
+ check to 2.4
+
+2004-03-26 20:25 descender
+
+ * beep/controlsocket.c:
+ - fixed libbeep/beepctrl.c compilation errors (moved XMMS
+ protocol packet header structs back into beep/controlsocket.h)
+
+2004-03-26 19:00 descender
+
+ * beep/controlsocket.h:
+ - fixed libbeep/beepctrl.c compilation errors (moved XMMS
+ protocol packet header structs back into beep/controlsocket.h)
+
+2004-03-25 22:18 descender
+
+ * beep/: playlist.c, playlist.h, playlistwin.c, pluginenum.c:
+ - generalized playlist sort function - miscellaneous trivial
+ cleanups
+
+2004-03-25 21:54 descender
+
+ * beep/: controlsocket.c, controlsocket.h, effect.c, playlist.c,
+ plugin.h, pluginenum.c:
+ - plugin loading is now logged - removed unused code for
+ prefix-ignore sort - use G_BEGIN_DECLS/G_END_DECLS in plugin.h -
+ miscellaneous cleanups
+
+2004-03-25 05:05 descender
+
+ * AUTHORS, configure.ac, libbeep/Makefile.am, m4/alsa.m4,
+ m4/beep-old.m4, m4/esd.m4:
+ - use PKG_CHECK_MODULES for ALSA and ESounD check - removed check
+ for sizeof(long) - miscellaneous configure.ac cleanups - added
+ Liviu as contributor into AUTHORS
+
+2004-03-24 21:27 descender
+
+ * configure.ac:
+ - remove specific version check for libglade2 (some distros have
+ not caught up yet)
+
+2004-03-24 21:23 descender
+
+ * configure.ac, Input/vorbis/Makefile.am, beep/Makefile.am,
+ m4/libmikmod.m4, m4/ogg.m4, m4/vorbis.m4:
+ - added check for gtk/glib 2.4 - added check for libglade2 -
+ removed check for langinfo - removed check for sched_setscheduler
+ - use PKG_CHECK_MODULES for libogg, libvorbis and libvorbisfile -
+ removed m4 scripts for libogg, libvorbis/libvorbisfile and
+ libmikmod - miscellaneous configure.ac cleanups
+
+2004-03-22 09:42 descender
+
+ * po/: bmp.pot, cy.po, fr.po, ja.po, lt.po, sv.po, zh_CN.po:
+ - sync po/pot files with code
+
+2004-03-22 09:37 descender
+
+ * libbeep/Makefile.am:
+ - use absolute include path in libbeep/Makefile.am
+
+2004-03-22 09:10 descender
+
+ * beep.pc.in:
+ - applied Tim's patch on beep.pc to use pkg-config generated
+ dependencies for glib2/gtk2 (was hard-wired)
+
+2004-03-21 23:11 descender
+
+ * beep/: playlist.c, playlist.h:
+ - fixed reading of m3u playlist metadata - fixed insertion of
+ tracks after last entry in playlist
+
+2004-03-18 14:08 descender
+
+ * Input/vorbis/glibconfig.h:
+ - removed Input/vorbis/glibconfig.h causing compilation error
+ with glib 2.4 (WTF?!)
+
+2004-03-17 10:14 descender
+
+ * scripts/genesis.sh:
+ - updated genesis script to recognize configure.ac instead of
+ configure.in
+
+2004-03-17 10:11 descender
+
+ * configure.ac, configure.in, libbeep/configure.ac,
+ libbeep/configure.in:
+ - renamed configure.in to configure.ac
+
+2004-03-16 07:42 descender
+
+ * Makefile.am, beep/Makefile.am:
+ - fixed make distcheck
+
+2004-03-16 05:14 quirk_fr
+
+ * po/fr.po: Update few translations
+
+2004-03-11 06:10 descender
+
+ * beep/dirbrowser.c:
+ - applied Tim's fix to create ~/.dbrc if it does not exist -
+ cleaned up bmp_fb_return_dirtree_model() slightly
+
+2004-03-06 09:42 descender
+
+ * beep/: mainwin.c, prefswin.c:
+ - fixed typo in tool tip for 'Always show clutterbar' checkbox in
+ Preferences->Options - applied Liviu's patch to close Jump to
+ Track dialog on track jump
+
+2004-03-04 09:10 descender
+
+ * AUTHORS, po/LINGUAS, po/bmp.pot, po/cy.po, po/fr.po, po/ja.po,
+ po/lt.po, po/sv.po, po/zh_CN.po:
+ - added Swedish translation by Martin Persenius - fixed format
+ errors with sv.po - sync po/pot files with code
+
+2004-03-04 08:59 descender
+
+ * beep/mainwin.c:
+ - minor cleanups
+
+2004-03-04 05:03 descender
+
+ * beep/: equalizer.c, playlistwin.c:
+ - restored playlist editor and equalizer window pager hints
+ (don't ask why I disabled it)
+
+2004-03-03 08:06 descender
+
+ * Input/mpg123/: Makefile.am, fileinfo.c:
+ - applied Artur's make-distcheck patch to mpg123 plugin sources
+
+2004-03-03 07:58 descender
+
+ * NEWS, TODO:
+ - updated TODO
+
+2004-03-03 07:35 descender
+
+ * po/: cy.po, fr.po, bmp.pot, ja.po, lt.po, zh_CN.po:
+ - sync po/pot files with code
+
+2004-03-03 07:32 descender
+
+ * beep/: mainwin.c, playlistwin.c:
+ - changed error dialog response buttons from 'Close' to 'Ok' -
+ use GtkMessageDialog for no-audio-cd error dialog
+
+2004-03-03 07:21 descender
+
+ * beep/: playlist.c, mainwin.c:
+ - fixed jump button in jump-to-track dialog - change 'Jump to
+ File' to 'Jump to Track' in main popup menu - edited
+ jump-to-track and jump-to-time dialog titles to match main popup
+ menu entries - miscellaneous cleanups
+
+2004-02-29 16:02 masterpe
+
+ * TODO: * TODO: - Updated some items for 0.9.8
+
+2004-02-28 22:19 msikkes
+
+ * beep/mainwin.c: - Fixed a bug where the unshaded mainwindow got
+ shaded and vica versa when DoubleSize was called.
+
+2004-02-28 21:26 descender
+
+ * beep/playlist.c:
+ - applied and modified Tim's patch to fix duplicate entries in
+ unplayable-files dialog
+
+2004-02-26 23:38 descender
+
+ * beep/Makefile.am:
+ - fixed build problem with missing pixmaps.h by adding pixmaps.h
+ to BUILT_SOURCES
+
+2004-02-26 21:43 descender
+
+ * po/: bmp.pot, cy.po, fr.po, ja.po, lt.po, zh_CN.po:
+ - sync po/pot files with code
+
+2004-02-26 21:41 descender
+
+ * beep/.cvsignore:
+ - add pixmaps.h to .cvsignore
+
+2004-02-26 21:40 descender
+
+ * beep/: dirbrowser.c, mainwin.c, util.c:
+ - renamed Add URL window title to "Add URL" (from "bmp: Add
+ Url...") - removed "bmp:" prefix in file selector titles
+
+2004-02-26 21:21 descender
+
+ * beep/: equalizer.c, playlist.c, prefswin.c, prefswin.h,
+ skinwin.c, skinwin.h:
+ - re-arranged Preferences->Options options (play options vs
+ appearance options) - flipped Preferences->Fonts options (main
+ window font entry on top now) - GNOME HIGified
+ Preferences->Options and Preferences->Fonts labels - restore skin
+ browser refreshing on show - renamed 'Configure Equalizer' window
+ to 'BMP Equalizer Preferences' - removed option to turn on
+ real-time priority
+
+2004-02-26 14:38 descender
+
+ * libbeep/: configure.in, titlestring.c, titlestring.h, util.c:
+ - xmms_usleep() now uses g_usleep() - removed nanosleep() check -
+ minor cleanups
+
+2004-02-26 02:28 descender
+
+ * beep/pixmaps.h:
+ - removed pixmaps.h (automatically generated by make)
+
+2004-02-26 02:17 descender
+
+ * beep/: main.c, mainwin.c, playback.c, playlist.c, skin.c,
+ skinwin.c, skinwin.h:
+ - replaced skinwin_set_icon() with gtk_window_set_icon() - added
+ 'refresh' button to skin browser - 'random skin on play' no
+ longer updates skin list independently - 'random skin on play'
+ check button now occupies its own row in skin browser vbox, above
+ the buttons - cleanups
+
+2004-02-26 00:00 descender
+
+ * AUTHORS, configure.in, beep/mkdtemp.c, beep/playback.c,
+ beep/playlistwin.c, beep/skin.c, beep/skinwin.c:
+ - updated contributor and translator credits - fixed wrong letter
+ case in configure output message - cleanups
+
+2004-02-25 22:40 descender
+
+ * configure.in, beep/main.c, beep/mkdtemp.c, beep/playback.c,
+ beep/playlist.c:
+ - replaced usage of 'random() % x' with g_random_int_range(0, x)
+ - removed srandomdev() check in configure - fixed off-by-1 error
+ in bmp_playback_set_random_skin()
+
+2004-02-21 01:42 descender
+
+ * beep/build.list:
+ - removed artist.png from icon list
+
+2004-02-20 20:02 descender
+
+ * beep/dirbrowser.c:
+ - use gtk_window_set_icon() to set icon for dirbrowser - mark
+ dirbrowser 'Filter' label as translatable - dirbrowser directory
+ tree and file list view now have equal sizes - dirbrowser code
+ cleanups
+
+2004-02-20 19:30 descender
+
+ * beep/dirbrowser.c:
+ - indent -kr -nut - #if 0'ed out unused functions to prevent
+ compiler warnings - renamed bmp_recurse to bmp_fb_recurse_dir,
+ and changed it to have file scope
+
+2004-02-20 19:20 descender
+
+ * beep/: Makefile.am, pixmaps.mk:
+ - move pixmaps.h build target into Makefile.am
+
+2004-02-20 18:03 descender
+
+ * beep/playlist.c:
+ - fixed crash when loading some non-pls playlists without #EXT
+ tags
+
+2004-02-20 16:08 descender
+
+ * beep/: mainwin.c, playlist.c:
+ - fixed invert selection in playlist editor - minor cleanups
+
+2004-02-20 15:54 descender
+
+ * beep/: equalizer.c, mainwin.c, playlistwin.c:
+ - fixed equalizerwin drawing error introduced by last commit -
+ removed some unused code
+
+2004-02-20 15:00 descender
+
+ * beep/: equalizer.c, equalizer.h, playlistwin.c, prefswin.c, sm.c,
+ util.h:
+ - fixed str_replace_in() prototype - don't recreate equalizerwin
+ on window decoration toggle - use gtk_window_set_icon() to set
+ icons for playlistwin and equalizerwin - fixed sm.c compilation
+ warnings - minor cleanups
+
+2004-02-20 14:15 descender
+
+ * beep/: playlistwin.c, skin.c, util.c, util.h:
+ - added str_replace_in() string utility function - fix incorrect
+ use of str_replace() with str_replace_in()
+
+2004-02-20 14:03 descender
+
+ * beep/: dock.c, main.c, mainwin.c, mainwin.h, prefswin.c,
+ skinwin.c, skinwin.h:
+ - use 'cursor-changed' callback to detect user selection in skin
+ browser - GNOME HIGified mainwin titles - replaced ugly icon
+ setting code for mainwin with gtk_window_set_icon() - fixed
+ temporary string memory leak in skin_get_thumbnail() -
+ miscellaneous cleanups
+
+2004-02-19 22:16 descender
+
+ * beep/: dock.c, mainwin.c, playlist.c, playlist.h,
+ playlist_list.c, playlist_popup.c, playlistwin.c, widget.c,
+ widget.h:
+ - cleaned up playlistwin dialog code - use guint instead of
+ glong/gint for track index parameters of playlist functions -
+ miscellaneous cleanups
+
+2004-02-19 06:38 quirk_fr
+
+ * po/fr.po: New translations
+
+2004-02-18 21:44 descender
+
+ * beep/playlistwin.c:
+ - forgot to remove g_message() debug messages (displayed when
+ playlistwin is resized)
+
+2004-02-18 21:41 descender
+
+ * beep/: controlsocket.c, main.c, mainwin.c, playlist.c,
+ playlistwin.c, playlistwin.h, prefswin.c, util.c, widget.h:
+ - don't recreate playlistwin on window decoration toggle -
+ cleanups
+
+2004-02-18 12:36 descender
+
+ * beep/widget.c:
+ - minor cleanups
+
+2004-02-11 02:33 descender
+
+ * po/: bmp.pot, cy.po, fr.po, ja.po, lt.po, zh_CN.po:
+ - synced po/pot files with code
+
+2004-02-11 02:32 descender
+
+ * Input/: mpg123/fileinfo.c, vorbis/fileinfo.c, vorbis/vorbis.c:
+ - fixed missing translations in mpg123 file info dialog - renamed
+ 'Bitrate' to 'Bit rate', 'Samplerate' to 'Sample rate' and
+ replaced 'n/a' with 'N/A'
+
+2004-02-10 06:36 descender
+
+ * po/zh_CN.po:
+ - updated Simplified Chinese translation
+
+2004-02-10 00:02 descender
+
+ * po/zh_CN.po:
+ - updated Simplified Chinese translation (merged with XMMS
+ 1.2.9's version)
+
+2004-02-09 02:23 descender
+
+ * scripts/cvs2cl.pl:
+ - upgrade cvs2cl script to 2.52
+
+2004-02-05 12:31 descender
+
+ * beep/: mainwin.c, playlistwin.c, skin.c, skin.h:
+ - fixed playlist editor shademode drawing bug
+
+2004-02-05 02:25 descender
+
+ * beep/: dock.c, equalizer.c, equalizer.h, main.c, mainwin.c,
+ mainwin.h, playlist.c, playlist_list.c, playlistwin.c, skinwin.c,
+ util.c, util.h:
+ - re-engaged segfault handler by default to print error message,
+ but abort() instead of exit() - removed
+ gdk_window_set_icon_name() calls - renamed equalizer and playlist
+ editor window titles to conform to HIG - added str_replace()
+ convenience function - replaced gtk_widget_set_usize() calls with
+ gtk_window_set_default_size() where possible - miscellaneous
+ minor cleanups
+
+2004-02-04 07:34 larne
+
+ * po/cy.po: - cy fixes [merge from newplug]
+
+2004-02-04 07:29 larne
+
+ * po/cy.po (newplug): - cy fixes
+
+2004-02-04 05:02 descender
+
+ * beep/: dock.c, equalizer.c, hints.c, playlistwin.c, skin.c,
+ widget.c:
+ - replaced ugly XMMS playlist window resize hack with
+ gtk_window_begin_resize_drag() - added
+ gtk_window_skip_pager_hint() for equalizer and playlist window -
+ changed playlist window title to "bmp: Playlist Editor" for
+ consistency sake - miscellaneous cleanups
+
+2004-02-04 02:10 larne
+
+ * beep/prefswin.c (newplug): - fix cau/gosod which disappeared from
+ prefswin due to bad merging
+
+2004-02-04 01:13 larne
+
+ * beep/mainwin.c (newplug): - 'details' -> 'Details' [merge from
+ HEAD]
+
+2004-02-04 01:11 larne
+
+ * beep/mainwin.c: - "details" -> "Details"
+
+2004-02-04 00:40 larne
+
+ * po/: LINGUAS, cy.po: - commit cy translation [merge from
+ newplug]
+
+2004-02-02 22:21 larne
+
+ * po/cy.po (newplug): - more cy messages
+
+2004-02-02 16:26 larne
+
+ * po/cy.po (newplug): - more cy messages
+
+2004-02-02 00:21 larne
+
+ * libbeep/titlestring.c, libbeep/titlestring.h, beep/debug.h,
+ beep/dirbrowser.c, beep/eq_graph.c, beep/eq_graph.h,
+ beep/eq_slider.c, beep/eq_slider.h, beep/hslider.c,
+ beep/hslider.h, beep/iir.c, beep/main.c, beep/mainwin.c,
+ beep/mainwin.h, beep/menurow.c, beep/menurow.h,
+ beep/monostereo.c, beep/monostereo.h, beep/number.c,
+ beep/number.h, beep/pbutton.c, beep/pbutton.h,
+ beep/playlist_list.c, beep/playlist_list.h,
+ beep/playlist_slider.c, beep/playlist_slider.h,
+ beep/playlistwin.c, beep/playstatus.c, beep/playstatus.h,
+ beep/pluginenum.c, beep/prefswin.c, beep/sbutton.c,
+ beep/sbutton.h, beep/skin.c, beep/skin.h, beep/skinwin.c,
+ beep/svis.c, beep/svis.h, beep/tbutton.c, beep/tbutton.h,
+ beep/textbox.c, beep/textbox.h, beep/util.c, beep/util.h,
+ beep/vis.c, beep/vis.h, beep/widget.c, beep/widget.h (newplug): -
+ merge with head
+
+2004-02-02 00:20 larne
+
+ * po/: LINGUAS, cy.po (newplug): - add cy locale
+
+2004-02-01 06:08 quirk_fr
+
+ * po/fr.po: Better translations and few typos
+
+2004-01-30 08:15 msikkes
+
+ * beep/: dirbrowser.c, mainwin.c: * mainwin.c: Added GTK_WINDOW()
+ on line 2338 which fixes comipler warning. * dirbrowser.c: GUI
+ cleanups to make it more HIG.
+
+2004-01-30 03:00 descender
+
+ * beep/: equalizer.c, mainwin.c, playlist.c, playlist_list.c,
+ playlistwin.c, skin.c, textbox.c, textbox.h, util.c, widget.c:
+ - fixed mainwin focus draw when titlebar is clicked - fixed
+ memory leak in textbox_set_xfont() - replaced gdk_image_get()
+ calls with gdk_drawable_get_image() - replaced deprecated
+ gtk_widget_set_usize() calls with appropriate calls - make
+ mainwin, equalizerwin and playlistwin focus in/out callbacks
+ return TRUE - UTF-8 fixes for TextBox widget - fixed invalid
+ memory reference to mainwin_jtf in mainwin_update_jtf() after
+ getting destroyed - fixed constant string free in textbox_free()
+ - minor cleanups
+
+2004-01-29 22:25 mderezynski
+
+ * beep/mainwin.c, beep/mainwin.h, beep/playlist_list.c,
+ beep/playlistwin.c, beep/util.c, po/bmp.pot, po/fr.po, po/ja.po,
+ po/lt.po, po/zh_CN.po:
+
+ all *.c files: keybinding/accessibility fixes
+
+2004-01-29 19:24 descender
+
+ * beep/: playlistwin.c, playlistwin.h:
+ - fixed playlist window resizing bug
+
+2004-01-29 05:20 descender
+
+ * configure.in:
+ - fixed post-configuration option dump text alignment
+
+2004-01-29 05:14 masterpe
+
+ * TODO: TODO: - Added: "- Removal of all remaining GtkCList's to
+ 0.9.8"
+
+2004-01-29 04:33 descender
+
+ * configure.in:
+ - changed version to 0.9.7 - removed ALL_LINGUAS
+
+2004-01-29 04:32 descender
+
+ * AUTHORS, beep.m4, beep.spec.in, configure.in:
+ - tabs to spaces
+
+2004-01-29 03:59 masterpe
+
+ * TODO:
+ ----------------------------------------------------------------------
+
+ * Law: -Added the new TODO
+
+ Modified Files: TODO
+
+ ----------------------------------------------------------------------
+
+2004-01-26 20:06 mderezynski
+
+ * libbeep/titlestring.c:
+
+ titlestring.c: removed g_message()'s
+
+2004-01-26 17:07 mderezynski
+
+ * beep/playlist_list.c, beep/util.c, libbeep/titlestring.c:
+
+ libbeep/titlestring.c: beep/util.c: beep/playlist_list.c:
+ fixed problems with displayed titles beep/mainwin.h: added macros
+ MAINWIN_LOCK() / MAINWIN_UNLOCK(), but removed again
+
+2004-01-26 16:16 mderezynski
+
+ * beep/: mainwin.c, skin.c, skinwin.c, vis.c:
+
+ mainwin.c: setup vis at mainiwin setup mainwin.h: (reverted
+ changes) skin.c: (reverted changes) skinwin.c: (reverted) vis.c:
+ (reverted)
+
+2004-01-26 05:46 mderezynski
+
+ * libbeep/: titlestring.c, titlestring.h:
+
+ titlestring.c, titlestring.h: various fixes (patch by Tim
+ Mueller)
+
+2004-01-26 05:45 mderezynski
+
+ * beep/: pluginenum.c, vis.c:
+
+ vis.c: preliminary fix for crash with vis pluginenum.c: (?)
+
+2004-01-25 08:59 mderezynski
+
+ * beep/: dirbrowser.c, playlist_list.c, prefswin.c, skinwin.c:
+
+ dirbrowser.c: editable set insensitive at adding files to prevent
+ race condition prefswin.c: ui cleanups skinwin.c: fixed list
+ stopping at currently selected skin playlist_list.c: fixed
+ variable's 'text" in-memory length modification
+
+2004-01-23 12:08 descender
+
+ * beep/: textbox.h, menurow.h, monostereo.h, number.h,
+ playlist_list.h:
+ - cleanups
+
+2004-01-23 11:15 descender
+
+ * beep/: monostereo.c, monostereo.h, svis.c, svis.h:
+ - cleanups
+
+2004-01-23 09:21 descender
+
+ * beep/: eq_graph.c, eq_graph.h, eq_slider.c, eq_slider.h,
+ hslider.c, hslider.h, menurow.c, menurow.h, number.c, number.h,
+ pbutton.c, pbutton.h, sbutton.c, sbutton.h, playlist_list.c,
+ playlist_list.h, playlist_slider.c, playlist_slider.h,
+ playstatus.c, playstatus.h, tbutton.c, tbutton.h, textbox.c,
+ textbox.h, vis.c, vis.h, widget.c, widget.h:
+ - cleanup
+
+2004-01-23 06:49 quirk_fr
+
+ * po/fr.po: Remove fuzzy translations and change some bad
+ translations
+
+2004-01-23 05:05 descender
+
+ * libbeep/titlestring.c:
+ - fixed wrong allocation count in bmp_title_input_new() (Thanks
+ to Tim Muller)
+
+2004-01-23 05:02 descender
+
+ * beep/main.c:
+ - disabled segfault handler by default (pass -DHANDLE_SIGSEGV to
+ enable)
+
+2004-01-21 22:18 mderezynski
+
+ * beep/pbutton.c:
+
+ skinwin.c: (touched) pbutton.c: set default state of buttons to
+ not-pressed and not-inside (wasn't set at all before), patch by
+ Honza Matejek (<spektrum at click.cz>)
+
+2004-01-21 21:20 mderezynski
+
+ * beep/: main.c, skinwin.c:
+
+ skinwin.c: Fixed problem with skin list stopping after currently
+ used skin main.c:
+
+2004-01-21 17:21 descender
+
+ * beep/debug.h:
+ - missing definition of REQUIRE_STATIC_LOCK when NDEBUG is not
+ defined - use G_STRLOC instead of __FILE__ and __LINE__
+
+2004-01-21 17:16 descender
+
+ * beep/: mainwin.c, mainwin.h, playlistwin.c, skin.c, skin.h:
+ - made local functions in mainwin.c static - moved mainwin
+ titlebar drawing code from mainwin.c into skin.c - don't dim
+ titlebar now works again with playlistwin - mainwin keypress
+ handler now returns TRUE for handled keys
+
+2004-01-21 12:06 descender
+
+ * beep/: prefswin.c, util.c, util.h:
+ - moved out prefswin notebook pages creation into separate
+ functions
+
+2004-01-21 06:47 descender
+
+ * beep/prefswin.c:
+ - fixed illegal memory access with 'titles' array in
+ create_prefs_window()
+
+2004-01-20 21:35 larne
+
+ * scripts/: gen-auto-scripts.sh, genesis.sh (newplug): - merge with
+ head
+
+2004-01-20 21:34 larne
+
+ * libbeep/: beepctrl.c, beepctrl.h, configfile.c, configfile.h,
+ dirbrowser.c, dirbrowser.h, formatter.c, formatter.h,
+ titlestring.c, titlestring.h, util.c, util.h, xconvert.h,
+ xentry.c, xentry.h (newplug): merge with head
+
+2004-01-20 21:31 larne
+
+ * Input/cdaudio/cddb.c, Input/cdaudio/configure.c,
+ Input/mpg123/common.c, Input/mpg123/configure.c,
+ Input/mpg123/dct64.c, Input/mpg123/dct64_i386.c,
+ Input/mpg123/decode.c, Input/mpg123/decode_2to1.c,
+ Input/mpg123/decode_4to1.c, Input/mpg123/decode_i386.c,
+ Input/mpg123/dxhead.c, Input/mpg123/dxhead.h,
+ Input/mpg123/equalizer.c, Input/mpg123/fileinfo.c,
+ Input/mpg123/getbits.c, Input/mpg123/http.c, Input/mpg123/id3.c,
+ Input/mpg123/id3.h, Input/mpg123/id3_frame.c,
+ Input/mpg123/id3_frame_content.c, Input/mpg123/id3_frame_text.c,
+ Input/mpg123/id3_frame_url.c, Input/mpg123/id3_header.h,
+ Input/mpg123/id3_tag.c, Input/mpg123/layer1.c,
+ Input/mpg123/layer2.c, Input/mpg123/layer3.c,
+ Input/mpg123/mpg123.c, Input/mpg123/mpg123.h,
+ Input/mpg123/tabinit.c, Input/vorbis/configure.c,
+ Input/vorbis/fileinfo.c, Input/vorbis/glibconfig.h,
+ Input/vorbis/http.c, Input/vorbis/http.h, Input/vorbis/vcedit.c,
+ Input/vorbis/vcedit.h, Input/vorbis/vorbis.c,
+ Input/vorbis/vorbis.h, Input/wav/wav.c, Output/OSS/OSS.c,
+ Output/OSS/about.c, Output/OSS/configure.c, Output/OSS/convert.c,
+ Output/OSS/init.c, Output/OSS/mixer.c, Output/OSS/soundcard.h,
+ Output/alsa/about.c, Output/alsa/alsa.c, Output/alsa/configure.c,
+ Output/alsa/init.c, Output/esd/about.c, Output/esd/configure.c,
+ Output/esd/esd.c, Output/esd/init.c, Output/esd/mixer.c,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/config.c (newplug): - merge with head
+
+2004-01-20 21:27 larne
+
+ * po/LINGUAS, po/POTFILES.in, po/bmp.pot, po/fr.po, po/ja.po,
+ po/lt.po, po/zh_CN.po, beep/Makefile.am, beep/about.c,
+ beep/beep.desktop.in, beep/bmp.c, beep/bmp.h,
+ beep/controlsocket.c, beep/dirbrowser.c, beep/dock.c,
+ beep/dock.h, beep/effect.c, beep/eq_graph.c, beep/eq_graph.h,
+ beep/eq_slider.c, beep/eq_slider.h, beep/equalizer.c, beep/fft.c,
+ beep/fft.h, beep/fullscreen.c, beep/general.c, beep/getopt.c,
+ beep/getopt.h, beep/getopt1.c, beep/hints.c, beep/hslider.c,
+ beep/hslider.h, beep/info.h, beep/input.c, beep/input.h,
+ beep/jump_to.h, beep/logger.c, beep/logger.h, beep/main.c,
+ beep/main.h, beep/mainwin.c, beep/mainwin.h, beep/menurow.c,
+ beep/menurow.h, beep/mkdtemp.c, beep/monostereo.c,
+ beep/monostereo.h, beep/number.c, beep/number.h, beep/output.c,
+ beep/pbutton.c, beep/pbutton.h, beep/pixmaps.h, beep/playback.c,
+ beep/playlist.c, beep/playlist.h, beep/playlist_list.c,
+ beep/playlist_list.h, beep/playlist_popup.c,
+ beep/playlist_popup.h, beep/playlist_slider.c,
+ beep/playlistwin.c, beep/playlistwin.h, beep/playstatus.c,
+ beep/playstatus.h, beep/plugin.h, beep/pluginenum.c,
+ beep/prefswin.c, beep/sbutton.c, beep/sbutton.h, beep/skin.c,
+ beep/skin.h, beep/skinwin.c, beep/skinwin.h, beep/sm.c,
+ beep/sm.h, beep/softvolume.c, beep/softvolume.h, beep/svis.c,
+ beep/svis.h, beep/tbutton.c, beep/tbutton.h, beep/textbox.c,
+ beep/textbox.h, beep/urldecode.c, beep/util.c, beep/util.h,
+ beep/vis.c, beep/vis.h, beep/visualization.c, beep/widget.c,
+ beep/xml_document.c (newplug): - merge with head
+
+2004-01-20 17:34 tag cvs-20040120-01-HEAD
+
+2004-01-20 17:34 mderezynski
+
+ * beep/main.c (tags: cvs-20040120-01-HEAD):
+
+ main.c: fixed problem in make_directory() (check for return value
+ of mkdir() instead of errno)
+
+2004-01-20 07:25 descender
+
+ * po/: POTFILES.in, bmp.pot, fr.po, ja.po, lt.po, zh_CN.po (utags:
+ cvs-20040120-01-HEAD):
+ - synced po/pot files with code - removed bmp.c and added
+ logger.c to POTFILES.in
+
+2004-01-20 07:22 descender
+
+ * Input/cdaudio/cddb.c, Input/cdaudio/configure.c,
+ Input/mpg123/configure.c, Input/mpg123/fileinfo.c,
+ libbeep/configfile.c, Input/vorbis/configure.c,
+ Input/vorbis/fileinfo.c, Input/wav/wav.c, Output/OSS/configure.c,
+ Output/alsa/configure.c, Visualization/blur_scope/config.c
+ (utags: cvs-20040120-01-HEAD):
+ - replaced gtk_window_set_policy() calls with
+ gtk_window_set_resizable() - removed G_LOG_DOMAIN #defines
+
+2004-01-20 06:54 descender
+
+ * Output/esd/configure.c (tags: cvs-20040120-01-HEAD):
+ - flipped 'Apply' and 'Close' button order in ESD plugin
+ configuration widnow
+
+2004-01-20 06:50 descender
+
+ * Output/esd/: about.c (tags: cvs-20040120-01-HEAD), configure.c,
+ esd.c (tags: cvs-20040120-01-HEAD), init.c (tags:
+ cvs-20040120-01-HEAD), mixer.c (tags: cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-20 06:49 descender
+
+ * Output/alsa/configure.c:
+ - flipped 'Apply' and 'Close' button order in ALSA output
+ configuration window
+
+2004-01-20 06:34 descender
+
+ * Output/alsa/: about.c (tags: cvs-20040120-01-HEAD), alsa.c (tags:
+ cvs-20040120-01-HEAD), configure.c, init.c (tags:
+ cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-20 06:33 descender
+
+ * Output/OSS/configure.c:
+ - flipped 'Apply' and 'Close' button order in configuration
+ window (OSS plugin)
+
+2004-01-20 06:29 descender
+
+ * Output/OSS/: about.c (tags: cvs-20040120-01-HEAD), OSS.c (tags:
+ cvs-20040120-01-HEAD), configure.c, convert.c (tags:
+ cvs-20040120-01-HEAD), init.c (tags: cvs-20040120-01-HEAD),
+ mixer.c (tags: cvs-20040120-01-HEAD), soundcard.h (tags:
+ cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-20 06:26 descender
+
+ * Visualization/blur_scope/: blur_scope.c (tags:
+ cvs-20040120-01-HEAD), config.c:
+ - flipped 'Ok' and 'Cancel' button order (blur_scope plugin) -
+ renamed color selection dialog title to "Blur Scope: Color
+ selection" (blur_scope plugin) - renamed visualization window
+ title to "Blur Scope" (blur_scope plugin)
+
+2004-01-20 06:22 descender
+
+ * Visualization/blur_scope/: blur_scope.c, config.c:
+ - indent -kr -nut
+
+2004-01-20 06:09 descender
+
+ * beep/prefswin.c (tags: cvs-20040120-01-HEAD):
+ - marked font tab labels translatable - fixed memory leak in
+ prefswin_font_browse_callback() involving (redundant) UTF-8
+ conversion of preview text - flipped 'Apply' and 'Close' button
+ order
+
+2004-01-20 05:40 descender
+
+ * beep/: equalizer.c, input.c, playlist.c, pluginenum.c, skin.c,
+ xml_document.c (utags: cvs-20040120-01-HEAD):
+ - removed G_LOG_DOMAIN #defines so that logger can catch all log
+ messages - prepended G_STRLOC to log_messages
+
+2004-01-20 05:20 descender
+
+ * beep/: about.c (tags: cvs-20040120-01-HEAD), dock.c (tags:
+ cvs-20040120-01-HEAD), equalizer.c, hints.c (tags:
+ cvs-20040120-01-HEAD), mainwin.c (tags: cvs-20040120-01-HEAD),
+ playlist_slider.c (tags: cvs-20040120-01-HEAD):
+ - cleanups - corrected usage of g_list_append() when adding
+ widgets to dock_window_list
+
+2004-01-20 03:01 descender
+
+ * beep/playlistwin.c (tags: cvs-20040120-01-HEAD):
+ - playlistwin accelerators now work again - minor cleanups
+
+2004-01-20 02:25 descender
+
+ * beep/playlist.c:
+ - make playlist_get_info thread lock before reading status flag
+
+2004-01-20 02:21 descender
+
+ * beep/: playlist_list.c (tags: cvs-20040120-01-HEAD), prefswin.c,
+ output.c (tags: cvs-20040120-01-HEAD), pbutton.c (tags:
+ cvs-20040120-01-HEAD), pbutton.h (tags: cvs-20040120-01-HEAD),
+ playlist.h (tags: cvs-20040120-01-HEAD), skinwin.c (tags:
+ cvs-20040120-01-HEAD), util.c (tags: cvs-20040120-01-HEAD):
+ - minor cleanups - replaced gtk_window_set_policy() calls with
+ gtk_window_set_resizable() - made preferences window resizable -
+ removed #define G_LOG_DOMAIN __FILE__
+
+2004-01-20 02:14 descender
+
+ * beep/: visualization.c, widget.c (utags: cvs-20040120-01-HEAD):
+ - minor cleanups
+
+2004-01-20 02:07 descender
+
+ * beep/input.c:
+ - replace gtk_window_set_policy() with gtk_window_set_resizable()
+
+2004-01-20 01:59 descender
+
+ * beep/controlsocket.c (tags: cvs-20040120-01-HEAD):
+ - control socket file descriptor is now properly set back to 0
+ when BMP is unable to open socket
+
+2004-01-20 01:56 descender
+
+ * beep/Makefile.am (tags: cvs-20040120-01-HEAD):
+ - removed bmp.c bmp.h from Makefile
+
+2004-01-20 01:55 descender
+
+ * beep/util.h (tags: cvs-20040120-01-HEAD):
+ - added in argument names for function prototypes without them
+
+2004-01-20 01:53 descender
+
+ * beep/: bmp.c, bmp.h, skin.c:
+ - skin loader now uses gdk_pixbuf to load pixmaps
+
+2004-01-20 01:50 descender
+
+ * beep/: logger.c (tags: cvs-20040120-01-HEAD), main.c:
+ - logger now flushes after every line printed - BMP no longer
+ aborts if logger is unabled to open log file - fixed
+ unable-to-open-log-file error with users without ~/.bmp yet - BMP
+ now prints error messages if it cannot create its user
+ directories
+
+2004-01-19 03:13 descender
+
+ * beep/: bmp.c, effect.c (tags: cvs-20040120-01-HEAD), eq_graph.c
+ (tags: cvs-20040120-01-HEAD), eq_graph.h (tags:
+ cvs-20040120-01-HEAD), eq_slider.c (tags: cvs-20040120-01-HEAD),
+ eq_slider.h (tags: cvs-20040120-01-HEAD), fft.c (tags:
+ cvs-20040120-01-HEAD), fft.h (tags: cvs-20040120-01-HEAD),
+ fullscreen.c (tags: cvs-20040120-01-HEAD), general.c (tags:
+ cvs-20040120-01-HEAD), getopt.c (tags: cvs-20040120-01-HEAD),
+ getopt.h (tags: cvs-20040120-01-HEAD), getopt1.c (tags:
+ cvs-20040120-01-HEAD), hints.c, hslider.c (tags:
+ cvs-20040120-01-HEAD), hslider.h (tags: cvs-20040120-01-HEAD),
+ info.h (tags: cvs-20040120-01-HEAD), jump_to.h (tags:
+ cvs-20040120-01-HEAD), main.h (tags: cvs-20040120-01-HEAD),
+ menurow.c (tags: cvs-20040120-01-HEAD), menurow.h (tags:
+ cvs-20040120-01-HEAD), mkdtemp.c (tags: cvs-20040120-01-HEAD),
+ monostereo.c (tags: cvs-20040120-01-HEAD), monostereo.h (tags:
+ cvs-20040120-01-HEAD), number.c (tags: cvs-20040120-01-HEAD),
+ number.h (tags: cvs-20040120-01-HEAD), output.c, pbutton.c,
+ pbutton.h, pixmaps.h (tags: cvs-20040120-01-HEAD), playback.c
+ (tags: cvs-20040120-01-HEAD), playstatus.c (tags:
+ cvs-20040120-01-HEAD), playstatus.h (tags: cvs-20040120-01-HEAD),
+ sbutton.c (tags: cvs-20040120-01-HEAD), sbutton.h (tags:
+ cvs-20040120-01-HEAD), sm.c (tags: cvs-20040120-01-HEAD), sm.h
+ (tags: cvs-20040120-01-HEAD), softvolume.c (tags:
+ cvs-20040120-01-HEAD), softvolume.h (tags: cvs-20040120-01-HEAD),
+ svis.c (tags: cvs-20040120-01-HEAD), svis.h (tags:
+ cvs-20040120-01-HEAD), tbutton.c (tags: cvs-20040120-01-HEAD),
+ tbutton.h (tags: cvs-20040120-01-HEAD), textbox.c (tags:
+ cvs-20040120-01-HEAD), textbox.h (tags: cvs-20040120-01-HEAD),
+ urldecode.c (tags: cvs-20040120-01-HEAD), util.h, vis.c (tags:
+ cvs-20040120-01-HEAD), vis.h (tags: cvs-20040120-01-HEAD),
+ visualization.c, widget.c: - indent -kr -nut
+
+2004-01-19 01:05 descender
+
+ * beep/main.c, po/LINGUAS (tags: cvs-20040120-01-HEAD), po/bmp.pot,
+ po/fr.po, po/ja.po, po/lt.po, po/zh_CN.po:
+ - added missing '%s' in translated C format string in Japanese
+ translation (ja.po) - added Japanese to LINGUAS - added missing
+ space in SIGSEGV error message (main.c) - re-synced po/pot files
+ with code
+
+2004-01-19 00:47 descender
+
+ * beep/main.h:
+ - added BMP_LOG_BASENAME and bmp_log_filename declaration into
+ main.h
+
+2004-01-19 00:31 descender
+
+ * po/ja.po:
+ - added Japanese translation by Takeshi Aihana
+
+2004-01-19 00:27 descender
+
+ * beep/main.c:
+ - print usage help screen to stdout instead of stderr
+
+2004-01-18 23:27 descender
+
+ * beep/: main.c, Makefile.am, logger.c, logger.h (tags:
+ cvs-20040120-01-HEAD):
+ - added logging functions
+
+2004-01-18 03:59 msikkes
+
+ * beep/mainwin.c: Changed Play CD keybinding to alt + c.
+
+2004-01-18 02:54 descender
+
+ * beep/: main.c, mainwin.h (tags: cvs-20040120-01-HEAD),
+ playlistwin.h (tags: cvs-20040120-01-HEAD):
+ - removed XInitThreads() call - rearranged UI creation calls in
+ main() - added custom log handler (does nothing right now
+ however) - added MAINWIN_DEFAULT_FONT and
+ PLAYLISTWIN_DEFAULT_FONT to store default font name strings
+
+2004-01-18 02:46 descender
+
+ * beep/mainwin.c:
+ - indent -kr -nut
+
+2004-01-18 00:56 msikkes
+
+ * beep/beep.desktop.in (tags: cvs-20040120-01-HEAD): Renamed to
+ Beep Media Player.
+
+2004-01-17 23:46 msikkes
+
+ * beep/beep.desktop.in: Changed name to 'BMP' and comment to 'Play
+ music'
+
+2004-01-17 23:34 descender
+
+ * Input/mpg123/mpg123.c (tags: cvs-20040120-01-HEAD):
+ - fixed memory leak in mpg123_format_song_title() (mpg123 plugin)
+
+2004-01-17 22:21 descender
+
+ * beep/: skin.c, skinwin.c:
+ - fixed temporary string memory leaks in update_skinlist() and
+ skinwin.c:add_skin() - remove extra call to create_skin_window()
+ in init_skins() (called in main())
+
+2004-01-17 18:25 descender
+
+ * libbeep/: beepctrl.c, beepctrl.h (utags: cvs-20040120-01-HEAD):
+ - complete glibification - minor formatting cleanups
+
+2004-01-17 18:06 descender
+
+ * libbeep/: beepctrl.c, beepctrl.h, configfile.c, configfile.h
+ (tags: cvs-20040120-01-HEAD), dirbrowser.c (tags:
+ cvs-20040120-01-HEAD), dirbrowser.h (tags: cvs-20040120-01-HEAD),
+ formatter.c (tags: cvs-20040120-01-HEAD), formatter.h (tags:
+ cvs-20040120-01-HEAD), titlestring.c (tags:
+ cvs-20040120-01-HEAD), titlestring.h (tags:
+ cvs-20040120-01-HEAD), util.c (tags: cvs-20040120-01-HEAD),
+ util.h (tags: cvs-20040120-01-HEAD), xconvert.h (tags:
+ cvs-20040120-01-HEAD), xentry.c (tags: cvs-20040120-01-HEAD),
+ xentry.h (tags: cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-17 17:36 descender
+
+ * beep/: input.c, pluginenum.c:
CVS:
+ ----------------------------------------------------------------------
+ CVS: Enter Log. Lines beginning with `CVS:' are removed
+ automatically
CVS:
CVS: Committing in .
CVS:
CVS: Modified
+ Files:
CVS: input.c pluginenum.c
CVS:
+ ----------------------------------------------------------------------
+ - UTF-8 fixes, use filename_to_utf8() instead of
+ g_locale_to_utf8() for filename displays
- minor cleanups
+
+2004-01-17 17:00 descender
+
+ * beep/plugin.h (tags: cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-17 07:04 descender
+
+ * scripts/: gen-auto-scripts.sh, genesis.sh (utags:
+ cvs-20040120-01-HEAD):
+ - replaced use of pushd/popd with temporary variables
+
+2004-01-17 06:54 descender
+
+ * Input/vorbis/: fileinfo.c, http.c (tags: cvs-20040120-01-HEAD),
+ vorbis.c (tags: cvs-20040120-01-HEAD):
+ - fixed gcc 2.95/6 compilation errors
+
+2004-01-17 06:47 descender
+
+ * Input/vorbis/: configure.c, fileinfo.c, glibconfig.h (tags:
+ cvs-20040120-01-HEAD), http.c, http.h (tags:
+ cvs-20040120-01-HEAD), vcedit.c (tags: cvs-20040120-01-HEAD),
+ vcedit.h (tags: cvs-20040120-01-HEAD), vorbis.h (tags:
+ cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-17 06:08 mderezynski
+
+ * beep/dirbrowser.c (tags: cvs-20040120-01-HEAD):
+
+ Fixed problems in bmp_fb_dirtree_enqueue() (uninitialized
+ variable 'path')
+
+2004-01-17 06:08 descender
+
+ * Input/mpg123/: fileinfo.c, mpg123.c:
+ - fixed gcc 2.95/6 compilation errors
+
+2004-01-17 05:53 descender
+
+ * beep/hints.c:
+ - fixed 'ulong' compilation error
+
+2004-01-17 05:16 descender
+
+ * Input/mpg123/: common.c (tags: cvs-20040120-01-HEAD),
+ configure.c, dct64.c (tags: cvs-20040120-01-HEAD), dct64_i386.c
+ (tags: cvs-20040120-01-HEAD), decode.c (tags:
+ cvs-20040120-01-HEAD), decode_2to1.c (tags:
+ cvs-20040120-01-HEAD), decode_4to1.c (tags:
+ cvs-20040120-01-HEAD), decode_i386.c (tags:
+ cvs-20040120-01-HEAD), dxhead.c (tags: cvs-20040120-01-HEAD),
+ dxhead.h (tags: cvs-20040120-01-HEAD), equalizer.c (tags:
+ cvs-20040120-01-HEAD), fileinfo.c, getbits.c (tags:
+ cvs-20040120-01-HEAD), http.c (tags: cvs-20040120-01-HEAD), id3.c
+ (tags: cvs-20040120-01-HEAD), id3.h (tags: cvs-20040120-01-HEAD),
+ id3_frame.c (tags: cvs-20040120-01-HEAD), id3_frame_content.c
+ (tags: cvs-20040120-01-HEAD), id3_frame_text.c (tags:
+ cvs-20040120-01-HEAD), id3_frame_url.c (tags:
+ cvs-20040120-01-HEAD), id3_header.h (tags: cvs-20040120-01-HEAD),
+ id3_tag.c (tags: cvs-20040120-01-HEAD), layer1.c (tags:
+ cvs-20040120-01-HEAD), layer2.c (tags: cvs-20040120-01-HEAD),
+ layer3.c (tags: cvs-20040120-01-HEAD), mpg123.c, mpg123.h (tags:
+ cvs-20040120-01-HEAD), tabinit.c (tags: cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-17 04:56 descender
+
+ * beep/: input.c, input.h (tags: cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-17 03:21 descender
+
+ * beep/: main.c, skinwin.c, skinwin.h (tags: cvs-20040120-01-HEAD):
+
+ - fixed gcc 2.95/6 compiler errors - cleanups
+
+2004-01-17 02:29 descender
+
+ * beep/: controlsocket.c, input.c, input.h, playlist.c,
+ playlist_list.c, pluginenum.c, skinwin.c, util.c:
+ - fixed warnings with bmp_playback_* functions being implicitly
+ declared - put declaration of input_file_not_playable() into
+ input.h - make input_info_text in input.h extern - change
+ 'selection' to GtkTreeSelection type in create_skin_window()
+
+2004-01-17 02:02 descender
+
+ * beep/: playlist.c, playlist.h, playlist_list.c, controlsocket.c,
+ dock.c, dock.h (tags: cvs-20040120-01-HEAD), equalizer.c,
+ playlist_list.h (tags: cvs-20040120-01-HEAD), playlist_popup.c
+ (tags: cvs-20040120-01-HEAD), playlist_popup.h (tags:
+ cvs-20040120-01-HEAD), playlistwin.c, pluginenum.c, prefswin.c,
+ skin.c, skin.h (tags: cvs-20040120-01-HEAD), skinwin.c:
+ - indent -kr -nut
+
+2004-01-17 00:42 larne
+
+ * beep/: dirbrowser.c, playlistwin.h (newplug): - merge with head
+
+2004-01-16 23:58 larne
+
+ * beep/: iir.c, main.c, main.h, prefswin.c (newplug): - added
+ option to not reread playlist metadata on config changes (hack:
+ need a proper solution for this) - Add optional second filtering
+ step from eq-xmms - really makes a noticable difference to
+ sound quality.
+
+2004-01-16 23:28 larne
+
+ * beep/iir.c (newplug): - added extra filter stage from eq-xmms.
+ this takes more cpu, but improves sounds quality. i'll
+ probably make this a configurable option.
+
+2004-01-16 21:55 mderezynski
+
+ * beep/dirbrowser.c:
+
+ added statusbar, UI changes WIP
+
+2004-01-16 11:49 larne
+
+ * beep/: mainwin.h, playlistwin.c: - fix compile error [merge
+ from newplug]
+
+2004-01-16 11:46 larne
+
+ * beep/: mainwin.h, playlistwin.c (newplug): - fix compile error
+ (missing defines and include)
+
+2004-01-16 11:26 larne
+
+ * Output/alsa/audio.c, beep/Makefile.am, beep/controlsocket.c,
+ beep/dirbrowser.c, beep/equalizer.h, beep/input.c, beep/input.h,
+ beep/main.c, beep/main.h, beep/mainwin.c, beep/output.c,
+ beep/playback.c, beep/playback.h, beep/playlist.c,
+ beep/playlist.h, beep/playlist_list.c, beep/playlist_slider.c,
+ beep/playlist_slider.h, beep/playlistwin.c, beep/playlistwin.h,
+ beep/pluginenum.c, beep/skinwin.c, beep/util.c,
+ beep/visualization.c, beep/widget.c, beep/widget.h,
+ libbeep/configfile.c, libbeep/configfile.h, m4/beep.m4,
+ po/bmp.pot, po/fr.po, po/lt.po, po/zh_CN.po,
+ scripts/gen-auto-scripts.sh (newplug): - merge with head.
+
+2004-01-16 08:34 descender
+
+ * m4/beep.m4:
+ - applied Artur Frysiak's bmp-m4quote patch to quote function
+ names in AC_DEFUN
+
+2004-01-16 05:55 descender
+
+ * libbeep/: configfile.c, configfile.h:
+ - tabs to spaces
+
+2004-01-16 05:29 descender
+
+ * beep/: main.c, equalizer.h (tags: cvs-20040120-01-HEAD), main.h,
+ playlistwin.h:
+ - cleanups
+
+2004-01-16 05:02 descender
+
+ * beep/widget.c:
+ - removed debug g_message() calls
+
+2004-01-16 04:04 descender
+
+ * scripts/gen-auto-scripts.sh:
+ - applied Artur Frysiak's bmp-autogen patch to use #!/bin/bash
+ instead of /bin/sh to specify the use of bash explicitly -
+ converted tabs to spaces
+
+2004-01-16 04:00 descender
+
+ * beep/: widget.c, widget.h (tags: cvs-20040120-01-HEAD):
+ - replaced widget list iteration loops with g_list_foreach -
+ converted tabs to spaces
+
+2004-01-16 03:52 mderezynski
+
+ * beep/: Makefile.am, controlsocket.c, dirbrowser.c, input.c,
+ input.h, mainwin.c, output.c, playback.c, playback.h (tags:
+ cvs-20040120-01-HEAD), playlist.c, playlist.h, playlist_list.c,
+ playlistwin.c, playlistwin.h, pluginenum.c, skinwin.c, util.c,
+ visualization.c:
+
+ test commit
+
+2004-01-15 22:29 descender
+
+ * beep/: widget.h, playlist_slider.c, playlist_slider.h (tags:
+ cvs-20040120-01-HEAD):
+ - indent -kr -nut
+
+2004-01-15 19:57 descender
+
+ * Output/alsa/audio.c (tags: cvs-20040120-01-HEAD):
+ - ALSA output plugin: fixed endian check preprocessor directives
+
+2004-01-15 19:14 larne
+
+ * beep/: output.c, playlistwin.c (newplug): - check size is
+ multiple of 2 in eq
+
+2004-01-15 19:02 larne
+
+ * beep/prefswin.c: - code cleanups - change 'xmms' to 'bmp'
+ [merge from newplug]
+
+2004-01-15 18:59 larne
+
+ * beep/prefswin.c (newplug): - indentation cleanups - change 'xmms'
+ to 'bmp' in tooltips
+
+2004-01-15 17:43 larne
+
+ * beep/prefswin.c: - fix 'pause between songs' and 'snap windows
+ at' options. [merge from newplug]
+
+2004-01-15 17:42 larne
+
+ * beep/prefswin.c (newplug): - fix 'pause between songs' and 'snap
+ windows at' to work properly. the problem is that the textarea
+ was being attached to the check button; this change only
+ attachs the initial text to the check, which has the slight
+ change the 'seconds' and 'pixels' won't be prelighted if your
+ GTK+ theme does prelighting. However, I'm not sure there's a
+ way to highlight all the text but not the textarea...
+
+2004-01-15 09:58 larne
+
+ * beep/output.c (newplug): - code cleanups
+
+2004-01-15 09:39 larne
+
+ * beep/output.c (newplug): - add code to byteswap audio data for eq
+ when not native endianness - not tested!
+
+2004-01-15 09:14 descender
+
+ * Output/alsa/audio.c:
+ - replaced endian checks with Glib macros
+
+2004-01-15 08:58 descender
+
+ * po/: bmp.pot, fr.po, lt.po, zh_CN.po:
+ - French translation update from David - updated po/pot files
+
+2004-01-15 08:15 tag merge-20040115-01
+
+2004-01-15 08:15 larne
+
+ * autogen.sh, beep-config.in, beep.pc.in, configure.in,
+ Input/vorbis/vorbis.c, Output/OSS/OSS.h, Output/OSS/audio.c,
+ Output/alsa/alsa.h, Output/esd/audio.c, beep/playlistwin.c,
+ libbeep/xconvert.c (newplug) (utags: merge-20040115-01): - merge
+ HEAD.
+
+2004-01-15 07:23 larne
+
+ * beep/prefswin.c: - typo: alphabetical -> alphabetically [merge
+ from newplug]
+
+2004-01-15 07:16 larne
+
+ * beep/prefswin.c (tags: merge-20040115-01) (newplug): -
+ alphabetical -> alphabetically
+
+2004-01-15 06:57 descender
+
+ * autogen.sh:
+ - autogen.sh for improved User Experience(TM)
+
+2004-01-15 06:43 descender
+
+ * configure.in, Input/vorbis/vorbis.c, Output/OSS/OSS.h (tags:
+ cvs-20040120-01-HEAD), Output/OSS/audio.c (tags:
+ cvs-20040120-01-HEAD), Output/alsa/alsa.h (tags:
+ cvs-20040120-01-HEAD), Output/esd/audio.c (tags:
+ cvs-20040120-01-HEAD), libbeep/xconvert.c (tags:
+ cvs-20040120-01-HEAD):
+ - applied Tim's patch to remove endian check in configure, and
+ get endianness from Glib macros - indent -kr -nut
+
+2004-01-15 06:34 descender
+
+ * beep-config.in, beep.pc.in:
+ - applied Artur's patch om beep-config/beep.pc to return
+ visualization and effect plugin directories
+
+2004-01-15 06:25 descender
+
+ * beep/playlistwin.c:
+ - fixed crash on keypress with shaded playlistwin in focus
+
+2004-01-15 06:15 larne
+
+ * beep/: about.c (tags: merge-20040115-01), debug.h (tags:
+ merge-20040115-01), hints.c (tags: merge-20040115-01), main.c
+ (tags: merge-20040115-01), mainwin.h (tags: merge-20040115-01),
+ playlist.c (tags: merge-20040115-01), playlist.h (tags:
+ merge-20040115-01), playlist_list.c (tags: merge-20040115-01),
+ playlistwin.c, playlistwin.h (tags: merge-20040115-01), skin.c
+ (tags: merge-20040115-01), skin.h (tags: merge-20040115-01)
+ (newplug): - merge with HEAD.
+
+2004-01-15 06:07 descender
+
+ * beep/playlistwin.c:
+ - partially fixed playlistwin resize draw error (still does not
+ prevent itself from being resized to min. allowed dimensions)
+
+2004-01-15 06:04 larne
+
+ * Input/cdaudio/cdaudio.c (tags: merge-20040115-01),
+ Input/mpg123/layer1.c (tags: merge-20040115-01),
+ Input/mpg123/layer2.c (tags: merge-20040115-01),
+ Input/mpg123/layer3.c (tags: merge-20040115-01),
+ Input/vorbis/vorbis.c, Input/wav/wav.c (tags: merge-20040115-01),
+ beep/output.c (tags: merge-20040115-01), beep/output.h (tags:
+ merge-20040115-01) (newplug): - hopefully a real fix for hanging
+ output bug.
+
+2004-01-15 05:29 larne
+
+ * beep/output.c, libbeep/titlestring.c (tags: merge-20040115-01)
+ (newplug): - titlestring changes: add %{n:...%} which shows ...
+ only if element %n is present in tag. - some temporary fix to
+ stop hanging input bug (needs to be done properly).
+
+2004-01-15 05:23 descender
+
+ * beep/about.c:
+ - indent -kr -put
+
+2004-01-15 05:20 descender
+
+ * beep/: main.c, playlist.c, playlist.h, playlist_list.c:
+ - converted playlist_mutex from GMutex back to GStaticMutex, and
+ named it to 'playlist'
+
+2004-01-15 05:09 descender
+
+ * beep/hints.c:
+ - set function pointers to NULL (wasn't set!!!!)
+
+2004-01-15 05:00 descender
+
+ * beep/: debug.h (tags: cvs-20040120-01-HEAD), mainwin.h,
+ playlistwin.c, playlistwin.h, skin.c, skin.h:
+ - added REQUIRE_STATIC_LOCK() for GStaticMutex locks - marked
+ start and end of debug.h macros with G_STMT_START and G_STMT_END
+ - shifted playlistwin frame drawing code from playlistwin.c to
+ skin.c - corrected playlistwin min. width and height/width snap
+ values
+
+2004-01-15 02:44 larne
+
+ * Input/cdaudio/cdaudio.c, Input/mpg123/layer1.c,
+ Input/mpg123/layer2.c, Input/mpg123/layer3.c,
+ Input/vorbis/vorbis.c, Input/wav/wav.c, beep/Makefile.am (tags:
+ merge-20040115-01), beep/equalizer.c (tags: merge-20040115-01),
+ beep/iir.c (tags: merge-20040115-01), beep/iir.h (tags:
+ merge-20040115-01), beep/main.c, beep/output.c, beep/output.h
+ (newplug): - start of new plugin 'pipe'. new function
+ produce_audio() is called from the input plugin, which calls
+ eq, output and (soon) effect plugins as needed. a nice side
+ effect is that eq now works for all input, not just mp3! - a
+ completely new eq, which is a slightly modified version of
+ Felipe Rivera's "eq-xmms" plugin.
+
+2004-01-15 01:03 descender
+
+ * beep/: playlistwin.c, playlistwin.h:
+ - moved size macros to playlistwin.h - indent -kr -nut
+
+2004-01-14 23:25 descender
+
+ * beep/: skin.c, skinwin.c (tags: merge-20040115-01), util.c (tags:
+ merge-20040115-01):
+ - fixed del_directory(), now uses dir_foreach() and properly
+ removes directories - skin temp directories are now properly
+ deleted - fixed temporary string memory leak in
+ skin_get_thumbnail() - indent -kr -nut
+
+2004-01-14 21:21 descender
+
+ * Input/: cdaudio/cdaudio.c (tags: cvs-20040120-01-HEAD),
+ wav/wav.c:
+ - pthread->GThread code conversion - added missing
+ g_thread_exit() call to CD audio plugin play loop - indent -kr
+ -nut
+
+2004-01-14 21:05 descender
+
+ * Input/cdaudio/: cdaudio.c, cdaudio.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), cddb.c (tags: merge-20040115-01), cdinfo.c
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), cdinfo.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), configure.c (tags:
+ merge-20040115-01), http.c (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ - indent -kr -nut
+
+2004-01-14 21:02 descender
+
+ * beep/: main.c, xml_document.c (tags: merge-20040115-01),
+ xml_document.h (tags: cvs-20040120-01-HEAD, merge-20040115-01):
+ - indent -kr -nut
+
+2004-01-14 20:03 mderezynski
+
+ * beep/dirbrowser.c (tags: merge-20040115-01):
+
+ compile warning cleanups
+
+2004-01-14 19:54 descender
+
+ * Input/cdaudio/: cdaudio.c, cddb.c:
+ - replaced pthread threads/mutexes with GThread
+
+2004-01-14 19:46 descender
+
+ * Input/mpg123/fileinfo.c (tags: merge-20040115-01):
+ - another oopsie: text_utf8 misspelled
+
+2004-01-14 19:05 descender
+
+ * beep/main.c:
+ - missing semicolon
+
+2004-01-14 18:51 descender
+
+ * configure.in:
+ - make configure script plugin options dump at the end more
+ informative
+
+2004-01-14 18:17 descender
+
+ * Input/mpg123/fileinfo.c, beep/Makefile.am, beep/fullscreen.c
+ (tags: merge-20040115-01), beep/main.c, beep/widget.c (tags:
+ merge-20040115-01), beep/widget.h (tags: merge-20040115-01):
+ - glibification (basic data types, pthread_mutex_t to gthread
+ mutexes) - marked mpg123 plugin fileinfo dialog tag fields as
+ translatable - fixed temporary string memory leak mpg123 plugin's
+ fileinfo.c:set_entry_tag() - more replacement of str(case()cmp)
+ prefix checks with g_str_has_prefix() and str_has_prefix_nocase()
+
+2004-01-14 17:53 descender
+
+ * Input/vorbis/fileinfo.c, beep/softvolume.c, beep/softvolume.h
+ (utags: merge-20040115-01):
+ - applied Tim Muller's patches to fix Input/vorbis/fileinfo.c
+ compiler warnings and cleanup softvolume.[ch]
+
+2004-01-14 11:41 coder_sku
+
+ * beep.spec.in (tags: merge-20040115-01), configure.in,
+ Input/mpg123/Makefile.am (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01): enabled the disabling of the mp3 plugin in
+ the build system and properly in the spec file
+
+2004-01-14 10:13 mderezynski
+
+ * .cvsignore (tags: merge-20040115-01):
+
+ added file
+
+2004-01-14 09:33 descender
+
+ * beep/: mainwin.c (tags: merge-20040115-01), playlist.c:
+ - mainwin scrolling text now displays converted strings properly
+
+2004-01-14 09:12 descender
+
+ * beep/: input.c (tags: merge-20040115-01), mainwin.c, playlist.c,
+ playlist_list.c, util.c:
+ - make '(invalid UTF-8)' (appended to failed UTF-8 string
+ conversions) translatable - fixed crash with invalid UTF-8 titles
+ in playlist - marked additional translatable strings in mainwin.c
+
+2004-01-14 08:43 descender
+
+ * beep/: dirbrowser.c, input.c, util.c, util.h (tags:
+ merge-20040115-01):
+ - added filename_to_utf8() - moved UTF-8 fallback conversion code
+ to str_to_utf8_fallback() - dirbrowser now shows non-UTF-8
+ strings
+
+2004-01-14 08:30 descender
+
+ * beep/util.c:
+ - fixed str_to_utf8()'s fallback conversion
+
+2004-01-14 08:28 coder_sku
+
+ * beep.spec.in: unpackaged files fix
+
+2004-01-14 07:48 descender
+
+ * Input/mpg123/mpg123.c (tags: merge-20040115-01),
+ beep/dirbrowser.c, beep/input.c, beep/main.c, beep/main.h (tags:
+ merge-20040115-01), beep/playlist.c, beep/playlist.h,
+ beep/pluginenum.c (tags: merge-20040115-01), beep/util.c,
+ libbeep/configfile.c (tags: merge-20040115-01),
+ libbeep/titlestring.c, libbeep/titlestring.h (tags:
+ merge-20040115-01), po/.cvsignore (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ - cleanups - added *.gmo and stamp.po to po/.cvsignore
+
+2004-01-14 06:28 descender
+
+ * beep/debug.h:
+ - added REQUIRE_STR_UTF8() macro to validate UTF-8 strings (and
+ complain if fails)
+
+2004-01-14 05:39 mderezynski
+
+ * Input/.cvsignore (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/cdaudio/.cvsignore (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/.cvsignore (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), Input/vorbis/.cvsignore
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/wav/.cvsignore (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Output/.cvsignore (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), Output/OSS/.cvsignore
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Output/alsa/.cvsignore (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Output/esd/.cvsignore (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Visualization/.cvsignore (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Visualization/blur_scope/.cvsignore (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/.cvsignore (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), icons/.cvsignore (tags:
+ merge-20040115-01), libbeep/.cvsignore (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), po/.cvsignore: new
+ files: po/.cvsignore beep/defskin/.cvsignore beep/.cvsignore
+ intl/.cvsignore Input/wav/.cvsignore Input/mpg123/.cvsignore
+ Input/vorbis/.cvsignore Input/.cvsignore Input/cdaudio/.cvsignore
+ icons/.cvsignore Output/OSS/.cvsignore Output/esd/.cvsignore
+ Output/alsa/.cvsignore Output/.cvsignore libbeep/.cvsignore
+ Visualization/blur_scope/.cvsignore Visualization/.cvsignore
+ .cvsignore
+
+2004-01-14 04:02 descender
+
+ * beep/: util.c, util.h:
+ - added str_to_utf8() for converting strings to UTF-8 with the
+ &0x80 fallback
+
+2004-01-14 02:36 mderezynski
+
+ * beep/: dirbrowser.c, dirbrowser.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), mainwin.c, playlistwin.c, plugin.h (tags:
+ merge-20040115-01), pluginenum.c:
+
+ dirbrowser.c, dirbrowser.h: fixes etc mainwin.c: accredit to
+ changes in dirbrowser.h plugin.h, pluginenum.h: removed/reverted
+ return_tag_value_by_name()
+
+2004-01-14 00:37 descender
+
+ * beep/: dirbrowser.c, dirbrowser.h:
+ - sanify dirbrowser.h - marked translatable strings, unmarked
+ menu item separators
+
+2004-01-13 23:57 mderezynski
+
+ * beep/: dirbrowser.c, dirbrowser.h:
+
+ dirbrowser.c, dirbrowser.h: fixed compile warnings
+
+2004-01-13 23:06 mderezynski
+
+ * Input/mpg123/configure.c (tags: merge-20040115-01),
+ Input/mpg123/fileinfo.c, Input/vorbis/configure.c (tags:
+ merge-20040115-01), Input/vorbis/fileinfo.c, beep/equalizer.c,
+ beep/input.c, beep/mainwin.c, beep/playlistwin.c,
+ beep/prefswin.c, beep/skinwin.c:
+
+ Updated window titles
+
+2004-01-13 22:53 mderezynski
+
+ * beep/: dirbrowser.c, dirbrowser.h:
+
+ dirbrowser.c, dirbrowser.h: re-added files after rewrite
+
+2004-01-13 22:52 mderezynski
+
+ * beep/: dirbrowser.c, dirbrowser.h: [no log message]
+
+2004-01-13 21:04 descender
+
+ * beep/equalizer.c, po/LINGUAS (tags: merge-20040115-01),
+ po/bmp.pot (tags: merge-20040115-01), po/fr.po (tags:
+ merge-20040115-01), po/lt.po (tags: merge-20040115-01),
+ po/zh_CN.po (tags: merge-20040115-01):
+ - stock-ize all stock-izable buttons - updated po/pot files
+ accordingly
+
+2004-01-13 20:37 descender
+
+ * beep/: main.c, mainwin.c, playlist.c, playlistwin.c, urldecode.c
+ (tags: merge-20040115-01), widget.h:
+ - fixed DND crash - renamed "5 Seconds" forward/backward menu
+ items to "5 seconds"
+
+2004-01-13 19:28 descender
+
+ * beep/: dirbrowser.c, equalizer.c, mainwin.c, playlistwin.c:
+ - restore old file browser for Add Files - unmarked menu item
+ separators as translatable
+
+2004-01-13 18:42 descender
+
+ * Visualization/blur_scope/config.c (tags: merge-20040115-01),
+ beep/mainwin.c, beep/playlistwin.c, libbeep/dirbrowser.c (tags:
+ merge-20040115-01), po/bmp.pot, po/fr.po, po/lt.po, po/zh_CN.po:
+ - playlist window popup menu now shows translations properly -
+ converted most of the remaining of "Ok/Cancel/Close/Apply..."
+ buttons to stock - updated po/pot files accordingly
+
+2004-01-13 05:36 descender
+
+ * beep/: equalizer.c, mainwin.c, playlistwin.c, util.c, util.h:
+ - readded item factory translations - renamed
+ util_menu_translate() to bmp_menu_translate()
+
+2004-01-13 05:05 descender
+
+ * beep/equalizer.c, beep/main.c, po/bmp.pot, po/fr.po, po/lt.po,
+ po/zh_CN.po:
+ - use stock buttons for equalizer configuration dialog and fixed
+ --help usage text, updated po/pot files accordingly - fixed
+ --help option text alignment - updated Simplified Chinese
+ translation
+
+2004-01-13 03:53 descender
+
+ * Input/vorbis/configure.c, po/bmp.pot, po/fr.po, po/lt.po,
+ po/zh_CN.po:
+ - unmarked GTK stock item name strings as translatable, updated
+ po/pot files accordingly
+
+2004-01-13 03:41 descender
+
+ * AUTHORS (tags: merge-20040115-01), configure.in, beep/input.c,
+ beep/prefswin.c, libbeep/titlestring.c, libbeep/titlestring.h,
+ po/LINGUAS, po/bmp.pot, po/fr.po, po/lt.po, po/zh_CN.po:
+ - added Chinese translation (Chong Kai Xiong, aka ME) - unmarked
+ GTK stock item name strings as translatable and replaced them
+ with macros - updated pot/po files accordingly
+
+2004-01-13 01:14 descender
+
+ * AUTHORS, configure.in, po/LINGUAS, po/lt.po,
+ scripts/rm-auto-scripts.sh (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ - added Lithuanian translation by Rimas Kudelis - updated
+ rm-auto-scripts.sh to remove generated files in po/
+
+2004-01-13 00:53 descender
+
+ * beep/: input.c, input.h (tags: merge-20040115-01), playlist.c,
+ pluginenum.c, skinwin.c, util.c, util.h:
+ - renamed proxy strings (passed to plugins) - renamed vis_node to
+ VisNode - plugin filename extensions do not need to be lower-case
+ now - marked translatable strings in song-cannot-be-played error
+ dialog
+
+2004-01-12 21:30 descender
+
+ * beep/: pluginenum.c, skinwin.c, util.c, util.h:
+ - added dir_foreach() function - converted bmp_scan_plugins() and
+ find_file_recursively() to use dir_foreach()
+
+2004-01-12 20:26 descender
+
+ * beep/: main.c, mainwin.c, mainwin.h, playlist.h:
+ - attach mainwin idle function in mainwin_create() rather than
+ main() - cleanups
+
+2004-01-12 20:08 descender
+
+ * beep/: controlsocket.c (tags: merge-20040115-01), dirbrowser.c,
+ mainwin.c, playlist.c, playlist.h, playlistwin.c:
+ - renamed playlist_add/ins_url_string to playlist_add/ins_url
+
+2004-01-12 19:51 descender
+
+ * beep/: about.c, input.c, mainwin.h, playlist.c, pluginenum.c:
+ - added G_LOG_DOMAIN definitions - cleanups
+
+2004-01-12 17:05 descender
+
+ * beep/dirbrowser.c, beep/dnd.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), beep/main.c, beep/main.h, beep/mainwin.c,
+ beep/playlist.c, beep/playlistwin.c, beep/pluginenum.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/skin.c,
+ beep/skinwin.c, beep/urldecode.c, beep/util.c, beep/util.h,
+ libbeep/titlestring.c:
+ - fixed case-sensitive issue with skin package extensions -
+ marked translatable strings - cleanups
+
+2004-01-12 14:56 descender
+
+ * beep/: main.c, mainwin.c, prefswin.c, xml_document.c:
+ - xml_document.c: replaced g_assert() with g_return_if_fail() -
+ prefswin.c: renamed close button and related functions from 'ok'
+ to 'close' - main.c, mainwin.c: removed useless rc load/save
+ calls
+
+2004-01-12 04:11 mderezynski
+
+ * beep/dirbrowser.c: [no log message]
+
+2004-01-12 03:18 descender
+
+ * beep/: playlistwin.c, playlistwin.h:
+ - playlist button popup menu now use new file selector
+ (dirbrowser) for 'Add File'
+
+2004-01-12 01:03 descender
+
+ * po/: POTFILES.in (tags: merge-20040115-01), bmp.pot, fr.po,
+ stamp-po:
+ - removed old files and added new files to POTFILES.in - remove
+ PO timestamp file from CVS
+
+2004-01-12 00:36 descender
+
+ * beep/dirbrowser.c:
+ - marked translatable strings - renamed 'Scanning directories' to
+ 'Searching directories'
+
+2004-01-11 23:52 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirbrowser.c: Added code to scan directory's children to avoid
+ subtrees becoming a dead end suddenly: bmp_db_dir_has_children();
+ UI layout changes
+
+2004-01-11 20:08 descender
+
+ * beep/controlsocket.c, beep/dirbrowser.c, beep/eq_graph.c (tags:
+ merge-20040115-01), beep/eq_slider.c (tags: merge-20040115-01),
+ beep/equalizer.c, beep/hslider.c (tags: merge-20040115-01),
+ beep/hslider.h (tags: merge-20040115-01), beep/main.c,
+ beep/mainwin.c, beep/menurow.c (tags: merge-20040115-01),
+ beep/menurow.h (tags: merge-20040115-01), beep/monostereo.c
+ (tags: merge-20040115-01), beep/monostereo.h (tags:
+ merge-20040115-01), beep/number.c (tags: merge-20040115-01),
+ beep/number.h (tags: merge-20040115-01), beep/pbutton.c (tags:
+ merge-20040115-01), beep/pbutton.h (tags: merge-20040115-01),
+ beep/playlist.c, beep/playlist_list.c, beep/playlist_popup.c
+ (tags: merge-20040115-01), beep/playlist_slider.c (tags:
+ merge-20040115-01), beep/playlistwin.c, beep/playstatus.c (tags:
+ merge-20040115-01), beep/skin.c, beep/skin.h, beep/skinwin.c,
+ beep/svis.c (tags: merge-20040115-01), beep/tbutton.c (tags:
+ merge-20040115-01), beep/tbutton.h (tags: merge-20040115-01),
+ beep/textbox.c (tags: merge-20040115-01), beep/textbox.h (tags:
+ merge-20040115-01), beep/vis.c (tags: merge-20040115-01),
+ po/bmp.pot, po/fr.po:
+ - skin functions generalized, now handles Skin instances instead
+ of just the active skin - active skin renamed to bmp_active_skin
+ - skin code cleanups
+
+2004-01-11 10:45 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirrowser.c: fixed compile warnings
+
+2004-01-11 09:05 mderezynski
+
+ * beep/: beep_logo.xpm (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), dirbrowser.c:
+
+ beep_logo.xpm: Changed logo dirbrowser.c: dunno :\
+
+2004-01-11 07:58 mderezynski
+
+ * beep/: dirbrowser.c, playlist.c:
+
+ dirbrowser.c playlist.c: Fixed locking issue
+
+2004-01-11 07:46 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirbrowser.c: Added info text to progressbar
+
+2004-01-11 07:35 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirbrowser.c: removed GtkFrame
+
+2004-01-11 07:25 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirbrowser.c: made recursing optional, changed UI layout
+
+2004-01-11 05:58 msikkes
+
+ * beep/: playlist.c, skinwin.c, skinwin.h (tags:
+ merge-20040115-01): playlist.c: Song change with 'random skin on
+ new song'-option now uses update_skinlist() in stead of
+ update_skins() skinwin.c, skinwin.h: split update_skins() into
+ update_skinlist and update_skinview()
+
+2004-01-11 03:19 descender
+
+ * beep/: xml_document.c, xml_document.h:
+ - bmp_xml_document_load() now builds the entire tree
+
+2004-01-11 01:36 descender
+
+ * beep/: xml_document.c, Makefile.am, xml_document.h:
+ - added basic XML parsing support (for BMP XML config)
+
+2004-01-10 18:15 descender
+
+ * beep/main.c:
+ - use BMP path strings in main.c:bmp_config_save()
+
+2004-01-10 17:33 descender
+
+ * Input/mpg123/http.c (tags: merge-20040115-01), Input/wav/wav.c,
+ beep/playlist.c, beep/plugin.h:
+ - fixed compilation error (playlist.c used 'struct SkinNode'
+ instead of just 'SkinNode') - glibize some plugin code
+
+2004-01-10 12:27 descender
+
+ * beep/: dirbrowser.c, equalizer.c, mainwin.c, pluginenum.c,
+ skinwin.c:
+ - fix temporary string memory leak in
+ mainwin_drag_data_received()
+
+2004-01-10 12:07 descender
+
+ * beep/: controlsocket.c, controlsocket.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), main.c, mainwin.c:
+ - lock 'going' in controlsocket thread loop condition - renamed
+ control socket functions
+
+2004-01-10 11:24 descender
+
+ * beep/: controlsocket.c, mainwin.c, skin.c, skinwin.c, skinwin.h,
+ vis.c:
+ - fixed skin browser freeze - shorten GDK critical section in
+ visualizer drawing code - minor cleanups
+
+2004-01-10 01:09 descender
+
+ * beep/: main.c, main.h, mainwin.c, skinwin.c:
+ - added BMP path strings - temporary fix for skin browser freeze
+ (nested lock issue)
+
+2004-01-10 00:15 descender
+
+ * Visualization/blur_scope/blur_scope.c (tags: merge-20040115-01),
+ beep/main.c, beep/playlist.c, beep/prefswin.c:
+ - fixed memory leak in create_prefs_window() (table_rb was
+ allocated but not attached) - added playlist_skip_prefix() for
+ ignore-prefix sorting support
+
+2004-01-09 23:59 mderezynski
+
+ * beep/: main.c, playlist.c, playlist_list.c, prefswin.c:
+
+ resolved cvs merge conflicts
+
+2004-01-09 19:06 descender
+
+ * configure.in, beep/equalizer.c, beep/main.c, beep/playlist.c,
+ beep/pluginenum.c, po/bmp.pot, po/fr.po:
+ - fixed memory leak in playlist.c:playlist_get_info_text() -
+ cleanups
+
+2004-01-09 18:12 descender
+
+ * beep/: Makefile.am, dynamic_lib.c, dynamic_lib.h, hints.c,
+ main.c, playlist.c, pluginenum.c:
+ - plugin loading is now done through GLib module functions
+
+2004-01-09 16:33 descender
+
+ * scripts/cleanall.sh (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ - cleanall.sh script now removes .deps
+
+2004-01-09 16:28 descender
+
+ * Input/vorbis/fileinfo.c, Visualization/blur_scope/blur_scope.c,
+ beep/main.c, beep/mainwin.c, beep/playlist.c, beep/playlistwin.c,
+ beep/util.c, beep/util.h, po/bmp.pot, po/fr.po:
+ - cleanups
+
+2004-01-09 04:21 mderezynski
+
+ * beep/: dirbrowser.c, mainwin.c, playlist.c, playlist_list.c,
+ pluginenum.c, prefswin.c:
+
+ dirbrowser.c, mainwin.c, playlist.c, playlist_list.c,
+ playlistwin.c, pluginenum.c, prefswin.c: compile warnings fixed
+
+2004-01-09 02:44 descender
+
+ * beep/: playlist.c, playlist_list.c, util.c, util.h:
+ - fixed temporary string leaks - added SWAP macro to util.h -
+ convert_title_text(gchar *text) now returns text, allowing it to
+ be chained with functions like g_strdup()
+
+2004-01-09 01:31 descender
+
+ * beep/: debug.h, main.c, mainwin.c, playlist.c, playlist.h,
+ playlist_list.c, playlistwin.c, skinwin.c:
+ - converted playlist_mutex from GStaticMutex to GMutex - added
+ REQUIRE_LOCK() macro to check if a mutex is properly locked -
+ added REQUIRE_LOCK checks for playlist_mutex - fixed 2 memory
+ leaks involving temporary strings
+
+2004-01-08 06:04 mderezynski
+
+ * beep/: playlist.c, playlist_list.c:
+
+ UTF8 fixes
+
+2004-01-07 18:05 mderezynski
+
+ * beep-config.in, beep/main.c, beep/playlist_list.c:
+
+ beep-config.in: Re-added general plugin dir main.c: fixed order
+ of initializations in main() playlist_list.c: rendering changes
+
+2004-01-07 01:09 msikkes
+
+ * libbeep/Makefile.am (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01): Changed beepincluddir to bmp/.
+
+2004-01-05 07:50 mderezynski
+
+ * beep/: dirbrowser.c, playlist_list.c:
+
+ playlist_list.c: rendering changes dirbrowser.c: removed debug
+ g_message()
+
+2004-01-04 21:53 mderezynski
+
+ * beep/: beep_logo.xpm, dirbrowser.c:
+
+ beep_logo.xpm: Updated "about" logo dirbrowser.c: memleak fixes
+
+2004-01-03 23:42 mderezynski
+
+ * beep/dirbrowser.c:
+
+ More mem leak fixes
+
+2004-01-03 19:27 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Fixed messed up bmp_db_mdb_sort_func
+
+2004-01-03 19:17 mderezynski
+
+ * beep/dirbrowser.c:
+
+ More memleak fixes
+
+2004-01-03 18:03 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Memory usage cleanups (memleak fixes)
+
+2004-01-03 12:29 mderezynski
+
+ * beep/dirbrowser.c:
+
+ memleak fixes
+
+2004-01-03 12:04 mderezynski
+
+ * beep/dirbrowser.c:
+
+ leak fix in bmp_db_path_get_full()
+
+2004-01-03 09:18 descender
+
+ * beep/: main.c, sm.c (tags: merge-20040115-01):
+ - fixed missing save_config() errors
+
+2004-01-03 02:55 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Memory fixes
+
+2004-01-02 23:41 mderezynski
+
+ * beep/: dirbrowser.c, input.c, skinwin.c, util.c:
+
+ Memleak fixes
+
+2004-01-02 20:38 descender
+
+ * beep.spec.in, configure.in, icons/Makefile.am (tags:
+ merge-20040115-01):
+ - restore configure script version to 0.9.6.2 (got reverted
+ somehow) - install SVG icon in /usr/share/icons - updated RPM
+ spec file
+
+2004-01-02 06:14 mderezynski
+
+ * TODO (tags: merge-20040115-01):
+
+ Updated TODO
+
+2004-01-02 06:13 mderezynski
+
+ * TODO, beep/input.c, beep/mainwin.c, beep/playlistwin.c:
+
+ Updated TODO
+
+ mainwin.c: touched (actually changes, then reverted)
+ playlistwin.c: touched
+
+2003-12-31 21:49 mderezynski
+
+ * beep/dirbrowser.c: [no log message]
+
+2003-12-31 21:07 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Fixed empty browser on non-existant $HOME/.bmp/dbrc
+
+2003-12-31 19:41 mderezynski
+
+ * beep/: mainwin.c, playlist_list.c, util.c:
+
+ mainwin.c: Fixed mainwin.c JTF always jumps to first file only
+
+ playlist_list.c: Rendering changes
+
+ util.c: No actual changes
+
+2003-12-31 18:06 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Added label to filter, leak & structural cleanups
+
+2003-12-31 08:01 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirbrowser.c: Added optimizations to filter
+
+2003-12-31 07:42 mderezynski
+
+ * beep/dirbrowser.c:
+
+ dirbrowser.c: Structural cleanups in dirbrowser filtering code
+
+2003-12-31 07:20 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Replaced filtering algorithms with those from mainwin.c JTF
+
+2003-12-31 07:03 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Added filter to dirbrowser (WIP)
+
+2003-12-30 20:49 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Removed static path for testing
+
+2003-12-30 20:15 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Re-added for readding
+
+2003-12-30 20:14 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Removed for re-adding
+
+2003-12-30 10:36 descender
+
+ * beep/dirbrowser.c:
+ - fixed dirbrowser crash with invalid UTF-8 filenames, and when
+ adding files with nothing selected
+
+2003-12-30 08:10 descender
+
+ * beep/dirbrowser.c:
+ - fixed last merge of dirbrowser.c
+
+2003-12-30 07:32 mderezynski
+
+ * beep/dirbrowser.c:
+
+ indent -kr dirbrowser.c
+
+2003-12-30 07:16 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Fixed problems introduced trough merger problem before last
+ commit ...
+
+2003-12-30 07:12 mderezynski
+
+ * beep/: dirbrowser.c, mainwin.c, mainwin.h, playlistwin.c: [no log
+ message]
+
+2003-12-30 07:04 descender
+
+ * beep/: controlsocket.c, dirbrowser.c, main.h:
+ - main.c: replaced hard coded sizes with #defines -
+ controlsocket.c: change int to gint - dirbrowser.c: dirbrowser
+ now shows tree if dbrc does not exist
+
+2003-12-30 05:22 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Readded "Add" button in dirbrowser
+
+2003-12-29 22:00 mderezynski
+
+ * beep/playlist_list.c:
+
+ Fixed minor rendering problem in playlist_list.c
+
+2003-12-29 21:16 mderezynski
+
+ * beep/: skin.c: [no log message]
+
+2003-12-29 21:00 mderezynski
+
+ * beep/skin.c:
+
+ Fixed compile problems with gcc 2.95.x
+
+2003-12-29 08:33 mderezynski
+
+ * TODO, TODO.bmp, configure.in:
+
+ TODO: updated configure.in: Added fr to ALL_LINGUAS po/LINGUAS:
+ touch due to check TODO.bmp: removed, use TODO
+
+2003-12-29 05:24 descender
+
+ * libbeep/: util.c, util.h (utags: merge-20040115-01):
+ - reverted libbeep utility function names, add #define BMP name
+ aliases instead
+
+2003-12-29 05:11 descender
+
+ * Input/vorbis/configure.c, Input/vorbis/fileinfo.c,
+ Input/vorbis/http.c (tags: merge-20040115-01),
+ Input/vorbis/http.h (tags: merge-20040115-01), beep/main.c,
+ beep/main.h, beep/mainwin.c, beep/mainwin.h, beep/playlist.c,
+ beep/playlistwin.c, beep/pluginenum.c, beep/prefswin.c,
+ beep/prefswin.h (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ libbeep/util.c, libbeep/util.h:
+ - fixed memory leak in vorbis/fileinfo.c:add_tag() - renamed
+ Config to BmpConfig, option_info to BmpOptionInfo - renamed
+ various *_cb() callback functions to *_callback() - renamed
+ libbeep/util.c functions, added XMMS name aliases to keep
+ compatibility - miscellaneous cleanups (Glibize types, add
+ constness to string parameters etc.)
+
+2003-12-29 00:36 mderezynski
+
+ * beep/: playlist_list.c, playlistwin.c:
+
+ playlistwin.c: fixed loading of playlists trough the file dialog
+
+2003-12-28 22:37 mderezynski
+
+ * beep/pluginenum.c:
+
+ Added terminating null to pluginenum.c:
+ init_plugins()::g_build_filename()
+
+2003-12-27 09:05 descender
+
+ * beep/: main.c, playlistwin.c, prefswin.c:
+ - main.c: fixed double g_free() bug in save_config() (introduced
+ in last commit) - cleanups
+
+2003-12-27 07:59 descender
+
+ * configure.in, beep/input.c, beep/input.h, beep/main.c,
+ beep/playlist.c, beep/playlist.h, beep/playlist_list.c:
+ - changed version number to 0.9.6.2 - fixed a few memory leaks
+ with temp. g_build_filename() usage
+
+2003-12-27 05:19 mderezynski
+
+ * beep/: mainwin.c, playlist_list.c:
+
+ Fixed JTF treeview needs focus for enter keypress to have an
+ effect (now also works when the GtkEntry has focus)
+
+2003-12-27 04:16 descender
+
+ * beep/dirbrowser.c, po/bmp.pot, po/fr.po:
+ - added translatable strings for dirbrowser - plugged some more
+ leaks in dirbrowser
+
+2003-12-27 04:04 descender
+
+ * beep/: dirbrowser.c, prefswin.c:
+ - plugged most memory leaks in dirbrowser - cleanups
+
+2003-12-26 23:55 descender
+
+ * beep/: equalizer.c, main.c, output.c, prefswin.c:
+ - replaced sprintf()s with snprintf()s
+
+2003-12-26 23:47 descender
+
+ * beep/: playlist_list.c, playlistwin.c, prefswin.c, util.c,
+ util.h:
+ - cleanups
+
+2003-12-26 17:31 descender
+
+ * beep/: plugin.h, prefswin.c:
+ - added typecast macros for plugin types - fixed memory leak in
+ prefswin_font_browse_cb()
+
+2003-12-26 17:22 descender
+
+ * beep/: input.c, mainwin.c, playlist.c, playlist.h, textbox.c,
+ textbox.h:
+ - fixed memory leaks in mainwin - added const constraints to
+ string arguments
+
+2003-12-26 16:48 descender
+
+ * configure.in, scripts/gen-auto-scripts.sh (tags:
+ merge-20040115-01):
+ - bump version up to 0.9.7 - turn off autopoint invocation for
+ gen-auto-scripts by default
+
+2003-12-26 16:30 descender
+
+ * beep/: Makefile.am, about.c, beep.h, dirbrowser.c, dynamic_lib.c,
+ effect.h (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ equalizer.c, equalizer.h (tags: merge-20040115-01), fft.c (tags:
+ merge-20040115-01), fullscreen.c, fullscreen.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), general.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), hints.c, hslider.c,
+ input.h, main.c, mainwin.h, menurow.c, monostereo.c,
+ monostereo.h, number.c, number.h, output.c, output.h (tags:
+ cvs-20040120-01-HEAD), pbutton.c, pbutton.h, playlist_popup.c,
+ playlist_popup.h (tags: merge-20040115-01), playlist_slider.c,
+ playlist_slider.h (tags: merge-20040115-01), playlistwin.h,
+ playstatus.c, pluginenum.c, prefswin.c, sbutton.c (tags:
+ merge-20040115-01), sbutton.h (tags: merge-20040115-01), skin.c,
+ skin.h, skinwin.c, skinwin.h, sm.c, sm.h (tags:
+ merge-20040115-01), svis.c, svis.h (tags: merge-20040115-01),
+ tbutton.c, tbutton.h, textbox.c, textbox.h, util.h, vis.c, vis.h
+ (tags: merge-20040115-01), visualization.c (tags:
+ merge-20040115-01), visualization.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ - removed all inclusion of "beep.h", removed beep.h
+
+2003-12-26 14:47 descender
+
+ * beep/: eq_graph.c, eq_graph.h (tags: merge-20040115-01),
+ eq_slider.c, eq_slider.h (tags: merge-20040115-01), equalizer.c,
+ equalizer.h, hints.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), hslider.h, menurow.h, prefswin.c, prefswin.h,
+ util.c, widget.c, widget.h:
+ - removed '#include "beep.h"'
+
+2003-12-26 14:15 descender
+
+ * beep/: about.c, bmp.c (tags: merge-20040115-01), bmp.h (tags:
+ merge-20040115-01), dirbrowser.c, dirbrowser.h, dnd.h, dock.c
+ (tags: merge-20040115-01), dock.h (tags: merge-20040115-01),
+ general.c (tags: merge-20040115-01), general.h:
+ - removed '#Include "beep.h"'
+
+2003-12-26 13:53 descender
+
+ * beep/playlist_list.c:
+ - fixed playlist drawing error when list is short
+
+2003-12-26 13:29 descender
+
+ * beep/: dirbrowser.h, effect.c (tags: merge-20040115-01),
+ effect.h, playlist_list.c, util.c, util.h:
+ - cleanups
+
+2003-12-26 11:40 descender
+
+ * beep/playlist_list.c:
+ - removed freetype2 header #include
+
+2003-12-26 11:33 descender
+
+ * beep/: dirbrowser.c, playlist.c, playlist.h, playlist_list.c,
+ playlist_list.h (tags: merge-20040115-01), pluginenum.c,
+ skinwin.c, util.c, util.h:
+ - plugged all (I hope) memory leaks in playlist_list.c - more
+ cleanups
+
+2003-12-26 07:26 descender
+
+ * beep/: controlsocket.c, dirbrowser.c, equalizer.c, main.c,
+ mainwin.c, playlist.c, playlist.h, playlist_list.c,
+ playlist_slider.c, playlistwin.c, prefswin.c:
+ - cleanup - renamed get_playlist*() to playlist_get*()
+
+2003-12-25 08:58 descender
+
+ * beep/Makefile.am, scripts/cleanall.sh,
+ scripts/rm-auto-scripts.sh:
+ - updated helper scripts, cleanall.sh now removes .gmo files
+
+2003-12-25 08:07 descender
+
+ * beep/beep.desktop.in (tags: merge-20040115-01):
+ - added 'Application' to Category field, added Encoding field
+
+2003-12-25 01:50 descender
+
+ * AUTHORS:
+ - added David Le Brun (French translation) to AUTHORS
+
+2003-12-25 01:45 msikkes
+
+ * libbeep/util.c:
+ - changed stock button to stock_close
+
+2003-12-25 01:30 descender
+
+ * beep/about.c, beep/main.c, po/LINGUAS, po/bmp.pot, po/fr.po:
+ - last commit continued
+
+2003-12-25 01:29 descender
+
+ * beep.spec.in:
+ - added French translation
+
+2003-12-25 01:17 mderezynski
+
+ * beep/: dirbrowser.c, mainwin.c:
+
+ dirbrowser cleanups
+
+2003-12-25 00:11 descender
+
+ * beep/dirbrowser.c:
+ - plugged a few leaks - fixed invalid memory reference
+
+2003-12-24 23:24 mderezynski
+
+ * beep/: dirbrowser.c, equalizer.c:
+
+ Fixed possible unitialized str_parent in
+ dirbrowser.c:dirbrowser_path_get_full()
+
+2003-12-24 23:11 mderezynski
+
+ * Visualization/blur_scope/blur_scope.c:
+
+ Fixed blur_scope.c imported fscked up cvs merger code
+
+2003-12-24 22:06 mderezynski
+
+ * libbeep/: beepctrl.c (tags: merge-20040115-01), beepctrl.h (tags:
+ merge-20040115-01), configfile.c, configfile.h (tags:
+ merge-20040115-01), dirbrowser.c, dirbrowser.h (tags:
+ merge-20040115-01), formatter.c (tags: merge-20040115-01),
+ formatter.h (tags: merge-20040115-01), titlestring.c,
+ titlestring.h, util.c, util.h, xconvert.c, xconvert.h (tags:
+ merge-20040115-01), xentry.c (tags: merge-20040115-01), xentry.h
+ (tags: merge-20040115-01): [no log message]
+
+2003-12-24 22:03 mderezynski
+
+ * beep/: about.c, bmp.c, controlsocket.c, controlsocket.h,
+ dirbrowser.c, dirbrowser.h, dnd.h, dock.c, dock.h, dynamic_lib.c,
+ dynamic_lib.h, effect.c, effect.h, eq_graph.c, eq_graph.h,
+ eq_slider.c, eq_slider.h, equalizer.c, equalizer.h, fft.c, fft.h
+ (tags: merge-20040115-01), fullscreen.c, fullscreen.h, general.c,
+ general.h, getopt.c (tags: merge-20040115-01), getopt.h (tags:
+ merge-20040115-01), getopt1.c (tags: merge-20040115-01), hints.c,
+ hints.h, hslider.c, hslider.h, info.h (tags: merge-20040115-01),
+ input.c, input.h, jump_to.h (tags: merge-20040115-01), main.c,
+ main.h, mainwin.c, mainwin.h, menurow.c, menurow.h, mkdtemp.c
+ (tags: merge-20040115-01), monostereo.c, monostereo.h, number.c,
+ number.h, output.c, output.h, pbutton.c, pbutton.h, pixmaps.h
+ (tags: merge-20040115-01), playlist.c, playlist.h,
+ playlist_list.c, playlist_list.h, playlist_popup.c,
+ playlist_popup.h, playlist_slider.c, playlist_slider.h,
+ playlistwin.c, playstatus.c, playstatus.h (tags:
+ merge-20040115-01), plugin.h, pluginenum.c, prefswin.c,
+ prefswin.h, sbutton.c, sbutton.h, skin.c, skin.h, skinwin.c,
+ skinwin.h, sm.c, softvolume.c, softvolume.h, svis.c, svis.h,
+ tbutton.c, tbutton.h, textbox.c, textbox.h, urldecode.c, util.c,
+ util.h, vis.c, vis.h, visualization.c, visualization.h, widget.c,
+ widget.h:
+
+ ...
+
+2003-12-24 22:01 mderezynski
+
+ * Output/alsa/about.c (tags: merge-20040115-01), Output/alsa/alsa.c
+ (tags: merge-20040115-01), Output/alsa/alsa.h,
+ Output/alsa/audio.c (tags: merge-20040115-01),
+ Output/alsa/configure.c (tags: merge-20040115-01),
+ Output/alsa/init.c (tags: merge-20040115-01), Output/esd/about.c
+ (tags: merge-20040115-01), Output/esd/audio.c,
+ Output/esd/configure.c (tags: merge-20040115-01),
+ Output/esd/esd.c (tags: merge-20040115-01), Output/esd/esdout.h
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Output/esd/init.c (tags: merge-20040115-01), Output/esd/mixer.c
+ (tags: merge-20040115-01), Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/blur_scope.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Visualization/blur_scope/config.c:
+
+ Changed indentation style to K&R (using the "indent" utility) Now
+ the 5th commit in a row because of broken SF cvs commiting...
+
+2003-12-24 21:59 mderezynski
+
+ * Input/wav/wav.c, Input/wav/wav.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Output/OSS/OSS.c (tags: merge-20040115-01),
+ Output/OSS/OSS.h, Output/OSS/about.c (tags: merge-20040115-01),
+ Output/OSS/audio.c, Output/OSS/configure.c (tags:
+ merge-20040115-01), Output/OSS/convert.c (tags:
+ merge-20040115-01), Output/OSS/init.c (tags: merge-20040115-01),
+ Output/OSS/mixer.c (tags: merge-20040115-01),
+ Output/OSS/soundcard.h (tags: merge-20040115-01):
+
+ Changed indentation style to K&R (using the "indent" utility)
+
+2003-12-24 21:55 mderezynski
+
+ * Input/: mpg123/common.c (tags: merge-20040115-01),
+ mpg123/configure.c, mpg123/dct64.c (tags: merge-20040115-01),
+ mpg123/dct64_i386.c (tags: merge-20040115-01), mpg123/decode.c
+ (tags: merge-20040115-01), mpg123/decode_2to1.c (tags:
+ merge-20040115-01), mpg123/decode_4to1.c (tags:
+ merge-20040115-01), mpg123/decode_i386.c (tags:
+ merge-20040115-01), mpg123/dxhead.c (tags: merge-20040115-01),
+ mpg123/dxhead.h (tags: merge-20040115-01), mpg123/equalizer.c
+ (tags: merge-20040115-01), mpg123/fileinfo.c, mpg123/getbits.c
+ (tags: merge-20040115-01), mpg123/http.c, mpg123/huffman.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), mpg123/id3.c (tags:
+ merge-20040115-01), mpg123/id3.h (tags: merge-20040115-01),
+ mpg123/id3_frame.c (tags: merge-20040115-01),
+ mpg123/id3_frame_content.c (tags: merge-20040115-01),
+ mpg123/id3_frame_text.c (tags: merge-20040115-01),
+ mpg123/id3_frame_url.c (tags: merge-20040115-01),
+ mpg123/id3_header.h (tags: merge-20040115-01), mpg123/id3_tag.c
+ (tags: merge-20040115-01), mpg123/l2tables.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), mpg123/layer1.c,
+ mpg123/layer2.c, mpg123/layer3.c, mpg123/mpg123.c,
+ mpg123/mpg123.h (tags: merge-20040115-01), mpg123/tabinit.c
+ (tags: merge-20040115-01), vorbis/configure.c, vorbis/fileinfo.c,
+ vorbis/glibconfig.h (tags: merge-20040115-01), vorbis/http.c,
+ vorbis/http.h, vorbis/vcedit.c (tags: merge-20040115-01),
+ vorbis/vcedit.h (tags: merge-20040115-01), vorbis/vorbis.c,
+ vorbis/vorbis.h (tags: merge-20040115-01):
+
+ Changed indentation style to K&R (using the "indent" utility)
+
+2003-12-24 21:27 mderezynski
+
+ * Input/cdaudio/: cdaudio.c, cdaudio.h, cddb.c, cddb.h (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), cdinfo.c, cdinfo.h,
+ configure.c, http.c, http.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+
+ Changed indentation style to K&R (using the "indent" utility)
+
+2003-12-24 20:28 mderezynski
+
+ * Input/vorbis/vorbis.c:
+
+ Fixed FreeBSD compile problem
+
+2003-12-24 19:47 msikkes
+
+ * AUTHORS:
+ - added myself to AUTHORS :)
+
+2003-12-24 14:02 descender
+
+ * beep-media-player.1.in (tags: merge-20040115-01):
+ - adapted xmms(1) manpage to fit beep-media-player(1)
+
+2003-12-24 13:41 descender
+
+ * beep.spec.in:
+ - updated beep.spec changelog
+
+2003-12-24 13:37 descender
+
+ * icons/Makefile.am:
+ - last cvs commit continued (got aborted halfway yet again)
+
+2003-12-24 13:35 descender
+
+ * Makefile.am (tags: merge-20040115-01), beep.spec.in,
+ beep/Makefile.am:
+ - fixed 'make dist' - first fully usable RPM spec file
+
+2003-12-24 11:34 descender
+
+ * scripts/: gen-auto-scripts.sh, make-dist.sh (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01):
+ - improved customizability of gen-auto-scripts.sh
+
+2003-12-24 11:19 mderezynski
+
+ * beep/: beep_logo.xpm, dirbrowser.c, mainwin.c:
+
+ * dirbrowser.c: Added the ability to add albums on double click
+ in metadata view * beep_logo.xpm: Changed logo to bmp instead of
+ beep * mainwinc: Changed menu entry to "About bmp" instead of
+ "About ::beep."
+
+2003-12-24 09:28 msikkes
+
+ * Makefile.am, beep-media-player.1.in, beep.1.in, configure.in:
+ - renamed beep.1.in -> beep.1
+
+2003-12-24 09:03 descender
+
+ * icons/: Makefile.am, beep-red.svg, beep.svg (tags:
+ merge-20040115-01):
+ - renamed beep-red.svg to beep.svg, removed original beep.svg
+
+2003-12-24 08:58 msikkes
+
+ * beep/Makefile.am:
+ - includedir <dir>/beep -> <dir>/bmp
+
+2003-12-24 08:24 mderezynski
+
+ * beep/main.c:
+
+ Changed playlist default font to Sans Bold 12
+
+2003-12-24 08:02 mderezynski
+
+ * beep/main.c:
+
+ Fixed bmp playlist not loaded at startup
+
+2003-12-24 07:52 msikkes
+
+ * Visualization/blur_scope/blur_scope.c:
+ - fixed compile warning
+
+2003-12-24 07:51 msikkes
+
+ * configure.in:
+ - plugindir from <dir>/beep to <dir>/bmp
+
+2003-12-24 07:48 mderezynski
+
+ * beep/: equalizer.c, skinwin.c, util.c:
+
+ Replaced window titles to bmp:
+
+2003-12-24 07:09 msikkes
+
+ * libbeep/util.c:
+ - added automatic policy to scrollbars
+
+2003-12-24 07:03 mderezynski
+
+ * beep/input.c:
+
+ Fixed memleak in input.c: input_check_file()
+
+2003-12-24 05:59 msikkes
+
+ * AUTHORS:
+ - added vlad at softshape.com as the skin author
+
+2003-12-24 01:59 mderezynski
+
+ * beep/: input.c, playlist_list.c:
+
+ Changes in playlist rendering
+
+2003-12-24 00:34 msikkes
+
+ * configure.in:
+ - fixed DATA_DIR=$(datadir)/beep to /bmp
+
+2003-12-19 00:47 msikkes
+
+ * libbeep/util.c:
+ - removed #include <string.h>, was used for debugging
+
+2003-12-18 23:13 msikkes
+
+ * libbeep/util.c:
+ - xmms_show_message dialog now shows a scrolledwindow
+
+2003-12-16 18:23 descender
+
+ * Output/OSS/configure.c, Output/alsa/alsa.c,
+ Output/alsa/configure.c, beep/Makefile.am, beep/controlsocket.c,
+ beep/controlsocket.h, beep/main.c, beep/mainwin.h,
+ icons/Makefile.am, libbeep/beepctrl.c:
+ - Last commit was interrupted.
+
+2003-12-16 18:22 descender
+
+ * beep.m4 (tags: merge-20040115-01), beep.spec.in:
+ - fixed GCC warnings - fixed memory leak in socket I/O timeout
+ code - added socket I/O timeout to libbeep - updated RPM spec
+ file - miscellaneous tweaks to installation paths
+
+2003-12-14 05:19 descender
+
+ * beep/: mainwin.c, playlist.c, playlist.h, playlist_list.c,
+ playlistwin.c:
+ - use GStaticMutex instead of pthread_mutex_t for playlist_mutex
+ - renamed playlist mutex lock/unlock macros from PL_LOCK/UNLOCK
+ to PLAYLIST_LOCK/UNLOCK
+
+2003-12-14 00:00 msikkes
+
+ * Output/OSS/configure.c:
+ - fixed compiler warnings
+
+2003-12-13 23:42 msikkes
+
+ * Output/esd/configure.c:
+ - fixed compiler warnings
+
+2003-12-13 22:48 msikkes
+
+ * Input/mpg123/configure.c:
+ - fixed bug where mpg123 didn't save it's config variables to
+ configfile
+
+2003-12-13 21:31 descender
+
+ * beep/: mainwin.c, mainwin.h, playlist.c, playlist.h,
+ playlistwin.h:
+ - replaced '#include "beep.h"' in playlist.h
+
+2003-12-13 21:15 descender
+
+ * beep/playlist.c:
+ - fixed memory leak in playlist_get_info_text()
+
+2003-12-13 21:12 msikkes
+
+ * Input/wav/wav.c: fixed a warning at line 57, removed VERSION
+ argument in g_strdup_printf (it wasn't used)
+
+2003-12-13 21:09 msikkes
+
+ * Makefile.am: added beep.pc to installation procedure
+
+2003-12-13 21:02 msikkes
+
+ * Makefile.am: added beep.pc to to install procedure
+
+2003-12-13 17:18 descender
+
+ * beep/: beep.h, dirbrowser.c, dirbrowser.h, dynamic_lib.c,
+ equalizer.h, main.c, main.h, mainwin.c, mainwin.h,
+ playlist_slider.h, playlistwin.c, playlistwin.h, util.h:
+ - more cleanups
+
+2003-12-13 07:45 hyriand
+
+ * Input/mpg123/: common.c, mpg123.c: fixed compiler warnings
+
+2003-12-13 07:19 hyriand
+
+ * Input/cdaudio/: cdaudio.c, cdaudio.h, cddb.c, configure.c,
+ http.c, http.h: fixed compiler warnings, fixed vorbistags
+ changing GTK char buffers, fixed wav-plugin memleak
+
+2003-12-13 06:38 hyriand
+
+ * libbeep/xentry.c: fixed compiler warnings
+
+2003-12-13 06:30 hyriand
+
+ * beep/: about.c, beep.h, dirbrowser.c, eq_slider.c, hslider.c,
+ input.c, main.h, mainwin.c, mainwin.h, playlist.c, playlist.h,
+ playlist_list.c, playlist_popup.c, playlist_slider.c,
+ playlistwin.c, pluginenum.c, prefswin.c, sbutton.c, util.c,
+ util.h: fixed all compiler warnings
+
+2003-12-13 05:18 descender
+
+ * beep/: Makefile.am, main.c, main.h, mainwin.c, mainwin.h,
+ number.h:
+ - move monster mainwin code into mainwin.c
+
+2003-12-13 04:09 descender
+
+ * beep/playlistwin.c: - replaced playlistwin explicit hard coded
+ sizes with macros
+
+2003-12-13 03:49 hyriand
+
+ * beep/util.c: fixes for add file dialog (the gtk one) for plugins
+ that override dirs 1) don't add ./ and ../ to the file list 2)
+ check the current dir when showing the dialog
+
+2003-12-13 03:29 descender
+
+ * beep/: main.c, pluginenum.c:
+ - replaced mainwin hard coded sizes, which were specified in
+ explicit values, with macros - removed commented out prototypes
+
+2003-12-13 01:45 mderezynski
+
+ * beep/: input.c, main.c, playlist_list.c, plugin.h, pluginenum.c,
+ util.c:
+
+ Fixed window title behaviour, made plugins return gint on plugin
+ init()
+
+2003-12-12 21:40 descender
+
+ * beep/dynamic_lib.c:
+ - forgot to include "config.h" to get definition of SYMBOL_PREFIX
+
+2003-12-12 21:37 descender
+
+ * beep/: Makefile.am, dynamic_lib.c, dynamic_lib.h, pluginenum.c:
+ - moved out dynamic library handling code from pluginenum.c into
+ dynamic_lib.c, added entries to Makefile.am accordingly
+
+2003-12-12 21:08 descender
+
+ * beep/: input.c, input.h, main.c, pluginenum.c, skin.h, textbox.h:
+
+ - continued, last commit somehow excluded these files
+
+2003-12-12 21:02 descender
+
+ * beep.pc.in, configure.in, Input/vorbis/fileinfo.c:
+ - added beep.pc output to ./configure - more clean ups
+
+2003-12-10 03:05 mderezynski
+
+ * beep/: equalizer.c, playlist_list.c, playlistwin.c:
+
+ Forgot to make EQ transient again
+
+2003-12-10 02:25 msikkes
+
+ * beep.pc.in: Added beep pkg-config file.
+
+2003-12-08 14:01 descender
+
+ * beep/: input.c, input.h, main.h, playstatus.h, textbox.h, vis.h,
+ widget.h:
+ - start of '#include "beep.h"" replacement (with more specific
+ includes) - miscellaneous clean ups
+
+2003-12-08 12:36 descender
+
+ * beep/playlist.c:
+ - g_free() was not used correctly in playlist_set_current_name()
+
+2003-12-08 12:34 descender
+
+ * beep/: playlist.c, playlist.h:
+ - unfsck and restore playlist_current_name accessor methods
+ (someone reverted it to the old code)
+
+2003-12-08 09:43 descender
+
+ * beep/main.c, beep/skinwin.c, libbeep/configfile.c,
+ libbeep/configfile.h:
+ - fixed sigsegv with skin browser - added const constraints to
+ config read/write functions - remove commented out g_strconcat()s
+ and an unnecessary temp string allocation
+
+2003-12-07 22:14 descender
+
+ * beep/: urldecode.c, urldecode.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ - fixed memory leaks and added const constraints on input strings
+ for xmms_urldecode_*()
+
+2003-12-07 19:07 mderezynski
+
+ * beep/: Makefile.am, playlistwin.c:
+
+ Reverted subwindows to transients (for now). That breaks alot of
+ stuff again (no minimizing on entry click in GNOME window list),
+ but at least no worries about the playlist window anymore.
+
+2003-12-07 02:53 mderezynski
+
+ * beep/: Makefile.am, main.c, playlist.c, playlist_list.c,
+ pluginenum.c:
+
+ beep/pluginenum.c * Renamed scan_plugins to bmp_scan_plugins to
+ avoid DL problem on Linux w/ libxine (which has an own
+ scan_plugins)
+
+2003-12-06 04:04 mderezynski
+
+ * beep/playlist.c:
+
+ playlist.c: * removed debug messages
+
+2003-12-06 04:01 mderezynski
+
+ * beep/: dirbrowser.c, pixmaps.h, playlist.c, playlist_list.c,
+ urldecode.c:
+
+ playlist.c: * Fixed forgotten change from variables 'string' to
+ 'decoded' in playlist_ins_url_string()
+
+ playlist_list.c: * Alignment of 1-digit track numbers right
+ instead of left
+
+2003-12-05 13:36 coder_sku
+
+ * beep/tbutton.c: fixed typecasts
+
+2003-12-05 13:35 coder_sku
+
+ * beep/: dock.c, dock.h: removed totaly unused and somewhat wacky
+ function
+
+2003-12-05 13:14 coder_sku
+
+ * beep/pbutton.c: type casting correction
+
+2003-12-05 13:08 coder_sku
+
+ * beep/controlsocket.c: commented out unused static variables
+
+2003-12-05 12:56 coder_sku
+
+ * beep/: playlist.c, skinwin.h: more compiler warning fixes
+
+2003-12-05 12:51 coder_sku
+
+ * beep/pluginenum.c: compiler warning fixes
+
+2003-12-05 12:40 coder_sku
+
+ * beep/: input.c, input.h, output.c: compiler warning fixes
+
+2003-12-05 12:30 coder_sku
+
+ * beep/equalizer.c: fixed a mistype, and commented out unused
+ function
+
+2003-12-05 09:49 mderezynski
+
+ * beep/urldecode.c:
+
+ Fixed free() problem in xmms_urldecode_path()
+
+2003-12-05 01:42 coder_sku
+
+ * beep/skinwin.c: converted scan_skindir to use glib and util.c
+ archive stuff instead of unix code and repeated strcmp
+
+2003-12-04 23:14 mderezynski
+
+ * beep/dirbrowser.c:
+
+ Fixed metadata view not showing any names
+
+2003-12-04 23:08 mderezynski
+
+ * beep/: dirbrowser.c, input.c, main.c, playlist.c, urldecode.c:
+
+ Fixed crash whith DnD-ing files
+
+2003-12-04 21:20 mderezynski
+
+ * beep/urldecode.c: [no log message]
+
+2003-12-04 20:18 mderezynski
+
+ * beep/urldecode.c: [no log message]
+
+2003-12-04 20:12 mderezynski
+
+ * beep/urldecode.c: [no log message]
+
+2003-12-04 20:07 mderezynski
+
+ * Input/vorbis/vorbis.c, beep/dirbrowser.c, beep/main.c,
+ beep/pluginenum.c, beep/urldecode.c, beep/urldecode.h:
+
+ Partial revert of changes in urldecode.c
+
+2003-12-04 18:31 mderezynski
+
+ * Input/: mpg123/mpg123.c, vorbis/vorbis.c:
+
+ Re-added code neccesary for browser metadata view
+
+2003-12-04 18:30 mderezynski
+
+ * beep/: build.list (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), dirbrowser.c, input.c, input.h, pixmaps.h,
+ plugin.h:
+
+ Re-introduced (?! how could it get lost) dirbrowser.c ALL
+ warnings are back in (how could this happen?)
+
+2003-12-04 08:40 mderezynski
+
+ * beep/: Makefile.am, dirbrowser.c:
+
+ Added new file dirbrowser.c
+
+2003-12-04 08:38 mderezynski
+
+ * beep/: Makefile.am, playlist.c, playlist.h:
+
+ Browser updates, externalization into dirbrowser.c, dirbrowser.h
+
+2003-12-03 21:33 mderezynski
+
+ * beep/output.c:
+
+ Fixed prefswin freeze trough reverting output plugin change
+ behaviour
+
+2003-12-03 01:37 mderezynski
+
+ * beep/playlist.c:
+
+ Compile cleanups
+
+2003-12-03 00:28 coder_sku
+
+ * beep/: skinwin.c, util.c, util.h: compiler warnings/small
+ bugfixes
+
+2003-12-02 23:13 coder_sku
+
+ * beep/: skin.c, util.c: compiler warning fixes
+
+2003-12-02 21:29 descender
+
+ * beep/playlist.c:
+ - fixed dirbrowser segfault
+
+2003-12-02 18:55 descender
+
+ * beep/beep.h, beep/effect.c, beep/effect.h, beep/equalizer.c,
+ beep/equalizer.h, beep/input.c, beep/input.h, beep/main.c,
+ beep/playlist.c, beep/playlist.h, beep/playlist_list.c,
+ beep/playlistwin.c, beep/pluginenum.c, beep/skin.c,
+ beep/skinwin.c, beep/urldecode.c, beep/urldecode.h,
+ libbeep/configfile.c, libbeep/configfile.h,
+ libbeep/titlestring.c, libbeep/titlestring.h:
+ - added const constraints to gchar/char * string parameters
+ wherever appropriate
+
+2003-12-02 11:49 descender
+
+ * beep/main.c:
+ - removed redundant commented gtk_rc_* calls, make Beep exit with
+ code 1 instead of 0 when gtk fails to init and wasn't run to
+ command a remote session.
+
+2003-12-02 10:34 descender
+
+ * beep/playlist.c:
+ - replaced stat() and S_ISDIR() with g_file_test()
+
+2003-12-02 08:04 descender
+
+ * beep/: playlist.c, playlist.h, playlistwin.c, playlistwin.h:
+ - localized playlist_current_name - fixed memory leak in
+ playlist_set_current_name() - fixed warped redundant code in
+ playlist_get_current_name()
+
+2003-12-02 07:45 descender
+
+ * beep/controlsocket.c:
+ - Glibize anything unglibized
+
+2003-12-02 05:53 mderezynski
+
+ * AUTHORS:
+
+ Added authors to AUTHORS
+
+2003-12-01 17:02 descender
+
+ * Makefile.am, configure.in, icons/Makefile.am,
+ libbeep/Makefile.am, scripts/gen-auto-scripts.sh:
+ - added (gettext) autopoint invocation - added m4 search path in
+ relevant Makefile.am files, macro errors due to re-aclocalizing
+ by make should be fixed now - SVG icons are now installed (with
+ make install)
+
+2003-12-01 03:03 descender
+
+ * beep.spec.in:
+ - first functional RPM spec file (for Fedora)
+
+2003-12-01 00:48 descender
+
+ * Makefile.am, configure.in, icons/Makefile.am:
+ - added make targets for icons/
+
+2003-12-01 00:37 descender
+
+ * configure.in:
+ - added switch to disable building ALSA output plugin
+
+2003-11-29 12:13 descender
+
+ * beep/beep.desktop.in:
+ - revised desktop entry file, added categories field (according
+ to xdg-menu 0.8 specification)
+
+2003-11-29 07:30 descender
+
+ * Input/vorbis/: configure.c, fileinfo.c, vorbis.c:
+ - use GLib mutex instead of pthread (vf_mutex) - plugged memory
+ leaks due to double string allocations - replaced g_basename()
+ (deprecated) with g_path_get_basename() - simplified some code
+
+2003-11-29 03:11 coder_sku
+
+ * configure.in, beep/Makefile.am: removed gnet stufferoo
+
+2003-11-28 17:49 descender
+
+ * config.h.in, libbeep/config.h.in:
+ - remove config.h.in files, autogenerated by autoheader
+
+2003-11-28 10:33 descender
+
+ * Input/mpg123/Makefile.am, Visualization/blur_scope/Makefile.am
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ beep/Makefile.am:
+ - updated Makefile.am files, 'make dist' now works.
+
+2003-11-28 10:09 descender
+
+ * Makefile.am, beep.desktop.in, configure.in,
+ Output/OSS/configure.c, beep/Makefile.am, po/bmp.pot, po/fr.po,
+ scripts/armageddon.sh (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), scripts/cleanall.sh,
+ scripts/gen-auto-scripts.sh, scripts/genesis.sh (tags:
+ merge-20040115-01), scripts/make-dist.sh,
+ scripts/rm-auto-scripts.sh:
+ - added French translation (David david at dyn-ns.net) (l10n not
+ working yet) - removed duplicate beep.desktop.in /, updated
+ helper scripts to use AUTHORS to test for top-level directory
+ instead.
+
+2003-11-28 09:14 descender
+
+ * scripts/: armageddon.sh, cvs2cl.pl (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), gen-auto-scripts.sh, rm-auto-scripts.sh:
+ - updated cvs2cl.pl to 2.5 - revised/updated helper scripts (use
+ 'test' instead of '[]', added changelog generation, remove some
+ files previously missed, etc.)
+
+2003-11-28 08:41 descender
+
+ * configure.in, libbeep/configure.in (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01):
+ * use new AC_OUTPUT macro * added beep.desktop to ./configure
+ output
+
+2003-11-28 07:28 descender
+
+ * beep/controlsocket.c:
+ - oopsie fix: setup_ctrlsocket() scan loop did not terminate
+ immediately when socket file exists and cannot be unlinked (but
+ no problem since bind()-ing the file fails anyway)
+
+2003-11-28 07:16 descender
+
+ * beep/controlsocket.c:
+ - rearranged setup_ctrlsocket() logic - added timing out to
+ control socket I/O (default: 0.1s)
+
+2003-11-27 13:37 descender
+
+ * beep-config.in, configure.in:
+ - fixed beep-config(.in) borkage - added gnet2 checks
+
+2003-11-27 09:48 descender
+
+ * beep/: controlsocket.c, main.c:
+ - ported control socket code to use GLib thread functions. -
+ fixed up xmms_compat_mode option handling
+
+2003-11-27 07:24 mderezynski
+
+ * Input/mpg123/mpg123.c, Input/vorbis/vorbis.c, beep/input.c,
+ beep/input.h, beep/main.c, beep/playlist.c, beep/plugin.h,
+ beep/pluginenum.c, beep/skin.c:
+
+ Initial import of filebrowser revampness
+
+2003-11-27 07:00 coder_sku
+
+ * beep/: skin.c, skinwin.c, util.c, util.h: rewrote archive
+ decompression functions, placed them in util.c
+
+2003-11-27 02:20 coder_sku
+
+ * beep/: skin.c, skin.h: finished removing def_pixmap stuff
+
+2003-11-26 15:08 descender
+
+ * ABOUT-NLS (tags: merge-20040115-01), acinclude.m4 (tags:
+ merge-20040115-01), config.h.in, configure.in,
+ libbeep/acinclude.m4 (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), scripts/gen-auto-scripts.sh,
+ scripts/rm-auto-scripts.sh:
+ - sanitized acinclude.m4 and libbeep/acinclude.m4
+
+2003-11-26 15:06 descender
+
+ * m4/: alsa.m4, beep-old.m4, beep.m4, codeset.m4, esd.m4,
+ glibc21.m4, iconv.m4, intdiv0.m4, inttypes-pri.m4, inttypes.m4,
+ inttypes_h.m4, isc-posix.m4, lcmessage.m4, lib-ld.m4,
+ lib-link.m4, lib-prefix.m4, libmikmod.m4, libtool.m4, libxml.m4,
+ nls.m4, ogg.m4, po.m4, progtest.m4, stdint_h.m4, uintmax_t.m4,
+ ulonglong.m4, vorbis.m4 (utags: merge-20040115-01):
+ - added libtool/gettext/libmikmod/alsa/libxml/libogg/libvorbis m4
+ scripts
+
+2003-11-26 10:27 descender
+
+ * acinclude.m4, config.h.in, configure.in, m4/gettext.m4 (tags:
+ merge-20040115-01), scripts/cleanall.sh,
+ scripts/gen-auto-scripts.sh:
+ - new m4/ directory for dumping m4 scripts - start of
+ acinclude.m4 clean up
+
+2003-11-26 09:47 descender
+
+ * configure, depcomp (tags: merge-20040115-01),
+ scripts/cleanall.sh, scripts/gen-auto-scripts.sh,
+ scripts/genesis.sh, scripts/rm-auto-scripts.sh:
+ - updated helper scripts - added automake 1.7 depcomp - removed
+ wrongly checked in configure
+
+2003-11-26 09:21 descender
+
+ * po/: Makevars.template (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), stamp-po:
+ - added new gettext files, part 2.
+
+2003-11-26 09:19 descender
+
+ * po/: ChangeLog (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Makefile.in.in (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ beep.pot, bmp.pot, en at boldquot.header (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), en at quot.header (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01):
+ - regenerated and renamed pot file - added/updated new gettext
+ files
+
+2003-11-26 08:42 descender
+
+ * config.guess (tags: merge-20040115-01), config.h.in, config.rpath
+ (tags: merge-20040115-01), config.sub (tags: merge-20040115-01),
+ configure, install-sh (tags: merge-20040115-01), ltmain.sh (tags:
+ merge-20040115-01), missing (tags: merge-20040115-01),
+ mkinstalldirs (tags: merge-20040115-01):
+ - putting back automake/autoconf-pulled scripts
+
+2003-11-26 08:21 descender
+
+ * scripts/: armageddon.sh, genesis.sh:
+ - genesis and armageddon scripts (see respective files for more
+ information)
+
+2003-11-25 08:21 mderezynski
+
+ * Input/: mpg123/mpg123.c, vorbis/vorbis.c:
+
+ Fixed pthread nonsense code i've written before, heh
+
+2003-11-25 06:16 mderezynski
+
+ * beep/playlist.c:
+
+ Fixed keybindings in dirbrowser
+
+2003-11-25 04:20 mderezynski
+
+ * Input/mpg123/mpg123.c, Input/vorbis/vorbis.c, beep/input.c,
+ beep/main.c:
+
+ - Various pthread fixes - Fixed Xlib async bug
+
+2003-11-24 22:04 mderezynski
+
+ * config.h.in: [no log message]
+
+2003-11-23 23:10 mderezynski
+
+ * beep/main.c:
+
+ UTF-8 fix by David Le Brun
+
+2003-11-22 05:23 coder_sku
+
+ * beep/main.c: more replacing g_strconcat with g_build_filename
+
+2003-11-22 04:51 coder_sku
+
+ * beep/main.c: commented out useless code
+
+2003-11-22 04:49 coder_sku
+
+ * beep/: main.c, skin.c: g_build_filename fixes
+
+2003-11-22 04:05 coder_sku
+
+ * beep/beep.h: removed an xmms reference in #ifdef
+
+2003-11-22 03:32 coder_sku
+
+ * beep/skin.c: equilizer default index fix
+
+2003-11-22 02:33 coder_sku
+
+ * beep/skin.c: fixed "put path here"
+
+2003-11-22 01:52 coder_sku
+
+ * beep/skin.c: added loading of alternate gfx
+
+2003-11-22 01:50 coder_sku
+
+ * beep/main.c: removed a stray g_ascii_tolower
+
+2003-11-20 19:05 descender
+
+ * scripts/: cleanall.sh, gen-auto-scripts.sh, make-dist.sh,
+ rm-auto-scripts.sh:
+ - updated helper scripts
+
+2003-11-20 19:05 descender
+
+ * libbeep/aclocal.m4:
+ - forgot to remove libbeep/aclocal.m4
+
+2003-11-20 01:14 descender
+
+ * beep/controlsocket.c, beep/controlsocket.h, beep/equalizer.c,
+ beep/general.c, beep/input.c, beep/main.c, beep/main.h,
+ beep/output.c, beep/playlist.c, beep/playlist_list.c,
+ beep/pluginenum.c, beep/prefswin.c, beep/skin.c, beep/skin.h,
+ beep/skinwin.c, beep/util.c, beep/visualization.c,
+ libbeep/beepctrl.c, libbeep/util.c: [no log message]
+
+2003-11-20 00:39 descender
+
+ * aclocal.m4, confdefs.h, config.guess, config.h.in, config.sub,
+ configure, depcomp, install-sh, ltconfig, ltmain.sh, missing,
+ mkinstalldirs, libbeep/aclocal.m4, libbeep/configure,
+ scripts/cleanall.sh, scripts/code-stats.sh (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), scripts/cvs2cl.pl,
+ scripts/gen-auto-scripts.sh, scripts/make-dist.sh,
+ scripts/rm-auto-scripts.sh, scripts/rm-backups.sh (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01):
+ - added various helper scripts - remove auto-generated scripts
+
+2003-11-20 00:02 tag bmp-0_9_5
+
+2003-11-20 00:02 mderezynski
+
+ * FAQ (tags: merge-20040115-01), NEWS (tags: merge-20040115-01),
+ TODO, depcomp, README (tags: merge-20040115-01), TODO.bmp,
+ aclocal.m4, ltmain.sh, beep-config.in, confdefs.h, configure,
+ configure.in, config.guess, beep.spec.in, config.rpath,
+ config.sub, install-sh, missing, Makefile.am, beep.1.in,
+ config.h.in, ltconfig, mkinstalldirs, AUTHORS, INSTALL (tags:
+ merge-20040115-01), acinclude.m4, beep.desktop.in, beep.m4,
+ ABOUT-NLS, COPYING (tags: merge-20040115-01), po/LINGUAS,
+ po/Makevars (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ po/POTFILES.in, po/Rules-quot (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), po/beep.pot, po/boldquot.sed (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), po/insert-header.sin
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), po/quot.sed
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ po/remove-potcdate.sin (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), beep/beep_mini.xpm (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/sm.c, beep/sm.h,
+ po/ChangeLog, po/Makefile.in.in, beep/playlist.c,
+ beep/playlist.h, beep/bmp.c, beep/bmp.h, beep/dnd.h, beep/fft.c,
+ beep/fft.h, beep/menurow.c, beep/menurow.h, beep/playlistwin.c,
+ beep/playlistwin.h, beep/beep_logo.xpm, beep/mkdtemp.c,
+ beep/pbutton.c, beep/pbutton.h, beep/pluginenum.c,
+ beep/pluginenum.h, beep/vis.c, beep/vis.h, beep/effect.c,
+ beep/effect.h, beep/playlist_list.c, beep/playlist_list.h,
+ beep/equalizer.c, beep/equalizer.h, beep/fullscreen.c,
+ beep/fullscreen.h, beep/hslider.c, beep/hslider.h, beep/audio.inf
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/audio.png
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/beep.h,
+ beep/beep.wmconfig (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), beep/build.list, beep/eq_graph.c,
+ beep/eq_graph.h, beep/eq_slider.c, beep/eq_slider.h,
+ beep/jump_time.png (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), beep/monostereo.c, beep/monostereo.h,
+ beep/pixmaps.mk (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ beep/playstatus.c, beep/playstatus.h, beep/prefswin.c,
+ beep/prefswin.h, beep/skinwin.c, beep/skinwin.h, beep/tbutton.c,
+ beep/tbutton.h, beep/dock.c, beep/dock.h, beep/i18n.h.in (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/playlist_popup.c,
+ beep/playlist_popup.h, beep/Makefile.am, beep/general.c,
+ beep/general.h, beep/getopt.c, beep/getopt.h, beep/getopt1.c,
+ beep/info.h, beep/softvolume.c, beep/softvolume.h, beep/widget.c,
+ beep/widget.h, beep/main.c, beep/main.h, beep/about.c,
+ beep/about.h (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ beep/controlsocket.c, beep/controlsocket.h, beep/folder.png
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/jump_to.png
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/na.xpm
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/output.c,
+ beep/output.h, beep/textbox.c, beep/textbox.h, beep/urldecode.c,
+ beep/urldecode.h, beep/skin.c, beep/skin.h,
+ beep/beep_playlist.xpm (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), beep/hints.c, beep/hints.h, beep/pixmaps.h,
+ beep/playlist.png (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), beep/playlist_slider.c,
+ beep/playlist_slider.h, beep/svis.c, beep/svis.h, beep/util.c,
+ beep/util.h, beep/beep.desktop.in, beep/beep_eq.xpm (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/cda.png (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/harddisk.png
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/info.png
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01), beep/jump_to.h,
+ beep/number.c, beep/number.h, beep/play.png (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), beep/sbutton.c,
+ beep/sbutton.h, beep/visualization.c, beep/visualization.h,
+ beep/input.c, beep/input.h, beep/plugin.h, Input/Makefile.am
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/mpg123/dct64.c, Input/wav/Makefile.am (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), Input/wav/wav.c,
+ Input/wav/wav.h, Input/mpg123/README (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/dct64_MMX.s (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/mpg123/dct64_i386.c, Input/mpg123/decode_i386.c,
+ Input/mpg123/equalizer.c, Input/mpg123/getcpuflags.s (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), Input/mpg123/id3.c,
+ Input/mpg123/id3.h, Input/mpg123/id3_frame_text.c,
+ Input/mpg123/warnings.txt (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/dct64_3dnow.s (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/mpg123/decode_i586.s (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/dxhead.c, Input/mpg123/dxhead.h,
+ Input/mpg123/fileinfo.c, Input/mpg123/getbits.c,
+ Input/mpg123/getbits.h (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/id3_frame_content.c,
+ Input/mpg123/id3_tag.c, Input/mpg123/mp3.xpm (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/mpg123/Makefile.am, Input/mpg123/common.c,
+ Input/mpg123/decode.c, Input/mpg123/id3_frame_url.c,
+ Input/mpg123/mpg123.c, Input/mpg123/mpg123.h,
+ Input/mpg123/decode_2to1.c, Input/mpg123/decode_4to1.c,
+ Input/mpg123/http.c, Input/mpg123/huffman.h,
+ Input/mpg123/l2tables.h, Input/mpg123/configure.c,
+ Input/mpg123/dct36_3dnow.s (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/decode_3dnow.s (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/mpg123/decode_MMX.s (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/mpg123/id3_frame.c,
+ Input/mpg123/id3_header.h, Input/mpg123/layer1.c,
+ Input/mpg123/tabinit.c, Input/mpg123/layer2.c,
+ Input/mpg123/layer3.c, Input/vorbis/Makefile.am (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/vorbis/fileinfo.c, Input/vorbis/glibconfig.h,
+ Input/vorbis/vcedit.c, Input/vorbis/vcedit.h,
+ Input/vorbis/alternative.make (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Input/vorbis/configure.c,
+ Input/vorbis/http.c, Input/vorbis/http.h, Input/vorbis/ogg.xpm
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Input/cdaudio/cddb.c, Input/vorbis/vorbis.c,
+ Input/vorbis/vorbis.h, Input/cdaudio/Makefile.am (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), Input/cdaudio/cddb.h,
+ Input/cdaudio/cdinfo.c, Input/cdaudio/cdinfo.h,
+ Input/cdaudio/configure.c, Input/cdaudio/http.c,
+ Input/cdaudio/http.h, Input/cdaudio/cdaudio.c,
+ Input/cdaudio/cdaudio.h, Output/Makefile.am (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), Output/OSS/OSS.c,
+ Output/OSS/OSS.h, icons/beep-red.svg, icons/beep.svg,
+ Output/OSS/Makefile.am (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Output/OSS/about.c, Output/OSS/convert.c,
+ Output/OSS/init.c, Output/OSS/mixer.c, Output/OSS/soundcard.h,
+ Output/OSS/audio.c, Output/OSS/configure.c,
+ Output/alsa/Makefile.am (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Output/alsa/about.c, Output/alsa/alsa.c,
+ Output/alsa/alsa.h, Output/alsa/init.c, Output/esd/Makefile.am
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ Output/esd/about.c, Output/esd/audio.c, Output/esd/configure.c,
+ Output/esd/esd.c, Output/esd/esdout.h, Output/esd/init.c,
+ Output/esd/mixer.c, Output/alsa/audio.c, Output/alsa/configure.c,
+ libbeep/configfile.c, libbeep/configfile.h, libbeep/aclocal.m4,
+ libbeep/Makefile.am, libbeep/beepctrl.c, libbeep/beepctrl.h,
+ libbeep/config.h.in, libbeep/configure, libbeep/configure.in,
+ libbeep/dirbrowser.c, libbeep/dirbrowser.h, libbeep/folder.xpm
+ (tags: cvs-20040120-01-HEAD, merge-20040115-01),
+ libbeep/formatter.c, libbeep/formatter.h, libbeep/titlestring.c,
+ libbeep/titlestring.h, Visualization/Makefile.am (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Visualization/blur_scope/xmms_logo.xpm (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01), libbeep/acinclude.m4,
+ libbeep/util.c, libbeep/util.h, libbeep/xconvert.c,
+ libbeep/xconvert.h, libbeep/xentry.c, libbeep/xentry.h,
+ Visualization/blur_scope/Makefile.am,
+ Visualization/blur_scope/blur_8.s (tags: cvs-20040120-01-HEAD,
+ merge-20040115-01), Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/blur_scope.h,
+ Visualization/blur_scope/bscope_logo.xpm (tags:
+ cvs-20040120-01-HEAD, merge-20040115-01),
+ Visualization/blur_scope/config.c (utags: bmp-0_9_5): Initial CVS
+ import at SF.net
+
+2003-11-20 00:02 mderezynski
+
+ * FAQ, NEWS, TODO, depcomp, README, TODO.bmp, aclocal.m4,
+ ltmain.sh, beep-config.in, confdefs.h, configure, configure.in,
+ config.guess, beep.spec.in, config.rpath, config.sub, install-sh,
+ missing, Makefile.am, beep.1.in, config.h.in, ltconfig,
+ mkinstalldirs, AUTHORS, INSTALL, acinclude.m4, beep.desktop.in,
+ beep.m4, ABOUT-NLS, COPYING, po/LINGUAS, po/Makevars,
+ po/POTFILES.in, po/Rules-quot, po/beep.pot, po/boldquot.sed,
+ po/insert-header.sin, po/quot.sed, po/remove-potcdate.sin,
+ beep/beep_mini.xpm, beep/sm.c, beep/sm.h, po/ChangeLog,
+ po/Makefile.in.in, beep/playlist.c, beep/playlist.h, beep/bmp.c,
+ beep/bmp.h, beep/dnd.h, beep/fft.c, beep/fft.h, beep/menurow.c,
+ beep/menurow.h, beep/playlistwin.c, beep/playlistwin.h,
+ beep/beep_logo.xpm, beep/mkdtemp.c, beep/pbutton.c,
+ beep/pbutton.h, beep/pluginenum.c, beep/pluginenum.h, beep/vis.c,
+ beep/vis.h, beep/effect.c, beep/effect.h, beep/playlist_list.c,
+ beep/playlist_list.h, beep/equalizer.c, beep/equalizer.h,
+ beep/fullscreen.c, beep/fullscreen.h, beep/hslider.c,
+ beep/hslider.h, beep/audio.inf, beep/audio.png, beep/beep.h,
+ beep/beep.wmconfig, beep/build.list, beep/eq_graph.c,
+ beep/eq_graph.h, beep/eq_slider.c, beep/eq_slider.h,
+ beep/jump_time.png, beep/monostereo.c, beep/monostereo.h,
+ beep/pixmaps.mk, beep/playstatus.c, beep/playstatus.h,
+ beep/prefswin.c, beep/prefswin.h, beep/skinwin.c, beep/skinwin.h,
+ beep/tbutton.c, beep/tbutton.h, beep/dock.c, beep/dock.h,
+ beep/i18n.h.in, beep/playlist_popup.c, beep/playlist_popup.h,
+ beep/Makefile.am, beep/general.c, beep/general.h, beep/getopt.c,
+ beep/getopt.h, beep/getopt1.c, beep/info.h, beep/softvolume.c,
+ beep/softvolume.h, beep/widget.c, beep/widget.h, beep/main.c,
+ beep/main.h, beep/about.c, beep/about.h, beep/controlsocket.c,
+ beep/controlsocket.h, beep/folder.png, beep/jump_to.png,
+ beep/na.xpm, beep/output.c, beep/output.h, beep/textbox.c,
+ beep/textbox.h, beep/urldecode.c, beep/urldecode.h, beep/skin.c,
+ beep/skin.h, beep/beep_playlist.xpm, beep/hints.c, beep/hints.h,
+ beep/pixmaps.h, beep/playlist.png, beep/playlist_slider.c,
+ beep/playlist_slider.h, beep/svis.c, beep/svis.h, beep/util.c,
+ beep/util.h, beep/beep.desktop.in, beep/beep_eq.xpm,
+ beep/cda.png, beep/harddisk.png, beep/info.png, beep/jump_to.h,
+ beep/number.c, beep/number.h, beep/play.png, beep/sbutton.c,
+ beep/sbutton.h, beep/visualization.c, beep/visualization.h,
+ beep/input.c, beep/input.h, beep/plugin.h, Input/Makefile.am,
+ Input/mpg123/dct64.c, Input/wav/Makefile.am, Input/wav/wav.c,
+ Input/wav/wav.h, Input/mpg123/README, Input/mpg123/dct64_MMX.s,
+ Input/mpg123/dct64_i386.c, Input/mpg123/decode_i386.c,
+ Input/mpg123/equalizer.c, Input/mpg123/getcpuflags.s,
+ Input/mpg123/id3.c, Input/mpg123/id3.h,
+ Input/mpg123/id3_frame_text.c, Input/mpg123/warnings.txt,
+ Input/mpg123/dct64_3dnow.s, Input/mpg123/decode_i586.s,
+ Input/mpg123/dxhead.c, Input/mpg123/dxhead.h,
+ Input/mpg123/fileinfo.c, Input/mpg123/getbits.c,
+ Input/mpg123/getbits.h, Input/mpg123/id3_frame_content.c,
+ Input/mpg123/id3_tag.c, Input/mpg123/mp3.xpm,
+ Input/mpg123/Makefile.am, Input/mpg123/common.c,
+ Input/mpg123/decode.c, Input/mpg123/id3_frame_url.c,
+ Input/mpg123/mpg123.c, Input/mpg123/mpg123.h,
+ Input/mpg123/decode_2to1.c, Input/mpg123/decode_4to1.c,
+ Input/mpg123/http.c, Input/mpg123/huffman.h,
+ Input/mpg123/l2tables.h, Input/mpg123/configure.c,
+ Input/mpg123/dct36_3dnow.s, Input/mpg123/decode_3dnow.s,
+ Input/mpg123/decode_MMX.s, Input/mpg123/id3_frame.c,
+ Input/mpg123/id3_header.h, Input/mpg123/layer1.c,
+ Input/mpg123/tabinit.c, Input/mpg123/layer2.c,
+ Input/mpg123/layer3.c, Input/vorbis/Makefile.am,
+ Input/vorbis/fileinfo.c, Input/vorbis/glibconfig.h,
+ Input/vorbis/vcedit.c, Input/vorbis/vcedit.h,
+ Input/vorbis/alternative.make, Input/vorbis/configure.c,
+ Input/vorbis/http.c, Input/vorbis/http.h, Input/vorbis/ogg.xpm,
+ Input/cdaudio/cddb.c, Input/vorbis/vorbis.c,
+ Input/vorbis/vorbis.h, Input/cdaudio/Makefile.am,
+ Input/cdaudio/cddb.h, Input/cdaudio/cdinfo.c,
+ Input/cdaudio/cdinfo.h, Input/cdaudio/configure.c,
+ Input/cdaudio/http.c, Input/cdaudio/http.h,
+ Input/cdaudio/cdaudio.c, Input/cdaudio/cdaudio.h,
+ Output/Makefile.am, Output/OSS/OSS.c, Output/OSS/OSS.h,
+ icons/beep-red.svg, icons/beep.svg, Output/OSS/Makefile.am,
+ Output/OSS/about.c, Output/OSS/convert.c, Output/OSS/init.c,
+ Output/OSS/mixer.c, Output/OSS/soundcard.h, Output/OSS/audio.c,
+ Output/OSS/configure.c, Output/alsa/Makefile.am,
+ Output/alsa/about.c, Output/alsa/alsa.c, Output/alsa/alsa.h,
+ Output/alsa/init.c, Output/esd/Makefile.am, Output/esd/about.c,
+ Output/esd/audio.c, Output/esd/configure.c, Output/esd/esd.c,
+ Output/esd/esdout.h, Output/esd/init.c, Output/esd/mixer.c,
+ Output/alsa/audio.c, Output/alsa/configure.c,
+ libbeep/configfile.c, libbeep/configfile.h, libbeep/aclocal.m4,
+ libbeep/Makefile.am, libbeep/beepctrl.c, libbeep/beepctrl.h,
+ libbeep/config.h.in, libbeep/configure, libbeep/configure.in,
+ libbeep/dirbrowser.c, libbeep/dirbrowser.h, libbeep/folder.xpm,
+ libbeep/formatter.c, libbeep/formatter.h, libbeep/titlestring.c,
+ libbeep/titlestring.h, Visualization/Makefile.am,
+ Visualization/blur_scope/xmms_logo.xpm, libbeep/acinclude.m4,
+ libbeep/util.c, libbeep/util.h, libbeep/xconvert.c,
+ libbeep/xconvert.h, libbeep/xentry.c, libbeep/xentry.h,
+ Visualization/blur_scope/Makefile.am,
+ Visualization/blur_scope/blur_8.s,
+ Visualization/blur_scope/blur_scope.c,
+ Visualization/blur_scope/blur_scope.h,
+ Visualization/blur_scope/bscope_logo.xpm,
+ Visualization/blur_scope/config.c: Initial revision
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/FAQ
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/FAQ 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/FAQ 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,173 @@
+Beep Media Player FAQ
+
+NOTE: This document is no longer maintained. Please check the FAQ on
+the BMP website (http://beepmp.sf.net)
+
+Contents
+========
+
+Compilation:
+
+ c1: The CVS version won't compile, but the tarball does
+
+Running:
+
+ r1: Why do I keep getting "Gdk-ERROR **: an x io error occurred" when I try
+ to use BMP?
+ r2: My X server crashes when I try to change skin, what can I do?
+ r3: When using GNOME / Enlightenment the playlist window got lost somewhere
+ in my virtual desktops what should I do? I'm all out of breadcrumbs.
+ r4: Why do I keep getting "Gdk-WARNING **: shmat failed!" in Solaris?
+ r5: Why do BMP windows behave differently than my other windows?
+ r6: Why does BMP have 5-6 running instances which each takes x% of my memory,
+ isn't 5-6*x% memory A REAL WASTE?
+
+General:
+
+ g1: Is there a mailing list for BMP?
+ g2: How do I unsubscribe from the mailing list?
+ g3: Can I use XMMS plugins with BMP?
+
+
+______________________________________________________________________________
+
+
+Compilation
+===========
+
+ c1: The CVS version won't compile, but the tarball does
+
+ This can happen for various reasons:
+
+ 1. You do not have a sufficiently new version of autoconf and/or automake
+ installed. BMP requires at least autoconf 2.5 and automake 1.7 in order
+ to compile directly from CVS.
+
+ 2. If your version of autoconf/automake is recent enough, you may have
+ multiple copies of them installed. To check, you can run this command:
+
+ autoconf --version ; automake --version
+
+ Normally the commands "autoconf" and "automake" will run their latest
+ versions. If they do not, you can specify the correct versions to use
+ like this:
+
+ AUTOCONF=autoconf-xx AUTOMAKE=automake-yy ACLOCAL=aclocal-yy ./autogen.sh
+
+ (where xx, yy are the versions of autoconf/automake respectively)
+
+ For Gentoo users, use this instead:
+
+ WANT_AUTOCONF=xx WANT_AUTOMAKE=yy ./autogen.sh
+
+
+______________________________________________________________________________
+
+Running:
+
+ r1: Why do I keep getting "Gdk-ERROR **: an x io error occurred" when I
+ try to use BMP?
+
+ This is because you're running an older system with libc5 and you don't
+ have Thread Safe X libs. You might want to download these thread aware
+ X libs and install them, just untar them into /usr/X11R6/lib (or appropriate
+ path) NOTE: do NOT do this while X is running.
+______________________________________________________________________________
+
+ r2: My X server crashes when I try to change skin, what can I do?
+
+ This is because of your window manager, if you browse the configure file
+ for your window manager you'll find an option called SaveUnder somewhere.
+ In Window Maker change "UseSaveUnders = YES;" to "UseSaveUnders = NO;"
+ This will fix it for you.. (don't forget to restart your window manager)
+______________________________________________________________________________
+
+ r3: When using GNOME / Enlightenment the playlist window got lost somewhere
+ in my virtual desktops what should I do? I'm all out of breadcrumbs.
+
+ Edit the ~/.bmp/config file and change the playlist_x= and playlist_y=
+ to sane values.
+______________________________________________________________________________
+
+ r4: Why do I keep getting "Gdk-WARNING **: shmat failed!" in Solaris?
+
+ Solaris (2.5, 2.6, 2.7) has insufficient IPC settings by default for some
+ products that use shared memory.
+ You need to place this in /etc/system:
+ set shmsys:shminfo_shmmax = 8388608
+ set shmsys:shminfo_shmmni = 0x1000
+ set shmsys:shminfo_shmseg = 0x100
+ Thanks to Yuri Kulaghin and Jeff Johnson
+______________________________________________________________________________
+
+ r5: Why do BMP windows behave differently than my other windows?
+
+ Since BMP disables the window managers title bars, the window manager is
+ unable to raise/lower/move BMP as it's configured to do.
+______________________________________________________________________________
+
+ r6: Why does BMP have 5-6 running instances which each takes x% of my
+ memory, isn't 5-6*x% memory A REAL WASTE?
+
+ BMP is not using that memory for each instance, it shares the memory
+ between the instances. If you have 6 entries in your process list, each
+ claiming to take 5 MB, BMP is using 5 MB, and not 30 MB (5x6).
+______________________________________________________________________________
+
+
+General
+=======
+
+ g1: Is there a mailing list for BMP?
+
+ Yes there is. In fact there are 3, namely:
+
+ a) beepmp-users
+ b) beepmp-devel
+ c) beepmp-cvs
+
+ You can subscribe each of them at:
+ http://sourceforge.net/mail/?group_id=95272
+
+ Please keep any messages sent to this list STRICTLY about BMP. Or we will
+ have to moderate it.
+______________________________________________________________________________
+
+ g2: How do I unsubscribe from the mailing lists?
+
+ You can use the page:
+ http://sourceforge.net/mail/?group_id=95272
+
+______________________________________________________________________________
+
+ g3: Can I use XMMS plugins with BMP?
+
+ Generally no in their binary form i.e. '.so' files [1]. You can however
+ attempt to compile them from source using GTK 2.4.
+
+ GTK 1.2 programs are usually compiled with a 'gtk-config --xx'
+ parameter passed to the compiler. You can try replacing that with
+ 'pkg-config gtk+-2.0 -xx'. For example, if the compile command is:
+
+ gcc -Wall -ansi -c `gtk-config --cflags --libs` plugin.c
+
+ Modify it to:
+
+ gcc -Wall -ansi -c `pkg-config gtk+-2.0 --cflags --libs` plugin.c
+
+ If this fails, you will need to modify the source code to use GTK 2.4. Refer
+ to the official guide on migrating the code:
+
+ http://developer.gnome.org/doc/API/2.2/gtk/migrating.html
+
+
+ [1] Bear in mind that BMP uses GTK 2.4 while XMMS uses GTK 1.2. Consequently,
+ XMMS plugins are compiled against 1.2 and will not work properly with BMP.
+
+ The technical reason for this is that GTK 1.2 and GTK 2.4 share the same
+ symbol names for the most part and there is no easy way to get the dynamic
+ linker to resolve to the right one.
+
+
+
+______________________________________________________________________________
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/INSTALL
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/INSTALL 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/INSTALL 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,229 @@
+Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
+Foundation, Inc.
+
+ This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ 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 only 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. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. 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.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. 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.
+
+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=c89 CFLAGS=-O2 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 must use a version of `make' that
+supports the `VPATH' variable, such as 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 `..'.
+
+ If you have to use a `make' that does not support the `VPATH'
+variable, you have 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.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' 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.
+
+ 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'.
+
+Optional Features
+=================
+
+ 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.
+
+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 `--target=TYPE' option 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
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of the options to `configure', and exit.
+
+`--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.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,2 @@
+ALL_PLUGINS = mpg123 vorbis cdaudio wav
+SUBDIRS = $(INPUT_PLUGINS)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,33 @@
+cdaudiosources = cdaudio.c \
+configure.c \
+cdaudio.h \
+cdinfo.c \
+cdinfo.h \
+cddb.c \
+cddb.h \
+http.c \
+http.h
+
+if HAVE_CDROM
+
+cdaudioltlibs = libcdaudio.la
+cdaudiobuildsources = $(cdaudiosources)
+
+else
+
+cdaudioltlibs =
+cdaudiobuildsources =
+
+endif
+
+EXTRA_DIST = $(cdaudiosources)
+
+lib_LTLIBRARIES = $(cdaudioltlibs)
+
+libdir = $(plugindir)/$(INPUT_PLUGIN_DIR)
+
+INCLUDES = @GTK_CFLAGS@ @GCONF_CFLAGS@ -I$(top_builddir)/intl -I$(top_srcdir)
+libcdaudio_la_LDFLAGS = @PLUGIN_LDFLAGS@
+libcdaudio_la_LIBADD = @GTK_LIBS@
+libcdaudio_la_SOURCES = $(cdaudiobuildsources)
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1250 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2003 Haavard Kvaalen <havardk at xmms.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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "cdaudio.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+
+#include <libbeep/configdb.h>
+#include <libbeep/util.h>
+#include <libbeep/titlestring.h>
+#include "beep/output.h"
+
+#ifdef CDROMSTOP
+# define XMMS_STOP CDROMSTOP
+#elif defined CDIOCSTOP
+# define XMMS_STOP CDIOCSTOP
+#else
+# error "No stop ioctl"
+#endif
+
+#ifdef CDIOCPAUSE
+# define XMMS_PAUSE CDIOCPAUSE
+#elif defined CDROMPAUSE
+# define XMMS_PAUSE CDROMPAUSE
+#else
+# error "No pause ioctl"
+#endif
+
+#ifdef CDIOCRESUME
+# define XMMS_RESUME CDIOCRESUME
+#elif defined CDROMRESUME
+# define XMMS_RESUME CDROMRESUME
+#else
+# error "No resume ioctl"
+#endif
+
+/*
+ * Distributions should not patch this, but instead use the
+ * --with-cdda-device=path and --with-cdda-dir=path configure options.
+ */
+
+#ifndef CDDA_DEVICE
+# ifdef HAVE_SYS_CDIO_H
+# ifdef __FreeBSD__
+# define CDDA_DEVICE "/dev/acd0c"
+# elif defined __OpenBSD__
+# define CDDA_DEVICE "/dev/cd0c"
+# else
+# define CDDA_DEVICE "/vol/dev/aliases/cdrom0"
+# endif
+# else
+# define CDDA_DEVICE "/dev/cdrom"
+# endif
+#endif
+
+#ifndef CDDA_DIRECTORY
+# ifdef HAVE_SYS_CDIO_H
+# ifdef __FreeBSD__
+# define CDDA_DIRECTORY "/cdrom"
+# elif defined __OpenBSD__
+# define CDDA_DIRECTORY "/cdrom"
+# else
+# define CDDA_DIRECTORY "/cdrom/cdrom0"
+# endif
+# else
+# define CDDA_DIRECTORY "/mnt/cdrom"
+# endif
+#endif
+
+
+
+
+static char *cdda_get_title(cdda_disc_toc_t * toc, int track);
+static gboolean stop_timeout(gpointer data);
+
+static void cdda_init(void);
+static int is_our_file(char *filename);
+static GList *scan_dir(char *dir);
+static void play_file(char *filename);
+static void stop(void);
+static void cdda_pause(short p);
+static void seek(int time);
+static int get_time(void);
+static void get_song_info(char *filename, char **title, int *length);
+static void get_volume(int *l, int *r);
+static void set_volume(int l, int r);
+static void cleanup(void);
+void cdda_fileinfo(char *filename);
+
+InputPlugin cdda_ip = {
+ NULL,
+ NULL,
+ NULL, /* Description */
+ cdda_init,
+ NULL, /* about */
+ cdda_configure,
+ is_our_file,
+ scan_dir,
+ play_file,
+ stop,
+ cdda_pause,
+ seek,
+ NULL, /* set_eq */
+ get_time,
+ get_volume,
+ set_volume,
+ cleanup,
+ NULL, /* obsolete */
+ NULL, /* add_vis_pcm */
+ NULL, /* set_info, filled in by xmms */
+ NULL, /* set_info_text, filled in by xmms */
+ get_song_info,
+ NULL, /* cdda_fileinfo, *//* file_info_box */
+ NULL /* output plugin handle */
+};
+
+CDDAConfig cdda_cfg;
+
+static struct {
+ struct driveinfo drive;
+ cdda_disc_toc_t cd_toc;
+ int track;
+ int fd;
+ gboolean playing;
+} cdda_playing;
+
+static struct {
+ GThread *thread;
+ gboolean audio_error, eof;
+ int seek;
+
+} dae_data;
+
+static gboolean is_paused;
+static int pause_time;
+
+struct timeout {
+ int id;
+ char *device;
+};
+
+static GList *timeout_list;
+
+/* Time to delay stop command in 1/10 second */
+#define STOP_DELAY 20
+
+InputPlugin *
+get_iplugin_info(void)
+{
+ cdda_ip.description = g_strdup_printf(_("CD Audio Plugin"));
+ return &cdda_ip;
+}
+
+
+
+#ifdef BEEP_CDROM_SOLARIS
+/*
+ * Lowlevel cdrom access, Solaris style (Solaris, Linux)
+ */
+
+static void
+play_ioctl(struct cdda_msf *start, struct cdda_msf *end)
+{
+ struct cdrom_msf msf;
+
+ msf.cdmsf_min0 = start->minute;
+ msf.cdmsf_sec0 = start->second;
+ msf.cdmsf_frame0 = start->frame;
+ msf.cdmsf_min1 = end->minute;
+ msf.cdmsf_sec1 = end->second;
+ msf.cdmsf_frame1 = end->frame;
+ ioctl(cdda_playing.fd, CDROMPLAYMSF, &msf);
+}
+
+static int
+get_current_frame(void)
+{
+ struct cdrom_subchnl subchnl;
+
+ subchnl.cdsc_format = CDROM_MSF;
+ if (ioctl(cdda_playing.fd, CDROMSUBCHNL, &subchnl) < 0)
+ return -1;
+
+ switch (subchnl.cdsc_audiostatus) {
+ case CDROM_AUDIO_COMPLETED:
+ case CDROM_AUDIO_ERROR:
+ return -1;
+ }
+
+ return (LBA(subchnl.cdsc_absaddr.msf));
+}
+
+#if !defined(CDROMVOLREAD)
+static int volume_left = 100, volume_right = 100;
+#endif
+
+static void
+drive_get_volume(int *l, int *r)
+{
+#if defined(CDROMVOLREAD)
+ struct cdrom_volctrl vol;
+
+ if (cdda_playing.fd != -1 && !ioctl(cdda_playing.fd, CDROMVOLREAD, &vol)) {
+ *l = (100 * vol.channel0) / 255;
+ *r = (100 * vol.channel1) / 255;
+ }
+#if 0
+ else if (cdda_playing.fd != -1)
+ g_message("CDROMVOLREAD failed");
+#endif
+#else
+ *l = volume_left;
+ *r = volume_right;
+#endif
+}
+
+static void
+drive_set_volume(int l, int r)
+{
+ struct cdrom_volctrl vol;
+
+ if (cdda_playing.fd != -1) {
+ vol.channel0 = vol.channel2 = (l * 255) / 100;
+ vol.channel1 = vol.channel3 = (r * 255) / 100;
+ ioctl(cdda_playing.fd, CDROMVOLCTRL, &vol);
+ }
+#if !defined(CDROMVOLREAD)
+ volume_left = l;
+ volume_right = r;
+#endif
+}
+
+#ifdef CDROMREADAUDIO
+int
+read_audio_data(int fd, int pos, int num, void *buf)
+{
+ struct cdrom_read_audio cdra;
+
+#if 1
+ cdra.addr.lba = pos - CDDA_MSF_OFFSET;
+ cdra.addr_format = CDROM_LBA;
+#else
+ cdra.addr.msf.minute = pos / (60 * 75);
+ cdra.addr.msf.second = (pos / 75) % 60;
+ cdra.addr.msf.frame = pos % 75;
+ cdra.addr_format = CDROM_MSF;
+#endif
+
+ cdra.nframes = num;
+ cdra.buf = buf;
+
+ if (ioctl(fd, CDROMREADAUDIO, &cdra) < 0)
+ return -errno;
+
+ return cdra.nframes;
+}
+#endif /* CDROMREADAUDIO */
+
+#if defined(CDROMCDDA)
+int
+read_audio_data(int fd, int pos, int num, void *buf)
+{
+ struct cdrom_cdda cdra;
+
+ cdra.cdda_addr = pos - CDDA_MSF_OFFSET;
+ cdra.cdda_length = num;
+ cdra.cdda_data = buf;
+ cdra.cdda_subcode = CDROM_DA_NO_SUBCODE;
+ if (ioctl(fd, CDROMCDDA, &cdra) < 0)
+ return -errno;
+
+ return cdra.cdda_length;
+}
+#endif
+
+static gboolean
+cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
+{
+ struct cdrom_tochdr tochdr;
+ struct cdrom_tocentry tocentry;
+ int i;
+
+
+
+ if (ioctl(fd, CDROMREADTOCHDR, &tochdr))
+ return FALSE;
+
+ for (i = tochdr.cdth_trk0; i <= tochdr.cdth_trk1; i++) {
+ tocentry.cdte_format = CDROM_MSF;
+ tocentry.cdte_track = i;
+ if (ioctl(fd, CDROMREADTOCENTRY, &tocentry))
+ return FALSE;
+ info->track[i].minute = tocentry.cdte_addr.msf.minute;
+ info->track[i].second = tocentry.cdte_addr.msf.second;
+ info->track[i].frame = tocentry.cdte_addr.msf.frame;
+ info->track[i].flags.data_track =
+ tocentry.cdte_ctrl == CDROM_DATA_TRACK;
+
+ }
+
+ /* Get the leadout track */
+ tocentry.cdte_track = CDROM_LEADOUT;
+ tocentry.cdte_format = CDROM_MSF;
+
+ if (ioctl(fd, CDROMREADTOCENTRY, &tocentry))
+ return FALSE;
+ info->leadout.minute = tocentry.cdte_addr.msf.minute;
+ info->leadout.second = tocentry.cdte_addr.msf.second;
+ info->leadout.frame = tocentry.cdte_addr.msf.frame;
+
+ info->first_track = tochdr.cdth_trk0;
+ info->last_track = tochdr.cdth_trk1;
+
+ return TRUE;
+}
+
+#endif
+
+#ifdef BEEP_CDROM_BSD
+/*
+ * Lowlevel cdrom access, BSD style (FreeBSD, OpenBSD, NetBSD, Darwin)
+ */
+
+static void
+play_ioctl(struct cdda_msf *start, struct cdda_msf *end)
+{
+ struct ioc_play_msf msf;
+
+ msf.start_m = start->minute;
+ msf.start_s = start->second;
+ msf.start_f = start->frame;
+ msf.end_m = end->minute;
+ msf.end_s = end->second;
+ msf.end_f = end->frame;
+ ioctl(cdda_playing.fd, CDIOCPLAYMSF, &msf);
+}
+
+static int
+get_current_frame(void)
+{
+ struct ioc_read_subchannel subchnl;
+ struct cd_sub_channel_info subinfo;
+ subchnl.address_format = CD_MSF_FORMAT;
+ subchnl.data_format = CD_CURRENT_POSITION;
+ subchnl.track = 0;
+ subchnl.data_len = sizeof(subinfo);
+ subchnl.data = &subinfo;
+ if (ioctl(cdda_playing.fd, CDIOCREADSUBCHANNEL, &subchnl) < 0)
+ return -1;
+
+#ifdef BEEP_CDROM_BSD_DARWIN
+ return ((subchnl.data->what.position.absaddr[1] * 60
+ subchnl.data->what.position.absaddr[2]) * 75 +
+ subchnl.data->what.position.absaddr[3]);
+#else
+ return (LBA(subchnl.data->what.position.absaddr.msf));
+#endif
+}
+
+static void
+drive_get_volume(int *l, int *r)
+{
+ struct ioc_vol vol;
+
+ if (cdda_playing.fd != -1) {
+ ioctl(cdda_playing.fd, CDIOCGETVOL, &vol);
+ *l = (100 * vol.vol[0]) / 255;
+ *r = (100 * vol.vol[1]) / 255;
+ }
+}
+
+static void
+drive_set_volume(int l, int r)
+{
+ struct ioc_vol vol;
+
+ if (cdda_playing.fd != -1) {
+ vol.vol[0] = vol.vol[2] = (l * 255) / 100;
+ vol.vol[1] = vol.vol[3] = (r * 255) / 100;
+ ioctl(cdda_playing.fd, CDIOCSETVOL, &vol);
+ }
+}
+
+
+#if defined(CDIOCREADAUDIO)
+#ifdef __FreeBSD__
+int
+read_audio_data(int fd, int pos, int num, void *buf)
+{
+ struct ioc_read_audio cdra;
+
+ cdra.address.lba = pos - CDDA_MSF_OFFSET;
+ cdra.address_format = CD_LBA_FORMAT;
+ cdra.nframes = num;
+ cdra.buffer = buf;
+
+ if (ioctl(fd, CDIOCREADAUDIO, &cdra) < 0)
+ return -errno;
+
+ return cdra.nframes;
+}
+#else
+#error Please test on other <sys/cdio.h> platforms.
+#endif
+#endif /* CDIOCREADAUDIO */
+
+#ifdef BEEP_CDROM_BSD_NETBSD /* NetBSD, OpenBSD */
+
+static gboolean
+cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
+{
+ struct ioc_toc_header tochdr;
+ struct ioc_read_toc_entry tocentry;
+ struct cd_toc_entry tocentrydata;
+ int i;
+
+ if (ioctl(fd, CDIOREADTOCHEADER, &tochdr))
+ return FALSE;
+
+ for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
+ tocentry.address_format = CD_MSF_FORMAT;
+
+ tocentry.starting_track = i;
+ tocentry.data = &tocentrydata;
+ tocentry.data_len = sizeof(tocentrydata);
+ if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
+ return FALSE;
+ info->track[i].minute = tocentry.data->addr.msf.minute;
+ info->track[i].second = tocentry.data->addr.msf.second;
+ info->track[i].frame = tocentry.data->addr.msf.frame;
+ info->track[i].flags.data_track = (tocentry.data->control & 4) == 4;
+ }
+
+ /* Get the leadout track */
+ tocentry.address_format = CD_MSF_FORMAT;
+
+ tocentry.starting_track = 0xAA;
+ tocentry.data = &tocentrydata;
+ tocentry.data_len = sizeof(tocentrydata);
+ if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
+ return FALSE;
+ info->leadout.minute = tocentry.data->addr.msf.minute;
+ info->leadout.second = tocentry.data->addr.msf.second;
+ info->leadout.frame = tocentry.data->addr.msf.frame;
+
+ info->first_track = tochdr.starting_track;
+ info->last_track = tochdr.ending_track;
+
+ return TRUE;
+}
+
+#elif defined(BEEP_CDROM_BSD_DARWIN)
+
+static gboolean
+cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
+{
+ struct ioc_toc_header tochdr;
+ struct ioc_read_toc_entry tocentry;
+ int i;
+
+ if (ioctl(fd, CDIOREADTOCHEADER, &tochdr))
+ return FALSE;
+
+ for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
+ tocentry.address_format = CD_MSF_FORMAT;
+
+ tocentry.starting_track = i;
+ if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
+ return FALSE;
+ info->track[i].minute = tocentry.data->addr[1];
+ info->track[i].second = tocentry.data->addr[2];
+ info->track[i].frame = tocentry.data->addr[3];
+ info->track[i].flags.data_track = (tocentry.data->control & 4) == 4;
+ }
+
+ /* Get the leadout track */
+ tocentry.address_format = CD_MSF_FORMAT;
+
+ tocentry.starting_track = 0xAA;
+ if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
+ return FALSE;
+ info->leadout.minute = tocentry.data->addr[1];
+ info->leadout.second = tocentry.data->addr[2];
+ info->leadout.frame = tocentry.data->addr[3];
+
+ return TRUE;
+}
+
+#else /* FreeBSD */
+
+static gboolean
+cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
+{
+ struct ioc_toc_header tochdr;
+ struct ioc_read_toc_single_entry tocentry;
+ int i;
+
+ if (ioctl(fd, CDIOREADTOCHEADER, &tochdr))
+ return FALSE;
+
+ for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
+ tocentry.address_format = CD_MSF_FORMAT;
+
+ tocentry.track = i;
+ if (ioctl(fd, CDIOREADTOCENTRY, &tocentry))
+ return FALSE;
+ info->track[i].minute = tocentry.entry.addr.msf.minute;
+ info->track[i].second = tocentry.entry.addr.msf.second;
+ info->track[i].frame = tocentry.entry.addr.msf.frame;
+ info->track[i].flags.data_track = (tocentry.entry.control & 4) == 4;
+ }
+
+ /* Get the leadout track */
+ tocentry.address_format = CD_MSF_FORMAT;
+
+ tocentry.track = 0xAA;
+ if (ioctl(fd, CDIOREADTOCENTRY, &tocentry))
+ return FALSE;
+ info->leadout.minute = tocentry.entry.addr.msf.minute;
+ info->leadout.second = tocentry.entry.addr.msf.second;
+ info->leadout.frame = tocentry.entry.addr.msf.frame;
+
+ info->first_track = tochdr.starting_track;
+ info->last_track = tochdr.ending_track;
+
+ return TRUE;
+}
+#endif
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+extern gboolean
+is_mounted(const char *device_name)
+{
+#if defined(HAVE_MNTENT_H) || defined(HAVE_GETMNTINFO)
+ char devname[256];
+ struct stat st;
+#if defined(HAVE_MNTENT_H)
+ FILE *mounts;
+ struct mntent *mnt;
+#elif defined(HAVE_GETMNTINFO)
+ struct statfs *fsp;
+ int entries;
+#endif
+
+ if (lstat(device_name, &st) < 0)
+ return -1;
+
+ if (S_ISLNK(st.st_mode))
+ readlink(device_name, devname, 256);
+ else
+ strncpy(devname, device_name, 256);
+
+#if defined(HAVE_MNTENT_H)
+ if ((mounts = setmntent(MOUNTED, "r")) == NULL)
+ return TRUE;
+
+ while ((mnt = getmntent(mounts)) != NULL) {
+ if (strcmp(mnt->mnt_fsname, devname) == 0) {
+ endmntent(mounts);
+ return TRUE;
+ }
+ }
+ endmntent(mounts);
+#elif defined(HAVE_GETMNTINFO)
+ entries = getmntinfo(&fsp, MNT_NOWAIT);
+ if (entries < 0)
+ return NULL;
+
+ while (entries-- > 0) {
+ if (!strcmp(fsp->f_mntfromname, devname))
+ return TRUE;
+ fsp++;
+ }
+#endif
+#endif
+ return FALSE;
+}
+
+
+gboolean
+cdda_get_toc(cdda_disc_toc_t * info, const char *device)
+{
+ gboolean retv = FALSE;
+ int fd;
+
+ if (is_mounted(device))
+ return FALSE;
+
+ if ((fd = open(device, CDOPENFLAGS)) == -1)
+ return FALSE;
+
+ memset(info, 0, sizeof(cdda_disc_toc_t));
+
+ retv = cdda_get_toc_lowlevel(fd, info);
+ close(fd);
+
+ return retv;
+}
+
+static void
+cdda_init(void)
+{
+ ConfigDb *db;
+ struct driveinfo *drive = g_malloc0(sizeof(struct driveinfo));
+ int ndrives = 1, i;
+
+ cdda_playing.fd = -1;
+ memset(&cdda_cfg, 0, sizeof(CDDAConfig));
+
+#ifdef HAVE_OSS
+ drive->mixer = CDDA_MIXER_OSS;
+ drive->oss_mixer = SOUND_MIXER_CD;
+#endif
+
+ db = bmp_cfg_db_open();
+
+ /* These names are used for backwards compatibility */
+ bmp_cfg_db_get_string(db, "CDDA", "device", &drive->device);
+ bmp_cfg_db_get_string(db, "CDDA", "directory", &drive->directory);
+ bmp_cfg_db_get_int(db, "CDDA", "mixer", &drive->mixer);
+ bmp_cfg_db_get_int(db, "CDDA", "readmode", &drive->dae);
+
+ if (!drive->device)
+ drive->device = g_strdup(CDDA_DEVICE);
+ if (!drive->directory)
+ drive->directory = g_strdup(CDDA_DIRECTORY);
+
+ cdda_cfg.drives = g_list_append(cdda_cfg.drives, drive);
+
+ bmp_cfg_db_get_int(db, "CDDA", "num_drives", &ndrives);
+ for (i = 1; i < ndrives; i++) {
+ char label[20];
+ drive = g_malloc0(sizeof(struct driveinfo));
+
+ sprintf(label, "device%d", i);
+ bmp_cfg_db_get_string(db, "CDDA", label, &drive->device);
+
+ sprintf(label, "directory%d", i);
+ bmp_cfg_db_get_string(db, "CDDA", label, &drive->directory);
+
+ sprintf(label, "mixer%d", i);
+ bmp_cfg_db_get_int(db, "CDDA", label, &drive->mixer);
+
+ sprintf(label, "readmode%d", i);
+ bmp_cfg_db_get_int(db, "CDDA", label, &drive->dae);
+
+ cdda_cfg.drives = g_list_append(cdda_cfg.drives, drive);
+ }
+ bmp_cfg_db_get_bool(db, "CDDA", "title_override",
+ &cdda_cfg.title_override);
+ bmp_cfg_db_get_string(db, "CDDA", "name_format", &cdda_cfg.name_format);
+ bmp_cfg_db_get_bool(db, "CDDA", "use_cddb", &cdda_cfg.use_cddb);
+ bmp_cfg_db_get_string(db, "CDDA", "cddb_server", &cdda_cfg.cddb_server);
+#ifdef WITH_CDINDEX
+ bmp_cfg_db_get_bool(db, "CDDA", "use_cdin", &cdda_cfg.use_cdin);
+#else
+ cdda_cfg.use_cdin = FALSE;
+#endif
+ bmp_cfg_db_get_string(db, "CDDA", "cdin_server", &cdda_cfg.cdin_server);
+ bmp_cfg_db_close(db);
+
+ if (!cdda_cfg.cdin_server)
+ cdda_cfg.cdin_server = g_strdup("www.cdindex.org");
+ if (!cdda_cfg.cddb_server)
+ cdda_cfg.cddb_server = g_strdup(CDDB_DEFAULT_SERVER);
+ if (!cdda_cfg.name_format)
+ cdda_cfg.name_format = g_strdup("%p - %t");
+}
+
+struct driveinfo *
+cdda_find_drive(char *filename)
+{
+ GList *node;
+
+ // FIXME: Will always return the first drive
+
+ for (node = cdda_cfg.drives; node; node = node->next) {
+ struct driveinfo *d = node->data;
+ if (!strncmp(d->directory, filename, strlen(d->directory)))
+ return d;
+ }
+
+ return NULL;
+
+}
+
+static void
+timeout_destroy(struct timeout *entry)
+{
+ g_free(entry->device);
+ g_free(entry);
+ timeout_list = g_list_remove(timeout_list, entry);
+}
+
+static void
+timeout_remove_for_device(char *device)
+{
+ GList *node;
+
+ for (node = timeout_list; node; node = node->next) {
+ struct timeout *t = node->data;
+
+ if (!strcmp(t->device, device)) {
+ gtk_timeout_remove(t->id);
+ timeout_destroy(t);
+ return;
+ }
+ }
+
+}
+
+static void
+cleanup(void)
+{
+ while (timeout_list) {
+ struct timeout *t = timeout_list->data;
+ gtk_timeout_remove(t->id);
+ stop_timeout(t);
+ timeout_destroy(t);
+ }
+ cddb_quit();
+}
+
+static int
+is_our_file(char *filename)
+{
+ char *ext = ".cda";
+
+ if (cdda_find_drive(filename) == NULL) {
+ return FALSE;
+ }
+
+ if (g_str_has_suffix(filename, ext)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+static GList *
+scan_dir(char *dir)
+{
+ GList *list = NULL;
+ int i;
+ cdda_disc_toc_t toc;
+ struct driveinfo *drive;
+
+ if ((drive = cdda_find_drive(dir)) == NULL)
+ return NULL;
+
+ if (!cdda_get_toc(&toc, drive->device))
+ return NULL;
+
+ for (i = toc.last_track; i >= toc.first_track; i--)
+ if (!toc.track[i].flags.data_track) {
+ list = g_list_prepend(list, g_strdup_printf("Track %02d.cda", i));
+ }
+ return list;
+}
+
+guint
+cdda_calculate_track_length(cdda_disc_toc_t * toc, int track)
+{
+ if (track == toc->last_track)
+ return (LBA(toc->leadout) - LBA(toc->track[track]));
+ else
+ return (LBA(toc->track[track + 1]) - LBA(toc->track[track]));
+}
+
+static void *
+dae_play_loop(void *arg)
+{
+ char *buffer = g_malloc(CD_FRAMESIZE_RAW * CDDA_DAE_FRAMES);
+ int pos = LBA(cdda_playing.cd_toc.track[cdda_playing.track]);
+ int end, frames;
+
+ if (cdda_playing.track == cdda_playing.cd_toc.last_track)
+ end = LBA(cdda_playing.cd_toc.leadout);
+ else
+ end = LBA(cdda_playing.cd_toc.track[cdda_playing.track + 1]);
+
+ while (cdda_playing.playing) {
+ int left;
+ char *data;
+
+ if (dae_data.seek != -1) {
+ cdda_ip.output->flush(dae_data.seek * 1000);
+ pos = LBA(cdda_playing.cd_toc.track[cdda_playing.track])
+ + dae_data.seek * 75;
+ dae_data.seek = -1;
+ dae_data.eof = FALSE;
+ }
+ frames = MIN(CDDA_DAE_FRAMES, end - pos);
+ if (frames == 0)
+ dae_data.eof = TRUE;
+
+ if (dae_data.eof) {
+ xmms_usleep(30000);
+ continue;
+ }
+
+ frames = read_audio_data(cdda_playing.fd, pos, frames, buffer);
+ if (frames <= 0) {
+ int err = -frames;
+ if (err == EOPNOTSUPP)
+ dae_data.eof = TRUE;
+ else {
+ /*
+ * If the read failed, skip ahead to
+ * avoid getting stuck on scratches
+ * and such.
+ */
+ g_message("read_audio_data() failed: %s (%d)",
+ strerror(err), err);
+ pos += MIN(CDDA_DAE_FRAMES, end - pos);
+ }
+ continue;
+ }
+ left = frames * CD_FRAMESIZE_RAW;
+ data = buffer;
+ while (cdda_playing.playing && left > 0 && dae_data.seek == -1) {
+ int cur = MIN(512 * 2 * 2, left);
+ cdda_ip.add_vis_pcm(cdda_ip.output->written_time(),
+ FMT_S16_LE, 2, cur, data);
+ while (cdda_ip.output->buffer_free() < cur &&
+ cdda_playing.playing && dae_data.seek == -1)
+ xmms_usleep(30000);
+ if (cdda_playing.playing && dae_data.seek == -1)
+ produce_audio(cdda_ip.output->written_time(), FMT_S16_LE, 2, cur, data, &cdda_playing.playing);
+ left -= cur;
+ data += cur;
+ }
+ pos += frames;
+ }
+
+ cdda_ip.output->buffer_free();
+ cdda_ip.output->buffer_free();
+ g_free(buffer);
+
+ g_thread_exit(NULL);
+ return NULL;
+}
+
+static void
+dae_play(void)
+{
+ if (cdda_ip.output->open_audio(FMT_S16_LE, 44100, 2) == 0) {
+ dae_data.audio_error = TRUE;
+ cdda_playing.playing = FALSE;
+ return;
+ }
+ dae_data.seek = -1;
+ dae_data.eof = FALSE;
+ dae_data.audio_error = FALSE;
+ dae_data.thread = g_thread_create(dae_play_loop, NULL, TRUE, NULL);
+}
+
+static void
+play_file(char *filename)
+{
+ char *tmp;
+ struct driveinfo *drive;
+ int track;
+ int track_len;
+
+// g_message(g_strdup_printf("** CD_AUDIO: trying to play file %s",filename));
+
+ if ((drive = cdda_find_drive(filename)) == NULL) {
+// g_message("** CD_AUDIO: find drive check failed");
+ return;
+ }
+ if (is_mounted(drive->device)) {
+// g_message("** CD_AUDIO: drive is mounted");
+ return;
+ }
+ tmp = strrchr(filename, '/');
+ if (tmp)
+ tmp++;
+ else
+ tmp = filename;
+
+ if (!sscanf(tmp, "Track %d.cda", &track)) {
+// g_message("** CD_AUDIO: filename check failed");
+ return;
+ }
+
+ if (!cdda_get_toc(&cdda_playing.cd_toc, drive->device) ||
+ cdda_playing.cd_toc.track[track].flags.data_track ||
+ track < cdda_playing.cd_toc.first_track ||
+ track > cdda_playing.cd_toc.last_track) {
+// g_message("** CD_AUDIO: toc check failed");
+ return;
+ }
+
+ if ((cdda_playing.fd = open(drive->device, CDOPENFLAGS)) == -1) {
+// g_message("** CD_AUDIO: device open failed");
+ return;
+ }
+ track_len = cdda_calculate_track_length(&cdda_playing.cd_toc, track);
+ cdda_ip.set_info(cdda_get_title(&cdda_playing.cd_toc, track),
+ (track_len * 1000) / 75, 44100 * 2 * 2 * 8, 44100, 2);
+
+ memcpy(&cdda_playing.drive, drive, sizeof(struct driveinfo));
+#ifndef CDDA_HAS_READAUDIO
+ cdda_playing.drive.dae = FALSE;
+#endif
+
+ cdda_playing.track = track;
+
+ is_paused = FALSE;
+ timeout_remove_for_device(drive->device);
+
+ cdda_playing.playing = TRUE;
+ if (drive->dae)
+ dae_play();
+ else
+ seek(0);
+}
+
+static char *
+cdda_get_title(cdda_disc_toc_t * toc, int track)
+{
+ G_LOCK_DEFINE_STATIC(title);
+
+ static guint32 cached_id;
+ static cdinfo_t cdinfo;
+ TitleInput *input;
+ guint32 disc_id;
+ char *title;
+
+ disc_id = cdda_cddb_compute_discid(toc);
+
+ /*
+ * We want to avoid looking up a album from two threads simultaneously.
+ * This can happen since we are called both from the main-thread and
+ * from the playlist-thread.
+ */
+
+ G_LOCK(title);
+ if (!(disc_id == cached_id && cdinfo.is_valid)) {
+ /*
+ * We try to look up the disc again if the info is not
+ * valid. The user might have configured a new server
+ * in the meantime.
+ */
+ cdda_cdinfo_flush(&cdinfo);
+ cached_id = disc_id;
+
+ if (!cdda_cdinfo_read_file(disc_id, &cdinfo)) {
+ if (cdda_cfg.use_cddb)
+ cdda_cddb_get_info(toc, &cdinfo);
+ if (cdinfo.is_valid)
+ cdda_cdinfo_write_file(disc_id, &cdinfo);
+ }
+ }
+ XMMS_NEW_TITLEINPUT(input);
+ cdda_cdinfo_get(&cdinfo, track, &input->performer, &input->album_name,
+ &input->track_name);
+ G_UNLOCK(title);
+
+ input->track_number = track;
+ input->file_name = input->file_path =
+ g_strdup_printf(_("CD Audio Track %02u"), track);
+ input->file_ext = "cda";
+ title = xmms_get_titlestring(cdda_cfg.title_override ?
+ cdda_cfg.name_format :
+ xmms_get_gentitle_format(), input);
+ g_free(input->file_name);
+ g_free(input);
+
+ if (!title)
+ title = g_strdup_printf(_("CD Audio Track %02u"), track);
+ return title;
+}
+
+static gboolean
+stop_timeout(gpointer data)
+{
+ int fd;
+ struct timeout *to = data;
+
+ fd = open(to->device, CDOPENFLAGS);
+ if (fd != -1) {
+ ioctl(fd, XMMS_STOP, 0);
+ close(fd);
+ }
+ timeout_destroy(to);
+ return FALSE;
+}
+
+static void
+stop(void)
+{
+ struct timeout *to_info;
+ if (cdda_playing.fd < 0)
+ return;
+
+ cdda_playing.playing = FALSE;
+
+ if (cdda_playing.drive.dae) {
+ g_thread_join(dae_data.thread);
+ cdda_ip.output->close_audio();
+ }
+ else
+ ioctl(cdda_playing.fd, XMMS_PAUSE, 0);
+
+ close(cdda_playing.fd);
+ cdda_playing.fd = -1;
+
+ if (!cdda_playing.drive.dae) {
+ to_info = g_malloc(sizeof(*to_info));
+ to_info->device = g_strdup(cdda_playing.drive.device);
+ to_info->id = gtk_timeout_add(STOP_DELAY * 100, stop_timeout,
+ to_info);
+ timeout_list = g_list_prepend(timeout_list, to_info);
+ }
+}
+
+static void
+cdda_pause(short p)
+{
+ if (cdda_playing.drive.dae) {
+ cdda_ip.output->pause(p);
+ return;
+ }
+ if (p) {
+ pause_time = get_time();
+ ioctl(cdda_playing.fd, XMMS_PAUSE, 0);
+ }
+ else {
+ ioctl(cdda_playing.fd, XMMS_RESUME, 0);
+ pause_time = -1;
+ }
+ is_paused = p;
+}
+
+
+
+static void
+seek(int time)
+{
+ struct cdda_msf *end, start;
+ int track = cdda_playing.track;
+
+// g_message("** CD_AUDIO: seeking...");
+ if (cdda_playing.drive.dae) {
+ dae_data.seek = time;
+ while (dae_data.seek != -1)
+ xmms_usleep(20000);
+ return;
+ }
+
+ start.minute = (cdda_playing.cd_toc.track[track].minute * 60 +
+ cdda_playing.cd_toc.track[track].second + time) / 60;
+ start.second = (cdda_playing.cd_toc.track[track].second + time) % 60;
+ start.frame = cdda_playing.cd_toc.track[track].frame;
+ if (track == cdda_playing.cd_toc.last_track)
+ end = &cdda_playing.cd_toc.leadout;
+ else
+ end = &cdda_playing.cd_toc.track[track + 1];
+
+ play_ioctl(&start, end);
+
+ if (is_paused) {
+ cdda_pause(TRUE);
+ pause_time = time * 1000;
+ }
+}
+
+static int
+get_time_analog(void)
+{
+ int frame, start_frame, length;
+ int track = cdda_playing.track;
+
+ if (is_paused && pause_time != -1)
+ return pause_time;
+
+ frame = get_current_frame();
+
+ if (frame == -1)
+ return -1;
+
+ start_frame = LBA(cdda_playing.cd_toc.track[track]);
+ length = cdda_calculate_track_length(&cdda_playing.cd_toc, track);
+
+ if (frame - start_frame >= length - 20) /* 20 seems to work better */
+ return -1;
+
+ return ((frame - start_frame) * 1000) / 75;
+}
+
+static int
+get_time_dae(void)
+{
+ if (dae_data.audio_error)
+ return -2;
+ if (!cdda_playing.playing ||
+ (dae_data.eof && !cdda_ip.output->buffer_playing()))
+ return -1;
+ return cdda_ip.output->output_time();
+}
+
+static int
+get_time(void)
+{
+ if (cdda_playing.fd == -1)
+ return -1;
+
+ if (cdda_playing.drive.dae)
+ return get_time_dae();
+ else
+ return get_time_analog();
+}
+
+static void
+get_song_info(char *filename, char **title, int *len)
+{
+ cdda_disc_toc_t toc;
+ int t;
+ char *tmp;
+ struct driveinfo *drive;
+
+ *title = NULL;
+ *len = -1;
+
+// g_message("** CD_AUDIO: getting song info");
+
+ if ((drive = cdda_find_drive(filename)) == NULL)
+ return;
+
+ tmp = strrchr(filename, '/');
+ if (tmp)
+ tmp++;
+ else
+ tmp = filename;
+
+ if (!sscanf(tmp, "Track %d.cda", &t))
+ return;
+ if (!cdda_get_toc(&toc, drive->device))
+ return;
+ if (t < toc.first_track || t > toc.last_track
+ || toc.track[t].flags.data_track)
+ return;
+
+ *len = (cdda_calculate_track_length(&toc, t) * 1000) / 75;
+ *title = cdda_get_title(&toc, t);
+}
+
+#ifdef HAVE_OSS
+static void
+oss_get_volume(int *l, int *r, int mixer_line)
+{
+ int fd, v;
+
+ fd = open(DEV_MIXER, O_RDONLY);
+ if (fd != -1) {
+ ioctl(fd, MIXER_READ(mixer_line), &v);
+ *r = (v & 0xFF00) >> 8;
+ *l = (v & 0x00FF);
+ close(fd);
+ }
+}
+
+static void
+oss_set_volume(int l, int r, int mixer_line)
+{
+ int fd, v;
+
+ fd = open(DEV_MIXER, O_RDONLY);
+ if (fd != -1) {
+ v = (r << 8) | l;
+ ioctl(fd, MIXER_WRITE(mixer_line), &v);
+ close(fd);
+ }
+}
+#else
+static void
+oss_get_volume(int *l, int *r, int mixer_line)
+{
+}
+static void
+oss_set_volume(int l, int r, int mixer_line)
+{
+}
+#endif
+
+
+static void
+get_volume(int *l, int *r)
+{
+ if (cdda_playing.drive.dae)
+ cdda_ip.output->get_volume(l, r);
+ else if (cdda_playing.drive.mixer == CDDA_MIXER_OSS)
+ oss_get_volume(l, r, cdda_playing.drive.oss_mixer);
+ else if (cdda_playing.drive.mixer == CDDA_MIXER_DRIVE)
+ drive_get_volume(l, r);
+}
+
+static void
+set_volume(int l, int r)
+{
+ if (cdda_playing.drive.dae)
+ cdda_ip.output->set_volume(l, r);
+ else if (cdda_playing.drive.mixer == CDDA_MIXER_OSS)
+ oss_set_volume(l, r, cdda_playing.drive.oss_mixer);
+ else if (cdda_playing.drive.mixer == CDDA_MIXER_DRIVE)
+ drive_set_volume(l, r);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdaudio.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,158 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2002 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2002 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef CDAUDIO_H
+#define CDAUDIO_H
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include "beep/plugin.h"
+
+#include "cdinfo.h"
+
+#ifdef HAVE_OSS
+#include <Output/OSS/soundcard.h>
+#endif
+
+#ifdef HAVE_MNTENT_H
+#include <mntent.h>
+#endif
+
+#ifdef HAVE_GETMNTINFO
+#include <sys/param.h>
+#include <sys/ucred.h>
+#include <sys/mount.h>
+#endif
+
+#ifndef CD_FRAMES
+#define CD_FRAMES 75
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_LINUX_CDROM_H
+#include <linux/cdrom.h>
+#elif defined HAVE_SYS_CDIO_H
+#include <sys/cdio.h>
+#endif
+
+#if defined(CDROMREADAUDIO) || defined(CDIOCREADAUDIO) || defined(CDROMCDDA)
+# define CDDA_HAS_READAUDIO
+#endif
+
+#ifndef CD_FRAMESIZE_RAW
+# define CD_FRAMESIZE_RAW 2352
+#endif
+
+/* Number of frames that are read at once in dae mode */
+#define CDDA_DAE_FRAMES 8
+
+#ifndef CDDA_HAS_READAUDIO
+#warning "Digital audio extraction has not been ported to this platform"
+#define read_audio_data(fd, pos, num, buf) -1
+#else
+int read_audio_data(int fd, int pos, int num, void *buf);
+#endif
+
+
+#ifdef __FreeBSD__
+/*
+ * FreeBSD won't be able to detect media changes if using O_NONBLOCK
+ */
+#define CDOPENFLAGS O_RDONLY
+#else
+#define CDOPENFLAGS (O_RDONLY | O_NONBLOCK)
+#endif
+
+
+#define CDDB_DEFAULT_SERVER "freedb.freedb.org"
+
+struct driveinfo {
+ gchar *device, *directory;
+ gint mixer, oss_mixer;
+ gboolean valid;
+ gint dae;
+};
+
+typedef struct {
+ GList *drives;
+
+ gchar *cddb_server;
+ gint cddb_protocol_level;
+ gboolean use_cddb;
+
+ gchar *cdin_server;
+ gboolean use_cdin;
+
+ gboolean title_override;
+ char *name_format;
+} CDDAConfig;
+
+struct cdda_msf {
+ guint8 minute;
+ guint8 second;
+ guint8 frame;
+ struct {
+ guint data_track:1;
+ } flags;
+};
+
+/*
+ * Note: This macro will convert to a LBA representation of the MSF
+ * address, not to a true LBA address, as we don't subtract the offset
+ */
+#define LBA(msf) ((msf.minute * 60 + msf.second) * 75 + msf.frame)
+
+#define CDDA_MSF_OFFSET 150
+
+typedef struct {
+ guint8 first_track, last_track;
+ struct cdda_msf leadout;
+ struct cdda_msf track[100];
+} cdda_disc_toc_t;
+
+extern CDDAConfig cdda_cfg;
+
+enum {
+ CDDA_MIXER_NONE,
+ CDDA_MIXER_DRIVE,
+ CDDA_MIXER_OSS,
+};
+
+enum {
+ CDDA_READ_ANALOG,
+ CDDA_READ_DAE,
+};
+
+void cdda_configure(void);
+gboolean cdda_get_toc(cdda_disc_toc_t * info, const gchar *device);
+guint32 cdda_cddb_compute_discid(cdda_disc_toc_t * info);
+void cdda_cddb_get_info(cdda_disc_toc_t * toc, cdinfo_t * info);
+void cdda_cdindex_get_idx(cdda_disc_toc_t * toc, cdinfo_t * cdinfo);
+struct driveinfo *cdda_find_drive(gchar *filename);
+
+void cdda_cddb_show_server_dialog(GtkWidget * w, gpointer data);
+void cdda_cddb_set_server(const gchar *new_server);
+void cddb_quit(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,889 @@
+/*
+ * cddb.c Copyright 1999-2001 Håvard Kvålen <havardk at xmms.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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#include "cddb.h"
+
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <gtk/gtk.h>
+#include <stdarg.h>
+
+#include <libbeep/util.h>
+
+#include "http.h"
+#include "cdaudio.h"
+#include "cdinfo.h"
+
+
+static guint32 cached_id = 0;
+static GtkWidget *server_dialog, *server_clist;
+static GtkWidget *debug_window, *debug_clist;
+static GList *debug_messages = NULL;
+static GList *temp_messages = NULL;
+static guint cddb_timeout_id;
+
+G_LOCK_DEFINE_STATIC(list);
+
+void configure_set_cddb_server(gchar * server);
+
+static void
+cddb_log(gchar * str, ...)
+{
+ static GList *end_ptr = NULL;
+ static gint message_num = 0;
+ va_list args;
+ gchar *text;
+
+ va_start(args, str);
+ text = g_strdup_vprintf(str, args);
+ va_end(args);
+
+ message_num++;
+ debug_messages = g_list_prepend(debug_messages, text);
+ if (!end_ptr)
+ end_ptr = debug_messages;
+ if (message_num > CDDB_LOG_MAX) {
+ GList *temp;
+
+ temp = g_list_previous(end_ptr);
+ temp->next = NULL;
+ g_free(end_ptr->data);
+ g_list_free_1(end_ptr);
+ end_ptr = temp;
+ message_num--;
+ }
+ if (debug_window) {
+ G_LOCK(list);
+ temp_messages = g_list_append(temp_messages, g_strdup(text));
+ G_UNLOCK(list);
+ }
+}
+
+static gint
+cddb_sum(gint in)
+{
+ gint retval = 0;
+
+ while (in > 0) {
+ retval += in % 10;
+ in /= 10;
+ }
+ return retval;
+}
+
+guint32
+cdda_cddb_compute_discid(cdda_disc_toc_t * info)
+{
+ gint i;
+ guint high = 0, low;
+
+ for (i = info->first_track; i <= info->last_track; i++)
+ high += cddb_sum(info->track[i].minute * 60 + info->track[i].second);
+
+ low = (info->leadout.minute * 60 + info->leadout.second) -
+ (info->track[info->first_track].minute * 60 +
+ info->track[info->first_track].second);
+
+ return ((high % 0xff) << 24 | low << 8 | (info->last_track -
+ info->first_track + 1));
+}
+
+static gchar *
+cddb_generate_offset_string(cdda_disc_toc_t * info)
+{
+ gchar *buffer;
+ int i;
+
+ buffer = g_malloc(info->last_track * 7 + 1);
+
+ sprintf(buffer, "%d", LBA(info->track[info->first_track]));
+
+ for (i = info->first_track + 1; i <= info->last_track; i++)
+ sprintf(buffer, "%s+%d", buffer, LBA(info->track[i]));
+
+ return buffer;
+}
+
+static gchar *
+cddb_generate_hello_string(void)
+{
+ static gchar *buffer;
+
+ if (buffer == NULL) {
+ gchar *env, *client = NULL, *version = NULL, **strs = NULL;
+
+ env = getenv("XMMS_CDDB_CLIENT_NAME");
+ if (env) {
+ strs = g_strsplit(env, " ", 2);
+ if (strs && strs[0] && strs[1]) {
+ client = strs[0];
+ version = strs[1];
+ }
+ }
+
+ if (!client || !version) {
+ client = PACKAGE;
+ version = VERSION;
+ }
+
+ buffer = g_strdup_printf("&hello=nobody+localhost+%s+%s",
+ client, version);
+ if (strs)
+ g_strfreev(strs);
+ }
+ return buffer;
+}
+
+static gint
+cddb_http_open_connection(const gchar * server, gint port)
+{
+ gint sock;
+ gchar *status;
+
+ if ((sock = http_open_connection(server, 80)) == 0)
+ status = "Failed";
+ else
+ status = "Ok";
+
+ cddb_log("Connecting to CDDB-server %s: %s", server, status);
+ return sock;
+}
+
+
+static gboolean
+cddb_query(gchar * server, cdda_disc_toc_t * info,
+ cddb_disc_header_t * cddb_info)
+{
+ /*
+ * Query the cddb-server for the cd.
+ * Returns the *real* diskid and category.
+ */
+
+ gint sock;
+ gchar *offsets, *getstr;
+ gchar buffer[256];
+ gchar **response;
+ gint i;
+
+ if ((sock = cddb_http_open_connection(server, 80)) == 0)
+ return FALSE;
+
+ offsets = cddb_generate_offset_string(info);
+
+ cddb_log("Sending query-command. Disc ID: %08x",
+ cdda_cddb_compute_discid(info));
+
+ getstr =
+ g_strdup_printf
+ ("GET /~cddb/cddb.cgi?cmd=cddb+query+%08x+%d+%s+%d%s&proto=%d HTTP/1.0\r\n\r\n",
+ cdda_cddb_compute_discid(info),
+ info->last_track - info->first_track + 1, offsets,
+ (info->leadout.minute * 60 + info->leadout.second),
+ cddb_generate_hello_string(), cdda_cfg.cddb_protocol_level);
+
+ g_free(offsets);
+ write(sock, getstr, strlen(getstr));
+ g_free(getstr);
+
+ if (http_read_first_line(sock, buffer, 256) < 0) {
+ http_close_connection(sock);
+ return FALSE;
+ }
+
+ http_close_connection(sock);
+ response = g_strsplit(buffer, " ", 4);
+
+ cddb_log("Query response: %s", buffer);
+
+ switch (strtol(response[0], NULL, 10)) {
+ case 200:
+ /* One exact match */
+ for (i = 0; i < 4; i++) {
+ if (response[i] == NULL) {
+ g_strfreev(response);
+ return FALSE;
+ }
+ }
+ cddb_info->category = g_strdup(response[1]);
+ cddb_info->discid = strtoul(response[2], NULL, 16);
+ break;
+ default: /* FIXME: Handle other 2xx */
+ g_strfreev(response);
+ return FALSE;
+ }
+
+ g_strfreev(response);
+ return TRUE;
+}
+
+static gint
+cddb_check_protocol_level(const gchar * server)
+{
+ gint level = 0, sock, n;
+ gchar *str, buffer[256];
+
+ if ((sock = cddb_http_open_connection(server, 80)) == 0)
+ return 0;
+
+ str =
+ g_strdup_printf
+ ("GET /~cddb/cddb.cgi?cmd=stat%s&proto=1 HTTP/1.0\r\n\r\n",
+ cddb_generate_hello_string());
+
+ write(sock, str, strlen(str));
+ g_free(str);
+
+ if ((n = http_read_first_line(sock, buffer, 256)) < 0 ||
+ atoi(buffer) != 210) {
+ if (n > 0)
+ cddb_log("Getting cddb protocol level failed: %s", buffer);
+ else
+ cddb_log("Getting cddb protocol level failed.");
+
+ http_close_connection(sock);
+ return 0;
+ }
+
+ while (http_read_line(sock, buffer, 256) >= 0) {
+ g_strstrip(buffer);
+ if (!strncmp(buffer, "max proto:", 10))
+ level = atoi(buffer + 10);
+ if (!strcmp(buffer, "."))
+ break;
+ }
+ http_close_connection(sock);
+ cddb_log("Getting cddb protocol level. Got level %d", level);
+ return (MIN(level, CDDB_MAX_PROTOCOL_LEVEL));
+}
+
+#define BUF2SIZE (80*3)
+
+static gboolean
+cddb_read(gchar * server, cddb_disc_header_t * cddb_info, cdinfo_t * cdinfo)
+{
+ gint sock;
+ gchar *readstr;
+ gchar buffer[256], buffer2[BUF2SIZE];
+ gchar *realstr, *temp;
+ gint len, command, bufs;
+ gint num, oldnum;
+
+ if ((sock = cddb_http_open_connection(server, 80)) == 0)
+ return FALSE;
+
+ cddb_log("Sending read-command. Disc ID: %08x. Category: %s",
+ cddb_info->discid, cddb_info->category);
+
+ readstr =
+ g_strdup_printf
+ ("GET /~cddb/cddb.cgi?cmd=cddb+read+%s+%08x%s&proto=%d HTTP/1.0\r\n\r\n",
+ cddb_info->category, cddb_info->discid,
+ cddb_generate_hello_string(), cdda_cfg.cddb_protocol_level);
+
+ write(sock, readstr, strlen(readstr));
+ g_free(readstr);
+
+ if (http_read_first_line(sock, buffer, 256) < 0) {
+ http_close_connection(sock);
+ return FALSE;
+ }
+
+ cddb_log("Read response: %s", buffer);
+
+ command = 1;
+ bufs = 0;
+ oldnum = -1;
+ do {
+/* fprintf(stderr,"%s\n",buffer); */
+ realstr = strchr(buffer, '=');
+ if (buffer[0] == '#' || !realstr)
+ continue;
+
+ realstr++;
+ len = strlen(realstr);
+
+ switch (command) {
+ case 1:
+ if (!strncmp(buffer, "DISCID", 6))
+ break;
+ command++;
+ case 2:
+ if (!strncmp(buffer, "DTITLE", 6)) {
+ strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs);
+ bufs += len;
+ break;
+ }
+ if (bufs > 0) {
+ buffer2[BUF2SIZE - 1] = '\0';
+ if ((temp = strstr(buffer2, " / ")) != NULL) {
+ cdda_cdinfo_cd_set(cdinfo, g_strdup(temp + 3),
+ g_strndup(buffer2, temp - buffer2));
+ }
+ else
+ cdda_cdinfo_cd_set(cdinfo, g_strdup(buffer2),
+ g_strdup(buffer2));
+ bufs = 0;
+ }
+ command++;
+ case 3:
+ if (!strncmp(buffer, "TTITLE", 6)) {
+ num = atoi(buffer + 6);
+ if (oldnum < 0 || num == oldnum) {
+ strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs);
+ bufs += len;
+ }
+ else {
+ buffer2[BUF2SIZE - 1] = '\0';
+ cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL,
+ g_strdup(buffer2));
+ strncpy(buffer2, realstr, BUF2SIZE);
+ bufs = len;
+ }
+ oldnum = num;
+ break;
+ }
+ if (oldnum >= 0)
+ cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL,
+ g_strdup(buffer2));
+ bufs = 0;
+ oldnum = -1;
+ command++;
+ case 4:
+ if (!strncmp(buffer, "EXTD", 4)) {
+ break;
+ }
+ command++;
+ case 5:
+ if (!strncmp(buffer, "EXTT", 4)) {
+ break;
+ }
+ command++;
+ case 6:
+ if (!strncmp(buffer, "PLAYORDER", 9)) {
+ break;
+ }
+ command++;
+ default:
+ g_log(NULL, G_LOG_LEVEL_WARNING, "%s: illegal cddb-data: %s",
+ PACKAGE, buffer);
+ break;
+ }
+
+ } while (http_read_line(sock, buffer, 256) >= 0);
+
+ if (oldnum >= 0)
+ cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, g_strdup(buffer2));
+
+ http_close_connection(sock);
+ return TRUE;
+}
+
+static gint
+cddb_get_protocol_level(void)
+{
+ if (cdda_cfg.cddb_protocol_level < 1)
+ cdda_cfg.cddb_protocol_level =
+ cddb_check_protocol_level(cdda_cfg.cddb_server);
+
+ return cdda_cfg.cddb_protocol_level;
+}
+
+static GList *
+cddb_get_server_list(const gchar * server, gint protocol_level)
+{
+ gint sock;
+ gchar *getstr;
+ gchar buffer[256];
+ gchar **message;
+ GList *list = NULL;
+
+ if ((sock = cddb_http_open_connection(server, 80)) == 0)
+ return NULL;
+
+ cddb_log("Sending sites-command");
+
+ getstr =
+ g_strdup_printf
+ ("GET /~cddb/cddb.cgi?cmd=sites%s&proto=%d HTTP/1.0\r\n\r\n",
+ cddb_generate_hello_string(), protocol_level);
+
+ write(sock, getstr, strlen(getstr));
+ g_free(getstr);
+
+ if (http_read_first_line(sock, buffer, 256) < 0) {
+ http_close_connection(sock);
+ return NULL;
+ }
+
+ cddb_log("Sites response: %s", buffer);
+
+ switch (atoi(buffer)) {
+ case 210:
+ while ((http_read_line(sock, buffer, 256)) > 1) {
+ message = g_strsplit(buffer, " ", 6);
+ if (message && message[0] && message[1] &&
+ !strcasecmp(message[1], "http")) {
+ list = g_list_prepend(list, message);
+ }
+ else {
+ /* Ignore non-http servers */
+ g_strfreev(message);
+ }
+ }
+ list = g_list_reverse(list);
+ break;
+ case 401:
+ /* No site information available */
+ break;
+ default:
+ break;
+ }
+ http_close_connection(sock);
+ return list;
+}
+
+gint
+search_for_discid(gchar * abs_filename, gchar ** cddb_file, guint32 disc_id)
+{
+ GDir *dir;
+ const gchar *dir_entry;
+ gchar tmp_id[10];
+
+ if (!(dir = g_dir_open(abs_filename, 0, NULL)))
+ return (0);
+
+ memset(tmp_id, 0, 10);
+
+ snprintf(tmp_id, sizeof(tmp_id), "%08x", disc_id);
+ while ((dir_entry = g_dir_read_name(dir))) {
+ if (!strncmp(tmp_id, dir_entry, 8)) {
+ cddb_file[0] = g_build_filename(abs_filename, dir_entry, NULL);
+ g_dir_close(dir);
+ return (1);
+ }
+ }
+ g_dir_close(dir);
+
+ return (0);
+}
+
+gint
+scan_cddb_dir(gchar * server, gchar ** cddb_file, guint32 disc_id)
+{
+
+ GDir *dir;
+ const gchar *dir_entry;
+ gchar abs_filename[FILENAME_MAX];
+
+ if (!(dir = g_dir_open(&server[7], 0, NULL))) {
+ return 0;
+ }
+
+ while ((dir_entry = g_dir_read_name(dir))) {
+ strcpy(abs_filename, &server[7]);
+ if (abs_filename[strlen(abs_filename) - 1] != '/') {
+ strcat(abs_filename, "/");
+ }
+ strcat(abs_filename, dir_entry);
+
+ if (dir_entry[0] != '.' &&
+ g_file_test(abs_filename, G_FILE_TEST_IS_DIR) &&
+ search_for_discid(abs_filename, cddb_file, disc_id)) {
+ break;
+ }
+ }
+
+ g_dir_close(dir);
+ return (cddb_file[0] != NULL);
+}
+
+gint
+cddb_read_file(gchar * file, cddb_disc_header_t * cddb_info,
+ cdinfo_t * cdinfo)
+{
+ FILE *fd;
+ gchar buffer[256], buffer2[BUF2SIZE];
+ gchar *realstr, *temp;
+ gint len, command, bufs;
+ gint num, oldnum;
+
+ if ((fd = fopen(file, "r")) == NULL)
+ return 0;
+
+ command = 1;
+ bufs = 0;
+ oldnum = -1;
+ while (fgets(buffer, 256, fd) != NULL) {
+ realstr = strchr(buffer, '=');
+ if (buffer[0] == '#' || !realstr)
+ continue;
+
+ realstr++;
+ len = strlen(realstr);
+ if (realstr[len - 1] == '\n')
+ realstr[--len] = '\0'; /* remove newline */
+
+ switch (command) {
+ case 1:
+ if (!strncmp(buffer, "DISCID", 6))
+ break;
+ command++;
+ case 2:
+ if (!strncmp(buffer, "DTITLE", 6)) {
+ strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs);
+ bufs += len;
+ break;
+ }
+ if (bufs > 0) {
+ buffer2[BUF2SIZE - 1] = '\0';
+ if ((temp = strstr(buffer2, " / ")) != NULL) {
+ cdda_cdinfo_cd_set(cdinfo, g_strdup(temp + 3),
+ g_strndup(buffer2, temp - buffer2));
+ }
+ else
+ cdda_cdinfo_cd_set(cdinfo, g_strdup(buffer2),
+ g_strdup(buffer2));
+ bufs = 0;
+ }
+ command++;
+ case 3:
+ if (!strncmp(buffer, "TTITLE", 6)) {
+ num = atoi(buffer + 6);
+ if (oldnum < 0 || num == oldnum) {
+ strncpy(buffer2 + bufs, realstr, BUF2SIZE - bufs);
+ bufs += len;
+ }
+ else {
+ buffer2[BUF2SIZE - 1] = '\0';
+ cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL,
+ g_strdup(buffer2));
+ strncpy(buffer2, realstr, BUF2SIZE);
+ bufs = len;
+ }
+ oldnum = num;
+ break;
+ }
+ if (oldnum >= 0)
+ cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL,
+ g_strdup(buffer2));
+ bufs = 0;
+ oldnum = -1;
+ command++;
+ case 4:
+ if (!strncmp(buffer, "EXTD", 4)) {
+ break;
+ }
+ command++;
+ case 5:
+ if (!strncmp(buffer, "EXTT", 4)) {
+ break;
+ }
+ command++;
+ case 6:
+ if (!strncmp(buffer, "PLAYORDER", 9)) {
+ break;
+ }
+ command++;
+ default:
+ g_log(NULL, G_LOG_LEVEL_WARNING, "%s: illegal cddb-data: %s",
+ PACKAGE, buffer);
+ break;
+ }
+
+ }
+
+ if (oldnum >= 0)
+ cdda_cdinfo_track_set(cdinfo, oldnum + 1, NULL, g_strdup(buffer2));
+
+ fclose(fd);
+ return (1);
+}
+
+
+void
+cdda_cddb_get_info(cdda_disc_toc_t * toc, cdinfo_t * cdinfo)
+{
+ guint32 disc_id;
+ cddb_disc_header_t cddb_disc_info;
+ gchar *cddb_file[1];
+ disc_id = cdda_cddb_compute_discid(toc);
+ cddb_file[0] = NULL;
+
+ if ((cached_id != disc_id)
+ && (strncmp(cdda_cfg.cddb_server, "file://", 7) != 0)) {
+ if (cddb_get_protocol_level() == 0)
+ return;
+
+ cached_id = disc_id;
+ if (!cddb_query(cdda_cfg.cddb_server, toc, &cddb_disc_info))
+ return;
+ if (!cddb_read(cdda_cfg.cddb_server, &cddb_disc_info, cdinfo))
+ return;
+ cdinfo->is_valid = TRUE;
+
+ }
+ else if ((cached_id != disc_id)
+ && (strncmp(cdda_cfg.cddb_server, "file://", 7) == 0)) {
+ cached_id = disc_id;
+ if (!scan_cddb_dir(cdda_cfg.cddb_server, cddb_file, disc_id))
+ return;
+ if (!cddb_read_file(cddb_file[0], &cddb_disc_info, cdinfo)) {
+ g_free(cddb_file[0]);
+ return;
+ }
+ cdinfo->is_valid = TRUE;
+ g_free(cddb_file[0]);
+ }
+}
+
+void
+cdda_cddb_set_server(const gchar * new_server)
+{
+ if (strcmp(cdda_cfg.cddb_server, new_server)) {
+ g_free(cdda_cfg.cddb_server);
+ cdda_cfg.cddb_server = g_strdup(new_server);
+ cdda_cfg.cddb_protocol_level = 0;
+ cached_id = 0;
+ }
+}
+
+
+static gchar *
+cddb_position_string(gchar * input)
+{
+ gchar deg[4], min[3];
+ if (input == NULL || strlen(input) < 7)
+ return g_strdup("");
+ strncpy(deg, input + 1, 3);
+ deg[3] = '\0';
+ strncpy(min, input + 5, 2);
+ min[2] = '\0';
+ return g_strdup_printf("%2d°%s'%c", atoi(deg), min, input[0]);
+}
+
+static void
+cddb_server_dialog_ok_cb(GtkWidget * w, gpointer data)
+{
+ gchar *text;
+ gint pos;
+ GtkEntry *entry = GTK_ENTRY(data);
+
+ if (!GTK_CLIST(server_clist)->selection)
+ return;
+ pos = GPOINTER_TO_INT(GTK_CLIST(server_clist)->selection->data);
+ gtk_clist_get_text(GTK_CLIST(server_clist), pos, 0, &text);
+ cdda_cddb_set_server(text);
+ gtk_entry_set_text(entry, text);
+ gtk_widget_destroy(server_dialog);
+}
+
+static void
+cddb_server_dialog_select(GtkWidget * w, gint row, gint column,
+ GdkEvent * event, gpointer data)
+{
+ if (event->type == GDK_2BUTTON_PRESS)
+ cddb_server_dialog_ok_cb(NULL, NULL);
+}
+
+void
+cdda_cddb_show_server_dialog(GtkWidget * w, gpointer data)
+{
+ GtkWidget *vbox, *bbox, *okbutton, *cancelbutton;
+ GtkEntry *server_entry = GTK_ENTRY(data);
+ gchar *titles[] = { "Server", "Latitude", "Longitude", "Description" };
+ GList *servers;
+ const gchar *server;
+ gint level;
+
+ if (server_dialog)
+ return;
+
+ server = gtk_entry_get_text(server_entry);
+
+ if ((level = cddb_check_protocol_level(server)) < 3) {
+ if (!level)
+ xmms_show_message("CDDB",
+ "Unable to connect to CDDB-server",
+ "Ok", FALSE, NULL, NULL);
+ else
+ /* CDDB level < 3 has the "sites" command,
+ but the format is different. Not supported yet */
+ xmms_show_message("CDDB",
+ "Can't get server list from the current CDDB-server\n"
+ "Unsupported CDDB protocol level",
+ "Ok", FALSE, NULL, NULL);
+ return;
+ }
+
+ if ((servers = cddb_get_server_list(server, level)) == NULL) {
+ xmms_show_message("CDDB",
+ "No site information available",
+ "Ok", FALSE, NULL, NULL);
+ return;
+ }
+
+ server_dialog = gtk_dialog_new();
+ g_signal_connect(G_OBJECT(server_dialog), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &server_dialog);
+ gtk_window_set_title(GTK_WINDOW(server_dialog), "CDDB servers");
+ gtk_window_set_modal(GTK_WINDOW(server_dialog), TRUE);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 15);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(server_dialog)->vbox), vbox,
+ TRUE, TRUE, 0);
+
+ server_clist = gtk_clist_new_with_titles(4, titles);
+ g_signal_connect(G_OBJECT(server_clist), "select-row",
+ G_CALLBACK(cddb_server_dialog_select), NULL);
+ gtk_box_pack_start(GTK_BOX(vbox), server_clist, TRUE, TRUE, 0);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(server_dialog)->action_area),
+ bbox, TRUE, TRUE, 0);
+
+ okbutton = gtk_button_new_with_label("Ok");
+ g_signal_connect(G_OBJECT(okbutton), "clicked",
+ G_CALLBACK(cddb_server_dialog_ok_cb), data);
+ gtk_box_pack_start(GTK_BOX(bbox), okbutton, TRUE, TRUE, 0);
+ cancelbutton = gtk_button_new_with_label("Cancel");
+ g_signal_connect_swapped(G_OBJECT(cancelbutton), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(server_dialog));
+ gtk_box_pack_start(GTK_BOX(bbox), cancelbutton, TRUE, TRUE, 0);
+ GTK_WIDGET_SET_FLAGS(okbutton, GTK_CAN_DEFAULT);
+ GTK_WIDGET_SET_FLAGS(cancelbutton, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default(okbutton);
+
+ while (servers) {
+ gchar *row[4];
+ gint i;
+
+ row[0] = g_strdup(((gchar **) servers->data)[0]);
+ row[1] = cddb_position_string(((gchar **) servers->data)[4]);
+ row[2] = cddb_position_string(((gchar **) servers->data)[5]);
+ row[3] = g_strdup(((gchar **) servers->data)[6]);
+ gtk_clist_append(GTK_CLIST(server_clist), row);
+ for (i = 0; i < 4; i++)
+ g_free(row[i]);
+ g_strfreev(servers->data);
+ servers = g_list_next(servers);
+ }
+ g_list_free(servers);
+ gtk_clist_columns_autosize(GTK_CLIST(server_clist));
+ gtk_widget_show_all(server_dialog);
+}
+
+static gboolean
+cddb_update_log_window(gpointer data)
+{
+ if (!debug_window) {
+ cddb_timeout_id = 0;
+ return FALSE;
+ }
+
+ G_LOCK(list);
+ if (temp_messages != NULL) {
+ GList *temp;
+ GDK_THREADS_ENTER();
+ gtk_clist_freeze(GTK_CLIST(debug_clist));
+ for (temp = temp_messages; temp; temp = temp->next) {
+ gchar *text = temp->data;
+ gtk_clist_append(GTK_CLIST(debug_clist), &text);
+ g_free(text);
+ }
+ gtk_clist_columns_autosize(GTK_CLIST(debug_clist));
+ gtk_clist_thaw(GTK_CLIST(debug_clist));
+ gtk_clist_moveto(GTK_CLIST(debug_clist),
+ GTK_CLIST(debug_clist)->rows - 1, -1, 0.5, 0);
+ GDK_THREADS_LEAVE();
+ g_list_free(temp_messages);
+ temp_messages = NULL;
+ }
+ G_UNLOCK(list);
+ return TRUE;
+}
+
+
+void
+cdda_cddb_show_network_window(GtkWidget * w, gpointer data)
+{
+ GtkWidget *vbox, *bbox, *close, *scroll_win;
+ GList *temp;
+
+ if (debug_window)
+ return;
+
+ debug_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ g_signal_connect(G_OBJECT(debug_window), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &debug_window);
+ gtk_window_set_title(GTK_WINDOW(debug_window), "CDDB networkdebug");
+ gtk_window_set_resizable(GTK_WINDOW(debug_window), TRUE);
+ gtk_window_set_default_size(GTK_WINDOW(debug_window), 400, 150);
+ gtk_container_border_width(GTK_CONTAINER(debug_window), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(debug_window), vbox);
+
+ scroll_win = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ debug_clist = gtk_clist_new(1);
+ gtk_container_add(GTK_CONTAINER(scroll_win), debug_clist);
+ gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0);
+
+ temp = debug_messages;
+ while (temp) {
+ gtk_clist_prepend(GTK_CLIST(debug_clist), (gchar **) & temp->data);
+ temp = g_list_next(temp);
+ }
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ close = gtk_button_new_with_label("Close");
+ g_signal_connect_swapped(G_OBJECT(close), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(debug_window));
+ GTK_WIDGET_SET_FLAGS(close, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), close, TRUE, TRUE, 0);
+ gtk_widget_grab_default(close);
+
+ gtk_clist_columns_autosize(GTK_CLIST(debug_clist));
+ gtk_clist_set_button_actions(GTK_CLIST(debug_clist), 0,
+ GTK_BUTTON_IGNORED);
+ gtk_clist_moveto(GTK_CLIST(debug_clist),
+ GTK_CLIST(debug_clist)->rows - 1, -1, 0, 0);
+
+ cddb_timeout_id = gtk_timeout_add(500, cddb_update_log_window, NULL);
+ gtk_widget_show_all(debug_window);
+}
+
+void
+cddb_quit(void)
+{
+ if (cddb_timeout_id)
+ gtk_timeout_remove(cddb_timeout_id);
+ cddb_timeout_id = 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cddb.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,35 @@
+/*
+ * cddb.h Copyright 1999 Håvard Kvålen <havardk at sol.no>
+ *
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef CDDB_H
+#define CDDB_H
+
+#include <glib.h>
+
+typedef struct {
+ gchar *category;
+ guint32 discid;
+} cddb_disc_header_t;
+
+#define CDDB_MAX_PROTOCOL_LEVEL 3
+#define CDDB_HOSTNAME_LEN 100
+#define CDDB_LOG_MAX 100
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,270 @@
+/*
+ * cdinfo.c Copyright 1999 Espen Skoglund <esk at ira.uka.de>
+ * Copyright 1999 Håvard Kvålen <havardk at sol.no>
+ *
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#include "cdinfo.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+
+#include <libbeep/rcfile.h>
+
+#include "cdaudio.h"
+
+
+/*
+ * Function cdda_cdinfo_flush (cdinfo)
+ *
+ * Free all information stored about the CD.
+ *
+ */
+void
+cdda_cdinfo_flush(cdinfo_t * cdinfo)
+{
+ trackinfo_t *t;
+ gint i;
+
+ if (cdinfo->albname)
+ g_free(cdinfo->albname);
+ if (cdinfo->artname)
+ g_free(cdinfo->artname);
+
+ cdinfo->albname = cdinfo->artname = NULL;
+
+ for (t = cdinfo->tracks, i = 0; i < 100; i++, t++) {
+ if (t->artist)
+ g_free(t->artist);
+ if (t->title)
+ g_free(t->title);
+
+ t->artist = t->title = NULL;
+ t->num = -1;
+ }
+ cdinfo->is_valid = FALSE;
+}
+
+
+/*
+ * Function cdda_cdinfo_delete (cdinfo)
+ *
+ * Free the indicated `cdinfo' structure.
+ *
+ */
+void
+cdda_cdinfo_delete(cdinfo_t * cdinfo)
+{
+ cdda_cdinfo_flush(cdinfo);
+ g_free(cdinfo);
+}
+
+
+/*
+ * Function cdda_cdinfo_new ()
+ *
+ * Allocate a new `cdinfo' structure and return it.
+ *
+ */
+cdinfo_t *
+cdda_cdinfo_new(void)
+{
+ cdinfo_t *ret;
+ ret = g_malloc0(sizeof(cdinfo_t));
+ cdda_cdinfo_flush(ret);
+
+ return ret;
+}
+
+
+/*
+ * Function cdda_cdinfo_track_set (cdinfo, num, artist, title)
+ *
+ * Set `artist', and `title' for a track `num'. If the CD is a
+ * singleartist disc, the `artist' on each track should be set to
+ * NULL.
+ *
+ */
+void
+cdda_cdinfo_track_set(cdinfo_t * cdinfo, gint num, gchar * artist,
+ gchar * title)
+{
+ trackinfo_t *track = cdinfo->tracks + num;
+
+ /* Check bounds */
+ if (num < 1 || num >= 100)
+ return;
+
+ track->artist = artist;
+ track->title = title;
+ track->num = num;
+ cdinfo->is_valid = TRUE;
+}
+
+
+/*
+ * Function cdda_cdinfo_cd_set (cdinfo, cdname, cdartist)
+ *
+ * Set name and artist for a cd. If CD is a multiartist disc, the
+ * `artist' should be set to NULL.
+ *
+ */
+void
+cdda_cdinfo_cd_set(cdinfo_t * cdinfo, gchar * cdname, gchar * cdartist)
+{
+ cdinfo->albname = cdname;
+ cdinfo->artname = cdartist;
+ cdinfo->is_valid = TRUE;
+}
+
+
+/*
+ * Function cdda_cdinfo_get (cdinfo, num, artist, album, title)
+ *
+ * Get artist, album, and title of the indicated track (i.e. store
+ * them in the specified pointers). Return 0 upon success, or -1
+ * of track did not exist. The returned name must be subsequently
+ * freed using g_free().
+ *
+ */
+gint
+cdda_cdinfo_get(cdinfo_t * cdinfo, gint num, gchar ** artist,
+ gchar ** album, gchar ** title)
+{
+ trackinfo_t *track = cdinfo->tracks + num;
+
+ /* Check validity */
+ if (!cdinfo->is_valid || num < 1 || num >= 100)
+ return -1;
+
+ *artist = track->artist ? track->artist :
+ cdinfo->artname ? cdinfo->artname : _("(unknown)");
+ *album = cdinfo->albname ? cdinfo->albname : _("(unknown)");
+ *title = track->title ? track->title : _("(unknown)");
+
+ return track->num == -1 ? -1 : 0;
+}
+
+
+/*
+ * Function cdda_cdinfo_write_file
+ *
+ * Writes the cdinfo_t structure to disk.
+ */
+
+
+void
+cdda_cdinfo_write_file(guint32 cddb_discid, cdinfo_t * cdinfo)
+{
+ /*
+ * We currently identify cdinfo on disk with the CDDB-discid.
+ * Maybe it would be smarter to use the cdindex id instead?
+ */
+
+ gchar *filename;
+ RcFile *rcfile;
+ gchar sectionname[10], trackstr[16];
+ gint i, numtracks = cddb_discid & 0xff;
+
+ sprintf(sectionname, "%08x", cddb_discid);
+
+ filename =
+ g_strconcat(g_get_home_dir(), "/", BMP_RCPATH, "/cdinfo", NULL);
+ if ((rcfile = bmp_rcfile_open(filename)) == NULL)
+ rcfile = bmp_rcfile_new();
+
+ if (cdinfo->albname)
+ bmp_rcfile_write_string(rcfile, sectionname, "Albumname",
+ cdinfo->albname);
+ else
+ bmp_rcfile_write_string(rcfile, sectionname, "Albumname", "");
+ if (cdinfo->artname)
+ bmp_rcfile_write_string(rcfile, sectionname, "Artistname",
+ cdinfo->artname);
+ for (i = 1; i <= numtracks; i++) {
+ if (cdinfo->tracks[i].artist) {
+ sprintf(trackstr, "track_artist%d", i);
+ bmp_rcfile_write_string(rcfile, sectionname, trackstr,
+ cdinfo->tracks[i].artist);
+ }
+ if (cdinfo->tracks[i].title) {
+ sprintf(trackstr, "track_title%d", i);
+ bmp_rcfile_write_string(rcfile, sectionname, trackstr,
+ cdinfo->tracks[i].title);
+ }
+ }
+ if (!bmp_rcfile_write(rcfile, filename))
+ /*FIXME */ ;
+ bmp_rcfile_free(rcfile);
+ g_free(filename);
+}
+
+/*
+ * Function cdda_cdinfo_read_file
+ *
+ * Tries to find and read a album from the disk-cache.
+ *
+ * Returns true if the album is found.
+ */
+
+gboolean
+cdda_cdinfo_read_file(guint32 cddb_discid, cdinfo_t * cdinfo)
+{
+ gchar *filename;
+ RcFile *rcfile;
+ gchar sectionname[10], trackstr[16];
+ gint i, numtracks = cddb_discid & 0xff;
+ gboolean track_found;
+
+ sprintf(sectionname, "%08x", cddb_discid);
+
+// filename = g_strconcat(g_get_home_dir(), "/.beep/cdinfo", NULL);
+
+ filename =
+ g_strconcat(g_get_home_dir(), "/", BMP_RCPATH, "/cdinfo", NULL);
+ if ((rcfile = bmp_rcfile_open(filename)) == NULL) {
+ g_free(filename);
+ return FALSE;
+ }
+ g_free(filename);
+
+ if (!bmp_rcfile_read_string
+ (rcfile, sectionname, "Albumname", &cdinfo->albname))
+ return FALSE;
+
+ bmp_rcfile_read_string(rcfile, sectionname, "Artistname",
+ &cdinfo->artname);
+
+ for (i = 1; i <= numtracks; i++) {
+ track_found = FALSE;
+ sprintf(trackstr, "track_artist%d", i);
+ if (bmp_rcfile_read_string
+ (rcfile, sectionname, trackstr, &cdinfo->tracks[i].artist))
+ track_found = TRUE;
+ sprintf(trackstr, "track_title%d", i);
+ if (bmp_rcfile_read_string
+ (rcfile, sectionname, trackstr, &cdinfo->tracks[i].title))
+ track_found = TRUE;
+ if (track_found)
+ cdinfo->tracks[i].num = i;
+ }
+ cdinfo->is_valid = TRUE;
+ bmp_rcfile_free(rcfile);
+ return TRUE;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/cdinfo.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,55 @@
+/*
+ * cdinfo.h Copyright 1999 Espen Skoglund <esk at ira.uka.de>
+ * Copyright 1999 Håvard Kvålen <havardk at sol.no>
+ *
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef CDINFO_H
+#define CDINFO_H
+
+#include <glib.h>
+
+/*
+ * For holding info on a single CD track.
+ */
+typedef struct {
+ gchar *artist;
+ gchar *title;
+ gint num;
+} trackinfo_t;
+
+/*
+ * For holding info on a complete CD.
+ */
+typedef struct {
+ gboolean is_valid;
+ gchar *albname;
+ gchar *artname;
+ trackinfo_t tracks[100];
+} cdinfo_t;
+
+void cdda_cdinfo_flush(cdinfo_t * cdinfo);
+cdinfo_t *cdda_cdinfo_new(void);
+void cdda_cdinfo_delete(cdinfo_t * info);
+void cdda_cdinfo_track_set(cdinfo_t * cdinfo, gint, gchar *, gchar *);
+void cdda_cdinfo_cd_set(cdinfo_t * cdinfo, gchar *, gchar *);
+gint cdda_cdinfo_get(cdinfo_t * cdinfo, gint num, gchar **, gchar **,
+ gchar **);
+gboolean cdda_cdinfo_read_file(guint32 cddb_discid, cdinfo_t * cdinfo);
+void cdda_cdinfo_write_file(guint32 cddb_discid, cdinfo_t * cdinfo);
+
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/configure.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/configure.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/configure.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,705 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "cdaudio.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+#include <libbeep/configdb.h>
+#include <libbeep/titlestring.h>
+
+
+#define GET_TB(b) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b))
+#define SET_TB(b) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b), TRUE)
+
+struct driveconfig {
+ GtkWidget *device, *directory;
+ GtkWidget *mixer_oss, *mixer_drive;
+ GtkWidget *remove_button;
+ GtkWidget *dae;
+};
+
+static GList *drives;
+
+static GtkWidget *cdda_configure_win;
+static GtkWidget *cdi_name, *cdi_name_override;
+static GtkWidget *cdi_use_cddb, *cdi_cddb_server, *cdi_use_cdin,
+ *cdi_cdin_server;
+
+void cdda_cddb_show_server_dialog(GtkWidget * w, gpointer data);
+void cdda_cddb_show_network_window(GtkWidget * w, gpointer data);
+void cdda_cddb_set_server(const char *new_server);
+
+static GtkWidget *configurewin_add_drive(struct driveinfo *drive,
+ gpointer nb);
+
+static void
+cdda_configurewin_ok_cb(GtkWidget * w, gpointer data)
+{
+ ConfigDb *db;
+ struct driveinfo *drive;
+ GList *node;
+ gint olddrives, ndrives, i;
+
+ olddrives = g_list_length(cdda_cfg.drives);
+ for (node = cdda_cfg.drives; node; node = node->next) {
+ drive = node->data;
+ g_free(drive->device);
+ g_free(drive->directory);
+ g_free(drive);
+ }
+ g_list_free(cdda_cfg.drives);
+ cdda_cfg.drives = NULL;
+
+ for (node = drives; node; node = node->next) {
+ struct driveconfig *config = node->data;
+ const gchar *tmp;
+
+ drive = g_new0(struct driveinfo, 1);
+ drive->device =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(config->device)));
+
+ tmp = gtk_entry_get_text(GTK_ENTRY(config->directory));
+// if (strlen(tmp) < 2 || tmp[strlen(tmp) - 1] == '/')
+ drive->directory = g_strdup(tmp);
+// else
+// drive->directory = g_strconcat(tmp, "/", NULL);
+
+// drive->directory = "CD_AUDIO";
+
+ if (GET_TB(config->mixer_oss))
+ drive->mixer = CDDA_MIXER_OSS;
+ else if (GET_TB(config->mixer_drive))
+ drive->mixer = CDDA_MIXER_DRIVE;
+ else
+ drive->mixer = CDDA_MIXER_NONE;
+ if (GET_TB(config->dae))
+ drive->dae = CDDA_READ_DAE;
+ else
+ drive->dae = CDDA_READ_ANALOG;
+
+ cdda_cfg.drives = g_list_append(cdda_cfg.drives, drive);
+ }
+
+ cdda_cfg.title_override = GET_TB(cdi_name_override);
+ g_free(cdda_cfg.name_format);
+ cdda_cfg.name_format = g_strdup(gtk_entry_get_text(GTK_ENTRY(cdi_name)));
+
+ cdda_cfg.use_cddb = GET_TB(cdi_use_cddb);
+ cdda_cddb_set_server(gtk_entry_get_text(GTK_ENTRY(cdi_cddb_server)));
+
+ cdda_cfg.use_cdin = GET_TB(cdi_use_cdin);
+ if (strcmp
+ (cdda_cfg.cdin_server,
+ gtk_entry_get_text(GTK_ENTRY(cdi_cdin_server)))) {
+ g_free(cdda_cfg.cdin_server);
+ cdda_cfg.cdin_server =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(cdi_cdin_server)));
+ }
+
+ db = bmp_cfg_db_open();
+
+ drive = cdda_cfg.drives->data;
+ bmp_cfg_db_set_string(db, "CDDA", "device", drive->device);
+ bmp_cfg_db_set_string(db, "CDDA", "directory", drive->directory);
+// bmp_cfg_db_set_string(db, "CDDA", "directory", "CD_AUDIO");
+ bmp_cfg_db_set_int(db, "CDDA", "mixer", drive->mixer);
+ bmp_cfg_db_set_int(db, "CDDA", "readmode", drive->dae);
+
+/* bmp_cfg_db_set_bool(db, "CDDA", "use_oss_mixer", cdda_cfg.use_oss_mixer); */
+
+ for (node = cdda_cfg.drives->next, i = 1; node; node = node->next, i++) {
+ char label[20];
+ drive = node->data;
+
+ sprintf(label, "device%d", i);
+ bmp_cfg_db_set_string(db, "CDDA", label, drive->device);
+
+ sprintf(label, "directory%d", i);
+// bmp_cfg_db_set_string(db, "CDDA", label, "CD_AUDIO");
+ bmp_cfg_db_set_string(db, "CDDA", label, drive->directory);
+
+ sprintf(label, "mixer%d", i);
+ bmp_cfg_db_set_int(db, "CDDA", label, drive->mixer);
+
+ sprintf(label, "readmode%d", i);
+ bmp_cfg_db_set_int(db, "CDDA", label, drive->dae);
+ }
+
+ ndrives = g_list_length(cdda_cfg.drives);
+
+ for (i = ndrives; i < olddrives; i++)
+ /* FIXME: Clear old entries */ ;
+
+ bmp_cfg_db_set_int(db, "CDDA", "num_drives", ndrives);
+
+ bmp_cfg_db_set_bool(db, "CDDA", "title_override",
+ cdda_cfg.title_override);
+ bmp_cfg_db_set_string(db, "CDDA", "name_format", cdda_cfg.name_format);
+ bmp_cfg_db_set_bool(db, "CDDA", "use_cddb", cdda_cfg.use_cddb);
+ bmp_cfg_db_set_string(db, "CDDA", "cddb_server", cdda_cfg.cddb_server);
+ bmp_cfg_db_set_int(db, "CDDA", "cddb_protocol_level",
+ cdda_cfg.cddb_protocol_level);
+ bmp_cfg_db_set_bool(db, "CDDA", "use_cdin", cdda_cfg.use_cdin);
+ bmp_cfg_db_set_string(db, "CDDA", "cdin_server", cdda_cfg.cdin_server);
+ bmp_cfg_db_close(db);
+}
+
+static void
+configurewin_close(GtkButton * w, gpointer data)
+{
+ GList *node;
+
+ for (node = drives; node; node = node->next)
+ g_free(node->data);
+ g_list_free(drives);
+ drives = NULL;
+
+ gtk_widget_destroy(cdda_configure_win);
+}
+
+static void
+toggle_set_sensitive_cb(GtkToggleButton * w, gpointer data)
+{
+ gboolean set = gtk_toggle_button_get_active(w);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), set);
+}
+
+static void
+configurewin_add_page(GtkButton * w, gpointer data)
+{
+ GtkNotebook *nb = GTK_NOTEBOOK(data);
+ GtkWidget *box = configurewin_add_drive(NULL, nb);
+ gchar *label = g_strdup_printf(_("Drive %d"), g_list_length(drives));
+
+ gtk_widget_show_all(box);
+ gtk_notebook_append_page(GTK_NOTEBOOK(nb), box, gtk_label_new(label));
+ g_free(label);
+}
+
+static void
+redo_nb_labels(GtkNotebook * nb)
+{
+ gint i;
+ GtkWidget *child;
+
+ for (i = 0; (child = gtk_notebook_get_nth_page(nb, i)) != NULL; i++) {
+ gchar *label = g_strdup_printf(_("Drive %d"), i + 1);
+
+ gtk_notebook_set_tab_label_text(nb, child, label);
+ g_free(label);
+ }
+}
+
+
+static void
+configurewin_remove_page(GtkButton * w, gpointer data)
+{
+ GList *node;
+ GtkNotebook *nb = GTK_NOTEBOOK(data);
+ gtk_notebook_remove_page(nb, gtk_notebook_get_current_page(nb));
+ for (node = drives; node; node = node->next) {
+ struct driveconfig *drive = node->data;
+
+ if (GTK_WIDGET(w) == drive->remove_button) {
+ if (node->next)
+ redo_nb_labels(nb);
+ drives = g_list_remove(drives, drive);
+ g_free(drive);
+ break;
+ }
+ }
+ if (g_list_length(drives) == 1) {
+ struct driveconfig *drive = drives->data;
+ gtk_widget_set_sensitive(drive->remove_button, FALSE);
+ }
+}
+
+
+static void
+configurewin_check_drive(GtkButton * w, gpointer data)
+{
+ struct driveconfig *drive = data;
+ GtkWidget *window, *vbox, *label, *bbox, *closeb;
+ const gchar *device, *directory;
+ gint fd, dae_track = -1;
+ GString *str = g_string_new("");
+ struct stat stbuf;
+
+ device = gtk_entry_get_text(GTK_ENTRY(drive->device));
+ directory = gtk_entry_get_text(GTK_ENTRY(drive->directory));
+
+ if ((fd = open(device, CDOPENFLAGS) < 0))
+ g_string_sprintfa(str, _("Failed to open device %s\n"
+ "Error: %s\n\n"), device, strerror(errno));
+ else {
+ cdda_disc_toc_t toc;
+ close(fd);
+ if (!cdda_get_toc(&toc, device))
+ g_string_append(str,
+ _("Failed to read \"Table of Contents\""
+ "\nMaybe no disc in the drive?\n\n"));
+ else {
+ gint i, data = 0;
+ g_string_sprintfa(str, _("Device %s OK.\n"
+ "Disc has %d tracks"), device,
+ toc.last_track - toc.first_track + 1);
+ for (i = toc.first_track; i <= toc.last_track; i++)
+ if (toc.track[i].flags.data_track)
+ data++;
+ else if (dae_track < 0)
+ dae_track = i;
+ if (data > 0)
+ g_string_sprintfa(str, _(" (%d data tracks)"), data);
+ g_string_sprintfa(str, _("\nTotal length: %d:%d\n"),
+ toc.leadout.minute, toc.leadout.second);
+#ifdef CDDA_HAS_READAUDIO
+ if (dae_track == -1)
+ g_string_sprintfa(str,
+ _("Digital audio extraction "
+ "not tested as the disc has "
+ "no audio tracks\n"));
+ else {
+ gint fd = open(device, CDOPENFLAGS);
+ gint start, end, fr;
+ gchar buffer[CD_FRAMESIZE_RAW];
+ start = LBA(toc.track[dae_track]);
+
+ if (dae_track == toc.last_track)
+ end = LBA(toc.leadout);
+ else
+ end = LBA(toc.track[dae_track + 1]);
+ fr = read_audio_data(fd, start + (end - start) / 2,
+ 1, buffer);
+ if (fr > 0)
+ g_string_sprintfa(str,
+ _("Digital audio extraction "
+ "test: OK\n\n"));
+ else
+ g_string_sprintfa(str,
+ _("Digital audio extraction "
+ "test failed: %s\n\n"),
+ strerror(-fr));
+ }
+#else
+ g_string_sprintfa(str, "\n");
+#endif
+ }
+ }
+ if (stat(directory, &stbuf) < 0) {
+ g_string_sprintfa(str, _("Failed to check directory %s\n"
+ "Error: %s"), directory, strerror(errno));
+ }
+ else {
+ if (!S_ISDIR(stbuf.st_mode))
+ g_string_sprintfa(str,
+ _("Error: %s exist, but is not a directory"),
+ directory);
+ else
+ g_string_sprintfa(str, _("Directory %s OK."), directory);
+ }
+
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_transient_for(GTK_WINDOW(window),
+ GTK_WINDOW(cdda_configure_win));
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ label = gtk_label_new(str->str);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
+ gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ closeb = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ GTK_WIDGET_SET_FLAGS(closeb, GTK_CAN_DEFAULT);
+ g_signal_connect_swapped(G_OBJECT(closeb), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(window));
+ gtk_box_pack_start(GTK_BOX(bbox), closeb, TRUE, TRUE, 0);
+ gtk_widget_grab_default(closeb);
+
+ g_string_free(str, TRUE);
+
+ gtk_widget_show_all(window);
+}
+
+static GtkWidget *
+configurewin_add_drive(struct driveinfo *drive, gpointer nb)
+{
+ GtkWidget *vbox, *bbox, *dev_frame, *dev_table, *dev_label;
+ GtkWidget *dev_dir_label, *check_btn;
+ GtkWidget *volume_frame, *volume_box, *volume_none;
+ GtkWidget *readmode_frame, *readmode_box, *readmode_analog;
+ struct driveconfig *d = g_new0(struct driveconfig, 1);
+
+ vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+
+ dev_frame = gtk_frame_new(_("Device:"));
+ gtk_box_pack_start(GTK_BOX(vbox), dev_frame, FALSE, FALSE, 0);
+ dev_table = gtk_table_new(2, 2, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(dev_table), 5);
+ gtk_container_add(GTK_CONTAINER(dev_frame), dev_table);
+ gtk_table_set_row_spacings(GTK_TABLE(dev_table), 5);
+ gtk_table_set_col_spacings(GTK_TABLE(dev_table), 5);
+
+ dev_label = gtk_label_new_with_mnemonic(_("_Device:"));
+ gtk_misc_set_alignment(GTK_MISC(dev_label), 1.0, 0.5);
+ gtk_table_attach(GTK_TABLE(dev_table), dev_label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+
+ d->device = gtk_entry_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(dev_label), d->device);
+ gtk_table_attach(GTK_TABLE(dev_table), d->device, 1, 2, 0, 1,
+ GTK_FILL | GTK_EXPAND, 0, 0, 0);
+
+ dev_dir_label = gtk_label_new_with_mnemonic(_("Dir_ectory:"));
+ gtk_misc_set_alignment(GTK_MISC(dev_dir_label), 1.0, 0.5);
+ gtk_table_attach(GTK_TABLE(dev_table), dev_dir_label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+
+
+ d->directory = gtk_entry_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(dev_dir_label), d->directory);
+ gtk_table_attach(GTK_TABLE(dev_table), d->directory, 1, 2, 1, 2,
+ GTK_FILL | GTK_EXPAND, 0, 0, 0);
+
+
+ readmode_frame = gtk_frame_new(_("Play mode:"));
+ gtk_box_pack_start(GTK_BOX(vbox), readmode_frame, FALSE, FALSE, 0);
+
+ readmode_box = gtk_vbox_new(5, FALSE);
+ gtk_container_add(GTK_CONTAINER(readmode_frame), readmode_box);
+
+ readmode_analog = gtk_radio_button_new_with_label(NULL, _("Analog"));
+ gtk_box_pack_start(GTK_BOX(readmode_box), readmode_analog, FALSE,
+ FALSE, 0);
+
+ d->dae =
+ gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON
+ (readmode_analog),
+ _
+ ("Digital audio extraction"));
+ gtk_box_pack_start(GTK_BOX(readmode_box), d->dae, FALSE, FALSE, 0);
+#ifndef CDDA_HAS_READAUDIO
+ gtk_widget_set_sensitive(readmode_frame, FALSE);
+#endif
+
+ /*
+ * Volume config
+ */
+
+ volume_frame = gtk_frame_new(_("Volume control:"));
+ gtk_box_pack_start(GTK_BOX(vbox), volume_frame, FALSE, FALSE, 0);
+
+ volume_box = gtk_vbox_new(5, FALSE);
+ gtk_container_add(GTK_CONTAINER(volume_frame), volume_box);
+
+ volume_none = gtk_radio_button_new_with_label(NULL, _("No mixer"));
+ gtk_box_pack_start(GTK_BOX(volume_box), volume_none, FALSE, FALSE, 0);
+
+ d->mixer_drive =
+ gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON
+ (volume_none),
+ _("CDROM drive"));
+ gtk_box_pack_start(GTK_BOX(volume_box), d->mixer_drive, FALSE, FALSE, 0);
+
+ d->mixer_oss =
+ gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON
+ (volume_none),
+ _("OSS mixer"));
+ gtk_box_pack_start(GTK_BOX(volume_box), d->mixer_oss, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(readmode_analog), "toggled",
+ G_CALLBACK(toggle_set_sensitive_cb), volume_frame);
+#ifndef HAVE_OSS
+ gtk_widget_set_sensitive(d->mixer_oss, FALSE);
+#endif
+ if (drive) {
+ gtk_entry_set_text(GTK_ENTRY(d->device), drive->device);
+ gtk_entry_set_text(GTK_ENTRY(d->directory), drive->directory);
+ if (drive->mixer == CDDA_MIXER_DRIVE)
+ SET_TB(d->mixer_drive);
+ else if (drive->mixer == CDDA_MIXER_OSS)
+ SET_TB(d->mixer_oss);
+ if (drive->dae == CDDA_READ_DAE)
+ SET_TB(d->dae);
+ }
+
+ bbox = gtk_hbutton_box_new();
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
+
+ check_btn = gtk_button_new_with_label(_("Check drive..."));
+ GTK_WIDGET_SET_FLAGS(check_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start_defaults(GTK_BOX(bbox), check_btn);
+ g_signal_connect(G_OBJECT(check_btn), "clicked",
+ G_CALLBACK(configurewin_check_drive), d);
+
+ d->remove_button = gtk_button_new_with_label(_("Remove drive"));
+ GTK_WIDGET_SET_FLAGS(d->remove_button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start_defaults(GTK_BOX(bbox), d->remove_button);
+ g_signal_connect(G_OBJECT(d->remove_button), "clicked",
+ G_CALLBACK(configurewin_remove_page), nb);
+
+
+ if (drives == NULL)
+ gtk_widget_set_sensitive(d->remove_button, FALSE);
+ else {
+ struct driveconfig *tmp = drives->data;
+ gtk_widget_set_sensitive(tmp->remove_button, TRUE);
+ }
+
+ drives = g_list_append(drives, d);
+
+ return vbox;
+}
+
+void
+cdda_configure(void)
+{
+ GtkWidget *vbox, *notebook;
+ GtkWidget *dev_vbox, *dev_notebook, *add_drive, *add_bbox;
+ GtkWidget *cdi_vbox;
+ GtkWidget *cdi_cddb_frame, *cdi_cddb_vbox, *cdi_cddb_hbox;
+ GtkWidget *cdi_cddb_server_hbox, *cdi_cddb_server_label;
+ GtkWidget *cdi_cddb_server_list, *cdi_cddb_debug_win;
+ GtkWidget *cdi_cdin_frame, *cdi_cdin_vbox;
+ GtkWidget *cdi_cdin_server_hbox, *cdi_cdin_server_label;
+ GtkWidget *cdi_name_frame, *cdi_name_vbox, *cdi_name_hbox;
+ GtkWidget *cdi_name_label, *cdi_desc;
+ GtkWidget *cdi_name_enable_vbox;
+ GtkWidget *bbox, *ok, *cancel;
+
+ GList *node;
+ gint i = 1;
+
+ if (cdda_configure_win)
+ return;
+
+ cdda_configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ g_signal_connect(G_OBJECT(cdda_configure_win), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &cdda_configure_win);
+ gtk_window_set_title(GTK_WINDOW(cdda_configure_win),
+ _("CD Audio Player Configuration"));
+ gtk_window_set_type_hint(GTK_WINDOW(cdda_configure_win),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(cdda_configure_win), FALSE);
+ gtk_window_set_position(GTK_WINDOW(cdda_configure_win),
+ GTK_WIN_POS_MOUSE);
+ gtk_container_border_width(GTK_CONTAINER(cdda_configure_win), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(cdda_configure_win), vbox);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ /*
+ * Device config
+ */
+ dev_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(dev_vbox), 5);
+
+ dev_notebook = gtk_notebook_new();
+ gtk_notebook_set_scrollable(GTK_NOTEBOOK(dev_notebook), TRUE);
+ gtk_box_pack_start(GTK_BOX(dev_vbox), dev_notebook, FALSE, FALSE, 0);
+
+ for (node = cdda_cfg.drives; node; node = node->next) {
+ struct driveinfo *drive = node->data;
+ gchar *label = g_strdup_printf(_("Drive %d"), i++);
+ GtkWidget *w;
+
+ w = configurewin_add_drive(drive, dev_notebook);
+ gtk_notebook_append_page(GTK_NOTEBOOK(dev_notebook), w,
+ gtk_label_new(label));
+ g_free(label);
+
+ }
+
+ add_bbox = gtk_hbutton_box_new();
+ gtk_box_pack_start(GTK_BOX(dev_vbox), add_bbox, FALSE, FALSE, 0);
+ add_drive = gtk_button_new_with_label(_("Add drive"));
+ g_signal_connect(G_OBJECT(add_drive), "clicked",
+ G_CALLBACK(configurewin_add_page), dev_notebook);
+ GTK_WIDGET_SET_FLAGS(add_drive, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(add_bbox), add_drive, FALSE, FALSE, 0);
+
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dev_vbox,
+ gtk_label_new(_("Device")));
+
+ /*
+ * CD Info config
+ */
+ cdi_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(cdi_vbox), 5);
+
+
+ /* CDDB */
+ cdi_cddb_frame = gtk_frame_new(_("CDDB:"));
+ gtk_box_pack_start(GTK_BOX(cdi_vbox), cdi_cddb_frame, FALSE, FALSE, 0);
+
+ cdi_cddb_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_border_width(GTK_CONTAINER(cdi_cddb_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(cdi_cddb_frame), cdi_cddb_vbox);
+
+ cdi_cddb_hbox = gtk_hbox_new(FALSE, 10);
+ gtk_container_border_width(GTK_CONTAINER(cdi_cddb_hbox), 0);
+ gtk_box_pack_start(GTK_BOX(cdi_cddb_vbox),
+ cdi_cddb_hbox, FALSE, FALSE, 0);
+ cdi_use_cddb = gtk_check_button_new_with_label(_("Use CDDB"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cdi_use_cddb),
+ cdda_cfg.use_cddb);
+ gtk_box_pack_start(GTK_BOX(cdi_cddb_hbox), cdi_use_cddb, FALSE, FALSE, 0);
+ cdi_cddb_server_list = gtk_button_new_with_label(_("Get server list"));
+ gtk_box_pack_end(GTK_BOX(cdi_cddb_hbox), cdi_cddb_server_list, FALSE,
+ FALSE, 0);
+ cdi_cddb_debug_win = gtk_button_new_with_label(_("Show network window"));
+ g_signal_connect(G_OBJECT(cdi_cddb_debug_win), "clicked",
+ G_CALLBACK(cdda_cddb_show_network_window), NULL);
+ gtk_box_pack_end(GTK_BOX(cdi_cddb_hbox), cdi_cddb_debug_win, FALSE,
+ FALSE, 0);
+
+ cdi_cddb_server_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(cdi_cddb_vbox),
+ cdi_cddb_server_hbox, FALSE, FALSE, 0);
+
+ cdi_cddb_server_label = gtk_label_new(_("CDDB server:"));
+ gtk_box_pack_start(GTK_BOX(cdi_cddb_server_hbox),
+ cdi_cddb_server_label, FALSE, FALSE, 0);
+
+ cdi_cddb_server = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(cdi_cddb_server), cdda_cfg.cddb_server);
+ gtk_box_pack_start(GTK_BOX(cdi_cddb_server_hbox), cdi_cddb_server,
+ TRUE, TRUE, 0);
+ g_signal_connect(G_OBJECT(cdi_cddb_server_list), "clicked",
+ G_CALLBACK(cdda_cddb_show_server_dialog),
+ cdi_cddb_server);
+
+ /*
+ * CDindex
+ */
+ cdi_cdin_frame = gtk_frame_new(_("CD Index:"));
+ gtk_box_pack_start(GTK_BOX(cdi_vbox), cdi_cdin_frame, FALSE, FALSE, 0);
+
+ cdi_cdin_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_border_width(GTK_CONTAINER(cdi_cdin_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(cdi_cdin_frame), cdi_cdin_vbox);
+
+ cdi_use_cdin = gtk_check_button_new_with_label(_("Use CD Index"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cdi_use_cdin),
+ cdda_cfg.use_cdin);
+ gtk_box_pack_start(GTK_BOX(cdi_cdin_vbox), cdi_use_cdin, FALSE, FALSE, 0);
+
+ cdi_cdin_server_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(cdi_cdin_vbox), cdi_cdin_server_hbox, FALSE,
+ FALSE, 0);
+
+ cdi_cdin_server_label = gtk_label_new(_("CD Index server:"));
+ gtk_box_pack_start(GTK_BOX(cdi_cdin_server_hbox),
+ cdi_cdin_server_label, FALSE, FALSE, 0);
+
+ cdi_cdin_server = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(cdi_cdin_server), cdda_cfg.cdin_server);
+ gtk_box_pack_start(GTK_BOX(cdi_cdin_server_hbox), cdi_cdin_server,
+ TRUE, TRUE, 0);
+#ifndef WITH_CDINDEX
+ gtk_widget_set_sensitive(cdi_cdin_frame, FALSE);
+#endif
+
+ /*
+ * Track names
+ */
+ cdi_name_frame = gtk_frame_new(_("Track names:"));
+ gtk_box_pack_start(GTK_BOX(cdi_vbox), cdi_name_frame, FALSE, FALSE, 0);
+
+ cdi_name_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(cdi_name_frame), cdi_name_vbox);
+ gtk_container_border_width(GTK_CONTAINER(cdi_name_vbox), 5);
+ cdi_name_override =
+ gtk_check_button_new_with_label(_("Override generic titles"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cdi_name_override),
+ cdda_cfg.title_override);
+ gtk_box_pack_start(GTK_BOX(cdi_name_vbox), cdi_name_override, FALSE,
+ FALSE, 0);
+
+ cdi_name_enable_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(cdi_name_vbox), cdi_name_enable_vbox);
+ gtk_widget_set_sensitive(cdi_name_enable_vbox, cdda_cfg.title_override);
+ g_signal_connect(G_OBJECT(cdi_name_override), "toggled",
+ G_CALLBACK(toggle_set_sensitive_cb),
+ cdi_name_enable_vbox);
+
+ cdi_name_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(cdi_name_enable_vbox), cdi_name_hbox, FALSE,
+ FALSE, 0);
+ cdi_name_label = gtk_label_new(_("Name format:"));
+ gtk_box_pack_start(GTK_BOX(cdi_name_hbox), cdi_name_label, FALSE,
+ FALSE, 0);
+ cdi_name = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(cdi_name), cdda_cfg.name_format);
+ gtk_box_pack_start(GTK_BOX(cdi_name_hbox), cdi_name, TRUE, TRUE, 0);
+
+ cdi_desc = xmms_titlestring_descriptions("patn", 2);
+ gtk_box_pack_start(GTK_BOX(cdi_name_enable_vbox), cdi_desc, FALSE,
+ FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), cdi_vbox,
+ gtk_label_new(_("CD Info")));
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ g_signal_connect(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(configurewin_close), NULL);
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_OK);
+ g_signal_connect(G_OBJECT(ok), "clicked",
+ G_CALLBACK(cdda_configurewin_ok_cb), NULL);
+ g_signal_connect(G_OBJECT(ok), "clicked",
+ G_CALLBACK(configurewin_close), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ gtk_widget_grab_default(ok);
+
+
+ gtk_widget_show_all(cdda_configure_win);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,186 @@
+/*
+ * http.c
+ * Some simple routines for connecting to a remote tcp socket
+ * Copyright 1999 Håvard Kvålen <havardk at sol.no>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* FIXME: We need to have *one* place in xmms where you configure proxies */
+
+#include "http.h"
+
+gint
+http_open_connection(const gchar * server, gint port)
+{
+ gint sock;
+ struct hostent *host;
+ struct sockaddr_in address;
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ address.sin_family = AF_INET;
+
+ if (!(host = gethostbyname(server)))
+ return 0;
+
+ memcpy(&address.sin_addr.s_addr, *(host->h_addr_list),
+ sizeof(address.sin_addr.s_addr));
+ address.sin_port = g_htons(port);
+
+ if (connect
+ (sock, (struct sockaddr *) &address,
+ sizeof(struct sockaddr_in)) == -1)
+ return 0;
+
+ return sock;
+}
+
+void
+http_close_connection(gint sock)
+{
+ shutdown(sock, 2);
+ close(sock);
+}
+
+gint
+http_read_line(gint sock, gchar * buf, gint size)
+{
+ gint i = 0;
+
+ while (i < size - 1) {
+ if (read(sock, buf + i, 1) <= 0) {
+ if (i == 0)
+ return -1;
+ else
+ break;
+ }
+ if (buf[i] == '\n')
+ break;
+ if (buf[i] != '\r')
+ i++;
+ }
+ buf[i] = '\0';
+ return i;
+}
+
+gint
+http_read_first_line(gint sock, gchar * buf, gint size)
+{
+ /* Skips the HTTP-header, if there is one, and reads the first line into buf.
+ Returns number of bytes read. */
+
+ gint i;
+ /* Skip the HTTP-header */
+ if ((i = http_read_line(sock, buf, size)) < 0)
+ return -1;
+ if (!strncmp(buf, "HTTP", 4)) { /* Check to make sure its not HTTP/0.9 */
+ while (http_read_line(sock, buf, size) > 0)
+ /* nothing */ ;
+ if ((i = http_read_line(sock, buf, size)) < 0)
+ return -1;
+ }
+
+ return i;
+}
+
+gchar *
+http_get(gchar * url)
+{
+ gchar *server, *getstr, *buf = NULL, *bptr;
+ gchar *gs, *gc, *turl = url;
+ gint sock, n, bsize, port = 0;
+
+ /* Skip past ``http://'' part of URL */
+ if (!strncmp(turl, "http:", 5)) {
+ turl += 5;
+ if (!strncmp(turl, "//", 2))
+ turl += 2;
+ }
+
+ /* If path starts with a '/', we are referring to localhost */
+ if (turl[0] == '/')
+ server = "localhost";
+ else
+ server = turl;
+
+ /* Check if URL contains port specification */
+ gc = strchr(turl, ':');
+ gs = strchr(turl, '/');
+
+ if (gc != NULL && gc < gs) {
+ port = atoi(gc + 1);
+ *gc = '\0';
+ }
+ if (port == 0)
+ port = 80;
+
+ /* Make sure that server string is null terminated. */
+ if (gs)
+ *gs = '\0';
+
+
+ /*
+ * Now, open connection to server.
+ */
+ sock = http_open_connection(server, port);
+
+ /* Repair the URL string that we broke earlier on */
+ if (gs)
+ *gs = '/';
+ if (gc && gc == '\0')
+ *gc = ':';
+
+ if (sock == 0)
+ return NULL;
+
+ /*
+ * Send query to socket.
+ */
+ getstr = g_strdup_printf("GET %s HTTP/1.0\r\n\r\n", gs ? gs : "/");
+/* getstr = g_strdup_printf("GET %s HTTP/1.0\r\n\r\n", url ? url : "/"); */
+
+ if (write(sock, getstr, strlen(getstr)) == -1) {
+ http_close_connection(sock);
+ return NULL;
+ }
+
+ /*
+ * Start receiving result.
+ */
+ bsize = 4096;
+ bptr = buf = g_malloc(bsize);
+
+ if ((n = http_read_first_line(sock, bptr, bsize)) == -1) {
+ g_free(buf);
+ buf = NULL;
+ goto Done;
+ }
+
+ bsize -= n;
+ bptr += n;
+
+ while (bsize > 0 && (n = http_read_line(sock, bptr, bsize)) != -1) {
+ bptr += n;
+ bsize -= n;
+ }
+
+ Done:
+ http_close_connection(sock);
+
+ /*
+ * Return result buffer to caller.
+ */
+ return buf;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/cdaudio/http.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1999 Håvard Kvålen <havardk at sol.no>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef XMMS_HTTP_H
+#define XMMS_HTTP_H
+
+#include "config.h"
+#include <glib.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <netdb.h>
+#include <stdlib.h>
+
+
+gint http_open_connection(const gchar * server, gint port);
+void http_close_connection(gint sock);
+gint http_read_line(gint sock, gchar * buf, gint size);
+gint http_read_first_line(gint sock, gchar * buf, gint size);
+gchar *http_get(gchar * url);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,54 @@
+if ENABLE_MPG123
+
+lib_LTLIBRARIES = libmpg123.la
+
+endif
+
+libdir = $(plugindir)/$(INPUT_PLUGIN_DIR)
+
+COMMON_SRC = mpg123.c configure.c fileinfo.c common.c \
+decode_2to1.c decode_4to1.c \
+layer1.c layer2.c layer3.c \
+tabinit.c equalizer.c http.c \
+huffman.h mpg123.h l2tables.h getbits.h \
+dxhead.c dxhead.h \
+id3.c xmms-id3.h id3_frame.c id3_frame_content.c id3_frame_text.c \
+id3_frame_url.c id3_header.h id3_tag.c
+
+if ARCH_X86
+
+if USE_X86ASM
+
+if USE_SIMD
+
+EXTRA_SRC = decode_i386.c dct64_i386.c decode_i586.s \
+ decode_3dnow.s dct64_3dnow.s dct36_3dnow.s getcpuflags.s \
+ dct64_MMX.s decode_MMX.s
+
+else
+
+EXTRA_SRC = decode_i386.c dct64_i386.c decode_i586.s
+
+endif # USE_SIMD
+
+else
+
+EXTRA_SRC = decode_i386.c dct64_i386.c
+
+endif # SE_X86_ASM
+
+else
+
+EXTRA_SRC = decode.c dct64.c
+
+endif # ARCH_X86
+
+EXTRA_DIST = decode.c decode_i386.c decode_i586.s decode_3dnow.s dct64_i386.c \
+ getbits.c dct64.c dct64_3dnow.s dct36_3dnow.s getcpuflags.s \
+ dct64_MMX.s decode_MMX.s \
+ mp3.xpm
+
+libmpg123_la_SOURCES = $(COMMON_SRC) $(EXTRA_SRC)
+libmpg123_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+libmpg123_la_LIBADD = $(ID3LIBS) $(GTK_LIBS) $(top_builddir)/libbeep/libbeep.la
+INCLUDES = $(GTK_CFLAGS) $(ARCH_DEFINES) -I$(top_srcdir)/intl -I$(top_srcdir)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/README
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/README 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/README 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,9 @@
+Note about the mpg123 license!
+
+We have permission to release mpg123 source inside xmms as GPL!
+Using mpg123 source (at least in a commercial environment) may infringe 3rd party patents.
+Also Michael Hipp (hippm at informatik.uni-tuebingen.de) would like to know if you modify
+this sourcecode. Send him an email if you do, he would like to have an eye on external developments.
+
+Happy playing!
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/common.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/common.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/common.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,512 @@
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "mpg123.h"
+#include "xmms-id3.h"
+#include "id3_header.h"
+
+/* max = 1728 */
+#define MAXFRAMESIZE 1792
+
+const int tabsel_123[2][3][16] = {
+ {{0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416,
+ 448,},
+ {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,},
+ {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,}},
+ {{0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,},
+ {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,},
+ {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}}
+};
+
+const int mpg123_freqs[9] =
+ { 44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000 };
+
+struct bitstream_info bsi;
+
+extern gint mpg123_bitrate, mpg123_frequency, mpg123_length;
+extern gchar *mpg123_title, *mpg123_filename;
+extern gboolean mpg123_stereo;
+
+static int fsizeold = 0, ssize;
+static unsigned char bsspace[2][MAXFRAMESIZE + 512]; /* MAXFRAMESIZE */
+static unsigned char *bsbuf = bsspace[1], *bsbufold;
+static int bsnum = 0;
+
+unsigned char *mpg123_pcm_sample;
+int mpg123_pcm_point = 0;
+
+static VFSFile *filept;
+static int filept_opened;
+
+static int get_fileinfo(void);
+
+static int
+fullread(VFSFile * fd, unsigned char *buf, int count)
+{
+ int ret, cnt = 0;
+
+ while (cnt < count) {
+ if (fd)
+ ret = vfs_fread(buf + cnt, 1, count - cnt, fd);
+ else
+ ret = mpg123_http_read(buf + cnt, count - cnt);
+ if (ret < 0)
+ return ret;
+ if (ret == 0)
+ break;
+ cnt += ret;
+ }
+ return cnt;
+}
+
+static int
+stream_init(void)
+{
+ if (get_fileinfo() < 0)
+ return -1;
+ return 0;
+}
+
+void
+mpg123_stream_close(void)
+{
+ if (filept)
+ vfs_fclose(filept);
+ else if (mpg123_info->network_stream)
+ mpg123_http_close();
+}
+
+/****************************************
+ * HACK,HACK,HACK: step back <num> frames
+ * can only work if the 'stream' isn't a real stream but a file
+static int stream_back_bytes(int bytes)
+{
+ if (vfs_fseek(filept, -bytes, SEEK_CUR) < 0)
+ return -1;
+ return 0;
+}
+ */
+
+static int
+stream_head_read(unsigned long *newhead)
+{
+ unsigned char hbuf[4];
+
+ if (fullread(filept, hbuf, 4) != 4)
+ return FALSE;
+
+ *newhead = ((unsigned long) hbuf[0] << 24) |
+ ((unsigned long) hbuf[1] << 16) |
+ ((unsigned long) hbuf[2] << 8) | (unsigned long) hbuf[3];
+
+ return TRUE;
+}
+
+static int
+stream_head_shift(unsigned long *head)
+{
+ unsigned char hbuf;
+
+ if (fullread(filept, &hbuf, 1) != 1)
+ return 0;
+ *head <<= 8;
+ *head |= hbuf;
+ *head &= 0xffffffff;
+ return 1;
+}
+
+static int
+stream_mpg123_read_frame_body(unsigned char *buf, int size)
+{
+ long l;
+
+ if ((l = fullread(filept, buf, size)) != size) {
+ if (l <= 0)
+ return 0;
+ memset(buf + l, 0, size - l);
+ }
+ return 1;
+}
+
+static long
+stream_tell(void)
+{
+ return vfs_ftell(filept);
+}
+
+/*
+static void stream_rewind(void)
+{
+ vfs_fseek(filept, 0, SEEK_SET);
+}
+*/
+
+int
+mpg123_stream_jump_to_frame(struct frame *fr, int frame)
+{
+ if (!filept)
+ return -1;
+ mpg123_read_frame_init();
+ vfs_fseek(filept, frame * (fr->framesize + 4), SEEK_SET);
+ mpg123_read_frame(fr);
+ return 0;
+}
+
+int
+mpg123_stream_jump_to_byte(struct frame *fr, int byte)
+{
+ if (!filept)
+ return -1;
+ vfs_fseek(filept, byte, SEEK_SET);
+ mpg123_read_frame(fr);
+ return 0;
+}
+
+int
+mpg123_stream_check_for_xing_header(struct frame *fr, xing_header_t * xhead)
+{
+ unsigned char *head_data;
+ int ret;
+
+ vfs_fseek(filept, -(fr->framesize + 4), SEEK_CUR);
+ head_data = g_malloc(fr->framesize + 4);
+ vfs_fread(head_data, 1, fr->framesize + 4, filept);
+ ret = mpg123_get_xing_header(xhead, head_data);
+ g_free(head_data);
+ return ret;
+}
+
+static int
+get_fileinfo(void)
+{
+ guchar buf[3];
+
+ if (filept == NULL)
+ return -1;
+ if (vfs_fseek(filept, 0, SEEK_END) < 0)
+ return -1;
+
+ mpg123_info->filesize = vfs_ftell(filept);
+ if (vfs_fseek(filept, -128, SEEK_END) < 0)
+ return -1;
+ if (fullread(filept, buf, 3) != 3)
+ return -1;
+ if (!strncmp((char *) buf, "TAG", 3))
+ mpg123_info->filesize -= 128;
+ if (vfs_fseek(filept, 0, SEEK_SET) < 0)
+ return -1;
+
+ if (mpg123_info->filesize <= 0)
+ return -1;
+
+ return mpg123_info->filesize;
+}
+
+void
+mpg123_read_frame_init(void)
+{
+ memset(bsspace[0], 0, MAXFRAMESIZE + 512);
+ memset(bsspace[1], 0, MAXFRAMESIZE + 512);
+ mpg123_info->output_audio = FALSE;
+}
+
+/*
+ * Function read_id3v2_tag (head)
+ *
+ * Read ID3v2 tag from stream. Return TRUE upon success, or FALSE if
+ * an error occurred.
+ *
+ */
+static gboolean
+read_id3v2_tag(unsigned long head)
+{
+ guchar *id3buf;
+ int hdrsize;
+ struct id3_tag *id3d;
+ struct id3tag_t tag;
+ guchar buf[7];
+
+ buf[0] = head & 0xff;
+ /*
+ * Read ID3tag header.
+ */
+ if (fullread(filept, buf + 1, 6) != 6)
+ return FALSE;
+
+ hdrsize = ID3_GET_SIZE28(buf[3], buf[4], buf[5], buf[6]);
+
+ /*
+ * A invalid header could fool us into requesting insane
+ * amounts of memory. Make sure the header size is
+ * reasonable.
+ */
+ if ((mpg123_info->filesize && hdrsize > mpg123_info->filesize) ||
+ (!mpg123_info->filesize && hdrsize > 1000000))
+ return FALSE;
+
+ if (mpg123_cfg.disable_id3v2) {
+ guint8 *tmp = g_malloc(hdrsize);
+ gboolean ret;
+ ret = (fullread(filept, tmp, hdrsize) == hdrsize);
+ g_free(tmp);
+ return ret;
+ }
+
+ id3buf = g_malloc(hdrsize + ID3_TAGHDR_SIZE + 3);
+ memcpy(id3buf, "ID3", 3);
+ memcpy(id3buf + 3, buf, ID3_TAGHDR_SIZE);
+
+ /*
+ * Read ID3tag body.
+ */
+ if (fullread(filept, id3buf + ID3_TAGHDR_SIZE + 3, hdrsize) != hdrsize) {
+ g_free(id3buf);
+ return FALSE;
+ }
+
+ /*
+ * Get info from tag.
+ */
+ if ((id3d = id3_open_mem(id3buf, 0)) != NULL) {
+ mpg123_get_id3v2(id3d, &tag);
+ if (!mpg123_info->first_frame) {
+ char *songname = mpg123_title;
+ mpg123_title = mpg123_format_song_title(&tag, mpg123_filename);
+ mpg123_ip.set_info(mpg123_title, mpg123_length,
+ mpg123_bitrate * 1000,
+ mpg123_frequency, mpg123_stereo);
+ if (songname)
+ g_free(songname);
+ }
+ else {
+ mpg123_title = mpg123_format_song_title(&tag, mpg123_filename);
+ }
+ id3_close(id3d);
+ }
+ g_free(id3buf);
+
+ return TRUE;
+}
+
+int
+mpg123_head_check(unsigned long head)
+{
+ if ((head & 0xffe00000) != 0xffe00000)
+ return FALSE;
+ if (!((head >> 17) & 3))
+ return FALSE;
+ if (((head >> 12) & 0xf) == 0xf)
+ return FALSE;
+ if (!((head >> 12) & 0xf))
+ return FALSE;
+ if (((head >> 10) & 0x3) == 0x3)
+ return FALSE;
+ if (((head >> 19) & 1) == 1 &&
+ ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1)
+ return FALSE;
+ if ((head & 0xffff0000) == 0xfffe0000)
+ return FALSE;
+
+ return TRUE;
+}
+
+/*****************************************************************
+ * read next frame
+ */
+int
+mpg123_read_frame(struct frame *fr)
+{
+ unsigned long newhead;
+
+ fsizeold = fr->framesize; /* for Layer3 */
+
+ if (!stream_head_read(&newhead))
+ return FALSE;
+
+ if (!mpg123_head_check(newhead) || !mpg123_decode_header(fr, newhead)) {
+ int try = 0;
+
+ do {
+ try++;
+ if ((newhead & 0xffffff00) ==
+ ('I' << 24) + ('D' << 16) + ('3' << 8)) {
+ read_id3v2_tag(newhead);
+ if (!stream_head_read(&newhead))
+ return FALSE;
+ }
+ else if (!stream_head_shift(&newhead))
+ return 0;
+
+ }
+ while ((!mpg123_head_check(newhead) ||
+ !mpg123_decode_header(fr, newhead)) && try < (256 * 1024));
+ if (try >= (256 * 1024))
+ return FALSE;
+
+ mpg123_info->filesize -= try;
+ }
+ /* flip/init buffer for Layer 3 */
+ bsbufold = bsbuf;
+ bsbuf = bsspace[bsnum] + 512;
+ bsnum = (bsnum + 1) & 1;
+
+ if (!stream_mpg123_read_frame_body(bsbuf, fr->framesize))
+ return 0;
+
+ bsi.bitindex = 0;
+ bsi.wordpointer = (unsigned char *) bsbuf;
+
+
+ return 1;
+
+}
+
+/*
+ * the code a header and write the information
+ * into the frame structure
+ */
+int
+mpg123_decode_header(struct frame *fr, unsigned long newhead)
+{
+ if (newhead & (1 << 20)) {
+ fr->lsf = (newhead & (1 << 19)) ? 0x0 : 0x1;
+ fr->mpeg25 = 0;
+ }
+ else {
+ fr->lsf = 1;
+ fr->mpeg25 = 1;
+ }
+ fr->lay = 4 - ((newhead >> 17) & 3);
+ if (fr->mpeg25) {
+ fr->sampling_frequency = 6 + ((newhead >> 10) & 0x3);
+ }
+ else
+ fr->sampling_frequency = ((newhead >> 10) & 0x3) + (fr->lsf * 3);
+ fr->error_protection = ((newhead >> 16) & 0x1) ^ 0x1;
+
+ fr->bitrate_index = ((newhead >> 12) & 0xf);
+ fr->padding = ((newhead >> 9) & 0x1);
+ fr->extension = ((newhead >> 8) & 0x1);
+ fr->mode = ((newhead >> 6) & 0x3);
+ fr->mode_ext = ((newhead >> 4) & 0x3);
+ fr->copyright = ((newhead >> 3) & 0x1);
+ fr->original = ((newhead >> 2) & 0x1);
+ fr->emphasis = newhead & 0x3;
+
+ fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2;
+
+ ssize = 0;
+
+ if (!fr->bitrate_index)
+ return (0);
+
+ switch (fr->lay) {
+ case 1:
+ fr->do_layer = mpg123_do_layer1;
+ /* inits also shared tables with layer1 */
+ mpg123_init_layer2(fr->synth_type == SYNTH_MMX);
+ fr->framesize =
+ (long) tabsel_123[fr->lsf][0][fr->bitrate_index] * 12000;
+ fr->framesize /= mpg123_freqs[fr->sampling_frequency];
+ fr->framesize = ((fr->framesize + fr->padding) << 2) - 4;
+ break;
+ case 2:
+ fr->do_layer = mpg123_do_layer2;
+ /* inits also shared tables with layer1 */
+ mpg123_init_layer2(fr->synth_type == SYNTH_MMX);
+ fr->framesize =
+ (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000;
+ fr->framesize /= mpg123_freqs[fr->sampling_frequency];
+ fr->framesize += fr->padding - 4;
+ break;
+ case 3:
+ fr->do_layer = mpg123_do_layer3;
+ if (fr->lsf)
+ ssize = (fr->stereo == 1) ? 9 : 17;
+ else
+ ssize = (fr->stereo == 1) ? 17 : 32;
+ if (fr->error_protection)
+ ssize += 2;
+ fr->framesize =
+ (long) tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000;
+ fr->framesize /= mpg123_freqs[fr->sampling_frequency] << (fr->lsf);
+ fr->framesize = fr->framesize + fr->padding - 4;
+ break;
+ default:
+ return (0);
+ }
+ if (fr->framesize > MAXFRAMESIZE)
+ return 0;
+ return 1;
+}
+
+void
+mpg123_open_stream(char *bs_filenam, int fd)
+{
+ filept_opened = 1;
+ if (!strncasecmp(bs_filenam, "http://", 7)) {
+ filept = NULL;
+ mpg123_http_open(bs_filenam);
+ mpg123_info->filesize = 0;
+ mpg123_info->network_stream = TRUE;
+ }
+ else {
+ if ((filept = vfs_fopen(bs_filenam, "rb")) == NULL ||
+ stream_init() == -1)
+ mpg123_info->eof = TRUE;
+ }
+
+}
+
+void
+mpg123_set_pointer(long backstep)
+{
+ bsi.wordpointer = bsbuf + ssize - backstep;
+ if (backstep)
+ memcpy(bsi.wordpointer, bsbufold + fsizeold - backstep, backstep);
+ bsi.bitindex = 0;
+}
+
+double
+mpg123_compute_bpf(struct frame *fr)
+{
+ double bpf;
+
+ switch (fr->lay) {
+ case 1:
+ bpf = tabsel_123[fr->lsf][0][fr->bitrate_index];
+ bpf *= 12000.0 * 4.0;
+ bpf /= mpg123_freqs[fr->sampling_frequency] << (fr->lsf);
+ break;
+ case 2:
+ case 3:
+ bpf = tabsel_123[fr->lsf][fr->lay - 1][fr->bitrate_index];
+ bpf *= 144000;
+ bpf /= mpg123_freqs[fr->sampling_frequency] << (fr->lsf);
+ break;
+ default:
+ bpf = 1.0;
+ }
+
+ return bpf;
+}
+
+int
+mpg123_calc_numframes(struct frame *fr)
+{
+ return (int) (mpg123_info->filesize / mpg123_compute_bpf(fr));
+}
+
+double
+mpg123_relative_pos(void)
+{
+ if (!filept || !mpg123_info->filesize)
+ return 0;
+ return ((double) stream_tell()) / mpg123_info->filesize;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/configure.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/configure.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/configure.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,849 @@
+
+#include "mpg123.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <libbeep/configdb.h>
+#include <libbeep/dirbrowser.h>
+#include <libbeep/titlestring.h>
+
+
+static GtkWidget *mpg123_configurewin = NULL;
+static GtkWidget *vbox, *notebook;
+static GtkWidget *decode_vbox, *decode_hbox1;
+static GtkWidget *decode_res_frame, *decode_res_vbox, *decode_res_16,
+ *decode_res_8;
+static GtkWidget *decode_ch_frame, *decode_ch_vbox, *decode_ch_stereo,
+ *decode_ch_mono;
+static GtkWidget *decode_freq_frame, *decode_freq_vbox, *decode_freq_1to1,
+ *decode_freq_1to2, *decode_freq_1to4;
+static GtkWidget *option_frame, *option_vbox, *detect_by_content,
+ *detect_by_extension, *detect_by_both;
+#ifdef USE_SIMD
+static GtkWidget *auto_select, *decoder_3dnow, *decoder_mmx, *decoder_fpu;
+
+static void auto_select_cb(GtkWidget * w, gpointer data);
+#endif
+
+static GtkObject *streaming_size_adj, *streaming_pre_adj;
+static GtkWidget *streaming_proxy_use, *streaming_proxy_host_entry;
+static GtkWidget *streaming_proxy_port_entry, *streaming_save_use,
+ *streaming_save_entry;
+static GtkWidget *streaming_proxy_auth_use;
+static GtkWidget *streaming_proxy_auth_pass_entry,
+ *streaming_proxy_auth_user_entry;
+static GtkWidget *streaming_proxy_auth_user_label,
+ *streaming_proxy_auth_pass_label;
+static GtkWidget *streaming_cast_title, *streaming_udp_title;
+static GtkWidget *streaming_proxy_hbox, *streaming_proxy_auth_hbox,
+ *streaming_save_dirbrowser;
+static GtkWidget *streaming_save_hbox, *title_id3_box, *title_tag_desc;
+static GtkWidget *title_override, *title_id3_entry, *title_id3v2_disable;
+
+/* Encoding patch */
+static GtkWidget *title_encoding_hbox, *title_encoding_enabled, *title_encoding, *title_encoding_label;
+/* Encoding patch */
+
+MPG123Config mpg123_cfg;
+
+static void
+mpg123_configurewin_ok(GtkWidget * widget, gpointer data)
+{
+ ConfigDb *db;
+
+ if (GTK_TOGGLE_BUTTON(decode_res_16)->active)
+ mpg123_cfg.resolution = 16;
+ else if (GTK_TOGGLE_BUTTON(decode_res_8)->active)
+ mpg123_cfg.resolution = 8;
+
+ if (GTK_TOGGLE_BUTTON(decode_ch_stereo)->active)
+ mpg123_cfg.channels = 2;
+ else if (GTK_TOGGLE_BUTTON(decode_ch_mono)->active)
+ mpg123_cfg.channels = 1;
+
+ if (GTK_TOGGLE_BUTTON(decode_freq_1to1)->active)
+ mpg123_cfg.downsample = 0;
+ else if (GTK_TOGGLE_BUTTON(decode_freq_1to2)->active)
+ mpg123_cfg.downsample = 1;
+ if (GTK_TOGGLE_BUTTON(decode_freq_1to4)->active)
+ mpg123_cfg.downsample = 2;
+
+ if (GTK_TOGGLE_BUTTON(detect_by_content)->active)
+ mpg123_cfg.detect_by = DETECT_CONTENT;
+ else if (GTK_TOGGLE_BUTTON(detect_by_extension)->active)
+ mpg123_cfg.detect_by = DETECT_EXTENSION;
+ else if (GTK_TOGGLE_BUTTON(detect_by_both)->active)
+ mpg123_cfg.detect_by = DETECT_BOTH;
+ else
+ mpg123_cfg.detect_by = DETECT_EXTENSION;
+
+#ifdef USE_SIMD
+ if (GTK_TOGGLE_BUTTON(auto_select)->active)
+ mpg123_cfg.default_synth = SYNTH_AUTO;
+ else if (GTK_TOGGLE_BUTTON(decoder_fpu)->active)
+ mpg123_cfg.default_synth = SYNTH_FPU;
+ else if (GTK_TOGGLE_BUTTON(decoder_mmx)->active)
+ mpg123_cfg.default_synth = SYNTH_MMX;
+ else
+ mpg123_cfg.default_synth = SYNTH_3DNOW;
+
+#endif
+ mpg123_cfg.http_buffer_size =
+ (gint) GTK_ADJUSTMENT(streaming_size_adj)->value;
+ mpg123_cfg.http_prebuffer =
+ (gint) GTK_ADJUSTMENT(streaming_pre_adj)->value;
+
+ mpg123_cfg.use_proxy =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use));
+ g_free(mpg123_cfg.proxy_host);
+ mpg123_cfg.proxy_host =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_host_entry)));
+ mpg123_cfg.proxy_port =
+ atoi(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_port_entry)));
+
+ mpg123_cfg.proxy_use_auth =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use));
+
+ if (mpg123_cfg.proxy_user)
+ g_free(mpg123_cfg.proxy_user);
+ mpg123_cfg.proxy_user = NULL;
+ if (strlen
+ (gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_user_entry))) > 0)
+ mpg123_cfg.proxy_user =
+ g_strdup(gtk_entry_get_text
+ (GTK_ENTRY(streaming_proxy_auth_user_entry)));
+
+ if (mpg123_cfg.proxy_pass)
+ g_free(mpg123_cfg.proxy_pass);
+ mpg123_cfg.proxy_pass = NULL;
+ if (strlen
+ (gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_pass_entry))) > 0)
+ mpg123_cfg.proxy_pass =
+ g_strdup(gtk_entry_get_text
+ (GTK_ENTRY(streaming_proxy_auth_pass_entry)));
+
+
+ mpg123_cfg.save_http_stream =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use));
+ if (mpg123_cfg.save_http_path)
+ g_free(mpg123_cfg.save_http_path);
+ mpg123_cfg.save_http_path =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_save_entry)));
+
+ mpg123_cfg.use_udp_channel =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_udp_title));
+
+ mpg123_cfg.title_override =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_override));
+ mpg123_cfg.disable_id3v2 =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_id3v2_disable));
+ g_free(mpg123_cfg.id3_format);
+ mpg123_cfg.id3_format =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(title_id3_entry)));
+
+ mpg123_cfg.title_encoding_enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_encoding_enabled));
+ mpg123_cfg.title_encoding = g_strdup(gtk_entry_get_text(GTK_ENTRY(title_encoding)));
+ if (mpg123_cfg.title_encoding_enabled)
+ mpg123_id3_encoding_list = g_strsplit_set(mpg123_cfg.title_encoding, ENCODING_SEPARATOR, 0);
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_set_int(db, "MPG123", "resolution", mpg123_cfg.resolution);
+ bmp_cfg_db_set_int(db, "MPG123", "channels", mpg123_cfg.channels);
+ bmp_cfg_db_set_int(db, "MPG123", "downsample", mpg123_cfg.downsample);
+ bmp_cfg_db_set_int(db, "MPG123", "http_buffer_size",
+ mpg123_cfg.http_buffer_size);
+ bmp_cfg_db_set_int(db, "MPG123", "http_prebuffer",
+ mpg123_cfg.http_prebuffer);
+ bmp_cfg_db_set_bool(db, "MPG123", "use_proxy", mpg123_cfg.use_proxy);
+ bmp_cfg_db_set_string(db, "MPG123", "proxy_host", mpg123_cfg.proxy_host);
+ bmp_cfg_db_set_int(db, "MPG123", "proxy_port", mpg123_cfg.proxy_port);
+ bmp_cfg_db_set_bool(db, "MPG123", "proxy_use_auth",
+ mpg123_cfg.proxy_use_auth);
+ if (mpg123_cfg.proxy_user)
+ bmp_cfg_db_set_string(db, "MPG123", "proxy_user",
+ mpg123_cfg.proxy_user);
+ else
+ bmp_cfg_db_unset_key(db, "MPG123", "proxy_user");
+ if (mpg123_cfg.proxy_pass)
+ bmp_cfg_db_set_string(db, "MPG123", "proxy_pass",
+ mpg123_cfg.proxy_pass);
+ else
+ bmp_cfg_db_unset_key(db, "MPG123", "proxy_pass");
+ bmp_cfg_db_set_bool(db, "MPG123", "save_http_stream",
+ mpg123_cfg.save_http_stream);
+ bmp_cfg_db_set_string(db, "MPG123", "save_http_path",
+ mpg123_cfg.save_http_path);
+ bmp_cfg_db_set_bool(db, "MPG123", "use_udp_channel",
+ mpg123_cfg.use_udp_channel);
+ bmp_cfg_db_set_bool(db, "MPG123", "title_override",
+ mpg123_cfg.title_override);
+ bmp_cfg_db_set_bool(db, "MPG123", "disable_id3v2",
+ mpg123_cfg.disable_id3v2);
+ bmp_cfg_db_set_string(db, "MPG123", "id3_format", mpg123_cfg.id3_format);
+ bmp_cfg_db_set_int(db, "MPG123", "detect_by", mpg123_cfg.detect_by);
+#ifdef USE_SIMD
+ bmp_cfg_db_set_int(db, "MPG123", "default_synth",
+ mpg123_cfg.default_synth);
+#endif
+
+/* Encoding patch */
+ bmp_cfg_db_set_bool(db, "MPG123", "title_encoding_enabled", mpg123_cfg.title_encoding_enabled);
+ bmp_cfg_db_set_string(db, "MPG123", "title_encoding", mpg123_cfg.title_encoding);
+/* Encoding patch */
+
+ bmp_cfg_db_close(db);
+ gtk_widget_destroy(mpg123_configurewin);
+}
+
+#ifdef USE_SIMD
+static void
+auto_select_cb(GtkWidget * w, gpointer data)
+{
+ gboolean autom = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
+
+ gtk_widget_set_sensitive(decoder_fpu, !autom);
+ gtk_widget_set_sensitive(decoder_mmx, !autom);
+ gtk_widget_set_sensitive(decoder_3dnow, !autom);
+}
+
+#endif
+
+static void
+proxy_use_cb(GtkWidget * w, gpointer data)
+{
+ gboolean use_proxy, use_proxy_auth;
+
+ use_proxy =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use));
+ use_proxy_auth =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use));
+
+ gtk_widget_set_sensitive(streaming_proxy_hbox, use_proxy);
+ gtk_widget_set_sensitive(streaming_proxy_auth_use, use_proxy);
+ gtk_widget_set_sensitive(streaming_proxy_auth_hbox, use_proxy
+ && use_proxy_auth);
+}
+
+static void
+proxy_auth_use_cb(GtkWidget * w, gpointer data)
+{
+ gboolean use_proxy, use_proxy_auth;
+
+ use_proxy =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use));
+ use_proxy_auth =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use));
+
+ gtk_widget_set_sensitive(streaming_proxy_auth_hbox, use_proxy
+ && use_proxy_auth);
+}
+
+static void
+streaming_save_dirbrowser_cb(gchar * dir)
+{
+ gtk_entry_set_text(GTK_ENTRY(streaming_save_entry), dir);
+}
+
+static void
+streaming_save_browse_cb(GtkWidget * w, gpointer data)
+{
+ if (!streaming_save_dirbrowser) {
+ streaming_save_dirbrowser =
+ xmms_create_dir_browser(_
+ ("Select the directory where you want to store the MPEG streams:"),
+ mpg123_cfg.save_http_path,
+ GTK_SELECTION_SINGLE,
+ streaming_save_dirbrowser_cb);
+ g_signal_connect(G_OBJECT(streaming_save_dirbrowser), "destroy",
+ G_CALLBACK(gtk_widget_destroyed),
+ &streaming_save_dirbrowser);
+ gtk_window_set_transient_for(GTK_WINDOW(streaming_save_dirbrowser),
+ GTK_WINDOW(mpg123_configurewin));
+ gtk_widget_show(streaming_save_dirbrowser);
+ }
+}
+
+static void
+streaming_save_use_cb(GtkWidget * w, gpointer data)
+{
+ gboolean save_stream;
+
+ save_stream =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use));
+
+ gtk_widget_set_sensitive(streaming_save_hbox, save_stream);
+}
+
+static void
+title_override_cb(GtkWidget * w, gpointer data)
+{
+ gboolean override;
+ override =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_override));
+ gtk_widget_set_sensitive(title_id3_box, override);
+ gtk_widget_set_sensitive(title_tag_desc, override);
+}
+
+/* Encoding patch */
+static void
+title_encoding_enabled_cb(GtkWidget * w, gpointer data)
+{
+ gboolean encoding_enabled;
+ encoding_enabled =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_encoding_enabled));
+ gtk_widget_set_sensitive(title_encoding_hbox, encoding_enabled);
+}
+/* Encoding patch */
+
+static void
+configure_destroy(GtkWidget * w, gpointer data)
+{
+ if (streaming_save_dirbrowser)
+ gtk_widget_destroy(streaming_save_dirbrowser);
+}
+
+void
+mpg123_configure(void)
+{
+ GtkWidget *streaming_vbox;
+ GtkWidget *streaming_buf_frame, *streaming_buf_hbox;
+ GtkWidget *streaming_size_box, *streaming_size_label,
+ *streaming_size_spin;
+ GtkWidget *streaming_pre_box, *streaming_pre_label, *streaming_pre_spin;
+ GtkWidget *streaming_proxy_frame, *streaming_proxy_vbox;
+ GtkWidget *streaming_proxy_port_label, *streaming_proxy_host_label;
+ GtkWidget *streaming_save_frame, *streaming_save_vbox;
+ GtkWidget *streaming_save_label, *streaming_save_browse;
+ GtkWidget *streaming_cast_frame, *streaming_cast_vbox;
+ GtkWidget *title_frame, *title_id3_vbox, *title_id3_label;
+ GtkWidget *bbox, *ok, *cancel;
+
+ char *temp;
+
+ if (mpg123_configurewin != NULL) {
+ gtk_window_present(GTK_WINDOW(mpg123_configurewin));
+ return;
+ }
+ mpg123_configurewin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(mpg123_configurewin),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_position(GTK_WINDOW(mpg123_configurewin),
+ GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(mpg123_configurewin), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &mpg123_configurewin);
+ g_signal_connect(G_OBJECT(mpg123_configurewin), "destroy",
+ G_CALLBACK(configure_destroy), &mpg123_configurewin);
+ gtk_window_set_title(GTK_WINDOW(mpg123_configurewin),
+ _("MPEG Audio Plugin Configuration"));
+ gtk_window_set_resizable(GTK_WINDOW(mpg123_configurewin), FALSE);
+ /* gtk_window_set_position(GTK_WINDOW(mpg123_configurewin), GTK_WIN_POS_MOUSE); */
+ gtk_container_border_width(GTK_CONTAINER(mpg123_configurewin), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(mpg123_configurewin), vbox);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ decode_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(decode_vbox), 5);
+
+ decode_hbox1 = gtk_hbox_new(TRUE, 5);
+ gtk_box_pack_start(GTK_BOX(decode_vbox), decode_hbox1, FALSE, FALSE, 0);
+
+ decode_res_frame = gtk_frame_new(_("Resolution:"));
+ gtk_box_pack_start(GTK_BOX(decode_hbox1), decode_res_frame, TRUE, TRUE,
+ 0);
+
+ decode_res_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(decode_res_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(decode_res_frame), decode_res_vbox);
+
+ decode_res_16 = gtk_radio_button_new_with_label(NULL, _("16 bit"));
+ if (mpg123_cfg.resolution == 16)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_res_16), TRUE);
+ gtk_box_pack_start(GTK_BOX(decode_res_vbox), decode_res_16, FALSE,
+ FALSE, 0);
+
+ decode_res_8 =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON(decode_res_16)),
+ _("8 bit"));
+ if (mpg123_cfg.resolution == 8)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_res_8), TRUE);
+
+ gtk_box_pack_start(GTK_BOX(decode_res_vbox), decode_res_8, FALSE,
+ FALSE, 0);
+
+ decode_ch_frame = gtk_frame_new(_("Channels:"));
+ gtk_box_pack_start(GTK_BOX(decode_hbox1), decode_ch_frame, TRUE, TRUE, 0);
+
+ decode_ch_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(decode_ch_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(decode_ch_frame), decode_ch_vbox);
+
+ decode_ch_stereo =
+ gtk_radio_button_new_with_label(NULL, _("Stereo (if available)"));
+ if (mpg123_cfg.channels == 2)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_ch_stereo),
+ TRUE);
+
+ gtk_box_pack_start(GTK_BOX(decode_ch_vbox), decode_ch_stereo, FALSE,
+ FALSE, 0);
+
+ decode_ch_mono =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON
+ (decode_ch_stereo)), _("Mono"));
+ if (mpg123_cfg.channels == 1)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_ch_mono), TRUE);
+
+ gtk_box_pack_start(GTK_BOX(decode_ch_vbox), decode_ch_mono, FALSE,
+ FALSE, 0);
+
+ decode_freq_frame = gtk_frame_new(_("Down sample:"));
+ gtk_box_pack_start(GTK_BOX(decode_vbox), decode_freq_frame, FALSE,
+ FALSE, 0);
+
+ decode_freq_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(decode_freq_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(decode_freq_frame), decode_freq_vbox);
+
+ decode_freq_1to1 =
+ gtk_radio_button_new_with_label(NULL, _("1:1 (44 kHz)"));
+ if (mpg123_cfg.downsample == 0)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_freq_1to1),
+ TRUE);
+ gtk_box_pack_start(GTK_BOX(decode_freq_vbox), decode_freq_1to1, FALSE,
+ FALSE, 0);
+
+ decode_freq_1to2 =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON
+ (decode_freq_1to1)),
+ _("1:2 (22 kHz)"));
+ if (mpg123_cfg.downsample == 1)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_freq_1to2),
+ TRUE);
+ gtk_box_pack_start(GTK_BOX(decode_freq_vbox), decode_freq_1to2, FALSE,
+ FALSE, 0);
+
+ decode_freq_1to4 =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON
+ (decode_freq_1to1)),
+ _("1:4 (11 kHz)"));
+ if (mpg123_cfg.downsample == 2)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decode_freq_1to4),
+ TRUE);
+
+ gtk_box_pack_start(GTK_BOX(decode_freq_vbox), decode_freq_1to4, FALSE,
+ FALSE, 0);
+
+
+#ifdef USE_SIMD
+ {
+ GtkWidget *decoder_frame, *decoder_vbox;
+
+ decoder_frame = gtk_frame_new(_("Decoder:"));
+ gtk_box_pack_start(GTK_BOX(decode_vbox), decoder_frame, FALSE,
+ FALSE, 0);
+
+ decoder_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(decoder_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(decoder_frame), decoder_vbox);
+
+ auto_select =
+ gtk_check_button_new_with_label(_("Automatic detection"));
+ gtk_box_pack_start(GTK_BOX(decoder_vbox), auto_select, FALSE,
+ FALSE, 0);
+ g_signal_connect(G_OBJECT(auto_select), "clicked",
+ G_CALLBACK(auto_select_cb), NULL);
+
+ decoder_3dnow =
+ gtk_radio_button_new_with_label(NULL,
+ _("3DNow! optimized decoder"));
+ gtk_box_pack_start(GTK_BOX(decoder_vbox), decoder_3dnow, FALSE,
+ FALSE, 0);
+
+ decoder_mmx =
+ gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON
+ (decoder_3dnow),
+ _
+ ("MMX optimized decoder"));
+ gtk_box_pack_start(GTK_BOX(decoder_vbox), decoder_mmx, FALSE,
+ FALSE, 0);
+
+ decoder_fpu =
+ gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON
+ (decoder_3dnow),
+ _("FPU decoder"));
+ gtk_box_pack_start(GTK_BOX(decoder_vbox), decoder_fpu, FALSE,
+ FALSE, 0);
+
+ switch (mpg123_cfg.default_synth) {
+ case SYNTH_3DNOW:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decoder_3dnow),
+ TRUE);
+ break;
+ case SYNTH_MMX:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decoder_mmx),
+ TRUE);
+ break;
+ case SYNTH_FPU:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decoder_fpu),
+ TRUE);
+ break;
+ default:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(decoder_fpu),
+ TRUE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(auto_select),
+ TRUE);
+ break;
+ }
+ }
+#endif
+ option_frame = gtk_frame_new(_("Options"));
+ gtk_box_pack_start(GTK_BOX(decode_vbox), option_frame, FALSE, FALSE, 0);
+
+ option_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(option_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(option_frame), option_vbox);
+
+ detect_by_content = gtk_radio_button_new_with_label(NULL, _("Content"));
+
+ detect_by_extension =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON
+ (detect_by_content)),
+ _("Extension"));
+
+ detect_by_both =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON
+ (detect_by_content)),
+ _("Extension and content"));
+
+ switch (mpg123_cfg.detect_by) {
+ case DETECT_CONTENT:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(detect_by_content),
+ TRUE);
+ break;
+ case DETECT_BOTH:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(detect_by_both), TRUE);
+ break;
+ case DETECT_EXTENSION:
+ default:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
+ (detect_by_extension), TRUE);
+ break;
+ }
+
+ gtk_box_pack_start(GTK_BOX(option_vbox), detect_by_content, FALSE,
+ FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(option_vbox), detect_by_extension, FALSE,
+ FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(option_vbox), detect_by_both, FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), decode_vbox,
+ gtk_label_new(_("Decoder")));
+
+ streaming_vbox = gtk_vbox_new(FALSE, 0);
+
+ streaming_buf_frame = gtk_frame_new(_("Buffering:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_buf_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_buf_frame, FALSE,
+ FALSE, 0);
+
+ streaming_buf_hbox = gtk_hbox_new(TRUE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_buf_hbox), 5);
+ gtk_container_add(GTK_CONTAINER(streaming_buf_frame), streaming_buf_hbox);
+
+ streaming_size_box = gtk_hbox_new(FALSE, 5);
+ /*gtk_table_attach_defaults(GTK_TABLE(streaming_buf_table),streaming_size_box,0,1,0,1); */
+ gtk_box_pack_start(GTK_BOX(streaming_buf_hbox), streaming_size_box,
+ TRUE, TRUE, 0);
+ streaming_size_label = gtk_label_new(_("Buffer size (kb):"));
+ gtk_box_pack_start(GTK_BOX(streaming_size_box), streaming_size_label,
+ FALSE, FALSE, 0);
+ streaming_size_adj =
+ gtk_adjustment_new(mpg123_cfg.http_buffer_size, 4, 4096, 4, 4, 4);
+ streaming_size_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(streaming_size_adj), 8, 0);
+ gtk_widget_set_usize(streaming_size_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(streaming_size_box), streaming_size_spin,
+ FALSE, FALSE, 0);
+
+ streaming_pre_box = gtk_hbox_new(FALSE, 5);
+ /*gtk_table_attach_defaults(GTK_TABLE(streaming_buf_table),streaming_pre_box,1,2,0,1); */
+ gtk_box_pack_start(GTK_BOX(streaming_buf_hbox), streaming_pre_box,
+ TRUE, TRUE, 0);
+ streaming_pre_label = gtk_label_new(_("Pre-buffer (percent):"));
+ gtk_box_pack_start(GTK_BOX(streaming_pre_box), streaming_pre_label,
+ FALSE, FALSE, 0);
+ streaming_pre_adj =
+ gtk_adjustment_new(mpg123_cfg.http_prebuffer, 0, 90, 1, 1, 1);
+ streaming_pre_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(streaming_pre_adj), 1, 0);
+ gtk_widget_set_usize(streaming_pre_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(streaming_pre_box), streaming_pre_spin,
+ FALSE, FALSE, 0);
+
+ /*
+ * Proxy config.
+ */
+ streaming_proxy_frame = gtk_frame_new(_("Proxy:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_proxy_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_proxy_frame,
+ FALSE, FALSE, 0);
+
+ streaming_proxy_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_proxy_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(streaming_proxy_frame),
+ streaming_proxy_vbox);
+
+ streaming_proxy_use = gtk_check_button_new_with_label(_("Use proxy"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(streaming_proxy_use),
+ mpg123_cfg.use_proxy);
+ g_signal_connect(G_OBJECT(streaming_proxy_use), "clicked",
+ G_CALLBACK(proxy_use_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox), streaming_proxy_use,
+ FALSE, FALSE, 0);
+
+ streaming_proxy_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(streaming_proxy_hbox, mpg123_cfg.use_proxy);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox), streaming_proxy_hbox,
+ FALSE, FALSE, 0);
+
+ streaming_proxy_host_label = gtk_label_new(_("Host:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_host_label, FALSE, FALSE, 0);
+
+ streaming_proxy_host_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_host_entry),
+ mpg123_cfg.proxy_host);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_host_entry, TRUE, TRUE, 0);
+
+ streaming_proxy_port_label = gtk_label_new(_("Port:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_port_label, FALSE, FALSE, 0);
+
+ streaming_proxy_port_entry = gtk_entry_new();
+ gtk_widget_set_usize(streaming_proxy_port_entry, 50, -1);
+ temp = g_strdup_printf("%d", mpg123_cfg.proxy_port);
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_port_entry), temp);
+ g_free(temp);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_port_entry, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_use =
+ gtk_check_button_new_with_label(_("Use authentication"));
+ gtk_widget_set_sensitive(streaming_proxy_auth_use, mpg123_cfg.use_proxy);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use),
+ mpg123_cfg.proxy_use_auth);
+ g_signal_connect(G_OBJECT(streaming_proxy_auth_use), "clicked",
+ G_CALLBACK(proxy_auth_use_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox),
+ streaming_proxy_auth_use, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(streaming_proxy_auth_hbox,
+ mpg123_cfg.use_proxy
+ && mpg123_cfg.proxy_use_auth);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox),
+ streaming_proxy_auth_hbox, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_user_label = gtk_label_new(_("Username:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_user_label, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_user_entry = gtk_entry_new();
+ if (mpg123_cfg.proxy_user)
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_auth_user_entry),
+ mpg123_cfg.proxy_user);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_user_entry, TRUE, TRUE, 0);
+
+ streaming_proxy_auth_pass_label = gtk_label_new(_("Password:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_pass_label, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_pass_entry = gtk_entry_new();
+ if (mpg123_cfg.proxy_pass)
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_auth_pass_entry),
+ mpg123_cfg.proxy_pass);
+ gtk_entry_set_visibility(GTK_ENTRY(streaming_proxy_auth_pass_entry),
+ FALSE);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_pass_entry, TRUE, TRUE, 0);
+
+
+ /*
+ * Save to disk config.
+ */
+ streaming_save_frame = gtk_frame_new(_("Save stream to disk:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_save_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_save_frame,
+ FALSE, FALSE, 0);
+
+ streaming_save_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_save_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(streaming_save_frame),
+ streaming_save_vbox);
+
+ streaming_save_use =
+ gtk_check_button_new_with_label(_("Save stream to disk"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(streaming_save_use),
+ mpg123_cfg.save_http_stream);
+ g_signal_connect(G_OBJECT(streaming_save_use), "clicked",
+ G_CALLBACK(streaming_save_use_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_save_vbox), streaming_save_use,
+ FALSE, FALSE, 0);
+
+ streaming_save_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(streaming_save_hbox,
+ mpg123_cfg.save_http_stream);
+ gtk_box_pack_start(GTK_BOX(streaming_save_vbox), streaming_save_hbox,
+ FALSE, FALSE, 0);
+
+ streaming_save_label = gtk_label_new(_("Path:"));
+ gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_label,
+ FALSE, FALSE, 0);
+
+ streaming_save_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(streaming_save_entry),
+ mpg123_cfg.save_http_path);
+ gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_entry,
+ TRUE, TRUE, 0);
+
+ streaming_save_browse = gtk_button_new_with_label(_("Browse"));
+ g_signal_connect(G_OBJECT(streaming_save_browse), "clicked",
+ G_CALLBACK(streaming_save_browse_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_browse,
+ FALSE, FALSE, 0);
+
+ streaming_cast_frame = gtk_frame_new(_("SHOUT/Icecast:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_cast_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_cast_frame,
+ FALSE, FALSE, 0);
+
+ streaming_cast_vbox = gtk_vbox_new(5, FALSE);
+ gtk_container_add(GTK_CONTAINER(streaming_cast_frame),
+ streaming_cast_vbox);
+
+ gtk_box_pack_start(GTK_BOX(streaming_cast_vbox), streaming_cast_title,
+ FALSE, FALSE, 0);
+
+ streaming_udp_title =
+ gtk_check_button_new_with_label(_
+ ("Enable Icecast Metadata UDP Channel"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(streaming_udp_title),
+ mpg123_cfg.use_udp_channel);
+ gtk_box_pack_start(GTK_BOX(streaming_cast_vbox), streaming_udp_title,
+ FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), streaming_vbox,
+ gtk_label_new(_("Streaming")));
+
+ title_frame = gtk_frame_new(_("ID3 Tags:"));
+ gtk_container_border_width(GTK_CONTAINER(title_frame), 5);
+
+ title_id3_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_border_width(GTK_CONTAINER(title_id3_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(title_frame), title_id3_vbox);
+
+ title_id3v2_disable =
+ gtk_check_button_new_with_label(_("Disable ID3V2 tags"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_id3v2_disable),
+ mpg123_cfg.disable_id3v2);
+ gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_id3v2_disable, FALSE,
+ FALSE, 0);
+
+
+/* Encoding patch */
+ title_encoding_enabled =
+ gtk_check_button_new_with_label(_("Convert non-UTF8 ID3 tags to UTF8"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_encoding_enabled),
+ mpg123_cfg.title_encoding_enabled);
+ g_signal_connect(G_OBJECT(title_encoding_enabled), "clicked",
+ G_CALLBACK(title_encoding_enabled_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_encoding_enabled, FALSE,
+ FALSE, 0);
+
+ title_encoding_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(title_encoding_hbox, mpg123_cfg.title_encoding_enabled);
+ gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_encoding_hbox, FALSE,
+ FALSE, 0);
+
+ title_encoding_label = gtk_label_new(_("ID3 encoding:"));
+ gtk_box_pack_start(GTK_BOX(title_encoding_hbox), title_encoding_label, FALSE,
+ FALSE, 0);
+
+ title_encoding = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(title_encoding), mpg123_cfg.title_encoding);
+ gtk_box_pack_start(GTK_BOX(title_encoding_hbox), title_encoding, TRUE, TRUE,
+ 0);
+/* Encoding patch */
+
+
+ title_override =
+ gtk_check_button_new_with_label(_("Override generic titles"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_override),
+ mpg123_cfg.title_override);
+ g_signal_connect(G_OBJECT(title_override), "clicked",
+ G_CALLBACK(title_override_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_override, FALSE,
+ FALSE, 0);
+
+ title_id3_box = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(title_id3_box, mpg123_cfg.title_override);
+ gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_id3_box, FALSE,
+ FALSE, 0);
+
+ title_id3_label = gtk_label_new(_("ID3 format:"));
+ gtk_box_pack_start(GTK_BOX(title_id3_box), title_id3_label, FALSE,
+ FALSE, 0);
+
+ title_id3_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(title_id3_entry), mpg123_cfg.id3_format);
+ gtk_box_pack_start(GTK_BOX(title_id3_box), title_id3_entry, TRUE, TRUE,
+ 0);
+
+ title_tag_desc = xmms_titlestring_descriptions("pafFetnygc", 2);
+ gtk_widget_set_sensitive(title_tag_desc, mpg123_cfg.title_override);
+ gtk_box_pack_start(GTK_BOX(title_id3_vbox), title_tag_desc, FALSE,
+ FALSE, 0);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), title_frame,
+ gtk_label_new(_("Title")));
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(mpg123_configurewin));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_OK);
+ g_signal_connect(G_OBJECT(ok), "clicked",
+ G_CALLBACK(mpg123_configurewin_ok), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ gtk_widget_grab_default(ok);
+
+ gtk_widget_show_all(mpg123_configurewin);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct36_3dnow.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct36_3dnow.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct36_3dnow.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,499 @@
+/
+/ dct36_3dnow.s - 3DNow! optimized dct36()
+/
+/ This code based 'dct36_3dnow.s' by Syuuhei Kashiyama
+/ <squash at mb.kcom.ne.jp>,only two types of changes have been made:
+/
+/ - remove PREFETCH instruction for speedup
+/ - change function name for support 3DNow! automatic detect
+/
+/ You can find Kashiyama's original 3dnow! support patch
+/ (for mpg123-0.59o) at
+/ http://user.ecc.u-tokyo.ac.jp/~g810370/linux-simd/ (Japanese).
+/
+/ by KIMURA Takuhiro <kim at hannah.ipc.miyakyo-u.ac.jp> - until 31.Mar.1999
+/ <kim at comtec.co.jp> - after 1.Apr.1999
+/
+
+///
+/// Replacement of dct36() with AMD's 3DNow! SIMD operations support
+///
+/// Syuuhei Kashiyama <squash at mb.kcom.ne.jp>
+///
+/// The author of this program disclaim whole expressed or implied
+/// warranties with regard to this program, and in no event shall the
+/// author of this program liable to whatever resulted from the use of
+/// this program. Use it at your own risk.
+///
+
+ .globl dct36_3dnow
+ .type dct36_3dnow, at function
+dct36_3dnow:
+ pushl %ebp
+ movl %esp,%ebp
+ subl $120,%esp
+ pushl %esi
+ pushl %ebx
+ movl 8(%ebp),%eax
+ movl 12(%ebp),%esi
+ movl 16(%ebp),%ecx
+ movl 20(%ebp),%edx
+ movl 24(%ebp),%ebx
+ leal -128(%ebp),%esp
+
+ femms
+ movq (%eax),%mm0
+ movq 4(%eax),%mm1
+ pfadd %mm1,%mm0
+ movq %mm0,4(%eax)
+ psrlq $32,%mm1
+ movq 12(%eax),%mm2
+ punpckldq %mm2,%mm1
+ pfadd %mm2,%mm1
+ movq %mm1,12(%eax)
+ psrlq $32,%mm2
+ movq 20(%eax),%mm3
+ punpckldq %mm3,%mm2
+ pfadd %mm3,%mm2
+ movq %mm2,20(%eax)
+ psrlq $32,%mm3
+ movq 28(%eax),%mm4
+ punpckldq %mm4,%mm3
+ pfadd %mm4,%mm3
+ movq %mm3,28(%eax)
+ psrlq $32,%mm4
+ movq 36(%eax),%mm5
+ punpckldq %mm5,%mm4
+ pfadd %mm5,%mm4
+ movq %mm4,36(%eax)
+ psrlq $32,%mm5
+ movq 44(%eax),%mm6
+ punpckldq %mm6,%mm5
+ pfadd %mm6,%mm5
+ movq %mm5,44(%eax)
+ psrlq $32,%mm6
+ movq 52(%eax),%mm7
+ punpckldq %mm7,%mm6
+ pfadd %mm7,%mm6
+ movq %mm6,52(%eax)
+ psrlq $32,%mm7
+ movq 60(%eax),%mm0
+ punpckldq %mm0,%mm7
+ pfadd %mm0,%mm7
+ movq %mm7,60(%eax)
+ psrlq $32,%mm0
+ movd 68(%eax),%mm1
+ pfadd %mm1,%mm0
+ movd %mm0,68(%eax)
+ movd 4(%eax),%mm0
+ movd 12(%eax),%mm1
+ punpckldq %mm1,%mm0
+ punpckldq 20(%eax),%mm1
+ pfadd %mm1,%mm0
+ movd %mm0,12(%eax)
+ psrlq $32,%mm0
+ movd %mm0,20(%eax)
+ psrlq $32,%mm1
+ movd 28(%eax),%mm2
+ punpckldq %mm2,%mm1
+ punpckldq 36(%eax),%mm2
+ pfadd %mm2,%mm1
+ movd %mm1,28(%eax)
+ psrlq $32,%mm1
+ movd %mm1,36(%eax)
+ psrlq $32,%mm2
+ movd 44(%eax),%mm3
+ punpckldq %mm3,%mm2
+ punpckldq 52(%eax),%mm3
+ pfadd %mm3,%mm2
+ movd %mm2,44(%eax)
+ psrlq $32,%mm2
+ movd %mm2,52(%eax)
+ psrlq $32,%mm3
+ movd 60(%eax),%mm4
+ punpckldq %mm4,%mm3
+ punpckldq 68(%eax),%mm4
+ pfadd %mm4,%mm3
+ movd %mm3,60(%eax)
+ psrlq $32,%mm3
+ movd %mm3,68(%eax)
+
+ movq 24(%eax),%mm0
+ movq 48(%eax),%mm1
+ movd COS9+12,%mm2
+ punpckldq %mm2,%mm2
+ movd COS9+24,%mm3
+ punpckldq %mm3,%mm3
+ pfmul %mm2,%mm0
+ pfmul %mm3,%mm1
+ pushl %eax
+ movl $1,%eax
+ movd %eax,%mm7
+ pi2fd %mm7,%mm7
+ popl %eax
+ movq 8(%eax),%mm2
+ movd COS9+4,%mm3
+ punpckldq %mm3,%mm3
+ pfmul %mm3,%mm2
+ pfadd %mm0,%mm2
+ movq 40(%eax),%mm3
+ movd COS9+20,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ pfadd %mm3,%mm2
+ movq 56(%eax),%mm3
+ movd COS9+28,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ pfadd %mm3,%mm2
+ movq (%eax),%mm3
+ movq 16(%eax),%mm4
+ movd COS9+8,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfadd %mm4,%mm3
+ movq 32(%eax),%mm4
+ movd COS9+16,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfadd %mm4,%mm3
+ pfadd %mm1,%mm3
+ movq 64(%eax),%mm4
+ movd COS9+32,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfadd %mm4,%mm3
+ movq %mm2,%mm4
+ pfadd %mm3,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+0,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 108(%edx),%mm6
+ punpckldq 104(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,36(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,32(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 32(%edx),%mm6
+ punpckldq 36(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 32(%esi),%mm6
+ punpckldq 36(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,1024(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1152(%ebx)
+ movq %mm3,%mm4
+ pfsub %mm2,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+32,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 140(%edx),%mm6
+ punpckldq 72(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,68(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,0(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 0(%edx),%mm6
+ punpckldq 68(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 0(%esi),%mm6
+ punpckldq 68(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,0(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,2176(%ebx)
+ movq 8(%eax),%mm2
+ movq 40(%eax),%mm3
+ pfsub %mm3,%mm2
+ movq 56(%eax),%mm3
+ pfsub %mm3,%mm2
+ movd COS9+12,%mm3
+ punpckldq %mm3,%mm3
+ pfmul %mm3,%mm2
+ movq 16(%eax),%mm3
+ movq 32(%eax),%mm4
+ pfsub %mm4,%mm3
+ movq 64(%eax),%mm4
+ pfsub %mm4,%mm3
+ movd COS9+24,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ movq 48(%eax),%mm4
+ pfsub %mm4,%mm3
+ movq (%eax),%mm4
+ pfadd %mm4,%mm3
+ movq %mm2,%mm4
+ pfadd %mm3,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+4,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 112(%edx),%mm6
+ punpckldq 100(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,40(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,28(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 28(%edx),%mm6
+ punpckldq 40(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 28(%esi),%mm6
+ punpckldq 40(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,896(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1280(%ebx)
+ movq %mm3,%mm4
+ pfsub %mm2,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+28,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 136(%edx),%mm6
+ punpckldq 76(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,64(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,4(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 4(%edx),%mm6
+ punpckldq 64(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 4(%esi),%mm6
+ punpckldq 64(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,128(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,2048(%ebx)
+
+ movq 8(%eax),%mm2
+ movd COS9+20,%mm3
+ punpckldq %mm3,%mm3
+ pfmul %mm3,%mm2
+ pfsub %mm0,%mm2
+ movq 40(%eax),%mm3
+ movd COS9+28,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ pfsub %mm3,%mm2
+ movq 56(%eax),%mm3
+ movd COS9+4,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ pfadd %mm3,%mm2
+ movq (%eax),%mm3
+ movq 16(%eax),%mm4
+ movd COS9+32,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfsub %mm4,%mm3
+ movq 32(%eax),%mm4
+ movd COS9+8,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfsub %mm4,%mm3
+ pfadd %mm1,%mm3
+ movq 64(%eax),%mm4
+ movd COS9+16,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfadd %mm4,%mm3
+ movq %mm2,%mm4
+ pfadd %mm3,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+8,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 116(%edx),%mm6
+ punpckldq 96(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,44(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,24(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 24(%edx),%mm6
+ punpckldq 44(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 24(%esi),%mm6
+ punpckldq 44(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,768(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1408(%ebx)
+ movq %mm3,%mm4
+ pfsub %mm2,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+24,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 132(%edx),%mm6
+ punpckldq 80(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,60(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,8(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 8(%edx),%mm6
+ punpckldq 60(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 8(%esi),%mm6
+ punpckldq 60(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,256(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1920(%ebx)
+ movq 8(%eax),%mm2
+ movd COS9+28,%mm3
+ punpckldq %mm3,%mm3
+ pfmul %mm3,%mm2
+ pfsub %mm0,%mm2
+ movq 40(%eax),%mm3
+ movd COS9+4,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ pfadd %mm3,%mm2
+ movq 56(%eax),%mm3
+ movd COS9+20,%mm4
+ punpckldq %mm4,%mm4
+ pfmul %mm4,%mm3
+ pfsub %mm3,%mm2
+ movq (%eax),%mm3
+ movq 16(%eax),%mm4
+ movd COS9+16,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfsub %mm4,%mm3
+ movq 32(%eax),%mm4
+ movd COS9+32,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfadd %mm4,%mm3
+ pfadd %mm1,%mm3
+ movq 64(%eax),%mm4
+ movd COS9+8,%mm5
+ punpckldq %mm5,%mm5
+ pfmul %mm5,%mm4
+ pfsub %mm4,%mm3
+ movq %mm2,%mm4
+ pfadd %mm3,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+12,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 120(%edx),%mm6
+ punpckldq 92(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,48(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,20(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 20(%edx),%mm6
+ punpckldq 48(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 20(%esi),%mm6
+ punpckldq 48(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,640(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1536(%ebx)
+ movq %mm3,%mm4
+ pfsub %mm2,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+20,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 128(%edx),%mm6
+ punpckldq 84(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,56(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,12(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 12(%edx),%mm6
+ punpckldq 56(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 12(%esi),%mm6
+ punpckldq 56(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,384(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1792(%ebx)
+
+ movq (%eax),%mm4
+ movq 16(%eax),%mm3
+ pfsub %mm3,%mm4
+ movq 32(%eax),%mm3
+ pfadd %mm3,%mm4
+ movq 48(%eax),%mm3
+ pfsub %mm3,%mm4
+ movq 64(%eax),%mm3
+ pfadd %mm3,%mm4
+ movq %mm7,%mm5
+ punpckldq tfcos36+16,%mm5
+ pfmul %mm5,%mm4
+ movq %mm4,%mm5
+ pfacc %mm5,%mm5
+ movd 124(%edx),%mm6
+ punpckldq 88(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd %mm5,52(%ecx)
+ psrlq $32,%mm5
+ movd %mm5,16(%ecx)
+ movq %mm4,%mm6
+ punpckldq %mm6,%mm5
+ pfsub %mm6,%mm5
+ punpckhdq %mm5,%mm5
+ movd 16(%edx),%mm6
+ punpckldq 52(%edx),%mm6
+ pfmul %mm6,%mm5
+ movd 16(%esi),%mm6
+ punpckldq 52(%esi),%mm6
+ pfadd %mm6,%mm5
+ movd %mm5,512(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,1664(%ebx)
+
+ femms
+ popl %ebx
+ popl %esi
+ movl %ebp,%esp
+ popl %ebp
+ ret
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,163 @@
+
+/*
+ * Discrete Cosine Tansform (DCT) for subband synthesis
+ *
+ * -funroll-loops (for gcc) will remove the loops for better performance
+ * using loops in the source-code enhances readabillity
+ */
+
+/*
+ * TODO: write an optimized version for the down-sampling modes
+ * (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero
+ */
+
+#include "mpg123.h"
+
+void
+mpg123_dct64(real * out0, real * out1, real * samples)
+{
+ real bufs[64];
+
+ {
+ register int i, j;
+ register real *b1, *b2, *bs, *costab;
+
+ b1 = samples;
+ bs = bufs;
+ costab = mpg123_pnts[0] + 16;
+ b2 = b1 + 32;
+
+ for (i = 15; i >= 0; i--)
+ *bs++ = (*b1++ + *--b2);
+ for (i = 15; i >= 0; i--)
+ *bs++ = (*--b2 - *b1++) * *--costab;
+
+ b1 = bufs;
+ costab = mpg123_pnts[1] + 8;
+ b2 = b1 + 16;
+
+ {
+ for (i = 7; i >= 0; i--)
+ *bs++ = (*b1++ + *--b2);
+ for (i = 7; i >= 0; i--)
+ *bs++ = (*--b2 - *b1++) * *--costab;
+ b2 += 32;
+ costab += 8;
+ for (i = 7; i >= 0; i--)
+ *bs++ = (*b1++ + *--b2);
+ for (i = 7; i >= 0; i--)
+ *bs++ = (*b1++ - *--b2) * *--costab;
+ b2 += 32;
+ }
+
+ bs = bufs;
+ costab = mpg123_pnts[2];
+ b2 = b1 + 8;
+
+ for (j = 2; j; j--) {
+ for (i = 3; i >= 0; i--)
+ *bs++ = (*b1++ + *--b2);
+ for (i = 3; i >= 0; i--)
+ *bs++ = (*--b2 - *b1++) * costab[i];
+ b2 += 16;
+ for (i = 3; i >= 0; i--)
+ *bs++ = (*b1++ + *--b2);
+ for (i = 3; i >= 0; i--)
+ *bs++ = (*b1++ - *--b2) * costab[i];
+ b2 += 16;
+ }
+
+ b1 = bufs;
+ costab = mpg123_pnts[3];
+ b2 = b1 + 4;
+
+ for (j = 4; j; j--) {
+ *bs++ = (*b1++ + *--b2);
+ *bs++ = (*b1++ + *--b2);
+ *bs++ = (*--b2 - *b1++) * costab[1];
+ *bs++ = (*--b2 - *b1++) * costab[0];
+ b2 += 8;
+ *bs++ = (*b1++ + *--b2);
+ *bs++ = (*b1++ + *--b2);
+ *bs++ = (*b1++ - *--b2) * costab[1];
+ *bs++ = (*b1++ - *--b2) * costab[0];
+ b2 += 8;
+ }
+ bs = bufs;
+ costab = mpg123_pnts[4];
+
+ for (j = 8; j; j--) {
+ real v0, v1;
+
+ v0 = *b1++;
+ v1 = *b1++;
+ *bs++ = (v0 + v1);
+ *bs++ = (v0 - v1) * (*costab);
+ v0 = *b1++;
+ v1 = *b1++;
+ *bs++ = (v0 + v1);
+ *bs++ = (v1 - v0) * (*costab);
+ }
+
+ }
+
+ {
+ register real *b1;
+ register int i;
+
+ for (b1 = bufs, i = 8; i; i--, b1 += 4)
+ b1[2] += b1[3];
+
+ for (b1 = bufs, i = 4; i; i--, b1 += 8) {
+ b1[4] += b1[6];
+ b1[6] += b1[5];
+ b1[5] += b1[7];
+ }
+
+ for (b1 = bufs, i = 2; i; i--, b1 += 16) {
+ b1[8] += b1[12];
+ b1[12] += b1[10];
+ b1[10] += b1[14];
+ b1[14] += b1[9];
+ b1[9] += b1[13];
+ b1[13] += b1[11];
+ b1[11] += b1[15];
+ }
+ }
+
+ out0[0x10 * 16] = bufs[0];
+ out0[0x10 * 15] = bufs[16 + 0] + bufs[16 + 8];
+ out0[0x10 * 14] = bufs[8];
+ out0[0x10 * 13] = bufs[16 + 8] + bufs[16 + 4];
+ out0[0x10 * 12] = bufs[4];
+ out0[0x10 * 11] = bufs[16 + 4] + bufs[16 + 12];
+ out0[0x10 * 10] = bufs[12];
+ out0[0x10 * 9] = bufs[16 + 12] + bufs[16 + 2];
+ out0[0x10 * 8] = bufs[2];
+ out0[0x10 * 7] = bufs[16 + 2] + bufs[16 + 10];
+ out0[0x10 * 6] = bufs[10];
+ out0[0x10 * 5] = bufs[16 + 10] + bufs[16 + 6];
+ out0[0x10 * 4] = bufs[6];
+ out0[0x10 * 3] = bufs[16 + 6] + bufs[16 + 14];
+ out0[0x10 * 2] = bufs[14];
+ out0[0x10 * 1] = bufs[16 + 14] + bufs[16 + 1];
+ out0[0x10 * 0] = bufs[1];
+
+ out1[0x10 * 0] = bufs[1];
+ out1[0x10 * 1] = bufs[16 + 1] + bufs[16 + 9];
+ out1[0x10 * 2] = bufs[9];
+ out1[0x10 * 3] = bufs[16 + 9] + bufs[16 + 5];
+ out1[0x10 * 4] = bufs[5];
+ out1[0x10 * 5] = bufs[16 + 5] + bufs[16 + 13];
+ out1[0x10 * 6] = bufs[13];
+ out1[0x10 * 7] = bufs[16 + 13] + bufs[16 + 3];
+ out1[0x10 * 8] = bufs[3];
+ out1[0x10 * 9] = bufs[16 + 3] + bufs[16 + 11];
+ out1[0x10 * 10] = bufs[11];
+ out1[0x10 * 11] = bufs[16 + 11] + bufs[16 + 7];
+ out1[0x10 * 12] = bufs[7];
+ out1[0x10 * 13] = bufs[16 + 7] + bufs[16 + 15];
+ out1[0x10 * 14] = bufs[15];
+ out1[0x10 * 15] = bufs[16 + 15];
+
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_3dnow.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_3dnow.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_3dnow.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,710 @@
+///
+/// Replacement of dct64() with AMD's 3DNow! SIMD operations support
+///
+/// Syuuhei Kashiyama <squash at mb.kcom.ne.jp>
+///
+/// The author of this program disclaim whole expressed or implied
+/// warranties with regard to this program, and in no event shall the
+/// author of this program liable to whatever resulted from the use of
+/// this program. Use it at your own risk.
+///
+/
+/ porting xmms-0.9.1 by Osamu kayasono <jacobi at jcom.home.ne.jp>
+/ - rename function name for xmms
+/
+
+ .globl mpg123_dct64_3dnow
+ .type mpg123_dct64_3dnow, at function
+mpg123_dct64_3dnow:
+ subl $256,%esp
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ leal 16(%esp),%ebx
+ movl 284(%esp),%edi
+ movl 276(%esp),%ebp
+ movl 280(%esp),%edx
+ leal 128(%ebx),%esi
+
+ / femms
+
+ // 1
+ movl mpg123_pnts,%eax
+ movq 0(%edi),%mm0
+ movq %mm0,%mm1
+ movd 124(%edi),%mm2
+ punpckldq 120(%edi),%mm2
+ movq 0(%eax),%mm3
+ pfadd %mm2,%mm0
+ movq %mm0,0(%ebx)
+ pfsub %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,124(%ebx)
+ psrlq $32,%mm1
+ movd %mm1,120(%ebx)
+ movq 8(%edi),%mm4
+ movq %mm4,%mm5
+ movd 116(%edi),%mm6
+ punpckldq 112(%edi),%mm6
+ movq 8(%eax),%mm7
+ pfadd %mm6,%mm4
+ movq %mm4,8(%ebx)
+ pfsub %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,116(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,112(%ebx)
+ movq 16(%edi),%mm0
+ movq %mm0,%mm1
+ movd 108(%edi),%mm2
+ punpckldq 104(%edi),%mm2
+ movq 16(%eax),%mm3
+ pfadd %mm2,%mm0
+ movq %mm0,16(%ebx)
+ pfsub %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,108(%ebx)
+ psrlq $32,%mm1
+ movd %mm1,104(%ebx)
+ movq 24(%edi),%mm4
+ movq %mm4,%mm5
+ movd 100(%edi),%mm6
+ punpckldq 96(%edi),%mm6
+ movq 24(%eax),%mm7
+ pfadd %mm6,%mm4
+ movq %mm4,24(%ebx)
+ pfsub %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,100(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,96(%ebx)
+ movq 32(%edi),%mm0
+ movq %mm0,%mm1
+ movd 92(%edi),%mm2
+ punpckldq 88(%edi),%mm2
+ movq 32(%eax),%mm3
+ pfadd %mm2,%mm0
+ movq %mm0,32(%ebx)
+ pfsub %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,92(%ebx)
+ psrlq $32,%mm1
+ movd %mm1,88(%ebx)
+ movq 40(%edi),%mm4
+ movq %mm4,%mm5
+ movd 84(%edi),%mm6
+ punpckldq 80(%edi),%mm6
+ movq 40(%eax),%mm7
+ pfadd %mm6,%mm4
+ movq %mm4,40(%ebx)
+ pfsub %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,84(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,80(%ebx)
+ movq 48(%edi),%mm0
+ movq %mm0,%mm1
+ movd 76(%edi),%mm2
+ punpckldq 72(%edi),%mm2
+ movq 48(%eax),%mm3
+ pfadd %mm2,%mm0
+ movq %mm0,48(%ebx)
+ pfsub %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,76(%ebx)
+ psrlq $32,%mm1
+ movd %mm1,72(%ebx)
+ movq 56(%edi),%mm4
+ movq %mm4,%mm5
+ movd 68(%edi),%mm6
+ punpckldq 64(%edi),%mm6
+ movq 56(%eax),%mm7
+ pfadd %mm6,%mm4
+ movq %mm4,56(%ebx)
+ pfsub %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,68(%ebx)
+ psrlq $32,%mm5
+ movd %mm5,64(%ebx)
+
+ // 2
+ movl mpg123_pnts+4,%eax
+ / 0, 14
+ movq 0(%ebx),%mm0
+ movq %mm0,%mm1
+ movd 60(%ebx),%mm2
+ punpckldq 56(%ebx),%mm2
+ movq 0(%eax),%mm3
+ pfadd %mm2,%mm0
+ movq %mm0,0(%esi)
+ pfsub %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,60(%esi)
+ psrlq $32,%mm1
+ movd %mm1,56(%esi)
+ / 16, 30
+ movq 64(%ebx),%mm0
+ movq %mm0,%mm1
+ movd 124(%ebx),%mm2
+ punpckldq 120(%ebx),%mm2
+ pfadd %mm2,%mm0
+ movq %mm0,64(%esi)
+ pfsubr %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,124(%esi)
+ psrlq $32,%mm1
+ movd %mm1,120(%esi)
+ movq 8(%ebx),%mm4
+ / 2, 12
+ movq %mm4,%mm5
+ movd 52(%ebx),%mm6
+ punpckldq 48(%ebx),%mm6
+ movq 8(%eax),%mm7
+ pfadd %mm6,%mm4
+ movq %mm4,8(%esi)
+ pfsub %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,52(%esi)
+ psrlq $32,%mm5
+ movd %mm5,48(%esi)
+ movq 72(%ebx),%mm4
+ / 18, 28
+ movq %mm4,%mm5
+ movd 116(%ebx),%mm6
+ punpckldq 112(%ebx),%mm6
+ pfadd %mm6,%mm4
+ movq %mm4,72(%esi)
+ pfsubr %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,116(%esi)
+ psrlq $32,%mm5
+ movd %mm5,112(%esi)
+ movq 16(%ebx),%mm0
+ / 4, 10
+ movq %mm0,%mm1
+ movd 44(%ebx),%mm2
+ punpckldq 40(%ebx),%mm2
+ movq 16(%eax),%mm3
+ pfadd %mm2,%mm0
+ movq %mm0,16(%esi)
+ pfsub %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,44(%esi)
+ psrlq $32,%mm1
+ movd %mm1,40(%esi)
+ movq 80(%ebx),%mm0
+ / 20, 26
+ movq %mm0,%mm1
+ movd 108(%ebx),%mm2
+ punpckldq 104(%ebx),%mm2
+ pfadd %mm2,%mm0
+ movq %mm0,80(%esi)
+ pfsubr %mm2,%mm1
+ pfmul %mm3,%mm1
+ movd %mm1,108(%esi)
+ psrlq $32,%mm1
+ movd %mm1,104(%esi)
+ movq 24(%ebx),%mm4
+ / 6, 8
+ movq %mm4,%mm5
+ movd 36(%ebx),%mm6
+ punpckldq 32(%ebx),%mm6
+ movq 24(%eax),%mm7
+ pfadd %mm6,%mm4
+ movq %mm4,24(%esi)
+ pfsub %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,36(%esi)
+ psrlq $32,%mm5
+ movd %mm5,32(%esi)
+ movq 88(%ebx),%mm4
+ / 22, 24
+ movq %mm4,%mm5
+ movd 100(%ebx),%mm6
+ punpckldq 96(%ebx),%mm6
+ pfadd %mm6,%mm4
+ movq %mm4,88(%esi)
+ pfsubr %mm6,%mm5
+ pfmul %mm7,%mm5
+ movd %mm5,100(%esi)
+ psrlq $32,%mm5
+ movd %mm5,96(%esi)
+
+ // 3
+ movl mpg123_pnts+8,%eax
+ movq 0(%eax),%mm0
+ movq 8(%eax),%mm1
+ movq 0(%esi),%mm2
+ / 0, 6
+ movq %mm2,%mm3
+ movd 28(%esi),%mm4
+ punpckldq 24(%esi),%mm4
+ pfadd %mm4,%mm2
+ pfsub %mm4,%mm3
+ pfmul %mm0,%mm3
+ movq %mm2,0(%ebx)
+ movd %mm3,28(%ebx)
+ psrlq $32,%mm3
+ movd %mm3,24(%ebx)
+ movq 8(%esi),%mm5
+ / 2, 4
+ movq %mm5,%mm6
+ movd 20(%esi),%mm7
+ punpckldq 16(%esi),%mm7
+ pfadd %mm7,%mm5
+ pfsub %mm7,%mm6
+ pfmul %mm1,%mm6
+ movq %mm5,8(%ebx)
+ movd %mm6,20(%ebx)
+ psrlq $32,%mm6
+ movd %mm6,16(%ebx)
+ movq 32(%esi),%mm2
+ / 8, 14
+ movq %mm2,%mm3
+ movd 60(%esi),%mm4
+ punpckldq 56(%esi),%mm4
+ pfadd %mm4,%mm2
+ pfsubr %mm4,%mm3
+ pfmul %mm0,%mm3
+ movq %mm2,32(%ebx)
+ movd %mm3,60(%ebx)
+ psrlq $32,%mm3
+ movd %mm3,56(%ebx)
+ movq 40(%esi),%mm5
+ / 10, 12
+ movq %mm5,%mm6
+ movd 52(%esi),%mm7
+ punpckldq 48(%esi),%mm7
+ pfadd %mm7,%mm5
+ pfsubr %mm7,%mm6
+ pfmul %mm1,%mm6
+ movq %mm5,40(%ebx)
+ movd %mm6,52(%ebx)
+ psrlq $32,%mm6
+ movd %mm6,48(%ebx)
+ movq 64(%esi),%mm2
+ / 16, 22
+ movq %mm2,%mm3
+ movd 92(%esi),%mm4
+ punpckldq 88(%esi),%mm4
+ pfadd %mm4,%mm2
+ pfsub %mm4,%mm3
+ pfmul %mm0,%mm3
+ movq %mm2,64(%ebx)
+ movd %mm3,92(%ebx)
+ psrlq $32,%mm3
+ movd %mm3,88(%ebx)
+ movq 72(%esi),%mm5
+ / 18, 20
+ movq %mm5,%mm6
+ movd 84(%esi),%mm7
+ punpckldq 80(%esi),%mm7
+ pfadd %mm7,%mm5
+ pfsub %mm7,%mm6
+ pfmul %mm1,%mm6
+ movq %mm5,72(%ebx)
+ movd %mm6,84(%ebx)
+ psrlq $32,%mm6
+ movd %mm6,80(%ebx)
+ movq 96(%esi),%mm2
+ / 24, 30
+ movq %mm2,%mm3
+ movd 124(%esi),%mm4
+ punpckldq 120(%esi),%mm4
+ pfadd %mm4,%mm2
+ pfsubr %mm4,%mm3
+ pfmul %mm0,%mm3
+ movq %mm2,96(%ebx)
+ movd %mm3,124(%ebx)
+ psrlq $32,%mm3
+ movd %mm3,120(%ebx)
+ movq 104(%esi),%mm5
+ / 26, 28
+ movq %mm5,%mm6
+ movd 116(%esi),%mm7
+ punpckldq 112(%esi),%mm7
+ pfadd %mm7,%mm5
+ pfsubr %mm7,%mm6
+ pfmul %mm1,%mm6
+ movq %mm5,104(%ebx)
+ movd %mm6,116(%ebx)
+ psrlq $32,%mm6
+ movd %mm6,112(%ebx)
+
+ // 4
+ movl mpg123_pnts+12,%eax
+ movq 0(%eax),%mm0
+ movq 0(%ebx),%mm1
+ / 0
+ movq %mm1,%mm2
+ movd 12(%ebx),%mm3
+ punpckldq 8(%ebx),%mm3
+ pfadd %mm3,%mm1
+ pfsub %mm3,%mm2
+ pfmul %mm0,%mm2
+ movq %mm1,0(%esi)
+ movd %mm2,12(%esi)
+ psrlq $32,%mm2
+ movd %mm2,8(%esi)
+ movq 16(%ebx),%mm4
+ / 4
+ movq %mm4,%mm5
+ movd 28(%ebx),%mm6
+ punpckldq 24(%ebx),%mm6
+ pfadd %mm6,%mm4
+ pfsubr %mm6,%mm5
+ pfmul %mm0,%mm5
+ movq %mm4,16(%esi)
+ movd %mm5,28(%esi)
+ psrlq $32,%mm5
+ movd %mm5,24(%esi)
+ movq 32(%ebx),%mm1
+ / 8
+ movq %mm1,%mm2
+ movd 44(%ebx),%mm3
+ punpckldq 40(%ebx),%mm3
+ pfadd %mm3,%mm1
+ pfsub %mm3,%mm2
+ pfmul %mm0,%mm2
+ movq %mm1,32(%esi)
+ movd %mm2,44(%esi)
+ psrlq $32,%mm2
+ movd %mm2,40(%esi)
+ movq 48(%ebx),%mm4
+ / 12
+ movq %mm4,%mm5
+ movd 60(%ebx),%mm6
+ punpckldq 56(%ebx),%mm6
+ pfadd %mm6,%mm4
+ pfsubr %mm6,%mm5
+ pfmul %mm0,%mm5
+ movq %mm4,48(%esi)
+ movd %mm5,60(%esi)
+ psrlq $32,%mm5
+ movd %mm5,56(%esi)
+ movq 64(%ebx),%mm1
+ / 16
+ movq %mm1,%mm2
+ movd 76(%ebx),%mm3
+ punpckldq 72(%ebx),%mm3
+ pfadd %mm3,%mm1
+ pfsub %mm3,%mm2
+ pfmul %mm0,%mm2
+ movq %mm1,64(%esi)
+ movd %mm2,76(%esi)
+ psrlq $32,%mm2
+ movd %mm2,72(%esi)
+ movq 80(%ebx),%mm4
+ / 20
+ movq %mm4,%mm5
+ movd 92(%ebx),%mm6
+ punpckldq 88(%ebx),%mm6
+ pfadd %mm6,%mm4
+ pfsubr %mm6,%mm5
+ pfmul %mm0,%mm5
+ movq %mm4,80(%esi)
+ movd %mm5,92(%esi)
+ psrlq $32,%mm5
+ movd %mm5,88(%esi)
+ movq 96(%ebx),%mm1
+ / 24
+ movq %mm1,%mm2
+ movd 108(%ebx),%mm3
+ punpckldq 104(%ebx),%mm3
+ pfadd %mm3,%mm1
+ pfsub %mm3,%mm2
+ pfmul %mm0,%mm2
+ movq %mm1,96(%esi)
+ movd %mm2,108(%esi)
+ psrlq $32,%mm2
+ movd %mm2,104(%esi)
+ movq 112(%ebx),%mm4
+ / 28
+ movq %mm4,%mm5
+ movd 124(%ebx),%mm6
+ punpckldq 120(%ebx),%mm6
+ pfadd %mm6,%mm4
+ pfsubr %mm6,%mm5
+ pfmul %mm0,%mm5
+ movq %mm4,112(%esi)
+ movd %mm5,124(%esi)
+ psrlq $32,%mm5
+ movd %mm5,120(%esi)
+
+ // 5
+ movl $-1,%eax
+ movd %eax,%mm1
+ movl $1,%eax
+ movd %eax,%mm0
+ / L | H
+ punpckldq %mm1,%mm0
+ pi2fd %mm0,%mm0
+ / 1.0 | -1.0
+ movd %eax,%mm1
+ pi2fd %mm1,%mm1
+ movl mpg123_pnts+16,%eax
+ movd 0(%eax),%mm2
+ punpckldq %mm2,%mm1
+ / 1.0 | cos0
+ movq 0(%esi),%mm2
+ / 0
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq %mm2,0(%ebx)
+ movq 8(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm4,8(%ebx)
+ movq 16(%esi),%mm2
+ / 4
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq 24(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm2,%mm3
+ psrlq $32,%mm3
+ pfadd %mm4,%mm2
+ pfadd %mm3,%mm4
+ movq %mm2,16(%ebx)
+ movq %mm4,24(%ebx)
+ movq 32(%esi),%mm2
+ / 8
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq %mm2,32(%ebx)
+ movq 40(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm4,40(%ebx)
+ movq 48(%esi),%mm2
+ / 12
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq 56(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm2,%mm3
+ psrlq $32,%mm3
+ pfadd %mm4,%mm2
+ pfadd %mm3,%mm4
+ movq %mm2,48(%ebx)
+ movq %mm4,56(%ebx)
+ movq 64(%esi),%mm2
+ / 16
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq %mm2,64(%ebx)
+ movq 72(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm4,72(%ebx)
+ movq 80(%esi),%mm2
+ / 20
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq 88(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm2,%mm3
+ psrlq $32,%mm3
+ pfadd %mm4,%mm2
+ pfadd %mm3,%mm4
+ movq %mm2,80(%ebx)
+ movq %mm4,88(%ebx)
+ movq 96(%esi),%mm2
+ / 24
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq %mm2,96(%ebx)
+ movq 104(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm4,104(%ebx)
+ movq 112(%esi),%mm2
+ / 28
+ movq %mm2,%mm3
+ pfmul %mm0,%mm3
+ pfacc %mm3,%mm2
+ pfmul %mm1,%mm2
+ movq 120(%esi),%mm4
+ movq %mm4,%mm5
+ pfmul %mm0,%mm5
+ pfacc %mm5,%mm4
+ pfmul %mm0,%mm4
+ pfmul %mm1,%mm4
+ movq %mm4,%mm5
+ psrlq $32,%mm5
+ pfacc %mm5,%mm4
+ movq %mm2,%mm3
+ psrlq $32,%mm3
+ pfadd %mm4,%mm2
+ pfadd %mm3,%mm4
+ movq %mm2,112(%ebx)
+ movq %mm4,120(%ebx)
+
+ // Phase6
+ movl 0(%ebx),%eax
+ movl %eax,1024(%ebp)
+ movl 4(%ebx),%eax
+ movl %eax,0(%ebp)
+ movl %eax,0(%edx)
+ movl 8(%ebx),%eax
+ movl %eax,512(%ebp)
+ movl 12(%ebx),%eax
+ movl %eax,512(%edx)
+
+ movl 16(%ebx),%eax
+ movl %eax,768(%ebp)
+ movl 20(%ebx),%eax
+ movl %eax,256(%edx)
+
+ movl 24(%ebx),%eax
+ movl %eax,256(%ebp)
+ movl 28(%ebx),%eax
+ movl %eax,768(%edx)
+
+ movq 32(%ebx),%mm0
+ movq 48(%ebx),%mm1
+ pfadd %mm1,%mm0
+ movd %mm0,896(%ebp)
+ psrlq $32,%mm0
+ movd %mm0,128(%edx)
+ movq 40(%ebx),%mm2
+ pfadd %mm2,%mm1
+ movd %mm1,640(%ebp)
+ psrlq $32,%mm1
+ movd %mm1,384(%edx)
+
+ movq 56(%ebx),%mm3
+ pfadd %mm3,%mm2
+ movd %mm2,384(%ebp)
+ psrlq $32,%mm2
+ movd %mm2,640(%edx)
+
+ movd 36(%ebx),%mm4
+ pfadd %mm4,%mm3
+ movd %mm3,128(%ebp)
+ psrlq $32,%mm3
+ movd %mm3,896(%edx)
+ movq 96(%ebx),%mm0
+ movq 64(%ebx),%mm1
+
+ movq 112(%ebx),%mm2
+ pfadd %mm2,%mm0
+ movq %mm0,%mm3
+ pfadd %mm1,%mm3
+ movd %mm3,960(%ebp)
+ psrlq $32,%mm3
+ movd %mm3,64(%edx)
+ movq 80(%ebx),%mm1
+ pfadd %mm1,%mm0
+ movd %mm0,832(%ebp)
+ psrlq $32,%mm0
+ movd %mm0,192(%edx)
+ movq 104(%ebx),%mm3
+ pfadd %mm3,%mm2
+ movq %mm2,%mm4
+ pfadd %mm1,%mm4
+ movd %mm4,704(%ebp)
+ psrlq $32,%mm4
+ movd %mm4,320(%edx)
+ movq 72(%ebx),%mm1
+ pfadd %mm1,%mm2
+ movd %mm2,576(%ebp)
+ psrlq $32,%mm2
+ movd %mm2,448(%edx)
+
+ movq 120(%ebx),%mm4
+ pfadd %mm4,%mm3
+ movq %mm3,%mm5
+ pfadd %mm1,%mm5
+ movd %mm5,448(%ebp)
+ psrlq $32,%mm5
+ movd %mm5,576(%edx)
+ movq 88(%ebx),%mm1
+ pfadd %mm1,%mm3
+ movd %mm3,320(%ebp)
+ psrlq $32,%mm3
+ movd %mm3,704(%edx)
+
+ movd 100(%ebx),%mm5
+ pfadd %mm5,%mm4
+ movq %mm4,%mm6
+ pfadd %mm1,%mm6
+ movd %mm6,192(%ebp)
+ psrlq $32,%mm6
+ movd %mm6,832(%edx)
+ movd 68(%ebx),%mm1
+ pfadd %mm1,%mm4
+ movd %mm4,64(%ebp)
+ psrlq $32,%mm4
+ movd %mm4,960(%edx)
+
+ / femms
+
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ addl $256,%esp
+
+ ret
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_MMX.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_MMX.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_MMX.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,836 @@
+.data
+ .align 32
+costab:
+ .long 1056974725
+ .long 1057056395
+ .long 1057223771
+ .long 1057485416
+ .long 1057855544
+ .long 1058356026
+ .long 1059019886
+ .long 1059897405
+ .long 1061067246
+ .long 1062657950
+ .long 1064892987
+ .long 1066774581
+ .long 1069414683
+ .long 1073984175
+ .long 1079645762
+ .long 1092815430
+ .long 1057005197
+ .long 1057342072
+ .long 1058087743
+ .long 1059427869
+ .long 1061799040
+ .long 1065862217
+ .long 1071413542
+ .long 1084439708
+ .long 1057128951
+ .long 1058664893
+ .long 1063675095
+ .long 1076102863
+ .long 1057655764
+ .long 1067924853
+ .long 1060439283
+
+.text
+
+ .align 32
+.globl mpg123_dct64_mmx
+mpg123_dct64_mmx:
+
+ xorl %ecx,%ecx
+.globl dct64_MMX
+dct64_MMX:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ subl $256,%esp
+ movl 280(%esp),%eax
+ flds (%eax)
+ leal 128(%esp),%edx
+ fadds 124(%eax)
+ movl 272(%esp),%esi
+ fstps (%edx)
+ movl 276(%esp),%edi
+ flds 4(%eax)
+ movl $costab,%ebx
+ fadds 120(%eax)
+ orl %ecx,%ecx
+ fstps 4(%edx)
+ flds (%eax)
+ movl %esp,%ecx
+ fsubs 124(%eax)
+ fmuls (%ebx)
+ fstps 124(%edx)
+ flds 4(%eax)
+ fsubs 120(%eax)
+ fmuls 4(%ebx)
+ fstps 120(%edx)
+ flds 8(%eax)
+ fadds 116(%eax)
+ fstps 8(%edx)
+ flds 12(%eax)
+ fadds 112(%eax)
+ fstps 12(%edx)
+ flds 8(%eax)
+ fsubs 116(%eax)
+ fmuls 8(%ebx)
+ fstps 116(%edx)
+ flds 12(%eax)
+ fsubs 112(%eax)
+ fmuls 12(%ebx)
+ fstps 112(%edx)
+ flds 16(%eax)
+ fadds 108(%eax)
+ fstps 16(%edx)
+ flds 20(%eax)
+ fadds 104(%eax)
+ fstps 20(%edx)
+ flds 16(%eax)
+ fsubs 108(%eax)
+ fmuls 16(%ebx)
+ fstps 108(%edx)
+ flds 20(%eax)
+ fsubs 104(%eax)
+ fmuls 20(%ebx)
+ fstps 104(%edx)
+ flds 24(%eax)
+ fadds 100(%eax)
+ fstps 24(%edx)
+ flds 28(%eax)
+ fadds 96(%eax)
+ fstps 28(%edx)
+ flds 24(%eax)
+ fsubs 100(%eax)
+ fmuls 24(%ebx)
+ fstps 100(%edx)
+ flds 28(%eax)
+ fsubs 96(%eax)
+ fmuls 28(%ebx)
+ fstps 96(%edx)
+ flds 32(%eax)
+ fadds 92(%eax)
+ fstps 32(%edx)
+ flds 36(%eax)
+ fadds 88(%eax)
+ fstps 36(%edx)
+ flds 32(%eax)
+ fsubs 92(%eax)
+ fmuls 32(%ebx)
+ fstps 92(%edx)
+ flds 36(%eax)
+ fsubs 88(%eax)
+ fmuls 36(%ebx)
+ fstps 88(%edx)
+ flds 40(%eax)
+ fadds 84(%eax)
+ fstps 40(%edx)
+ flds 44(%eax)
+ fadds 80(%eax)
+ fstps 44(%edx)
+ flds 40(%eax)
+ fsubs 84(%eax)
+ fmuls 40(%ebx)
+ fstps 84(%edx)
+ flds 44(%eax)
+ fsubs 80(%eax)
+ fmuls 44(%ebx)
+ fstps 80(%edx)
+ flds 48(%eax)
+ fadds 76(%eax)
+ fstps 48(%edx)
+ flds 52(%eax)
+ fadds 72(%eax)
+ fstps 52(%edx)
+ flds 48(%eax)
+ fsubs 76(%eax)
+ fmuls 48(%ebx)
+ fstps 76(%edx)
+ flds 52(%eax)
+ fsubs 72(%eax)
+ fmuls 52(%ebx)
+ fstps 72(%edx)
+ flds 56(%eax)
+ fadds 68(%eax)
+ fstps 56(%edx)
+ flds 60(%eax)
+ fadds 64(%eax)
+ fstps 60(%edx)
+ flds 56(%eax)
+ fsubs 68(%eax)
+ fmuls 56(%ebx)
+ fstps 68(%edx)
+ flds 60(%eax)
+ fsubs 64(%eax)
+ fmuls 60(%ebx)
+ fstps 64(%edx)
+
+ flds (%edx)
+ fadds 60(%edx)
+ fstps (%ecx)
+ flds 4(%edx)
+ fadds 56(%edx)
+ fstps 4(%ecx)
+ flds (%edx)
+ fsubs 60(%edx)
+ fmuls 64(%ebx)
+ fstps 60(%ecx)
+ flds 4(%edx)
+ fsubs 56(%edx)
+ fmuls 68(%ebx)
+ fstps 56(%ecx)
+ flds 8(%edx)
+ fadds 52(%edx)
+ fstps 8(%ecx)
+ flds 12(%edx)
+ fadds 48(%edx)
+ fstps 12(%ecx)
+ flds 8(%edx)
+ fsubs 52(%edx)
+ fmuls 72(%ebx)
+ fstps 52(%ecx)
+ flds 12(%edx)
+ fsubs 48(%edx)
+ fmuls 76(%ebx)
+ fstps 48(%ecx)
+ flds 16(%edx)
+ fadds 44(%edx)
+ fstps 16(%ecx)
+ flds 20(%edx)
+ fadds 40(%edx)
+ fstps 20(%ecx)
+ flds 16(%edx)
+ fsubs 44(%edx)
+ fmuls 80(%ebx)
+ fstps 44(%ecx)
+ flds 20(%edx)
+ fsubs 40(%edx)
+ fmuls 84(%ebx)
+ fstps 40(%ecx)
+ flds 24(%edx)
+ fadds 36(%edx)
+ fstps 24(%ecx)
+ flds 28(%edx)
+ fadds 32(%edx)
+ fstps 28(%ecx)
+ flds 24(%edx)
+ fsubs 36(%edx)
+ fmuls 88(%ebx)
+ fstps 36(%ecx)
+ flds 28(%edx)
+ fsubs 32(%edx)
+ fmuls 92(%ebx)
+ fstps 32(%ecx)
+
+ flds 64(%edx)
+ fadds 124(%edx)
+ fstps 64(%ecx)
+ flds 68(%edx)
+ fadds 120(%edx)
+ fstps 68(%ecx)
+ flds 124(%edx)
+ fsubs 64(%edx)
+ fmuls 64(%ebx)
+ fstps 124(%ecx)
+ flds 120(%edx)
+ fsubs 68(%edx)
+ fmuls 68(%ebx)
+ fstps 120(%ecx)
+ flds 72(%edx)
+ fadds 116(%edx)
+ fstps 72(%ecx)
+ flds 76(%edx)
+ fadds 112(%edx)
+ fstps 76(%ecx)
+ flds 116(%edx)
+ fsubs 72(%edx)
+ fmuls 72(%ebx)
+ fstps 116(%ecx)
+ flds 112(%edx)
+ fsubs 76(%edx)
+ fmuls 76(%ebx)
+ fstps 112(%ecx)
+ flds 80(%edx)
+ fadds 108(%edx)
+ fstps 80(%ecx)
+ flds 84(%edx)
+ fadds 104(%edx)
+ fstps 84(%ecx)
+ flds 108(%edx)
+ fsubs 80(%edx)
+ fmuls 80(%ebx)
+ fstps 108(%ecx)
+ flds 104(%edx)
+ fsubs 84(%edx)
+ fmuls 84(%ebx)
+ fstps 104(%ecx)
+ flds 88(%edx)
+ fadds 100(%edx)
+ fstps 88(%ecx)
+ flds 92(%edx)
+ fadds 96(%edx)
+ fstps 92(%ecx)
+ flds 100(%edx)
+ fsubs 88(%edx)
+ fmuls 88(%ebx)
+ fstps 100(%ecx)
+ flds 96(%edx)
+ fsubs 92(%edx)
+ fmuls 92(%ebx)
+ fstps 96(%ecx)
+
+ flds (%ecx)
+ fadds 28(%ecx)
+ fstps (%edx)
+ flds (%ecx)
+ fsubs 28(%ecx)
+ fmuls 96(%ebx)
+ fstps 28(%edx)
+ flds 4(%ecx)
+ fadds 24(%ecx)
+ fstps 4(%edx)
+ flds 4(%ecx)
+ fsubs 24(%ecx)
+ fmuls 100(%ebx)
+ fstps 24(%edx)
+ flds 8(%ecx)
+ fadds 20(%ecx)
+ fstps 8(%edx)
+ flds 8(%ecx)
+ fsubs 20(%ecx)
+ fmuls 104(%ebx)
+ fstps 20(%edx)
+ flds 12(%ecx)
+ fadds 16(%ecx)
+ fstps 12(%edx)
+ flds 12(%ecx)
+ fsubs 16(%ecx)
+ fmuls 108(%ebx)
+ fstps 16(%edx)
+ flds 32(%ecx)
+ fadds 60(%ecx)
+ fstps 32(%edx)
+ flds 60(%ecx)
+ fsubs 32(%ecx)
+ fmuls 96(%ebx)
+ fstps 60(%edx)
+ flds 36(%ecx)
+ fadds 56(%ecx)
+ fstps 36(%edx)
+ flds 56(%ecx)
+ fsubs 36(%ecx)
+ fmuls 100(%ebx)
+ fstps 56(%edx)
+ flds 40(%ecx)
+ fadds 52(%ecx)
+ fstps 40(%edx)
+ flds 52(%ecx)
+ fsubs 40(%ecx)
+ fmuls 104(%ebx)
+ fstps 52(%edx)
+ flds 44(%ecx)
+ fadds 48(%ecx)
+ fstps 44(%edx)
+ flds 48(%ecx)
+ fsubs 44(%ecx)
+ fmuls 108(%ebx)
+ fstps 48(%edx)
+ flds 64(%ecx)
+ fadds 92(%ecx)
+ fstps 64(%edx)
+ flds 64(%ecx)
+ fsubs 92(%ecx)
+ fmuls 96(%ebx)
+ fstps 92(%edx)
+ flds 68(%ecx)
+ fadds 88(%ecx)
+ fstps 68(%edx)
+ flds 68(%ecx)
+ fsubs 88(%ecx)
+ fmuls 100(%ebx)
+ fstps 88(%edx)
+ flds 72(%ecx)
+ fadds 84(%ecx)
+ fstps 72(%edx)
+ flds 72(%ecx)
+ fsubs 84(%ecx)
+ fmuls 104(%ebx)
+ fstps 84(%edx)
+ flds 76(%ecx)
+ fadds 80(%ecx)
+ fstps 76(%edx)
+ flds 76(%ecx)
+ fsubs 80(%ecx)
+ fmuls 108(%ebx)
+ fstps 80(%edx)
+ flds 96(%ecx)
+ fadds 124(%ecx)
+ fstps 96(%edx)
+ flds 124(%ecx)
+ fsubs 96(%ecx)
+ fmuls 96(%ebx)
+ fstps 124(%edx)
+ flds 100(%ecx)
+ fadds 120(%ecx)
+ fstps 100(%edx)
+ flds 120(%ecx)
+ fsubs 100(%ecx)
+ fmuls 100(%ebx)
+ fstps 120(%edx)
+ flds 104(%ecx)
+ fadds 116(%ecx)
+ fstps 104(%edx)
+ flds 116(%ecx)
+ fsubs 104(%ecx)
+ fmuls 104(%ebx)
+ fstps 116(%edx)
+ flds 108(%ecx)
+ fadds 112(%ecx)
+ fstps 108(%edx)
+ flds 112(%ecx)
+ fsubs 108(%ecx)
+ fmuls 108(%ebx)
+ fstps 112(%edx)
+ flds (%edx)
+ fadds 12(%edx)
+ fstps (%ecx)
+ flds (%edx)
+ fsubs 12(%edx)
+ fmuls 112(%ebx)
+ fstps 12(%ecx)
+ flds 4(%edx)
+ fadds 8(%edx)
+ fstps 4(%ecx)
+ flds 4(%edx)
+ fsubs 8(%edx)
+ fmuls 116(%ebx)
+ fstps 8(%ecx)
+ flds 16(%edx)
+ fadds 28(%edx)
+ fstps 16(%ecx)
+ flds 28(%edx)
+ fsubs 16(%edx)
+ fmuls 112(%ebx)
+ fstps 28(%ecx)
+ flds 20(%edx)
+ fadds 24(%edx)
+ fstps 20(%ecx)
+ flds 24(%edx)
+ fsubs 20(%edx)
+ fmuls 116(%ebx)
+ fstps 24(%ecx)
+ flds 32(%edx)
+ fadds 44(%edx)
+ fstps 32(%ecx)
+ flds 32(%edx)
+ fsubs 44(%edx)
+ fmuls 112(%ebx)
+ fstps 44(%ecx)
+ flds 36(%edx)
+ fadds 40(%edx)
+ fstps 36(%ecx)
+ flds 36(%edx)
+ fsubs 40(%edx)
+ fmuls 116(%ebx)
+ fstps 40(%ecx)
+ flds 48(%edx)
+ fadds 60(%edx)
+ fstps 48(%ecx)
+ flds 60(%edx)
+ fsubs 48(%edx)
+ fmuls 112(%ebx)
+ fstps 60(%ecx)
+ flds 52(%edx)
+ fadds 56(%edx)
+ fstps 52(%ecx)
+ flds 56(%edx)
+ fsubs 52(%edx)
+ fmuls 116(%ebx)
+ fstps 56(%ecx)
+ flds 64(%edx)
+ fadds 76(%edx)
+ fstps 64(%ecx)
+ flds 64(%edx)
+ fsubs 76(%edx)
+ fmuls 112(%ebx)
+ fstps 76(%ecx)
+ flds 68(%edx)
+ fadds 72(%edx)
+ fstps 68(%ecx)
+ flds 68(%edx)
+ fsubs 72(%edx)
+ fmuls 116(%ebx)
+ fstps 72(%ecx)
+ flds 80(%edx)
+ fadds 92(%edx)
+ fstps 80(%ecx)
+ flds 92(%edx)
+ fsubs 80(%edx)
+ fmuls 112(%ebx)
+ fstps 92(%ecx)
+ flds 84(%edx)
+ fadds 88(%edx)
+ fstps 84(%ecx)
+ flds 88(%edx)
+ fsubs 84(%edx)
+ fmuls 116(%ebx)
+ fstps 88(%ecx)
+ flds 96(%edx)
+ fadds 108(%edx)
+ fstps 96(%ecx)
+ flds 96(%edx)
+ fsubs 108(%edx)
+ fmuls 112(%ebx)
+ fstps 108(%ecx)
+ flds 100(%edx)
+ fadds 104(%edx)
+ fstps 100(%ecx)
+ flds 100(%edx)
+ fsubs 104(%edx)
+ fmuls 116(%ebx)
+ fstps 104(%ecx)
+ flds 112(%edx)
+ fadds 124(%edx)
+ fstps 112(%ecx)
+ flds 124(%edx)
+ fsubs 112(%edx)
+ fmuls 112(%ebx)
+ fstps 124(%ecx)
+ flds 116(%edx)
+ fadds 120(%edx)
+ fstps 116(%ecx)
+ flds 120(%edx)
+ fsubs 116(%edx)
+ fmuls 116(%ebx)
+ fstps 120(%ecx)
+
+ flds 32(%ecx)
+ fadds 36(%ecx)
+ fstps 32(%edx)
+ flds 32(%ecx)
+ fsubs 36(%ecx)
+ fmuls 120(%ebx)
+ fstps 36(%edx)
+ flds 44(%ecx)
+ fsubs 40(%ecx)
+ fmuls 120(%ebx)
+ fsts 44(%edx)
+ fadds 40(%ecx)
+ fadds 44(%ecx)
+ fstps 40(%edx)
+ flds 48(%ecx)
+ fsubs 52(%ecx)
+ fmuls 120(%ebx)
+ flds 60(%ecx)
+ fsubs 56(%ecx)
+ fmuls 120(%ebx)
+ fld %st(0)
+ fadds 56(%ecx)
+ fadds 60(%ecx)
+ fld %st(0)
+ fadds 48(%ecx)
+ fadds 52(%ecx)
+ fstps 48(%edx)
+ fadd %st(2)
+ fstps 56(%edx)
+ fsts 60(%edx)
+ faddp %st(1)
+ fstps 52(%edx)
+ flds 64(%ecx)
+ fadds 68(%ecx)
+ fstps 64(%edx)
+ flds 64(%ecx)
+ fsubs 68(%ecx)
+ fmuls 120(%ebx)
+ fstps 68(%edx)
+ flds 76(%ecx)
+ fsubs 72(%ecx)
+ fmuls 120(%ebx)
+ fsts 76(%edx)
+ fadds 72(%ecx)
+ fadds 76(%ecx)
+ fstps 72(%edx)
+ flds 92(%ecx)
+ fsubs 88(%ecx)
+ fmuls 120(%ebx)
+ fsts 92(%edx)
+ fadds 92(%ecx)
+ fadds 88(%ecx)
+ fld %st(0)
+ fadds 80(%ecx)
+ fadds 84(%ecx)
+ fstps 80(%edx)
+ flds 80(%ecx)
+ fsubs 84(%ecx)
+ fmuls 120(%ebx)
+ fadd %st(0), %st(1)
+ fadds 92(%edx)
+ fstps 84(%edx)
+ fstps 88(%edx)
+ flds 96(%ecx)
+ fadds 100(%ecx)
+ fstps 96(%edx)
+ flds 96(%ecx)
+ fsubs 100(%ecx)
+ fmuls 120(%ebx)
+ fstps 100(%edx)
+ flds 108(%ecx)
+ fsubs 104(%ecx)
+ fmuls 120(%ebx)
+ fsts 108(%edx)
+ fadds 104(%ecx)
+ fadds 108(%ecx)
+ fstps 104(%edx)
+ flds 124(%ecx)
+ fsubs 120(%ecx)
+ fmuls 120(%ebx)
+ fsts 124(%edx)
+ fadds 120(%ecx)
+ fadds 124(%ecx)
+ fld %st(0)
+ fadds 112(%ecx)
+ fadds 116(%ecx)
+ fstps 112(%edx)
+ flds 112(%ecx)
+ fsubs 116(%ecx)
+ fmuls 120(%ebx)
+ fadd %st(0),%st(1)
+ fadds 124(%edx)
+ fstps 116(%edx)
+ fstps 120(%edx)
+ jnz .L01
+
+ flds (%ecx)
+ fadds 4(%ecx)
+ fstps 1024(%esi)
+ flds (%ecx)
+ fsubs 4(%ecx)
+ fmuls 120(%ebx)
+ fsts (%esi)
+ fstps (%edi)
+ flds 12(%ecx)
+ fsubs 8(%ecx)
+ fmuls 120(%ebx)
+ fsts 512(%edi)
+ fadds 12(%ecx)
+ fadds 8(%ecx)
+ fstps 512(%esi)
+ flds 16(%ecx)
+ fsubs 20(%ecx)
+ fmuls 120(%ebx)
+ flds 28(%ecx)
+ fsubs 24(%ecx)
+ fmuls 120(%ebx)
+ fsts 768(%edi)
+ fld %st(0)
+ fadds 24(%ecx)
+ fadds 28(%ecx)
+ fld %st(0)
+ fadds 16(%ecx)
+ fadds 20(%ecx)
+ fstps 768(%esi)
+ fadd %st(2)
+ fstps 256(%esi)
+ faddp %st(1)
+ fstps 256(%edi)
+
+ flds 32(%edx)
+ fadds 48(%edx)
+ fstps 896(%esi)
+ flds 48(%edx)
+ fadds 40(%edx)
+ fstps 640(%esi)
+ flds 40(%edx)
+ fadds 56(%edx)
+ fstps 384(%esi)
+ flds 56(%edx)
+ fadds 36(%edx)
+ fstps 128(%esi)
+ flds 36(%edx)
+ fadds 52(%edx)
+ fstps 128(%edi)
+ flds 52(%edx)
+ fadds 44(%edx)
+ fstps 384(%edi)
+ flds 60(%edx)
+ fsts 896(%edi)
+ fadds 44(%edx)
+ fstps 640(%edi)
+ flds 96(%edx)
+ fadds 112(%edx)
+ fld %st(0)
+ fadds 64(%edx)
+ fstps 960(%esi)
+ fadds 80(%edx)
+ fstps 832(%esi)
+ flds 112(%edx)
+ fadds 104(%edx)
+ fld %st(0)
+ fadds 80(%edx)
+ fstps 704(%esi)
+ fadds 72(%edx)
+ fstps 576(%esi)
+ flds 104(%edx)
+ fadds 120(%edx)
+ fld %st(0)
+ fadds 72(%edx)
+ fstps 448(%esi)
+ fadds 88(%edx)
+ fstps 320(%esi)
+ flds 120(%edx)
+ fadds 100(%edx)
+ fld %st(0)
+ fadds 88(%edx)
+ fstps 192(%esi)
+ fadds 68(%edx)
+ fstps 64(%esi)
+ flds 100(%edx)
+ fadds 116(%edx)
+ fld %st(0)
+ fadds 68(%edx)
+ fstps 64(%edi)
+ fadds 84(%edx)
+ fstps 192(%edi)
+ flds 116(%edx)
+ fadds 108(%edx)
+ fld %st(0)
+ fadds 84(%edx)
+ fstps 320(%edi)
+ fadds 76(%edx)
+ fstps 448(%edi)
+ flds 108(%edx)
+ fadds 124(%edx)
+ fld %st(0)
+ fadds 76(%edx)
+ fstps 576(%edi)
+ fadds 92(%edx)
+ fstps 704(%edi)
+ flds 124(%edx)
+ fsts 960(%edi)
+ fadds 92(%edx)
+ fstps 832(%edi)
+ addl $256,%esp
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
+.L01:
+ flds (%ecx)
+ fadds 4(%ecx)
+ fistp 512(%esi)
+ flds (%ecx)
+ fsubs 4(%ecx)
+ fmuls 120(%ebx)
+
+ fistp (%esi)
+
+ flds 12(%ecx)
+ fsubs 8(%ecx)
+ fmuls 120(%ebx)
+ fist 256(%edi)
+ fadds 12(%ecx)
+ fadds 8(%ecx)
+ fistp 256(%esi)
+ flds 16(%ecx)
+ fsubs 20(%ecx)
+ fmuls 120(%ebx)
+ flds 28(%ecx)
+ fsubs 24(%ecx)
+ fmuls 120(%ebx)
+ fist 384(%edi)
+ fld %st(0)
+ fadds 24(%ecx)
+ fadds 28(%ecx)
+ fld %st(0)
+ fadds 16(%ecx)
+ fadds 20(%ecx)
+ fistp 384(%esi)
+ fadd %st(2)
+ fistp 128(%esi)
+ faddp %st(1)
+ fistp 128(%edi)
+
+ flds 32(%edx)
+ fadds 48(%edx)
+ fistp 448(%esi)
+ flds 48(%edx)
+ fadds 40(%edx)
+ fistp 320(%esi)
+ flds 40(%edx)
+ fadds 56(%edx)
+ fistp 192(%esi)
+ flds 56(%edx)
+ fadds 36(%edx)
+ fistp 64(%esi)
+ flds 36(%edx)
+ fadds 52(%edx)
+ fistp 64(%edi)
+ flds 52(%edx)
+ fadds 44(%edx)
+ fistp 192(%edi)
+ flds 60(%edx)
+ fist 448(%edi)
+ fadds 44(%edx)
+ fistp 320(%edi)
+ flds 96(%edx)
+ fadds 112(%edx)
+ fld %st(0)
+ fadds 64(%edx)
+ fistp 480(%esi)
+ fadds 80(%edx)
+ fistp 416(%esi)
+ flds 112(%edx)
+ fadds 104(%edx)
+ fld %st(0)
+ fadds 80(%edx)
+ fistp 352(%esi)
+ fadds 72(%edx)
+ fistp 288(%esi)
+ flds 104(%edx)
+ fadds 120(%edx)
+ fld %st(0)
+ fadds 72(%edx)
+ fistp 224(%esi)
+ fadds 88(%edx)
+ fistp 160(%esi)
+ flds 120(%edx)
+ fadds 100(%edx)
+ fld %st(0)
+ fadds 88(%edx)
+ fistp 96(%esi)
+ fadds 68(%edx)
+ fistp 32(%esi)
+ flds 100(%edx)
+ fadds 116(%edx)
+ fld %st(0)
+ fadds 68(%edx)
+ fistp 32(%edi)
+ fadds 84(%edx)
+ fistp 96(%edi)
+ flds 116(%edx)
+ fadds 108(%edx)
+ fld %st(0)
+ fadds 84(%edx)
+ fistp 160(%edi)
+ fadds 76(%edx)
+ fistp 224(%edi)
+ flds 108(%edx)
+ fadds 124(%edx)
+ fld %st(0)
+ fadds 76(%edx)
+ fistp 288(%edi)
+ fadds 92(%edx)
+ fistp 352(%edi)
+ flds 124(%edx)
+ fist 480(%edi)
+ fadds 92(%edx)
+ fistp 416(%edi)
+ movsw
+ addl $256,%esp
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
+
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_i386.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_i386.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dct64_i386.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,316 @@
+
+/*
+ * Discrete Cosine Tansform (DCT) for subband synthesis
+ * optimized for machines with no auto-increment.
+ * The performance is highly compiler dependend. Maybe
+ * the mpg123_dct64.c version for 'normal' processor may be faster
+ * even for Intel processors.
+ */
+
+#include "mpg123.h"
+
+static void
+mpg123_dct64_1(real * out0, real * out1, real * b1, real * b2, real * samples)
+{
+
+ {
+ register real *costab = mpg123_pnts[0];
+
+ b1[0x00] = samples[0x00] + samples[0x1F];
+ b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0];
+
+ b1[0x01] = samples[0x01] + samples[0x1E];
+ b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1];
+
+ b1[0x02] = samples[0x02] + samples[0x1D];
+ b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2];
+
+ b1[0x03] = samples[0x03] + samples[0x1C];
+ b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3];
+
+ b1[0x04] = samples[0x04] + samples[0x1B];
+ b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4];
+
+ b1[0x05] = samples[0x05] + samples[0x1A];
+ b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5];
+
+ b1[0x06] = samples[0x06] + samples[0x19];
+ b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6];
+
+ b1[0x07] = samples[0x07] + samples[0x18];
+ b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7];
+
+ b1[0x08] = samples[0x08] + samples[0x17];
+ b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8];
+
+ b1[0x09] = samples[0x09] + samples[0x16];
+ b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9];
+
+ b1[0x0A] = samples[0x0A] + samples[0x15];
+ b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA];
+
+ b1[0x0B] = samples[0x0B] + samples[0x14];
+ b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB];
+
+ b1[0x0C] = samples[0x0C] + samples[0x13];
+ b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC];
+
+ b1[0x0D] = samples[0x0D] + samples[0x12];
+ b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD];
+
+ b1[0x0E] = samples[0x0E] + samples[0x11];
+ b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE];
+
+ b1[0x0F] = samples[0x0F] + samples[0x10];
+ b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF];
+ }
+
+ {
+ register real *costab = mpg123_pnts[1];
+
+ b2[0x00] = b1[0x00] + b1[0x0F];
+ b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0];
+ b2[0x01] = b1[0x01] + b1[0x0E];
+ b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1];
+ b2[0x02] = b1[0x02] + b1[0x0D];
+ b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2];
+ b2[0x03] = b1[0x03] + b1[0x0C];
+ b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3];
+ b2[0x04] = b1[0x04] + b1[0x0B];
+ b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4];
+ b2[0x05] = b1[0x05] + b1[0x0A];
+ b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5];
+ b2[0x06] = b1[0x06] + b1[0x09];
+ b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6];
+ b2[0x07] = b1[0x07] + b1[0x08];
+ b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7];
+
+ b2[0x10] = b1[0x10] + b1[0x1F];
+ b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0];
+ b2[0x11] = b1[0x11] + b1[0x1E];
+ b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1];
+ b2[0x12] = b1[0x12] + b1[0x1D];
+ b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2];
+ b2[0x13] = b1[0x13] + b1[0x1C];
+ b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3];
+ b2[0x14] = b1[0x14] + b1[0x1B];
+ b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4];
+ b2[0x15] = b1[0x15] + b1[0x1A];
+ b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5];
+ b2[0x16] = b1[0x16] + b1[0x19];
+ b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6];
+ b2[0x17] = b1[0x17] + b1[0x18];
+ b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7];
+ }
+
+ {
+ register real *costab = mpg123_pnts[2];
+
+ b1[0x00] = b2[0x00] + b2[0x07];
+ b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0];
+ b1[0x01] = b2[0x01] + b2[0x06];
+ b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1];
+ b1[0x02] = b2[0x02] + b2[0x05];
+ b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2];
+ b1[0x03] = b2[0x03] + b2[0x04];
+ b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3];
+
+ b1[0x08] = b2[0x08] + b2[0x0F];
+ b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0];
+ b1[0x09] = b2[0x09] + b2[0x0E];
+ b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1];
+ b1[0x0A] = b2[0x0A] + b2[0x0D];
+ b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2];
+ b1[0x0B] = b2[0x0B] + b2[0x0C];
+ b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3];
+
+ b1[0x10] = b2[0x10] + b2[0x17];
+ b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0];
+ b1[0x11] = b2[0x11] + b2[0x16];
+ b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1];
+ b1[0x12] = b2[0x12] + b2[0x15];
+ b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2];
+ b1[0x13] = b2[0x13] + b2[0x14];
+ b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3];
+
+ b1[0x18] = b2[0x18] + b2[0x1F];
+ b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0];
+ b1[0x19] = b2[0x19] + b2[0x1E];
+ b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1];
+ b1[0x1A] = b2[0x1A] + b2[0x1D];
+ b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2];
+ b1[0x1B] = b2[0x1B] + b2[0x1C];
+ b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3];
+ }
+
+ {
+ register real const cos0 = mpg123_pnts[3][0];
+ register real const cos1 = mpg123_pnts[3][1];
+
+ b2[0x00] = b1[0x00] + b1[0x03];
+ b2[0x03] = (b1[0x00] - b1[0x03]) * cos0;
+ b2[0x01] = b1[0x01] + b1[0x02];
+ b2[0x02] = (b1[0x01] - b1[0x02]) * cos1;
+
+ b2[0x04] = b1[0x04] + b1[0x07];
+ b2[0x07] = (b1[0x07] - b1[0x04]) * cos0;
+ b2[0x05] = b1[0x05] + b1[0x06];
+ b2[0x06] = (b1[0x06] - b1[0x05]) * cos1;
+
+ b2[0x08] = b1[0x08] + b1[0x0B];
+ b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0;
+ b2[0x09] = b1[0x09] + b1[0x0A];
+ b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1;
+
+ b2[0x0C] = b1[0x0C] + b1[0x0F];
+ b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0;
+ b2[0x0D] = b1[0x0D] + b1[0x0E];
+ b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1;
+
+ b2[0x10] = b1[0x10] + b1[0x13];
+ b2[0x13] = (b1[0x10] - b1[0x13]) * cos0;
+ b2[0x11] = b1[0x11] + b1[0x12];
+ b2[0x12] = (b1[0x11] - b1[0x12]) * cos1;
+
+ b2[0x14] = b1[0x14] + b1[0x17];
+ b2[0x17] = (b1[0x17] - b1[0x14]) * cos0;
+ b2[0x15] = b1[0x15] + b1[0x16];
+ b2[0x16] = (b1[0x16] - b1[0x15]) * cos1;
+
+ b2[0x18] = b1[0x18] + b1[0x1B];
+ b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0;
+ b2[0x19] = b1[0x19] + b1[0x1A];
+ b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1;
+
+ b2[0x1C] = b1[0x1C] + b1[0x1F];
+ b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0;
+ b2[0x1D] = b1[0x1D] + b1[0x1E];
+ b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1;
+ }
+
+ {
+ register real const cos0 = mpg123_pnts[4][0];
+
+ b1[0x00] = b2[0x00] + b2[0x01];
+ b1[0x01] = (b2[0x00] - b2[0x01]) * cos0;
+ b1[0x02] = b2[0x02] + b2[0x03];
+ b1[0x03] = (b2[0x03] - b2[0x02]) * cos0;
+ b1[0x02] += b1[0x03];
+
+ b1[0x04] = b2[0x04] + b2[0x05];
+ b1[0x05] = (b2[0x04] - b2[0x05]) * cos0;
+ b1[0x06] = b2[0x06] + b2[0x07];
+ b1[0x07] = (b2[0x07] - b2[0x06]) * cos0;
+ b1[0x06] += b1[0x07];
+ b1[0x04] += b1[0x06];
+ b1[0x06] += b1[0x05];
+ b1[0x05] += b1[0x07];
+
+ b1[0x08] = b2[0x08] + b2[0x09];
+ b1[0x09] = (b2[0x08] - b2[0x09]) * cos0;
+ b1[0x0A] = b2[0x0A] + b2[0x0B];
+ b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0;
+ b1[0x0A] += b1[0x0B];
+
+ b1[0x0C] = b2[0x0C] + b2[0x0D];
+ b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0;
+ b1[0x0E] = b2[0x0E] + b2[0x0F];
+ b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0;
+ b1[0x0E] += b1[0x0F];
+ b1[0x0C] += b1[0x0E];
+ b1[0x0E] += b1[0x0D];
+ b1[0x0D] += b1[0x0F];
+
+ b1[0x10] = b2[0x10] + b2[0x11];
+ b1[0x11] = (b2[0x10] - b2[0x11]) * cos0;
+ b1[0x12] = b2[0x12] + b2[0x13];
+ b1[0x13] = (b2[0x13] - b2[0x12]) * cos0;
+ b1[0x12] += b1[0x13];
+
+ b1[0x14] = b2[0x14] + b2[0x15];
+ b1[0x15] = (b2[0x14] - b2[0x15]) * cos0;
+ b1[0x16] = b2[0x16] + b2[0x17];
+ b1[0x17] = (b2[0x17] - b2[0x16]) * cos0;
+ b1[0x16] += b1[0x17];
+ b1[0x14] += b1[0x16];
+ b1[0x16] += b1[0x15];
+ b1[0x15] += b1[0x17];
+
+ b1[0x18] = b2[0x18] + b2[0x19];
+ b1[0x19] = (b2[0x18] - b2[0x19]) * cos0;
+ b1[0x1A] = b2[0x1A] + b2[0x1B];
+ b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0;
+ b1[0x1A] += b1[0x1B];
+
+ b1[0x1C] = b2[0x1C] + b2[0x1D];
+ b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0;
+ b1[0x1E] = b2[0x1E] + b2[0x1F];
+ b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0;
+ b1[0x1E] += b1[0x1F];
+ b1[0x1C] += b1[0x1E];
+ b1[0x1E] += b1[0x1D];
+ b1[0x1D] += b1[0x1F];
+ }
+
+ out0[0x10 * 16] = b1[0x00];
+ out0[0x10 * 12] = b1[0x04];
+ out0[0x10 * 8] = b1[0x02];
+ out0[0x10 * 4] = b1[0x06];
+ out0[0x10 * 0] = b1[0x01];
+ out1[0x10 * 0] = b1[0x01];
+ out1[0x10 * 4] = b1[0x05];
+ out1[0x10 * 8] = b1[0x03];
+ out1[0x10 * 12] = b1[0x07];
+
+ b1[0x08] += b1[0x0C];
+ out0[0x10 * 14] = b1[0x08];
+ b1[0x0C] += b1[0x0a];
+ out0[0x10 * 10] = b1[0x0C];
+ b1[0x0A] += b1[0x0E];
+ out0[0x10 * 6] = b1[0x0A];
+ b1[0x0E] += b1[0x09];
+ out0[0x10 * 2] = b1[0x0E];
+ b1[0x09] += b1[0x0D];
+ out1[0x10 * 2] = b1[0x09];
+ b1[0x0D] += b1[0x0B];
+ out1[0x10 * 6] = b1[0x0D];
+ b1[0x0B] += b1[0x0F];
+ out1[0x10 * 10] = b1[0x0B];
+ out1[0x10 * 14] = b1[0x0F];
+
+ b1[0x18] += b1[0x1C];
+ out0[0x10 * 15] = b1[0x10] + b1[0x18];
+ out0[0x10 * 13] = b1[0x18] + b1[0x14];
+ b1[0x1C] += b1[0x1a];
+ out0[0x10 * 11] = b1[0x14] + b1[0x1C];
+ out0[0x10 * 9] = b1[0x1C] + b1[0x12];
+ b1[0x1A] += b1[0x1E];
+ out0[0x10 * 7] = b1[0x12] + b1[0x1A];
+ out0[0x10 * 5] = b1[0x1A] + b1[0x16];
+ b1[0x1E] += b1[0x19];
+ out0[0x10 * 3] = b1[0x16] + b1[0x1E];
+ out0[0x10 * 1] = b1[0x1E] + b1[0x11];
+ b1[0x19] += b1[0x1D];
+ out1[0x10 * 1] = b1[0x11] + b1[0x19];
+ out1[0x10 * 3] = b1[0x19] + b1[0x15];
+ b1[0x1D] += b1[0x1B];
+ out1[0x10 * 5] = b1[0x15] + b1[0x1D];
+ out1[0x10 * 7] = b1[0x1D] + b1[0x13];
+ b1[0x1B] += b1[0x1F];
+ out1[0x10 * 9] = b1[0x13] + b1[0x1B];
+ out1[0x10 * 11] = b1[0x1B] + b1[0x17];
+ out1[0x10 * 13] = b1[0x17] + b1[0x1F];
+ out1[0x10 * 15] = b1[0x1F];
+}
+
+/*
+ * the call via mpg123_dct64 is a trick to force GCC to use
+ * (new) registers for the b1,b2 pointer to the bufs[xx] field
+ */
+void
+mpg123_dct64(real * a, real * b, real * c)
+{
+ real bufs[0x40];
+
+ mpg123_dct64_1(a, b, bufs, bufs + 0x20, c);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,236 @@
+
+/*
+ * Mpeg Layer-1,2,3 audio decoder
+ * ------------------------------
+ * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
+ * See also 'README'
+ *
+ */
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "mpg123.h"
+
+#define WRITE_SAMPLE(samples,sum,clip) \
+ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
+ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
+ else { *(samples) = sum; }
+
+int
+mpg123_synth_1to1_8bit(real * bandPtr, int channel,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp + channel;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret =
+ mpg123_synth_1to1(bandPtr, channel, (unsigned char *) samples_tmp,
+ &pnt1);
+ samples += channel + *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *samples = (*tmp1 >> 8) ^ 128;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+
+int
+mpg123_synth_1to1_8bit_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 32;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_1to1_8bit_mono2stereo(real * bandPtr,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_1to1_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *((short *) samples) = *tmp1;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_1to1_mono2stereo(real * bandPtr, unsigned char *samples,
+ int *pnt)
+{
+ int i, ret;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, samples, pnt);
+ samples = samples + *pnt - 128;
+
+ for (i = 0; i < 32; i++) {
+ ((short *) samples)[1] = ((short *) samples)[0];
+ samples += 4;
+ }
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_1to1(real * bandPtr, int channel, unsigned char *out, int *pnt)
+{
+ static real buffs[2][2][0x110];
+ static const int step = 2;
+ static int bo = 1;
+ short *samples = (short *) (out + *pnt);
+
+ real *b0, (*buf)[0x110];
+ int clip = 0;
+ int bo1;
+ int i = 0;
+
+/* if(param.equalizer)
+ do_equalizer(bandPtr,channel); */
+
+ if (!channel) {
+ bo--;
+ bo &= 0xf;
+ buf = buffs[0];
+ }
+ else {
+ samples++;
+ buf = buffs[1];
+ }
+
+ if (bo & 0x1) {
+ b0 = buf[0];
+ bo1 = bo;
+ mpg123_dct64(buf[1] + ((bo + 1) & 0xf), buf[0] + bo, bandPtr);
+ }
+ else {
+ b0 = buf[1];
+ bo1 = bo + 1;
+ mpg123_dct64(buf[0] + bo, buf[1] + bo + 1, bandPtr);
+ }
+
+ {
+ register int j;
+ real *window = mpg123_decwin + 16 - bo1;
+
+ for (j = 16; j; j--, window += 0x10, samples += step) {
+ real sum;
+
+ sum = *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ i++;
+ WRITE_SAMPLE(samples, sum, clip);
+ }
+
+ {
+ real sum;
+
+ sum = window[0x0] * b0[0x0];
+ sum += window[0x2] * b0[0x2];
+ sum += window[0x4] * b0[0x4];
+ sum += window[0x6] * b0[0x6];
+ sum += window[0x8] * b0[0x8];
+ sum += window[0xA] * b0[0xA];
+ sum += window[0xC] * b0[0xC];
+ sum += window[0xE] * b0[0xE];
+ WRITE_SAMPLE(samples, sum, clip);
+
+ b0 -= 0x10, window -= 0x20, samples += step;
+ }
+ window += bo1 << 1;
+
+ for (j = 15; j; j--, b0 -= 0x20, window -= 0x10, samples += step) {
+ real sum;
+
+ sum = -*(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ WRITE_SAMPLE(samples, sum, clip);
+ }
+ }
+
+ *pnt += 128;
+
+ return clip;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_2to1.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_2to1.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_2to1.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,251 @@
+
+/*
+ * Mpeg Layer-1,2,3 audio decoder
+ * ------------------------------
+ * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
+ * version for slower machines .. decodes only every second sample
+ * sounds like 24000,22050 or 16000 kHz .. (depending on original sample freq.)
+ *
+ */
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "mpg123.h"
+
+#define WRITE_SAMPLE(samples,sum,clip) \
+ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
+ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
+ else { *(samples) = sum; }
+
+int
+mpg123_synth_2to1_8bit(real * bandPtr, int channel,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[32];
+ short *tmp1 = samples_tmp + channel;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret =
+ mpg123_synth_2to1(bandPtr, channel, (unsigned char *) samples_tmp,
+ &pnt1);
+ samples += channel + *pnt;
+
+ for (i = 0; i < 16; i++) {
+ *samples = (*tmp1 >> 8) ^ 128;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 32;
+
+ return ret;
+}
+
+int
+mpg123_synth_2to1_8bit_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[32];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_2to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 16; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 16;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_2to1_8bit_mono2stereo(real * bandPtr,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[32];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_2to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 16; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 32;
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_2to1_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[32];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_2to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 16; i++) {
+ *((short *) samples) = *tmp1;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 32;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_2to1_mono2stereo(real * bandPtr, unsigned char *samples,
+ int *pnt)
+{
+ int i, ret;
+
+ ret = mpg123_synth_2to1(bandPtr, 0, samples, pnt);
+ samples = samples + *pnt - 64;
+
+ for (i = 0; i < 16; i++) {
+ ((short *) samples)[1] = ((short *) samples)[0];
+ samples += 4;
+ }
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_2to1(real * bandPtr, int channel, unsigned char *out, int *pnt)
+{
+ static real buffs[2][2][0x110];
+ static const int step = 2;
+ static int bo = 1;
+ short *samples = (short *) (out + *pnt);
+
+ real *b0, (*buf)[0x110];
+ int clip = 0;
+ int bo1;
+
+/* if(param.equalizer)
+ do_equalizer(bandPtr,channel); */
+
+ if (!channel) {
+ bo--;
+ bo &= 0xf;
+ buf = buffs[0];
+ }
+ else {
+ samples++;
+ buf = buffs[1];
+ }
+
+ if (bo & 0x1) {
+ b0 = buf[0];
+ bo1 = bo;
+ mpg123_dct64(buf[1] + ((bo + 1) & 0xf), buf[0] + bo, bandPtr);
+ }
+ else {
+ b0 = buf[1];
+ bo1 = bo + 1;
+ mpg123_dct64(buf[0] + bo, buf[1] + bo + 1, bandPtr);
+ }
+
+ {
+ register int j;
+ real *window = mpg123_decwin + 16 - bo1;
+
+ for (j = 8; j; j--, b0 += 0x10, window += 0x30) {
+ real sum;
+
+ sum = *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#if 0
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#endif
+ }
+
+ {
+ real sum;
+
+ sum = window[0x0] * b0[0x0];
+ sum += window[0x2] * b0[0x2];
+ sum += window[0x4] * b0[0x4];
+ sum += window[0x6] * b0[0x6];
+ sum += window[0x8] * b0[0x8];
+ sum += window[0xA] * b0[0xA];
+ sum += window[0xC] * b0[0xC];
+ sum += window[0xE] * b0[0xE];
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#if 0
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#endif
+ b0 -= 0x20, window -= 0x40;
+ }
+ window += bo1 << 1;
+
+ for (j = 7; j; j--, b0 -= 0x30, window -= 0x30) {
+ real sum;
+
+ sum = -*(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#if 0
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#endif
+ }
+ }
+
+ *pnt += 64;
+
+ return clip;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_3dnow.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_3dnow.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_3dnow.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,282 @@
+/
+/ decode_3dnow.s - 3DNow! optimized synth_1to1()
+/
+/ This code based 'decode_3dnow.s' by Syuuhei Kashiyama
+/ <squash at mb.kcom.ne.jp>,only two types of changes have been made:
+/
+/ - remove PREFETCH instruction for speedup
+/ - change function name for support 3DNow! automatic detect
+/ - femms moved to before 'call dct64_3dnow'
+/
+/ You can find Kashiyama's original 3dnow! support patch
+/ (for mpg123-0.59o) at
+/ http://user.ecc.u-tokyo.ac.jp/~g810370/linux-simd/ (Japanese).
+/
+/ by KIMURA Takuhiro <kim at hannah.ipc.miyakyo-u.ac.jp> - until 31.Mar.1999
+/ <kim at comtec.co.jp> - after 1.Apr.1999
+/
+/ porting xmms-0.9.1 by Osamu kayasono <jacobi at jcom.home.ne.jp>
+/ - rename function name for xmms
+/ - disable equalizer for mpg123
+
+///
+/// Replacement of synth_1to1() with AMD's 3DNow! SIMD operations support
+///
+/// Syuuhei Kashiyama <squash at mb.kcom.ne.jp>
+///
+/// The author of this program disclaim whole expressed or implied
+/// warranties with regard to this program, and in no event shall the
+/// author of this program liable to whatever resulted from the use of
+/// this program. Use it at your own risk.
+///
+
+ .local buffs.40
+ .comm buffs.40,4352,32
+.data
+ .align 4
+ .type bo.42, at object
+ .size bo.42,4
+bo.42:
+ .long 1
+.text
+.globl mpg123_synth_1to1_3dnow
+ .type mpg123_synth_1to1_3dnow, at function
+mpg123_synth_1to1_3dnow:
+ subl $24,%esp
+ pushl %ebp
+ pushl %edi
+ xorl %ebp,%ebp
+ pushl %esi
+ pushl %ebx
+ movl 56(%esp),%esi
+ movl 52(%esp),%edi
+ movl 0(%esi),%esi
+ movl 48(%esp),%ebx
+ addl %edi,%esi
+ movl %esi,16(%esp)
+
+ femms
+
+/// / disable equalizer by Osamu Kayasono
+/// cmpl $0,equalfile
+/// je .L25
+/// pushl %ebx
+/// pushl 48(%esp)
+/// call do_equalizer_3dnow
+/// addl $8,%esp
+///.L25:
+ testl %ebx,%ebx
+ jne .L26
+ decl bo.42
+ movl $buffs.40,%ecx
+ andl $15,bo.42
+ jmp .L27
+.L26:
+ addl $2,16(%esp)
+ movl $buffs.40+2176,%ecx
+.L27:
+ movl bo.42,%edx
+ testb $1,%dl
+ je .L28
+ movl %edx,36(%esp)
+ movl %ecx,%ebx
+ movl 44(%esp),%esi
+ movl %edx,%edi
+ pushl %esi
+ sall $2,%edi
+ movl %ebx,%eax
+ movl %edi,24(%esp)
+ addl %edi,%eax
+ pushl %eax
+ movl %edx,%eax
+ incl %eax
+ andl $15,%eax
+ leal 1088(,%eax,4),%eax
+ addl %ebx,%eax
+ pushl %eax
+ call mpg123_dct64_3dnow
+ addl $12,%esp
+ jmp .L29
+.L28:
+ leal 1(%edx),%esi
+ movl 44(%esp),%edi
+ movl %esi,36(%esp)
+ leal 1092(%ecx,%edx,4),%eax
+ pushl %edi
+ leal 1088(%ecx),%ebx
+ pushl %eax
+ sall $2,%esi
+ leal (%ecx,%edx,4),%eax
+ pushl %eax
+ call mpg123_dct64_3dnow
+ addl $12,%esp
+ movl %esi,20(%esp)
+.L29:
+ movl $mpg123_decwin+64,%edx
+ movl $16,%ecx
+ subl 20(%esp),%edx
+ movl 16(%esp),%edi
+
+ movq (%edx),%mm0
+ movq (%ebx),%mm1
+ .align 32
+.L33:
+ movq 8(%edx),%mm3
+ pfmul %mm1,%mm0
+ movq 8(%ebx),%mm4
+ movq 16(%edx),%mm5
+ pfmul %mm4,%mm3
+ movq 16(%ebx),%mm6
+ pfadd %mm3,%mm0
+ movq 24(%edx),%mm1
+ pfmul %mm6,%mm5
+ movq 24(%ebx),%mm2
+ pfadd %mm5,%mm0
+ movq 32(%edx),%mm3
+ pfmul %mm2,%mm1
+ movq 32(%ebx),%mm4
+ pfadd %mm1,%mm0
+ movq 40(%edx),%mm5
+ pfmul %mm4,%mm3
+ movq 40(%ebx),%mm6
+ pfadd %mm3,%mm0
+ movq 48(%edx),%mm1
+ pfmul %mm6,%mm5
+ movq 48(%ebx),%mm2
+ pfadd %mm0,%mm5
+ movq 56(%edx),%mm3
+ pfmul %mm1,%mm2
+ movq 56(%ebx),%mm4
+ pfadd %mm5,%mm2
+ addl $64,%ebx
+ subl $-128,%edx
+ movq (%edx),%mm0
+ pfmul %mm4,%mm3
+ movq (%ebx),%mm1
+ pfadd %mm3,%mm2
+ movq %mm2,%mm3
+ psrlq $32,%mm3
+ pfsub %mm3,%mm2
+ incl %ebp
+ pf2id %mm2,%mm2
+ packssdw %mm2,%mm2
+ movd %mm2,%eax
+ movw %ax,0(%edi)
+ addl $4,%edi
+ decl %ecx
+ jnz .L33
+
+ movd (%ebx),%mm0
+ movd (%edx),%mm1
+ punpckldq 8(%ebx),%mm0
+ punpckldq 8(%edx),%mm1
+ movd 16(%ebx),%mm3
+ movd 16(%edx),%mm4
+ pfmul %mm1,%mm0
+ punpckldq 24(%ebx),%mm3
+ punpckldq 24(%edx),%mm4
+ movd 32(%ebx),%mm5
+ movd 32(%edx),%mm6
+ pfmul %mm4,%mm3
+ punpckldq 40(%ebx),%mm5
+ punpckldq 40(%edx),%mm6
+ pfadd %mm3,%mm0
+ movd 48(%ebx),%mm1
+ movd 48(%edx),%mm2
+ pfmul %mm6,%mm5
+ punpckldq 56(%ebx),%mm1
+ punpckldq 56(%edx),%mm2
+ pfadd %mm5,%mm0
+ pfmul %mm2,%mm1
+ pfadd %mm1,%mm0
+ pfacc %mm1,%mm0
+ pf2id %mm0,%mm0
+ packssdw %mm0,%mm0
+ movd %mm0,%eax
+ movw %ax,0(%edi)
+ incl %ebp
+ movl 36(%esp),%esi
+ addl $-64,%ebx
+ movl $15,%ebp
+ addl $4,%edi
+ leal -128(%edx,%esi,8),%edx
+
+ movl $15,%ecx
+ movd (%ebx),%mm0
+ movd -4(%edx),%mm1
+ punpckldq 4(%ebx),%mm0
+ punpckldq -8(%edx),%mm1
+ .align 32
+.L46:
+ movd 8(%ebx),%mm3
+ movd -12(%edx),%mm4
+ pfmul %mm1,%mm0
+ punpckldq 12(%ebx),%mm3
+ punpckldq -16(%edx),%mm4
+ movd 16(%ebx),%mm5
+ movd -20(%edx),%mm6
+ pfmul %mm4,%mm3
+ punpckldq 20(%ebx),%mm5
+ punpckldq -24(%edx),%mm6
+ pfadd %mm3,%mm0
+ movd 24(%ebx),%mm1
+ movd -28(%edx),%mm2
+ pfmul %mm6,%mm5
+ punpckldq 28(%ebx),%mm1
+ punpckldq -32(%edx),%mm2
+ pfadd %mm5,%mm0
+ movd 32(%ebx),%mm3
+ movd -36(%edx),%mm4
+ pfmul %mm2,%mm1
+ punpckldq 36(%ebx),%mm3
+ punpckldq -40(%edx),%mm4
+ pfadd %mm1,%mm0
+ movd 40(%ebx),%mm5
+ movd -44(%edx),%mm6
+ pfmul %mm4,%mm3
+ punpckldq 44(%ebx),%mm5
+ punpckldq -48(%edx),%mm6
+ pfadd %mm3,%mm0
+ movd 48(%ebx),%mm1
+ movd -52(%edx),%mm2
+ pfmul %mm6,%mm5
+ punpckldq 52(%ebx),%mm1
+ punpckldq -56(%edx),%mm2
+ pfadd %mm0,%mm5
+ movd 56(%ebx),%mm3
+ movd -60(%edx),%mm4
+ pfmul %mm2,%mm1
+ punpckldq 60(%ebx),%mm3
+ punpckldq (%edx),%mm4
+ pfadd %mm1,%mm5
+ addl $-128,%edx
+ addl $-64,%ebx
+ movd (%ebx),%mm0
+ movd -4(%edx),%mm1
+ pfmul %mm4,%mm3
+ punpckldq 4(%ebx),%mm0
+ punpckldq -8(%edx),%mm1
+ pfadd %mm5,%mm3
+ pfacc %mm3,%mm3
+ incl %ebp
+ pf2id %mm3,%mm3
+ movd %mm3,%eax
+ negl %eax
+ movd %eax,%mm3
+ packssdw %mm3,%mm3
+ movd %mm3,%eax
+ movw %ax,(%edi)
+ addl $4,%edi
+ decl %ecx
+ jnz .L46
+
+ femms
+ movl 56(%esp),%esi
+ movl %ebp,%eax
+ subl $-128,0(%esi)
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ addl $24,%esp
+ ret
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_4to1.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_4to1.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_4to1.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,264 @@
+
+/*
+ * Mpeg Layer-1,2,3 audio decoder
+ * ------------------------------
+ * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
+ * See also 'README'
+ * version for slower machines .. decodes only every fourth sample
+ * dunno why it sounds THIS annoying (maybe we should adapt the window?)
+ * absolutely not optimized for this operation
+ */
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "mpg123.h"
+
+#define WRITE_SAMPLE(samples,sum,clip) \
+ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
+ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
+ else { *(samples) = sum; }
+
+int
+mpg123_synth_4to1_8bit(real * bandPtr, int channel,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[16];
+ short *tmp1 = samples_tmp + channel;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret =
+ mpg123_synth_4to1(bandPtr, channel, (unsigned char *) samples_tmp,
+ &pnt1);
+ samples += channel + *pnt;
+
+ for (i = 0; i < 8; i++) {
+ *samples = (*tmp1 >> 8) ^ 128;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 16;
+
+ return ret;
+}
+
+int
+mpg123_synth_4to1_8bit_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[16];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_4to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 8; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 8;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_4to1_8bit_mono2stereo(real * bandPtr,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[16];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_4to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 8; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 16;
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_4to1_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[16];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_4to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 8; i++) {
+ *((short *) samples) = *tmp1;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 16;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_4to1_mono2stereo(real * bandPtr, unsigned char *samples,
+ int *pnt)
+{
+ int i, ret;
+
+ ret = mpg123_synth_4to1(bandPtr, 0, samples, pnt);
+ samples = samples + *pnt - 32;
+
+ for (i = 0; i < 8; i++) {
+ ((short *) samples)[1] = ((short *) samples)[0];
+ samples += 4;
+ }
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_4to1(real * bandPtr, int channel, unsigned char *out, int *pnt)
+{
+ static real buffs[2][2][0x110];
+ static const int step = 2;
+ static int bo = 1;
+ short *samples = (short *) (out + *pnt);
+
+ real *b0, (*buf)[0x110];
+ int clip = 0;
+ int bo1;
+
+/* if(param.equalizer)
+ do_equalizer(bandPtr,channel); */
+
+ if (!channel) {
+ bo--;
+ bo &= 0xf;
+ buf = buffs[0];
+ }
+ else {
+ samples++;
+ buf = buffs[1];
+ }
+
+ if (bo & 0x1) {
+ b0 = buf[0];
+ bo1 = bo;
+ mpg123_dct64(buf[1] + ((bo + 1) & 0xf), buf[0] + bo, bandPtr);
+ }
+ else {
+ b0 = buf[1];
+ bo1 = bo + 1;
+ mpg123_dct64(buf[0] + bo, buf[1] + bo + 1, bandPtr);
+ }
+
+ {
+ register int j;
+ real *window = mpg123_decwin + 16 - bo1;
+
+ for (j = 4; j; j--, b0 += 0x30, window += 0x70) {
+ real sum;
+
+ sum = *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+ sum += *window++ * *b0++;
+ sum -= *window++ * *b0++;
+
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#if 0
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#endif
+ }
+
+ {
+ real sum;
+
+ sum = window[0x0] * b0[0x0];
+ sum += window[0x2] * b0[0x2];
+ sum += window[0x4] * b0[0x4];
+ sum += window[0x6] * b0[0x6];
+ sum += window[0x8] * b0[0x8];
+ sum += window[0xA] * b0[0xA];
+ sum += window[0xC] * b0[0xC];
+ sum += window[0xE] * b0[0xE];
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#if 0
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#endif
+ b0 -= 0x40, window -= 0x80;
+ }
+ window += bo1 << 1;
+
+ for (j = 3; j; j--, b0 -= 0x50, window -= 0x70) {
+ real sum;
+
+ sum = -*(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+ sum -= *(--window) * *b0++;
+
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#if 0
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+ WRITE_SAMPLE(samples, sum, clip);
+ samples += step;
+#endif
+ }
+ }
+
+ *pnt += 32;
+
+ return clip;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_MMX.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_MMX.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_MMX.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,108 @@
+# this code comes under GPL
+
+.text
+
+.globl mpg123_synth_MMX
+
+mpg123_synth_MMX:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ movl 24(%esp),%ecx
+ movl 28(%esp),%edi
+ movl $15,%ebx
+ movl 36(%esp),%edx
+ leal (%edi,%ecx,2),%edi
+ decl %ecx
+ movl 32(%esp),%esi
+ movl (%edx),%eax
+ jecxz .L1
+ decl %eax
+ andl %ebx,%eax
+ leal 1088(%esi),%esi
+ movl %eax,(%edx)
+.L1:
+ leal (%esi,%eax,2),%edx
+ movl %eax,%ebp
+ incl %eax
+ pushl 20(%esp)
+ andl %ebx,%eax
+ leal 544(%esi,%eax,2),%ecx
+ incl %ebx
+ testl $1, %eax
+ jnz .L2
+ xchgl %edx,%ecx
+ incl %ebp
+ leal 544(%esi),%esi
+.L2:
+ pushl %edx
+ pushl %ecx
+ call dct64_MMX
+ addl $12,%esp
+ leal 1(%ebx), %ecx
+ subl %ebp,%ebx
+
+ leal mpg123_decwins(%ebx,%ebx,1), %edx
+.L3:
+ movq (%edx),%mm0
+ pmaddwd (%esi),%mm0
+ movq 8(%edx),%mm1
+ pmaddwd 8(%esi),%mm1
+ movq 16(%edx),%mm2
+ pmaddwd 16(%esi),%mm2
+ movq 24(%edx),%mm3
+ pmaddwd 24(%esi),%mm3
+ paddd %mm1,%mm0
+ paddd %mm2,%mm0
+ paddd %mm3,%mm0
+ movq %mm0,%mm1
+ psrlq $32,%mm1
+ paddd %mm1,%mm0
+ psrad $13,%mm0
+ packssdw %mm0,%mm0
+ movd %mm0,%eax
+ movw %ax, (%edi)
+
+ leal 32(%esi),%esi
+ leal 64(%edx),%edx
+ leal 4(%edi),%edi
+ loop .L3
+
+
+ subl $64,%esi
+ movl $15,%ecx
+.L4:
+ movq (%edx),%mm0
+ pmaddwd (%esi),%mm0
+ movq 8(%edx),%mm1
+ pmaddwd 8(%esi),%mm1
+ movq 16(%edx),%mm2
+ pmaddwd 16(%esi),%mm2
+ movq 24(%edx),%mm3
+ pmaddwd 24(%esi),%mm3
+ paddd %mm1,%mm0
+ paddd %mm2,%mm0
+ paddd %mm3,%mm0
+ movq %mm0,%mm1
+ psrlq $32,%mm1
+ paddd %mm0,%mm1
+ psrad $13,%mm1
+ packssdw %mm1,%mm1
+ psubd %mm0,%mm0
+ psubsw %mm1,%mm0
+ movd %mm0,%eax
+ movw %ax,(%edi)
+
+ subl $32,%esi
+ addl $64,%edx
+ leal 4(%edi),%edi
+ loop .L4
+ emms
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i386.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i386.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i386.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,277 @@
+
+/*
+ * Mpeg Layer-1,2,3 audio decoder
+ * ------------------------------
+ * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
+ * See also 'README'
+ *
+ * slighlty optimized for machines without autoincrement/decrement.
+ * The performance is highly compiler dependend. Maybe
+ * the decode.c version for 'normal' processor may be faster
+ * even for Intel processors.
+ */
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "mpg123.h"
+
+int mpg123_synth_1to1_pent(real *, int, unsigned char *);
+
+#if 0
+ /* old WRITE_SAMPLE */
+#define WRITE_SAMPLE(samples,sum,clip) \
+ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
+ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
+ else { *(samples) = sum; }
+#else
+ /* new WRITE_SAMPLE */
+#define WRITE_SAMPLE(samples,sum,clip) { \
+ double dtemp; int v; /* sizeof(int) == 4 */ \
+ dtemp = ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) + (sum); \
+ v = ((*(int *)&dtemp) - 0x80000000); \
+ if( v > 32767) { *(samples) = 0x7fff; (clip)++; } \
+ else if( v < -32768) { *(samples) = -0x8000; (clip)++; } \
+ else { *(samples) = v; } \
+}
+#endif
+
+int
+mpg123_synth_1to1_8bit(real * bandPtr, int channel,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp + channel;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret =
+ mpg123_synth_1to1(bandPtr, channel, (unsigned char *) samples_tmp,
+ &pnt1);
+ samples += channel + *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *samples = (*tmp1 >> 8) ^ 128;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+
+int
+mpg123_synth_1to1_8bit_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 32;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_1to1_8bit_mono2stereo(real * bandPtr,
+ unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ *samples++ = (*tmp1 >> 8) ^ 128;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_1to1_mono(real * bandPtr, unsigned char *samples, int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for (i = 0; i < 32; i++) {
+ *((short *) samples) = *tmp1;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+
+#if 0
+int
+mpg123_synth_1to1_mono2stereo(real * bandPtr, unsigned char *samples,
+ int *pnt)
+{
+ int i, ret;
+
+ ret = mpg123_synth_1to1(bandPtr, 0, samples, pnt);
+ samples = samples + *pnt - 128;
+
+ for (i = 0; i < 32; i++) {
+ ((short *) samples)[1] = ((short *) samples)[0];
+ samples += 4;
+ }
+
+ return ret;
+}
+#endif
+
+int
+mpg123_synth_1to1(real * bandPtr, int channel, unsigned char *out, int *pnt)
+{
+#ifndef I386_ASSEM
+ static real buffs[2][2][0x110];
+ static const int step = 2;
+ static int bo = 1;
+ short *samples = (short *) (out + *pnt);
+
+ real *b0, (*buf)[0x110];
+ int clip = 0;
+ int bo1;
+
+ if (!channel) {
+ bo--;
+ bo &= 0xf;
+ buf = buffs[0];
+ }
+ else {
+ samples++;
+ buf = buffs[1];
+ }
+
+ if (bo & 0x1) {
+ b0 = buf[0];
+ bo1 = bo;
+ mpg123_dct64(buf[1] + ((bo + 1) & 0xf), buf[0] + bo, bandPtr);
+ }
+ else {
+ b0 = buf[1];
+ bo1 = bo + 1;
+ mpg123_dct64(buf[0] + bo, buf[1] + bo + 1, bandPtr);
+ }
+
+ {
+ register int j;
+ real *window = mpg123_decwin + 16 - bo1;
+
+ for (j = 16; j; j--, b0 += 0x10, window += 0x20, samples += step) {
+ real sum;
+
+ sum = window[0x0] * b0[0x0];
+ sum -= window[0x1] * b0[0x1];
+ sum += window[0x2] * b0[0x2];
+ sum -= window[0x3] * b0[0x3];
+ sum += window[0x4] * b0[0x4];
+ sum -= window[0x5] * b0[0x5];
+ sum += window[0x6] * b0[0x6];
+ sum -= window[0x7] * b0[0x7];
+ sum += window[0x8] * b0[0x8];
+ sum -= window[0x9] * b0[0x9];
+ sum += window[0xA] * b0[0xA];
+ sum -= window[0xB] * b0[0xB];
+ sum += window[0xC] * b0[0xC];
+ sum -= window[0xD] * b0[0xD];
+ sum += window[0xE] * b0[0xE];
+ sum -= window[0xF] * b0[0xF];
+
+ WRITE_SAMPLE(samples, sum, clip);
+ }
+
+ {
+ real sum;
+
+ sum = window[0x0] * b0[0x0];
+ sum += window[0x2] * b0[0x2];
+ sum += window[0x4] * b0[0x4];
+ sum += window[0x6] * b0[0x6];
+ sum += window[0x8] * b0[0x8];
+ sum += window[0xA] * b0[0xA];
+ sum += window[0xC] * b0[0xC];
+ sum += window[0xE] * b0[0xE];
+ WRITE_SAMPLE(samples, sum, clip);
+ b0 -= 0x10, window -= 0x20, samples += step;
+ }
+ window += bo1 << 1;
+
+ for (j = 15; j; j--, b0 -= 0x10, window -= 0x20, samples += step) {
+ real sum;
+
+ sum = -window[-0x1] * b0[0x0];
+ sum -= window[-0x2] * b0[0x1];
+ sum -= window[-0x3] * b0[0x2];
+ sum -= window[-0x4] * b0[0x3];
+ sum -= window[-0x5] * b0[0x4];
+ sum -= window[-0x6] * b0[0x5];
+ sum -= window[-0x7] * b0[0x6];
+ sum -= window[-0x8] * b0[0x7];
+ sum -= window[-0x9] * b0[0x8];
+ sum -= window[-0xA] * b0[0x9];
+ sum -= window[-0xB] * b0[0xA];
+ sum -= window[-0xC] * b0[0xB];
+ sum -= window[-0xD] * b0[0xC];
+ sum -= window[-0xE] * b0[0xD];
+ sum -= window[-0xF] * b0[0xE];
+ sum -= window[-0x0] * b0[0xF];
+
+ WRITE_SAMPLE(samples, sum, clip);
+ }
+ }
+ *pnt += 128;
+
+ return clip;
+#else
+ {
+ int ret;
+
+ ret = mpg123_synth_1to1_pent(bandPtr, channel, out + *pnt);
+ *pnt += 128;
+ return ret;
+ }
+#endif
+}
+
+#ifdef USE_SIMD
+int mpg123_synth_MMX(real *, int, short *, short *, int *);
+
+int
+mpg123_synth_1to1_mmx(real * bandPtr, int channel, unsigned char *out,
+ int *pnt)
+{
+ static short buffs[2][2][0x110];
+ static int bo = 1;
+ short *samples = (short *) (out + *pnt);
+
+ mpg123_synth_MMX(bandPtr, channel, samples, (short *) buffs, &bo);
+ *pnt += 128;
+ return 0;
+}
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i586.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i586.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/decode_i586.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,321 @@
+/
+/ mpg123_synth_1to1 works the same way as the c version of this
+/ file. only two types of changes have been made:
+/ - reordered floating point instructions to
+/ prevent pipline stalls
+/ - made WRITE_SAMPLE use integer instead of
+/ (slower) floating point
+/ all kinds of x86 processors should benefit from these
+/ modifications.
+/
+/ useful sources of information on optimizing x86 code include:
+/
+/ Intel Architecture Optimization Manual
+/ http://www.intel.com/design/pentium/manuals/242816.htm
+/
+/ Cyrix 6x86 Instruction Set Summary
+/ ftp://ftp.cyrix.com/6x86/6x-dbch6.pdf
+/
+/ AMD-K5 Processor Software Development
+/ http://www.amd.com/products/cpg/techdocs/appnotes/20007e.pdf
+/
+/ Stefan Bieschewski <stb at acm.org>
+/
+/ $Id: decode_i586.s,v 1.1.1.1 2003/11/19 16:03:18 mderezynski Exp $
+/
+.bss
+ .comm buffs,4352,4
+.data
+ .align 4
+bo:
+ .long 1
+.section .rodata
+ .align 8
+.LC0:
+ .long 0x0,0x40dfffc0
+ .align 8
+.LC1:
+ .long 0x0,0xc0e00000
+ .align 8
+.text
+.globl mpg123_synth_1to1_pent
+mpg123_synth_1to1_pent:
+ subl $12,%esp
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ movl 32(%esp),%eax
+ movl 40(%esp),%esi
+ xorl %edi,%edi
+ movl bo,%ebp
+ cmpl %edi,36(%esp)
+ jne .L48
+ decl %ebp
+ andl $15,%ebp
+ movl %ebp,bo
+ movl $buffs,%ecx
+ jmp .L49
+.L48:
+ addl $2,%esi
+ movl $buffs+2176,%ecx
+.L49:
+ testl $1,%ebp
+ je .L50
+ movl %ecx,%ebx
+ movl %ebp,16(%esp)
+ pushl %eax
+ movl 20(%esp),%edx
+ leal (%ebx,%edx,4),%eax
+ pushl %eax
+ movl 24(%esp),%eax
+ incl %eax
+ andl $15,%eax
+ leal 1088(,%eax,4),%eax
+ addl %ebx,%eax
+ jmp .L74
+.L50:
+ leal 1088(%ecx),%ebx
+ leal 1(%ebp),%edx
+ movl %edx,16(%esp)
+ pushl %eax
+ leal 1092(%ecx,%ebp,4),%eax
+ pushl %eax
+ leal (%ecx,%ebp,4),%eax
+.L74:
+ pushl %eax
+ call mpg123_dct64
+ addl $12,%esp
+ movl 16(%esp),%edx
+ leal 0(,%edx,4),%edx
+ movl $mpg123_decwin+64,%eax
+ movl %eax,%ecx
+ subl %edx,%ecx
+ movl $16,%ebp
+.L55:
+ flds (%ecx)
+ fmuls (%ebx)
+ flds 4(%ecx)
+ fmuls 4(%ebx)
+ fxch %st(1)
+ flds 8(%ecx)
+ fmuls 8(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 12(%ecx)
+ fmuls 12(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 16(%ecx)
+ fmuls 16(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 20(%ecx)
+ fmuls 20(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 24(%ecx)
+ fmuls 24(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 28(%ecx)
+ fmuls 28(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 32(%ecx)
+ fmuls 32(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 36(%ecx)
+ fmuls 36(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 40(%ecx)
+ fmuls 40(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 44(%ecx)
+ fmuls 44(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 48(%ecx)
+ fmuls 48(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 52(%ecx)
+ fmuls 52(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 56(%ecx)
+ fmuls 56(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds 60(%ecx)
+ fmuls 60(%ebx)
+ fxch %st(2)
+ subl $4,%esp
+ faddp %st,%st(1)
+ fxch %st(1)
+ fsubrp %st,%st(1)
+ fistpl (%esp)
+ popl %eax
+ cmpl $32767,%eax
+ jg 1f
+ cmpl $-32768,%eax
+ jl 2f
+ movw %ax,(%esi)
+ jmp 4f
+1: movw $32767,(%esi)
+ jmp 3f
+2: movw $-32768,(%esi)
+3: incl %edi
+4:
+.L54:
+ addl $64,%ebx
+ subl $-128,%ecx
+ addl $4,%esi
+ decl %ebp
+ jnz .L55
+ flds (%ecx)
+ fmuls (%ebx)
+ flds 8(%ecx)
+ fmuls 8(%ebx)
+ flds 16(%ecx)
+ fmuls 16(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 24(%ecx)
+ fmuls 24(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 32(%ecx)
+ fmuls 32(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 40(%ecx)
+ fmuls 40(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 48(%ecx)
+ fmuls 48(%ebx)
+ fxch %st(2)
+ faddp %st,%st(1)
+ flds 56(%ecx)
+ fmuls 56(%ebx)
+ fxch %st(2)
+ subl $4,%esp
+ faddp %st,%st(1)
+ fxch %st(1)
+ faddp %st,%st(1)
+ fistpl (%esp)
+ popl %eax
+ cmpl $32767,%eax
+ jg 1f
+ cmpl $-32768,%eax
+ jl 2f
+ movw %ax,(%esi)
+ jmp 4f
+1: movw $32767,(%esi)
+ jmp 3f
+2: movw $-32768,(%esi)
+3: incl %edi
+4:
+.L62:
+ addl $-64,%ebx
+ addl $4,%esi
+ movl 16(%esp),%edx
+ leal -128(%ecx,%edx,8),%ecx
+ movl $15,%ebp
+.L68:
+ flds -4(%ecx)
+ fchs
+ fmuls (%ebx)
+ flds -8(%ecx)
+ fmuls 4(%ebx)
+ fxch %st(1)
+ flds -12(%ecx)
+ fmuls 8(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -16(%ecx)
+ fmuls 12(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -20(%ecx)
+ fmuls 16(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -24(%ecx)
+ fmuls 20(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -28(%ecx)
+ fmuls 24(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -32(%ecx)
+ fmuls 28(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -36(%ecx)
+ fmuls 32(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -40(%ecx)
+ fmuls 36(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -44(%ecx)
+ fmuls 40(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -48(%ecx)
+ fmuls 44(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -52(%ecx)
+ fmuls 48(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -56(%ecx)
+ fmuls 52(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds -60(%ecx)
+ fmuls 56(%ebx)
+ fxch %st(2)
+ fsubrp %st,%st(1)
+ flds (%ecx)
+ fmuls 60(%ebx)
+ fxch %st(2)
+ subl $4,%esp
+ fsubrp %st,%st(1)
+ fxch %st(1)
+ fsubrp %st,%st(1)
+ fistpl (%esp)
+ popl %eax
+ cmpl $32767,%eax
+ jg 1f
+ cmpl $-32768,%eax
+ jl 2f
+ movw %ax,(%esi)
+ jmp 4f
+1: movw $32767,(%esi)
+ jmp 3f
+2: movw $-32768,(%esi)
+3: incl %edi
+4:
+.L67:
+ addl $-64,%ebx
+ addl $-128,%ecx
+ addl $4,%esi
+ decl %ebp
+ jnz .L68
+ movl %edi,%eax
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ addl $12,%esp
+ ret
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,103 @@
+/*
+ * Handle Xing vbr header
+ */
+#include "config.h"
+#include "dxhead.h"
+#include <stdlib.h>
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#include <glib.h>
+
+#define GET_INT32BE(b) \
+(i = (b[0] << 24) | (b[1] << 16) | b[2] << 8 | b[3], b += 4, i)
+
+int
+mpg123_get_xing_header(xing_header_t * xing, unsigned char *buf)
+{
+ int i, head_flags;
+ int id, mode;
+
+ memset(xing, 0, sizeof(xing_header_t));
+
+ /* get selected MPEG header data */
+ id = (buf[1] >> 3) & 1;
+ mode = (buf[3] >> 6) & 3;
+ buf += 4;
+
+ /* Skip the sub band data */
+ if (id) {
+ /* mpeg1 */
+ if (mode != 3)
+ buf += 32;
+ else
+ buf += 17;
+ }
+ else {
+ /* mpeg2 */
+ if (mode != 3)
+ buf += 17;
+ else
+ buf += 9;
+ }
+
+ if (strncmp((char *) buf, "Xing", 4))
+ return 0;
+ buf += 4;
+
+ head_flags = GET_INT32BE(buf);
+
+ if (head_flags & FRAMES_FLAG)
+ xing->frames = GET_INT32BE(buf);
+ if (xing->frames < 1)
+ return 0;
+ if (head_flags & BYTES_FLAG)
+ xing->bytes = GET_INT32BE(buf);
+
+ if (head_flags & TOC_FLAG) {
+ for (i = 0; i < 100; i++) {
+ xing->toc[i] = buf[i];
+ if (i > 0 && xing->toc[i] < xing->toc[i - 1])
+ return 0;
+ }
+ if (xing->toc[99] == 0)
+ return 0;
+ buf += 100;
+ }
+ else
+ for (i = 0; i < 100; i++)
+ xing->toc[i] = (i * 256) / 100;
+
+#ifdef XING_DEBUG
+ for (i = 0; i < 100; i++) {
+ if ((i % 10) == 0)
+ fprintf(stderr, "\n");
+ fprintf(stderr, " %3d", xing->toc[i]);
+ }
+#endif
+
+ return 1;
+}
+
+int
+mpg123_seek_point(xing_header_t * xing, float percent)
+{
+ /* interpolate in TOC to get file seek point in bytes */
+ int a, seekpoint;
+ float fa, fb, fx;
+
+ percent = CLAMP(percent, 0, 100);
+ a = MIN(percent, 99);
+
+ fa = xing->toc[a];
+
+ if (a < 99)
+ fb = xing->toc[a + 1];
+ else
+ fb = 256;
+
+ fx = fa + (fb - fa) * (percent - a);
+ seekpoint = (1.0f / 256.0f) * fx * xing->bytes;
+
+ return seekpoint;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/dxhead.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/*
+ * A Xing header may be present in the ancillary
+ * data field of the first frame of an mp3 bitstream
+ * The Xing header (optionally) contains
+ * frames total number of audio frames in the bitstream
+ * bytes total number of bytes in the bitstream
+ * toc table of contents
+ *
+ * toc (table of contents) gives seek points
+ * for random access
+ * the ith entry determines the seek point for
+ * i-percent duration
+ * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
+ * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes
+ */
+
+#define FRAMES_FLAG 0x0001
+#define BYTES_FLAG 0x0002
+#define TOC_FLAG 0x0004
+#define VBR_SCALE_FLAG 0x0008
+
+/*
+ * structure to receive extracted header
+ */
+typedef struct {
+ int frames; /* total bit stream frames from Xing header data */
+ int bytes; /* total bit stream bytes from Xing header data */
+ unsigned char toc[100]; /* "table of contents" */
+} xing_header_t;
+
+/*
+ * Returns zero on fail, non-zero on success
+ * xing structure to receive header data (output)
+ * buf bitstream input
+ */
+int mpg123_get_xing_header(xing_header_t * xing, unsigned char *buf);
+
+
+/*
+ * Returns seekpoint in bytes (may be at eof if percent=100.0)
+ * percent: play time percentage of total playtime. May be fractional.
+ */
+int mpg123_seek_point(xing_header_t * xing, float percent);
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/equalizer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/equalizer.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/equalizer.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,83 @@
+
+#include <math.h>
+
+#include "mpg123.h"
+
+
+static void
+init_spline(float *x, float *y, int n, float *y2)
+{
+
+ int i, k;
+ float p, qn, sig, un, *u;
+ u = (float *) g_malloc(n * sizeof(float));
+
+ y2[0] = u[0] = 0.0;
+
+ for (i = 1; i < n - 1; i++) {
+ sig = ((float) x[i] - x[i - 1]) / ((float) x[i + 1] - x[i - 1]);
+ p = sig * y2[i - 1] + 2.0;
+ y2[i] = (sig - 1.0) / p;
+ u[i] = (((float) y[i + 1] - y[i]) / (x[i + 1] - x[i])) -
+ (((float) y[i] - y[i - 1]) / (x[i] - x[i - 1]));
+ u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
+ }
+ qn = un = 0.0;
+
+ y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0);
+ for (k = n - 2; k >= 0; k--)
+ y2[k] = y2[k] * y2[k + 1] + u[k];
+ g_free(u);
+}
+
+static float
+eval_spline(float xa[], float ya[], float y2a[], int n, float x)
+{
+ int klo, khi, k;
+ float h, b, a;
+
+ klo = 0;
+ khi = n - 1;
+ while (khi - klo > 1) {
+ k = (khi + klo) >> 1;
+ if (xa[k] > x)
+ khi = k;
+ else
+ klo = k;
+ }
+ h = xa[khi] - xa[klo];
+ a = (xa[khi] - x) / h;
+ b = (x - xa[klo]) / h;
+ return (a * ya[klo] + b * ya[khi] +
+ ((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi])
+ * (h * h) / 6.0);
+}
+
+void
+mpg123_set_eq(int on, float preamp, float *b)
+{
+ float x[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, yf[10], val, band[10];
+ int bands[] = { 0, 4, 8, 16, 26, 78, 157, 313, 366, 418 };
+ int i, j;
+
+ mpg123_info->eq_active = on;
+ if (mpg123_info->eq_active) {
+ for (i = 0; i < 10; i++) {
+ band[i] = b[i] + preamp;
+ }
+
+ init_spline(x, band, 10, yf);
+ for (i = 0; i < 9; i++) {
+ for (j = bands[i]; j < bands[i + 1]; j++) {
+ val =
+ eval_spline(x, band, yf, 10,
+ i +
+ ((float) (j - bands[i]) *
+ (1.0 / (bands[i + 1] - bands[i]))));
+ mpg123_info->eq_mul[j] = pow(2, val / 10.0);
+ }
+ }
+ for (i = bands[9]; i < 576; i++)
+ mpg123_info->eq_mul[i] = mpg123_info->eq_mul[bands[9] - 1];
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/fileinfo.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/fileinfo.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/fileinfo.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1398 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "mpg123.h"
+
+#ifdef HAVE_ID3LIB
+# include <id3.h>
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "beep/util.h"
+#include <libbeep/util.h>
+#include <libbeep/vfs.h>
+#include <libbeep/xentry.h>
+
+#include "mp3.xpm"
+
+static GtkWidget *window = NULL;
+static GtkWidget *filename_entry, *id3_frame;
+static GtkWidget *title_entry, *artist_entry, *album_entry, *year_entry,
+ *tracknum_entry, *comment_entry;
+static GtkWidget *genre_combo;
+#ifdef HAVE_ID3LIB
+static GtkWidget * totaltracks_entry;
+#endif
+static GtkWidget *mpeg_level, *mpeg_bitrate, *mpeg_samplerate, *mpeg_flags,
+ *mpeg_error, *mpeg_copy, *mpeg_orig, *mpeg_emph, *mpeg_frames,
+ *mpeg_filesize;
+static GtkWidget *mpeg_level_val, *mpeg_bitrate_val, *mpeg_samplerate_val,
+ *mpeg_error_val, *mpeg_copy_val, *mpeg_orig_val, *mpeg_emph_val,
+ *mpeg_frames_val, *mpeg_filesize_val;
+
+GtkWidget *vbox, *hbox, *left_vbox, *table;
+GtkWidget *mpeg_frame, *mpeg_box;
+GtkWidget *label, *filename_vbox;
+GtkWidget *bbox;
+GtkWidget *remove_id3, *cancel, *save;
+GtkWidget *boxx;
+#if 0
+GtkWidget *revert;
+#endif
+
+VFSFile *fh;
+struct id3v1tag_t tag;
+const gchar *emphasis[4];
+const gchar *bool_label[2];
+
+
+static GList *genre_list = NULL;
+static gchar *current_filename = NULL;
+
+extern gchar *mpg123_filename;
+extern gint mpg123_bitrate, mpg123_frequency, mpg123_layer, mpg123_lsf,
+ mpg123_mode;
+extern gboolean mpg123_stereo, mpg123_mpeg25;
+
+glong info_rate;
+
+void fill_entries(GtkWidget * w, gpointer data);
+
+#define MAX_STR_LEN 100
+
+#ifndef HAVE_ID3LIB
+
+static void
+set_entry_tag(GtkEntry * entry, gchar * tag, gint length)
+{
+ gint stripped_len;
+ gchar *text, *text_utf8;
+
+ stripped_len = mpg123_strip_spaces(tag, length);
+ text = g_strdup_printf("%-*.*s", stripped_len, stripped_len, tag);
+
+ if ((text_utf8 = str_to_utf8(text))) {
+ gtk_entry_set_text(entry, text_utf8);
+ g_free(text_utf8);
+ }
+ else {
+ gtk_entry_set_text(entry, "");
+ }
+
+ g_free(text);
+}
+
+static void
+get_entry_tag(GtkEntry * entry, gchar * tag, gint length)
+{
+ gchar *text = str_to_utf8(gtk_entry_get_text(entry));
+ memset(tag, ' ', length);
+ memcpy(tag, text, strlen(text) > length ? length : strlen(text));
+}
+
+static gint
+find_genre_id(const gchar * text)
+{
+ gint i;
+
+ for (i = 0; i < GENRE_MAX; i++) {
+ if (!strcmp(mpg123_id3_genres[i], text))
+ return i;
+ }
+ if (text[0] == '\0')
+ return 0xff;
+ return 0;
+}
+
+static void
+press_save(GtkWidget * w, gpointer data)
+{
+ gtk_button_clicked(GTK_BUTTON(save));
+}
+
+#else
+
+GtkWidget * copy_album_tags_but, * paste_album_tags_but;
+
+struct album_tags_t {
+ char * performer;
+ char * album;
+ char * year;
+ char * total_tracks;
+};
+
+struct album_tags_t album_tags = { NULL, NULL, NULL, NULL };
+
+#define FREE_AND_ZERO(x) do { g_free(x); x = NULL; } while (0)
+
+static void free_album_tags()
+{
+ FREE_AND_ZERO(album_tags.performer);
+ FREE_AND_ZERO(album_tags.album);
+ FREE_AND_ZERO(album_tags.year);
+ FREE_AND_ZERO(album_tags.total_tracks);
+}
+
+static inline char * entry_text_dup_or_null(GtkWidget * e)
+{
+ const char * text = gtk_entry_get_text(GTK_ENTRY(e));
+ if (strlen(text) > 0)
+ return g_strdup(text);
+ else
+ return NULL;
+}
+
+static inline void
+update_paste_sensitive()
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(paste_album_tags_but),
+ album_tags.performer ||
+ album_tags.album ||
+ album_tags.year ||
+ album_tags.total_tracks);
+
+}
+
+static void validate_zeropad_tracknums()
+{
+ const char * tn_str, * tt_str, * end;
+ char buf[5];
+ int tn, tt;
+
+ tn_str = gtk_entry_get_text(GTK_ENTRY(tracknum_entry));
+ tt_str = gtk_entry_get_text(GTK_ENTRY(totaltracks_entry));
+
+ end = tt_str;
+ tt = strtol(tt_str,(char**)&end,10);
+ if (end != tt_str) {
+ sprintf(buf,"%02d",tt);
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry),buf);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry),"");
+ tt = 1000; /* any tracknum is valid */
+ }
+
+ end = tn_str;
+ tn = strtol(tn_str,(char**)&end,10);
+ if (end != tn_str && tn <= tt) {
+ sprintf(buf,"%02d",tn);
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry),buf);
+ } else
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry),"");
+
+}
+
+static void
+copy_album_tags()
+{
+ validate_zeropad_tracknums();
+ free_album_tags();
+ album_tags.performer = entry_text_dup_or_null(artist_entry);
+ album_tags.album = entry_text_dup_or_null(album_entry);
+ album_tags.year = entry_text_dup_or_null(year_entry);
+ album_tags.total_tracks = entry_text_dup_or_null(totaltracks_entry);
+ update_paste_sensitive();
+}
+
+static void
+paste_album_tags()
+{
+ if (album_tags.performer)
+ gtk_entry_set_text(GTK_ENTRY(artist_entry),album_tags.performer);
+ if (album_tags.album)
+ gtk_entry_set_text(GTK_ENTRY(album_entry),album_tags.album);
+ if (album_tags.year)
+ gtk_entry_set_text(GTK_ENTRY(year_entry),album_tags.year);
+ if (album_tags.total_tracks)
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry),album_tags.total_tracks);
+}
+
+#endif
+
+static gint
+genre_comp_func(gconstpointer a, gconstpointer b)
+{
+ return strcasecmp(a, b);
+}
+
+static gboolean
+fileinfo_keypress_cb(GtkWidget * widget,
+ GdkEventKey * event,
+ gpointer data)
+{
+ if (!event)
+ return FALSE;
+
+ switch (event->keyval) {
+ case GDK_Escape:
+ gtk_widget_destroy(window);
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+#ifdef HAVE_ID3LIB
+/* some helper id3(v2) functions */
+
+static void str_to_id3v2_frame(const char * str, ID3Tag * tag, ID3_FrameID frame_id)
+{
+ ID3Frame * frame = ID3Tag_FindFrameWithID(tag,frame_id);
+ ID3Field * text_field;
+ gboolean new_frame = frame?FALSE:TRUE;
+
+ if (new_frame) {
+ frame = ID3Frame_NewID(frame_id);
+ }
+
+ text_field = ID3Frame_GetField(frame,ID3FN_TEXT);
+ ID3Field_SetASCII(text_field, str);
+
+ if (new_frame)
+ ID3Tag_AddFrame(tag,frame);
+}
+
+static void genre_combo_to_tag(GtkWidget * combo, ID3Tag * tag)
+{
+ int idx = -1, i;
+ const char * genre = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
+ for(i=0;i<ID3_NR_OF_V1_GENRES;i++)
+ if (!strcmp(genre,ID3_v1_genre_description[i])) {
+ idx = i; break;
+ }
+ if (idx>-1) {
+ char code[7];
+ snprintf(code,7,"(%d)",idx);
+ str_to_id3v2_frame(code,tag,ID3FID_CONTENTTYPE);
+ }
+}
+
+static void id3v2_frame_to_entry(GtkWidget * entry,ID3Tag * tag, ID3_FrameID frame_id)
+{
+ ID3Frame * frame = ID3Tag_FindFrameWithID(tag,frame_id);
+ ID3Field * text_field;
+ if (frame) {
+ char buf[4096];
+ text_field = ID3Frame_GetField(frame,ID3FN_TEXT);
+ ID3Field_GetASCII(text_field,buf,4096);
+ gtk_entry_set_text(GTK_ENTRY(entry),buf);
+ } else
+ gtk_entry_set_text(GTK_ENTRY(entry),"");
+}
+
+static void id3v2_frame_to_text_view(GtkWidget * entry,ID3Tag * tag, ID3_FrameID frame_id)
+{
+ ID3Frame * frame = ID3Tag_FindFrameWithID(tag,frame_id);
+ ID3Field * text_field;
+ if (frame) {
+ char buf[4096];
+ text_field = ID3Frame_GetField(frame,ID3FN_TEXT);
+ ID3Field_GetASCII(text_field,buf,4096);
+ gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)),buf,-1);
+ } else
+ gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)),"",-1);
+}
+
+static void id3v2_tracknum_to_entries(GtkWidget * tracknum_entry,
+ GtkWidget * totaltracks_entry,
+ ID3Tag * tag)
+{
+ ID3Frame * frame = ID3Tag_FindFrameWithID(tag,ID3FID_TRACKNUM);
+ ID3Field * text_field;
+ if (frame) {
+ char buf[4096];
+ char * slash;
+ text_field = ID3Frame_GetField(frame,ID3FN_TEXT);
+ ID3Field_GetASCII(text_field,buf,4096);
+ slash = strchr(buf,'/');
+ if (slash) {
+ slash[0] = 0;
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry),buf);
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry),slash+1);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry),buf);
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry),"");
+ }
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry),"");
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry),"");
+ }
+}
+
+/*
+ if has v2 - link with v2, if not - attempt to link with v1
+ use this only for reading - always save v2
+*/
+size_t ID3Tag_LinkPreferV2(ID3Tag *tag, const char *fileName)
+{
+ size_t r;
+
+ r = ID3Tag_Link(tag,fileName);
+ if (ID3Tag_HasTagType(tag,ID3TT_ID3V2)) {
+ ID3Tag_Clear(tag);
+ r = ID3Tag_LinkWithFlags(tag,fileName,ID3TT_ID3V2);
+ }
+ return r;
+}
+
+#endif /* HAVE_ID3LIB */
+
+#ifdef HAVE_ID3LIB
+
+static void
+save_cb(GtkWidget * w, gpointer data)
+{
+ ID3Tag * id3tag;
+ const char * tracks_str, * trackno_str, * endptr;
+ int trackno, tracks;
+
+ if (str_has_prefix_nocase(current_filename, "http://"))
+ return;
+
+ validate_zeropad_tracknums();
+
+ id3tag = ID3Tag_New();
+ ID3Tag_LinkWithFlags(id3tag, current_filename, ID3TT_ID3);
+
+ str_to_id3v2_frame(gtk_entry_get_text(GTK_ENTRY(title_entry)),id3tag,ID3FID_TITLE);
+ str_to_id3v2_frame(gtk_entry_get_text(GTK_ENTRY(artist_entry)),id3tag,ID3FID_LEADARTIST);
+ str_to_id3v2_frame(gtk_entry_get_text(GTK_ENTRY(album_entry)),id3tag,ID3FID_ALBUM);
+ {
+ GtkTextIter start, end;
+ GtkTextBuffer * buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment_entry));
+ gtk_text_buffer_get_start_iter(buffer,&start);
+ gtk_text_buffer_get_end_iter(buffer,&end);
+ str_to_id3v2_frame(gtk_text_buffer_get_text(buffer,&start,&end,FALSE),id3tag,ID3FID_COMMENT);
+ }
+ str_to_id3v2_frame(gtk_entry_get_text(GTK_ENTRY(year_entry)),id3tag,ID3FID_YEAR);
+
+ /* saving trackno -> may be with album tracks number */
+ trackno_str = gtk_entry_get_text(GTK_ENTRY(tracknum_entry));
+ endptr = trackno_str;
+ trackno = strtol(trackno_str,(char**)&endptr,10);
+ if (endptr != trackno_str) {
+ char buf[10];
+ tracks_str = gtk_entry_get_text(GTK_ENTRY(totaltracks_entry));
+ endptr = tracks_str;
+ tracks = strtol(tracks_str,(char**)&endptr,10);
+ if (endptr != tracks_str)
+ snprintf(buf,10,"%02d/%02d",trackno,tracks);
+ else
+ snprintf(buf,10,"%02d",trackno);
+ str_to_id3v2_frame(buf,id3tag,ID3FID_TRACKNUM);
+ } else
+ str_to_id3v2_frame("",id3tag,ID3FID_TRACKNUM);
+
+
+ genre_combo_to_tag(genre_combo,id3tag);
+ gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE);
+
+ ID3Tag_Update(id3tag);
+
+ ID3Tag_Delete(id3tag);
+}
+
+#else /* ! HAVE_ID3LIB */
+
+static void
+save_cb(GtkWidget * widget,
+ gpointer data)
+{
+ VFSFile *file;
+ gchar *msg = NULL;
+
+ if (str_has_prefix_nocase(current_filename, "http://"))
+ return;
+
+ if ((file = vfs_fopen(current_filename, "r+b")) != NULL) {
+ gint tracknum;
+
+ vfs_fseek(file, -128, SEEK_END);
+ vfs_fread(&tag, 1, sizeof(struct id3v1tag_t), file);
+
+ if (g_str_has_prefix(tag.tag, "TAG"))
+ vfs_fseek(file, -128L, SEEK_END);
+ else
+ vfs_fseek(file, 0L, SEEK_END);
+
+ tag.tag[0] = 'T';
+ tag.tag[1] = 'A';
+ tag.tag[2] = 'G';
+
+ get_entry_tag(GTK_ENTRY(title_entry), tag.title, 30);
+ get_entry_tag(GTK_ENTRY(artist_entry), tag.artist, 30);
+ get_entry_tag(GTK_ENTRY(album_entry), tag.album, 30);
+ get_entry_tag(GTK_ENTRY(year_entry), tag.year, 4);
+
+ tracknum = atoi(gtk_entry_get_text(GTK_ENTRY(tracknum_entry)));
+ if (tracknum > 0) {
+ get_entry_tag(GTK_ENTRY(comment_entry), tag.u.v1_1.comment, 28);
+ tag.u.v1_1.__zero = 0;
+ tag.u.v1_1.track_number = MIN(tracknum, 255);
+ }
+ else
+ get_entry_tag(GTK_ENTRY(comment_entry), tag.u.v1_0.comment, 30);
+
+ tag.genre = find_genre_id(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO
+ (genre_combo)->entry)));
+ if (vfs_fwrite(&tag, 1, sizeof(tag), file) != sizeof(tag))
+ msg = g_strdup_printf(_("%s\nUnable to write to file: %s"),
+ _("Couldn't write tag!"), strerror(errno));
+ vfs_fclose(file);
+ }
+ else
+ msg = g_strdup_printf(_("%s\nUnable to open file: %s"),
+ _("Couldn't write tag!"), strerror(errno));
+ if (msg) {
+ GtkWidget *mwin = xmms_show_message(_("File Info"), msg, _("Ok"),
+ FALSE, NULL, NULL);
+ gtk_window_set_transient_for(GTK_WINDOW(mwin), GTK_WINDOW(window));
+ g_free(msg);
+ }
+ else {
+ gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(widget), FALSE);
+ }
+}
+
+#endif /* HAVE_ID3LIB */
+
+static void
+label_set_text(GtkWidget * label, gchar * str, ...)
+{
+ va_list args;
+ gchar tempstr[MAX_STR_LEN];
+
+ va_start(args, str);
+ g_vsnprintf(tempstr, MAX_STR_LEN, str, args);
+ va_end(args);
+
+ gtk_label_set_text(GTK_LABEL(label), tempstr);
+}
+
+#ifdef HAVE_ID3LIB
+
+static void
+remove_id3_cb(GtkWidget * w, gpointer data)
+{
+ ID3Tag * id3tag;
+
+ if (str_has_prefix_nocase(current_filename, "http://"))
+ return;
+
+ id3tag = ID3Tag_New();
+ ID3Tag_LinkWithFlags(id3tag, current_filename, ID3TT_ID3);
+
+ ID3Tag_Strip(id3tag,ID3TT_ALL);
+ ID3Tag_Update(id3tag);
+
+ ID3Tag_Delete(id3tag);
+ gtk_entry_set_text(GTK_ENTRY(title_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(artist_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment_entry)), "",-1);
+ gtk_entry_set_text(GTK_ENTRY(year_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(totaltracks_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(genre_combo)->entry), "");
+ gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
+}
+
+#else
+
+static void
+remove_id3_cb(GtkWidget * w, gpointer data)
+{
+ VFSFile *file;
+ gint len;
+ struct id3v1tag_t tag;
+ gchar *msg = NULL;
+
+ if (str_has_prefix_nocase(current_filename, "http://"))
+ return;
+
+ if ((file = vfs_fopen(current_filename, "rb+")) != NULL) {
+ vfs_fseek(file, -128, SEEK_END);
+ len = vfs_ftell(file);
+
+ vfs_fread(&tag, 1, sizeof(struct id3v1tag_t), file);
+
+ if (g_str_has_prefix(tag.tag, "TAG")) {
+ if (vfs_truncate(file, len))
+ msg = g_strdup_printf(_("%s\n"
+ "Unable to truncate file: %s"),
+ _("Couldn't remove tag!"),
+ strerror(errno));
+ }
+ else
+ msg = strdup(_("No tag to remove!"));
+
+ vfs_fclose(file);
+ }
+ else
+ msg = g_strdup_printf(_("%s\nUnable to open file: %s"),
+ _("Couldn't remove tag!"), strerror(errno));
+ if (msg) {
+ GtkWidget *mwin = xmms_show_message(_("File Info"), msg, _("Ok"),
+ FALSE, NULL, NULL);
+ gtk_window_set_transient_for(GTK_WINDOW(mwin), GTK_WINDOW(window));
+ g_free(msg);
+ }
+ else {
+ gtk_entry_set_text(GTK_ENTRY(title_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(artist_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(comment_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(year_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");
+ gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
+ }
+}
+
+#endif
+
+static void
+set_mpeg_level_label(gboolean mpeg25, gint lsf, gint layer)
+{
+ if (mpeg25)
+ label_set_text(mpeg_level_val, "MPEG-2.5 Layer %d", layer);
+ else
+ label_set_text(mpeg_level_val, "MPEG-%d Layer %d", lsf + 1, layer);
+}
+
+static const gchar *
+channel_mode_name(gint mode)
+{
+ static const gchar *channel_mode[] = { N_("Stereo"), N_("Joint stereo"),
+ N_("Dual channel"), N_("Single channel")
+ };
+ if (mode < 0 || mode > 3)
+ return "";
+
+ return gettext(channel_mode[mode]);
+}
+
+static void
+file_info_http(gchar * filename)
+{
+ gtk_widget_set_sensitive(id3_frame, FALSE);
+ if (mpg123_filename && !strcmp(filename, mpg123_filename) &&
+ mpg123_bitrate != 0) {
+ set_mpeg_level_label(mpg123_mpeg25, mpg123_lsf, mpg123_layer);
+ label_set_text(mpeg_bitrate_val, _("%d KBit/s"), mpg123_bitrate);
+ label_set_text(mpeg_samplerate_val, _("%ld Hz"), mpg123_frequency);
+ label_set_text(mpeg_flags, "%s", channel_mode_name(mpg123_mode));
+ }
+}
+
+static void
+change_buttons(GtkObject * object)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(object), TRUE);
+#if 0
+ gtk_widget_set_sensitive(GTK_WIDGET(revert),TRUE);
+#endif
+}
+
+void
+mpg123_file_info_box(gchar * filename)
+{
+ gint i;
+ gchar *title, *filename_utf8;
+
+ emphasis[0] = _("None");
+ emphasis[1] = _("50/15 ms");
+ emphasis[2] = "";
+ emphasis[3] = _("CCIT J.17");
+ bool_label[0] = _("No");
+ bool_label[1] = _("Yes");
+
+ if (!window) {
+ GtkWidget *pixmapwid;
+ GdkPixbuf *pixbuf;
+ PangoAttrList *attrs;
+ PangoAttribute *attr;
+ GtkWidget *test_table = gtk_table_new(2, 10, FALSE);
+ GtkWidget *urk, *blark;
+#ifdef HAVE_ID3LIB
+ GtkWidget * tracknum_box, * comment_frame;
+#endif
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(window),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &window);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+
+ filename_vbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox), filename_vbox, FALSE, TRUE, 0);
+
+ pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)
+ gnome_mime_audio_xpm);
+ pixmapwid = gtk_image_new_from_pixbuf(pixbuf);
+ g_object_unref(pixbuf);
+ gtk_misc_set_alignment(GTK_MISC(pixmapwid), 0, 0);
+ gtk_box_pack_start(GTK_BOX(filename_vbox), pixmapwid, FALSE, FALSE,
+ 0);
+
+ label = gtk_label_new(NULL);
+
+ attrs = pango_attr_list_new();
+
+ attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD);
+ attr->start_index = 0;
+ attr->end_index = -1;
+ pango_attr_list_insert(attrs, attr);
+
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_label_set_text(GTK_LABEL(label), _("Name:"));
+ gtk_box_pack_start(GTK_BOX(filename_vbox), label, FALSE, FALSE, 0);
+
+ filename_entry = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(filename_entry), FALSE);
+ gtk_box_pack_start(GTK_BOX(filename_vbox), filename_entry, TRUE,
+ TRUE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
+
+ left_vbox = gtk_table_new(2, 4, FALSE);
+ gtk_box_pack_start(GTK_BOX(hbox), left_vbox, FALSE, FALSE, 0);
+
+ /* MPEG-Info window */
+
+ mpeg_frame = gtk_frame_new(_(" MPEG Info "));
+ gtk_table_attach(GTK_TABLE(left_vbox), mpeg_frame, 0, 2, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 4);
+
+ mpeg_box = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(mpeg_frame), mpeg_box);
+ gtk_container_set_border_width(GTK_CONTAINER(mpeg_box), 10);
+ gtk_box_set_spacing(GTK_BOX(mpeg_box), 0);
+
+ /* MPEG Layer Info */
+
+ /* FIXME: Obvious... */
+ gtk_container_set_border_width(GTK_CONTAINER(test_table), 0);
+ gtk_container_add(GTK_CONTAINER(mpeg_box), test_table);
+
+ mpeg_level = gtk_label_new(_("MPEG Level:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_level), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_level), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_level), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_level, 0, 1, 0, 1,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_level_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_level_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_level_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_level_val, 1, 2, 0, 1,
+ GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_bitrate = gtk_label_new(_("Bit rate:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_bitrate), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_bitrate), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_bitrate), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_bitrate, 0, 1, 1, 2,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_bitrate_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_bitrate_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_bitrate_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_bitrate_val, 1, 2, 1,
+ 2, GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_samplerate = gtk_label_new(_("Sample rate:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_samplerate), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_samplerate), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_samplerate), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_samplerate, 0, 1, 2,
+ 3, GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_samplerate_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_samplerate_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_samplerate_val),
+ GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_samplerate_val, 1, 2,
+ 2, 3, GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_frames = gtk_label_new(_("Frames:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_frames), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_frames), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_frames), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_frames, 0, 1, 3, 4,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_frames_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_frames_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_frames_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_frames_val, 1, 2, 3,
+ 4, GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_filesize = gtk_label_new(_("File size:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_filesize), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_filesize), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_filesize), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_filesize, 0, 1, 4, 5,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_filesize_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_filesize_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_filesize_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_filesize_val, 1, 2, 4,
+ 5, GTK_FILL, GTK_FILL, 10, 2);
+
+ urk = gtk_label_new("");
+ blark = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(urk), 1, 0.5);
+ gtk_misc_set_alignment(GTK_MISC(blark), 0, 0);
+
+ gtk_table_attach(GTK_TABLE(test_table), urk, 0, 1, 5, 6, GTK_FILL,
+ GTK_FILL, 5, 5);
+ gtk_table_attach(GTK_TABLE(test_table), blark, 1, 2, 5, 6,
+ GTK_FILL, GTK_FILL, 10, 5);
+
+ mpeg_error = gtk_label_new(_("Error Protection:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_error), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_error), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_error), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_error, 0, 1, 6, 7,
+ GTK_FILL, GTK_FILL, 5, 0);
+
+ mpeg_error_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_error_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_error_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_error_val, 1, 2, 6, 7,
+ GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_copy = gtk_label_new(_("Copyright:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_copy), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_copy), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_copy), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_copy, 0, 1, 7, 8,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_copy_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_copy_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_copy_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_copy_val, 1, 2, 7, 8,
+ GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_orig = gtk_label_new(_("Original:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_orig), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_orig), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_orig), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_orig, 0, 1, 8, 9,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_orig_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_orig_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_orig_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_orig_val, 1, 2, 8, 9,
+ GTK_FILL, GTK_FILL, 10, 2);
+
+ mpeg_emph = gtk_label_new(_("Emphasis:"));
+ gtk_misc_set_alignment(GTK_MISC(mpeg_emph), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(mpeg_emph), GTK_JUSTIFY_RIGHT);
+ gtk_label_set_attributes(GTK_LABEL(mpeg_emph), attrs);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_emph, 0, 1, 9, 10,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ mpeg_emph_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(mpeg_emph_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(mpeg_emph_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), mpeg_emph_val, 1, 2, 9, 10,
+ GTK_FILL, GTK_FILL, 10, 2);
+
+
+ id3_frame = gtk_frame_new(_(" ID3 Tag "));
+ gtk_table_attach(GTK_TABLE(left_vbox), id3_frame, 2, 4, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 4);
+
+ table = gtk_table_new(7, 5, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+ gtk_container_add(GTK_CONTAINER(id3_frame), table);
+
+ label = gtk_label_new(_("Title:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+#ifdef HAVE_ID3LIB
+ title_entry = gtk_entry_new();
+#else
+ title_entry = gtk_entry_new_with_max_length(30);
+#endif
+ gtk_table_attach(GTK_TABLE(table), title_entry, 1, 6, 0, 1,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Artist:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+#ifdef HAVE_ID3LIB
+ artist_entry = gtk_entry_new();
+#else
+ artist_entry = gtk_entry_new_with_max_length(30);
+#endif
+ gtk_table_attach(GTK_TABLE(table), artist_entry, 1, 6, 1, 2,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Album:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+#ifdef HAVE_ID3LIB
+ album_entry = gtk_entry_new();
+#else
+ album_entry = gtk_entry_new_with_max_length(30);
+#endif
+ gtk_table_attach(GTK_TABLE(table), album_entry, 1, 6, 2, 3,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Comment:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+#ifdef HAVE_ID3LIB
+ comment_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(comment_frame),GTK_SHADOW_IN);
+ comment_entry = gtk_text_view_new();
+ gtk_text_view_set_accepts_tab(GTK_TEXT_VIEW(comment_entry),FALSE);
+ gtk_container_add(GTK_CONTAINER(comment_frame),comment_entry);
+ gtk_table_attach(GTK_TABLE(table), comment_frame, 1, 6, 3, 4,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+#else
+ comment_entry = gtk_entry_new_with_max_length(30);
+ gtk_table_attach(GTK_TABLE(table), comment_entry, 1, 6, 3, 4,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+#endif
+
+ label = gtk_label_new(_("Year:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+ year_entry = gtk_entry_new_with_max_length(4);
+ gtk_entry_set_width_chars(GTK_ENTRY(year_entry),4);
+ gtk_table_attach(GTK_TABLE(table), year_entry, 1, 2, 4, 5,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Track number:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 2, 3, 4, 5, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+#ifdef HAVE_ID3LIB
+ tracknum_box = gtk_hbox_new(FALSE,0);
+ tracknum_entry = gtk_entry_new_with_max_length(2);
+ gtk_entry_set_width_chars(GTK_ENTRY(tracknum_entry),2);
+ totaltracks_entry = gtk_entry_new_with_max_length(2);
+ gtk_entry_set_width_chars(GTK_ENTRY(totaltracks_entry),2);
+ gtk_box_pack_start(GTK_BOX(tracknum_box),
+ tracknum_entry, TRUE, TRUE, 1);
+ gtk_box_pack_start(GTK_BOX(tracknum_box),
+ gtk_label_new(" / "), FALSE, FALSE, 1);
+ gtk_box_pack_start(GTK_BOX(tracknum_box),
+ totaltracks_entry, TRUE, TRUE, 1);
+ gtk_table_attach(GTK_TABLE(table),
+ tracknum_box,
+ 3, 4, 4, 5,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+#else
+ tracknum_entry = gtk_entry_new_with_max_length(3);
+ gtk_widget_set_usize(tracknum_entry, 40, -1);
+ gtk_table_attach(GTK_TABLE(table), tracknum_entry, 3, 4, 4, 5,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+#endif
+
+ label = gtk_label_new(_("Genre:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6, GTK_FILL,
+ GTK_FILL, 5, 5);
+
+ pango_attr_list_unref(attrs);
+
+ genre_combo = gtk_combo_new();
+ gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(genre_combo)->entry),
+ FALSE);
+ if (!genre_list) {
+ for (i = 0; i < GENRE_MAX; i++)
+ genre_list =
+ g_list_prepend(genre_list,
+ (gchar *) mpg123_id3_genres[i]);
+ genre_list = g_list_prepend(genre_list, "");
+ genre_list = g_list_sort(genre_list, genre_comp_func);
+ }
+ gtk_combo_set_popdown_strings(GTK_COMBO(genre_combo), genre_list);
+
+ gtk_table_attach(GTK_TABLE(table), genre_combo, 1, 6, 5, 6,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ boxx = gtk_hbutton_box_new();
+ gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_SPREAD);
+
+ remove_id3 = gtk_button_new_from_stock(GTK_STOCK_DELETE);
+ gtk_container_add(GTK_CONTAINER(boxx), remove_id3);
+
+#if 0
+ revert = gtk_button_new_from_stock(GTK_STOCK_REVERT_TO_SAVED);
+ gtk_container_add(GTK_CONTAINER(boxx), revert);
+#endif
+
+#ifdef HAVE_ID3LIB
+ copy_album_tags_but = gtk_button_new_with_label(_("Copy album tags"));
+ paste_album_tags_but = gtk_button_new_with_label(_("Paste album tags"));
+
+ gtk_container_add(GTK_CONTAINER(boxx), copy_album_tags_but);
+ gtk_container_add(GTK_CONTAINER(boxx), paste_album_tags_but);
+
+ g_signal_connect(G_OBJECT(copy_album_tags_but), "clicked",
+ G_CALLBACK(copy_album_tags), NULL);
+ g_signal_connect(G_OBJECT(paste_album_tags_but), "clicked",
+ G_CALLBACK(paste_album_tags), NULL);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(paste_album_tags_but), FALSE);
+#endif
+ save = gtk_button_new_from_stock(GTK_STOCK_SAVE);
+ gtk_container_add(GTK_CONTAINER(boxx), save);
+
+ g_signal_connect(G_OBJECT(remove_id3), "clicked",
+ G_CALLBACK(remove_id3_cb), save);
+ g_signal_connect(G_OBJECT(save), "clicked", G_CALLBACK(save_cb),
+ remove_id3);
+#if 0
+ g_signal_connect(G_OBJECT(revert), "clicked", G_CALLBACK(fill_entries),
+ NULL);
+#endif
+
+
+ gtk_table_attach(GTK_TABLE(table), boxx, 0, 5, 6, 7, GTK_FILL, 0,
+ 0, 8);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_table_attach(GTK_TABLE(left_vbox), bbox, 0, 4, 1, 2, GTK_FILL,
+ 0, 0, 8);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ G_OBJECT(window));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, FALSE, FALSE, 0);
+ gtk_widget_grab_default(cancel);
+
+
+ gtk_table_set_col_spacing(GTK_TABLE(left_vbox), 1, 10);
+
+
+ g_signal_connect_swapped(G_OBJECT(title_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+ g_signal_connect_swapped(G_OBJECT(artist_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+ g_signal_connect_swapped(G_OBJECT(album_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+ g_signal_connect_swapped(G_OBJECT(year_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+#ifdef HAVE_ID3LIB
+ g_signal_connect_swapped(G_OBJECT(gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment_entry))), "changed",
+ G_CALLBACK(change_buttons), save);
+ g_signal_connect_swapped(G_OBJECT(totaltracks_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+#else
+ g_signal_connect_swapped(G_OBJECT(comment_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+#endif
+ g_signal_connect_swapped(G_OBJECT(tracknum_entry), "changed",
+ G_CALLBACK(change_buttons), save);
+ g_signal_connect_swapped(G_OBJECT(GTK_COMBO(genre_combo)->entry), "changed",
+ G_CALLBACK(change_buttons), save);
+
+ /* Nonsence, should i remove this altogether?
+ causes changes to be saved as you type -
+ makes save /revert buttons pointless
+ g_signal_connect(G_OBJECT(title_entry), "activate",
+ G_CALLBACK(press_save), NULL);
+ g_signal_connect(G_OBJECT(artist_entry), "activate",
+ G_CALLBACK(press_save), NULL);
+ g_signal_connect(G_OBJECT(album_entry), "activate",
+ G_CALLBACK(press_save), NULL);
+ g_signal_connect(G_OBJECT(year_entry), "activate",
+ G_CALLBACK(press_save), NULL);
+ g_signal_connect(G_OBJECT(comment_entry), "activate",
+ G_CALLBACK(press_save), NULL);
+ g_signal_connect(G_OBJECT(tracknum_entry), "activate",
+ G_CALLBACK(press_save), NULL);
+ */
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(fileinfo_keypress_cb), NULL);
+ }
+
+ g_free(current_filename);
+ current_filename = g_strdup(filename);
+
+ filename_utf8 = filename_to_utf8(filename);
+
+ title = g_strdup_printf(_("%s - BMP"), g_basename(filename_utf8));
+ gtk_window_set_title(GTK_WINDOW(window), title);
+ g_free(title);
+
+ gtk_entry_set_text(GTK_ENTRY(filename_entry), filename_utf8);
+ g_free(filename_utf8);
+
+ gtk_editable_set_position(GTK_EDITABLE(filename_entry), -1);
+
+ gtk_entry_set_text(GTK_ENTRY(artist_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(year_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");
+#ifdef HAVE_ID3LIB
+ gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment_entry)),"",-1);
+#else
+ gtk_entry_set_text(GTK_ENTRY(comment_entry), "");
+#endif
+ gtk_list_select_item(GTK_LIST(GTK_COMBO(genre_combo)->list),
+ g_list_index(genre_list, ""));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_level), _("MPEG Level:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_level_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_bitrate), _("Bit rate:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_bitrate_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_samplerate), _("Sample rate:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_samplerate_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_error), _("Error Protection:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_error_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_copy), _("Copyright:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_copy_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_orig), _("Original:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_orig_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_emph), _("Emphasis:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_emph_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_frames), _("Frames:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_frames_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(mpeg_filesize), _("File size:"));
+ gtk_label_set_text(GTK_LABEL(mpeg_filesize_val), _("N/A"));
+
+ if (str_has_prefix_nocase(filename, "http://")) {
+ file_info_http(filename);
+ return;
+ }
+
+ gtk_widget_set_sensitive(id3_frame,
+ vfs_is_writeable(filename));
+
+ fill_entries(NULL, NULL);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(save), FALSE);
+#if 0
+ gtk_widget_set_sensitive(GTK_WIDGET(revert), FALSE);
+#endif
+ gtk_widget_show_all(window);
+}
+
+#ifdef HAVE_ID3LIB
+
+void
+fill_entries(GtkWidget * w, gpointer data)
+{
+ VFSFile *fh;
+ ID3Tag * id3tag;
+
+ if (str_has_prefix_nocase(current_filename, "http://"))
+ return;
+
+ id3tag = ID3Tag_New();
+ ID3Tag_LinkPreferV2(id3tag, current_filename);
+
+ id3v2_frame_to_entry(title_entry, id3tag, ID3FID_TITLE);
+ id3v2_frame_to_entry(artist_entry, id3tag, ID3FID_LEADARTIST);
+ id3v2_frame_to_entry(album_entry, id3tag, ID3FID_ALBUM);
+ id3v2_frame_to_text_view(comment_entry, id3tag, ID3FID_COMMENT);
+ id3v2_frame_to_entry(year_entry, id3tag, ID3FID_YEAR);
+ id3v2_tracknum_to_entries(tracknum_entry, totaltracks_entry, id3tag);
+ {
+ ID3Frame * frame = ID3Tag_FindFrameWithID(id3tag, ID3FID_CONTENTTYPE);
+
+ if (frame) {
+ int genre_idx = -1;
+ char genre[64];
+ const char * genre2;
+ ID3Field * text_field = ID3Frame_GetField(frame,ID3FN_TEXT);
+ ID3Field_GetASCII(text_field,genre,64);
+
+ /* attempt to find corresponding genre */
+ g_strstrip(genre);
+ sscanf(genre,"(%d)",&genre_idx);
+ if ((genre2 = ID3_V1GENRE2DESCRIPTION(genre_idx)))
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(genre_combo)->entry),
+ genre2);
+ }
+ }
+
+ gtk_widget_set_sensitive(GTK_WIDGET(remove_id3), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(save), FALSE);
+
+ update_paste_sensitive();
+
+ ID3Tag_Delete(id3tag);
+
+ if ((fh = vfs_fopen(current_filename, "rb")) != NULL) {
+ guint32 head;
+ guchar tmp[4];
+ struct frame frm;
+ gboolean id3_found = FALSE;
+
+ if (vfs_fread(tmp, 1, 4, fh) != 4) {
+ vfs_fclose(fh);
+ return;
+ }
+ head =
+ ((guint32) tmp[0] << 24) | ((guint32) tmp[1] << 16) |
+ ((guint32) tmp[2] << 8) | (guint32) tmp[3];
+ while (!mpg123_head_check(head)) {
+ head <<= 8;
+ if (vfs_fread(tmp, 1, 1, fh) != 1) {
+ vfs_fclose(fh);
+ return;
+ }
+ head |= tmp[0];
+ }
+ if (mpg123_decode_header(&frm, head)) {
+ guchar *buf;
+ gdouble tpf;
+ gint pos;
+ xing_header_t xing_header;
+ guint32 num_frames;
+
+ buf = g_malloc(frm.framesize + 4);
+ vfs_fseek(fh, -4, SEEK_CUR);
+ vfs_fread(buf, 1, frm.framesize + 4, fh);
+ tpf = mpg123_compute_tpf(&frm);
+ set_mpeg_level_label(frm.mpeg25, frm.lsf, frm.lay);
+ pos = vfs_ftell(fh);
+ vfs_fseek(fh, 0, SEEK_END);
+ if (mpg123_get_xing_header(&xing_header, buf)) {
+ num_frames = xing_header.frames;
+ label_set_text(mpeg_bitrate_val,
+ _("Variable,\navg. bitrate: %d KBit/s"),
+ (gint) ((xing_header.bytes * 8) /
+ (tpf * xing_header.frames * 1000)));
+ }
+ else {
+ num_frames =
+ ((vfs_ftell(fh) - pos -
+ (id3_found ? 128 : 0)) / mpg123_compute_bpf(&frm)) + 1;
+ label_set_text(mpeg_bitrate_val, _("%d KBit/s"),
+ tabsel_123[frm.lsf][frm.lay -
+ 1][frm.bitrate_index]);
+ }
+ label_set_text(mpeg_samplerate_val, _("%ld Hz"),
+ mpg123_freqs[frm.sampling_frequency]);
+ label_set_text(mpeg_error_val, _("%s"),
+ bool_label[frm.error_protection]);
+ label_set_text(mpeg_copy_val, _("%s"), bool_label[frm.copyright]);
+ label_set_text(mpeg_orig_val, _("%s"), bool_label[frm.original]);
+ label_set_text(mpeg_emph_val, _("%s"), emphasis[frm.emphasis]);
+ label_set_text(mpeg_frames_val, _("%d"), num_frames);
+ label_set_text(mpeg_filesize_val, _("%lu Bytes"), vfs_ftell(fh));
+ g_free(buf);
+ }
+ vfs_fclose(fh);
+ }
+
+}
+
+#else /* ! HAVE_ID3LIB */
+
+void
+fill_entries(GtkWidget * w, gpointer data)
+{
+ if ((fh = vfs_fopen(current_filename, "rb")) != NULL) {
+ guint32 head;
+ guchar tmp[4];
+ struct frame frm;
+ gboolean id3_found = FALSE;
+
+ vfs_fseek(fh, -sizeof(tag), SEEK_END);
+ if (vfs_fread(&tag, 1, sizeof(tag), fh) == sizeof(tag)) {
+ if (!strncmp(tag.tag, "TAG", 3)) {
+ id3_found = TRUE;
+ set_entry_tag(GTK_ENTRY(title_entry), tag.title, 30);
+ set_entry_tag(GTK_ENTRY(artist_entry), tag.artist, 30);
+ set_entry_tag(GTK_ENTRY(album_entry), tag.album, 30);
+ set_entry_tag(GTK_ENTRY(year_entry), tag.year, 4);
+ /* Check for v1.1 tags */
+ if (tag.u.v1_1.__zero == 0) {
+ gchar *temp =
+ g_strdup_printf("%d", tag.u.v1_1.track_number);
+ set_entry_tag(GTK_ENTRY(comment_entry),
+ tag.u.v1_1.comment, 28);
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry), temp);
+ g_free(temp);
+ }
+ else {
+ set_entry_tag(GTK_ENTRY(comment_entry),
+ tag.u.v1_0.comment, 30);
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");
+ }
+
+ gtk_list_select_item(GTK_LIST
+ (GTK_COMBO(genre_combo)->list),
+ g_list_index(genre_list, (gchar *)
+ mpg123_id3_genres[tag.
+ genre]));
+ gtk_widget_set_sensitive(GTK_WIDGET(remove_id3), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(save), FALSE);
+#if 0
+ gtk_widget_set_sensitive(GTK_WIDGET(revert), FALSE);
+#endif
+ }
+ else {
+ gtk_entry_set_text(GTK_ENTRY(title_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(artist_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(comment_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(year_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");
+ gtk_widget_set_sensitive(GTK_WIDGET(remove_id3), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(save), FALSE);
+#if 0
+ gtk_widget_set_sensitive(GTK_WIDGET(revert), FALSE);
+#endif
+ }
+ }
+ vfs_rewind(fh);
+ if (vfs_fread(tmp, 1, 4, fh) != 4) {
+ vfs_fclose(fh);
+ return;
+ }
+ head =
+ ((guint32) tmp[0] << 24) | ((guint32) tmp[1] << 16) |
+ ((guint32) tmp[2] << 8) | (guint32) tmp[3];
+ while (!mpg123_head_check(head)) {
+ head <<= 8;
+ if (vfs_fread(tmp, 1, 1, fh) != 1) {
+ vfs_fclose(fh);
+ return;
+ }
+ head |= tmp[0];
+ }
+ if (mpg123_decode_header(&frm, head)) {
+ guchar *buf;
+ gdouble tpf;
+ gint pos;
+ xing_header_t xing_header;
+ guint32 num_frames;
+
+ buf = g_malloc(frm.framesize + 4);
+ vfs_fseek(fh, -4, SEEK_CUR);
+ vfs_fread(buf, 1, frm.framesize + 4, fh);
+ tpf = mpg123_compute_tpf(&frm);
+ set_mpeg_level_label(frm.mpeg25, frm.lsf, frm.lay);
+ pos = vfs_ftell(fh);
+ vfs_fseek(fh, 0, SEEK_END);
+ if (mpg123_get_xing_header(&xing_header, buf)) {
+ num_frames = xing_header.frames;
+ label_set_text(mpeg_bitrate_val,
+ _("Variable,\navg. bitrate: %d KBit/s"),
+ (gint) ((xing_header.bytes * 8) /
+ (tpf * xing_header.frames * 1000)));
+ }
+ else {
+ num_frames =
+ ((vfs_ftell(fh) - pos -
+ (id3_found ? 128 : 0)) / mpg123_compute_bpf(&frm)) + 1;
+ label_set_text(mpeg_bitrate_val, _("%d KBit/s"),
+ tabsel_123[frm.lsf][frm.lay -
+ 1][frm.bitrate_index]);
+ }
+ label_set_text(mpeg_samplerate_val, _("%ld Hz"),
+ mpg123_freqs[frm.sampling_frequency]);
+ label_set_text(mpeg_error_val, _("%s"),
+ bool_label[frm.error_protection]);
+ label_set_text(mpeg_copy_val, _("%s"), bool_label[frm.copyright]);
+ label_set_text(mpeg_orig_val, _("%s"), bool_label[frm.original]);
+ label_set_text(mpeg_emph_val, _("%s"), emphasis[frm.emphasis]);
+ label_set_text(mpeg_frames_val, _("%d"), num_frames);
+ label_set_text(mpeg_filesize_val, _("%lu Bytes"), vfs_ftell(fh));
+ g_free(buf);
+ }
+ vfs_fclose(fh);
+ }
+}
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,132 @@
+#include "mpg123.h"
+
+#if 0
+static void
+check_buffer_range(int size)
+{
+ int pos = (bsi.wordpointer - bsbuf) + (size >> 3);
+
+ if (pos >= fsizeold) {
+ fprintf(stderr, "Pointer out of range (%d,%d)!\n", pos, fsizeold);
+ }
+}
+#endif
+
+void
+mpg123_backbits(int number_of_bits)
+{
+ bsi.bitindex -= number_of_bits;
+ bsi.wordpointer += (bsi.bitindex >> 3);
+ bsi.bitindex &= 0x7;
+}
+
+int
+mpg123_getbitoffset(void)
+{
+ return (-bsi.bitindex) & 0x7;
+}
+
+int
+mpg123_getbyte(void)
+{
+#ifdef DEBUG_GETBITS
+ if (bsi.bitindex)
+ fprintf(stderr, "getbyte called unsynched!\n");
+#endif
+ return *bsi.wordpointer++;
+}
+
+unsigned int
+mpg123_getbits(int number_of_bits)
+{
+ unsigned long rval;
+
+#ifdef DEBUG_GETBITS
+ fprintf(stderr, "g%d", number_of_bits);
+#endif
+
+ if (!number_of_bits)
+ return 0;
+
+#if 0
+ check_buffer_range(number_of_bits + bsi.bitindex);
+#endif
+
+ {
+ rval = bsi.wordpointer[0];
+ rval <<= 8;
+ rval |= bsi.wordpointer[1];
+ rval <<= 8;
+ rval |= bsi.wordpointer[2];
+
+ rval <<= bsi.bitindex;
+ rval &= 0xffffff;
+
+ bsi.bitindex += number_of_bits;
+
+ rval >>= (24 - number_of_bits);
+
+ bsi.wordpointer += (bsi.bitindex >> 3);
+ bsi.bitindex &= 7;
+ }
+
+#ifdef DEBUG_GETBITS
+ fprintf(stderr, ":%x ", rval);
+#endif
+
+ return rval;
+}
+
+unsigned int
+mpg123_getbits_fast(int number_of_bits)
+{
+ unsigned int rval;
+#ifdef DEBUG_GETBITS
+ fprintf(stderr, "g%d", number_of_bits);
+#endif
+
+#if 0
+ check_buffer_range(number_of_bits + bsi.bitindex);
+#endif
+
+ rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex);
+ rval |= ((unsigned int) bsi.wordpointer[1] << bsi.bitindex) >> 8;
+ rval <<= number_of_bits;
+ rval >>= 8;
+
+ bsi.bitindex += number_of_bits;
+
+ bsi.wordpointer += (bsi.bitindex >> 3);
+ bsi.bitindex &= 7;
+
+#ifdef DEBUG_GETBITS
+ fprintf(stderr, ":%x ", rval);
+#endif
+ return rval;
+}
+
+unsigned int
+mpg123_get1bit(void)
+{
+ unsigned char rval;
+
+#ifdef DEBUG_GETBITS
+ fprintf(stderr, "g%d", 1);
+#endif
+
+#if 0
+ check_buffer_range(1 + bsi.bitindex);
+#endif
+
+ rval = *bsi.wordpointer << bsi.bitindex;
+
+ bsi.bitindex++;
+ bsi.wordpointer += (bsi.bitindex >> 3);
+ bsi.bitindex &= 7;
+
+#ifdef DEBUG_GETBITS
+ fprintf(stderr, ":%d ", rval >> 7);
+#endif
+
+ return rval >> 7;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getbits.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,46 @@
+
+/*
+ * This does the same as getbits.c but with defines to
+ * force inlining
+ */
+
+#define mpg123_backbits(nob) \
+do { \
+ bsi.bitindex -= nob; \
+ bsi.wordpointer += (bsi.bitindex >> 3); \
+ bsi.bitindex &= 0x7; \
+} while (0)
+
+#define mpg123_getbitoffset() ((-bsi.bitindex) & 0x7)
+#define mpg123_getbyte() (*bsi.wordpointer++)
+
+#define mpg123_getbits(nob) \
+ (rval = bsi.wordpointer[0], \
+ rval <<= 8, \
+ rval |= bsi.wordpointer[1], \
+ rval <<= 8, \
+ rval |= bsi.wordpointer[2], \
+ rval <<= bsi.bitindex, \
+ rval &= 0xffffff, \
+ bsi.bitindex += (nob), \
+ rval >>= (24-(nob)), \
+ bsi.wordpointer += (bsi.bitindex>>3), \
+ bsi.bitindex &= 7, \
+ rval)
+
+#define mpg123_getbits_fast(nob) \
+ (rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex), \
+ rval |= ((unsigned long) bsi.wordpointer[1] << bsi.bitindex) >> 8, \
+ rval <<= (nob), \
+ rval >>= 8, \
+ bsi.bitindex += (nob), \
+ bsi.wordpointer += (bsi.bitindex >> 3), \
+ bsi.bitindex &= 7, \
+ rval)
+
+#define mpg123_get1bit() \
+ (rval_uc = *bsi.wordpointer << bsi.bitindex, \
+ bsi.bitindex++, \
+ bsi.wordpointer += (bsi.bitindex>>3), \
+ bsi.bitindex &= 7, \
+ rval_uc >> 7)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getcpuflags.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getcpuflags.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/getcpuflags.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,61 @@
+# KIMURA Takuhiro <kim at comtec.co.jp>
+# Copyright 2002 Haavard Kvaalen <havardk at xmms.org>
+
+# Get feature flags with cpuid
+# void mpg123_getcpuid(unsigned int *fflags, unsigned int *efflags)
+
+.text
+ .align 4
+.globl mpg123_getcpuflags
+ .type mpg123_getcpuflags, at function
+mpg123_getcpuflags:
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %edx
+ pushl %ecx
+ pushl %ebx
+ pushfl # First test if cpuid is supported
+ pushfl # Check if the ID flag (bit 21 of eflags) sticks
+ popl %eax # Get eflags
+ movl %eax,%ebx
+ xorl $0x200000,%eax # Flip bit 21
+ pushl %eax
+ popfl # Get modified eflags to flag register
+ pushfl
+ popl %eax # Get eflags again
+ popfl # Restore original eflags
+ xorl %ebx,%eax
+ je nocpuid
+ xorl %eax,%eax
+ cpuid # Check if eax = 1 is supported
+ xorl %edx,%edx
+ cmp $1,%eax
+ jl noflags
+ movl $1,%eax # Get feature flags
+ cpuid
+noflags:
+ movl 8(%ebp),%eax
+ movl %edx,(%eax)
+ movl $0x80000000,%eax # Check support for extended level cpuid
+ cpuid
+ xorl %edx,%edx
+ cmp $0x80000001,%eax # Get extended feature flags
+ jl noeflags
+ movl $0x80000001,%eax
+ cpuid
+noeflags:
+ movl 12(%ebp),%eax
+ movl %edx,(%eax)
+ jmp done
+nocpuid:
+ xorl %edx,%edx
+ movl 8(%ebp),%eax
+ movl %edx,(%eax)
+ movl 12(%ebp),%eax
+ movl %edx,(%eax)
+done:
+ popl %ebx
+ popl %ecx
+ popl %edx
+ leave
+ ret
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/http.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/http.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/http.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,860 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#include <libbeep/util.h>
+
+#include "mpg123.h"
+
+
+#define min(x,y) ((x)<(y)?(x):(y))
+#define min3(x,y,z) (min(x,y)<(z)?min(x,y):(z))
+#define min4(x,y,z,w) (min3(x,y,z)<(w)?min3(x,y,z):(w))
+
+static gchar *icy_name = NULL;
+static gint icy_metaint = 0;
+
+#undef DEBUG_UDP
+
+/* Static udp channel functions */
+static gint udp_establish_listener(gint * sock);
+static gint udp_check_for_data(gint sock);
+
+extern gint mpg123_bitrate, mpg123_frequency, mpg123_stereo;
+extern gboolean mpg123_stereo;
+
+static gboolean prebuffering, going, eof = FALSE;
+static gint sock, rd_index, wr_index, buffer_length, prebuffer_length;
+static guint64 buffer_read = 0;
+static gchar *buffer;
+static GThread *thread;
+static GtkWidget *error_dialog = NULL;
+
+static VFSFile *output_file = NULL;
+
+#define BASE64_LENGTH(len) (4 * (((len) + 2) / 3))
+
+/* Encode the string S of length LENGTH to base64 format and place it
+ to STORE. STORE will be 0-terminated, and must point to a writable
+ buffer of at least 1+BASE64_LENGTH(length) bytes. */
+static void
+base64_encode(const gchar * s, gchar * store, gint length)
+{
+ /* Conversion table. */
+ static gchar tbl[64] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+ '4', '5', '6', '7', '8', '9', '+', '/'
+ };
+ gint i;
+ guchar *p = (guchar *) store;
+
+ /* Transform the 3x8 bits to 4x6 bits, as required by base64. */
+ for (i = 0; i < length; i += 3) {
+ *p++ = tbl[s[0] >> 2];
+ *p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)];
+ *p++ = tbl[((s[1] & 0xf) << 2) + (s[2] >> 6)];
+ *p++ = tbl[s[2] & 0x3f];
+ s += 3;
+ }
+ /* Pad the result if necessary... */
+ if (i == length + 1)
+ *(p - 1) = '=';
+ else if (i == length + 2)
+ *(p - 1) = *(p - 2) = '=';
+ /* ...and zero-terminate it. */
+ *p = '\0';
+}
+
+/* Create the authentication header contents for the `Basic' scheme.
+ This is done by encoding the string `USER:PASS' in base64 and
+ prepending `HEADER: Basic ' to it. */
+static gchar *
+basic_authentication_encode(const gchar * user,
+ const gchar * passwd, const gchar * header)
+{
+ gchar *t1, *t2, *res;
+ gint len1 = strlen(user) + 1 + strlen(passwd);
+ gint len2 = BASE64_LENGTH(len1);
+
+ t1 = g_strdup_printf("%s:%s", user, passwd);
+ t2 = g_malloc0(len2 + 1);
+ base64_encode(t1, t2, len1);
+ res = g_strdup_printf("%s: Basic %s\r\n", header, t2);
+ g_free(t2);
+ g_free(t1);
+
+ return res;
+}
+
+static void
+parse_url(const gchar * url, gchar ** user, gchar ** pass,
+ gchar ** host, gint * port, gchar ** filename)
+{
+ gchar *h, *p, *pt, *f, *temp, *ptr;
+
+ temp = g_strdup(url);
+ ptr = temp;
+
+ if (!strncasecmp("http://", ptr, 7))
+ ptr += 7;
+ h = strchr(ptr, '@');
+ f = strchr(ptr, '/');
+ if (h != NULL && (!f || h < f)) {
+ *h = '\0';
+ p = strchr(ptr, ':');
+ if (p != NULL && p < h) {
+ *p = '\0';
+ p++;
+ *pass = g_strdup(p);
+ }
+ else
+ *pass = NULL;
+ *user = g_strdup(ptr);
+ h++;
+ ptr = h;
+ }
+ else {
+ *user = NULL;
+ *pass = NULL;
+ h = ptr;
+ }
+ pt = strchr(ptr, ':');
+ if (pt != NULL && (f == NULL || pt < f)) {
+ *pt = '\0';
+ *port = atoi(pt + 1);
+ }
+ else {
+ if (f)
+ *f = '\0';
+ *port = 80;
+ }
+ *host = g_strdup(h);
+
+ if (f)
+ *filename = g_strdup(f + 1);
+ else
+ *filename = NULL;
+ g_free(temp);
+}
+
+void
+mpg123_http_close(void)
+{
+ going = FALSE;
+
+ g_thread_join(thread);
+ g_free(icy_name);
+ icy_name = NULL;
+}
+
+
+static gint
+http_used(void)
+{
+ if (wr_index >= rd_index)
+ return wr_index - rd_index;
+ return buffer_length - (rd_index - wr_index);
+}
+
+static gint
+http_free(void)
+{
+ if (rd_index > wr_index)
+ return (rd_index - wr_index) - 1;
+ return (buffer_length - (wr_index - rd_index)) - 1;
+}
+
+static void
+http_wait_for_data(gint bytes)
+{
+ while ((prebuffering || http_used() < bytes) && !eof && going
+ && mpg123_info->going)
+ xmms_usleep(10000);
+}
+
+static void
+show_error_message(gchar * error)
+{
+ if (!error_dialog) {
+ GDK_THREADS_ENTER();
+ error_dialog = xmms_show_message(_("Error"), error, _("Ok"), FALSE,
+ NULL, NULL);
+ g_signal_connect(G_OBJECT(error_dialog),
+ "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &error_dialog);
+ GDK_THREADS_LEAVE();
+ }
+}
+
+int
+mpg123_http_read(gpointer data, gint length)
+{
+ gint len, cnt, off = 0, meta_len, meta_off = 0, i;
+ gchar *meta_data, **tags;
+
+ http_wait_for_data(length);
+
+ if (!going && !mpg123_info->going)
+ return 0;
+ len = min(http_used(), length);
+
+ while (len && http_used()) {
+ if ((icy_metaint > 0) && (buffer_read % icy_metaint) == 0 &&
+ (buffer_read > 0)) {
+ meta_len = *((guchar *) buffer + rd_index) * 16;
+ rd_index = (rd_index + 1) % buffer_length;
+ if (meta_len > 0) {
+ http_wait_for_data(meta_len);
+ meta_data = g_malloc0(meta_len);
+ if (http_used() >= meta_len) {
+ while (meta_len) {
+ cnt = min(meta_len, buffer_length - rd_index);
+ memcpy(meta_data + meta_off, buffer + rd_index, cnt);
+ rd_index = (rd_index + cnt) % buffer_length;
+ meta_len -= cnt;
+ meta_off += cnt;
+ }
+ tags = g_strsplit(meta_data, "';", 0);
+
+ for (i = 0; tags[i]; i++) {
+ if (!strncasecmp(tags[i], "StreamTitle=", 12)) {
+ gchar *temp = tags[i] + 13;
+ gchar *title =
+ g_strdup_printf("%s (%s)", temp, icy_name);
+ mpg123_ip.set_info(title, -1,
+ mpg123_bitrate * 1000,
+ mpg123_frequency,
+ mpg123_stereo);
+ g_free(title);
+ }
+
+ }
+ g_strfreev(tags);
+
+ }
+ g_free(meta_data);
+ }
+ if (!http_used())
+ http_wait_for_data(length - off);
+ cnt = min3(len, buffer_length - rd_index, http_used());
+ }
+ else if (icy_metaint > 0)
+ cnt =
+ min4(len, buffer_length - rd_index, http_used(),
+ icy_metaint - (buffer_read % icy_metaint));
+ else
+ cnt = min3(len, buffer_length - rd_index, http_used());
+ if (output_file)
+ vfs_fwrite(buffer + rd_index, 1, cnt, output_file);
+
+ memcpy((gchar *) data + off, buffer + rd_index, cnt);
+ rd_index = (rd_index + cnt) % buffer_length;
+ buffer_read += cnt;
+ len -= cnt;
+ off += cnt;
+ }
+ return off;
+}
+
+static gboolean
+http_check_for_data(void)
+{
+
+ fd_set set;
+ struct timeval tv;
+ gint ret;
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 20000;
+ FD_ZERO(&set);
+ FD_SET(sock, &set);
+ ret = select(sock + 1, &set, NULL, NULL, &tv);
+ if (ret > 0)
+ return TRUE;
+ return FALSE;
+}
+
+gint
+mpg123_http_read_line(gchar * buf, gint size)
+{
+ gint i = 0;
+
+ while (going && i < size - 1) {
+ if (http_check_for_data()) {
+ if (read(sock, buf + i, 1) <= 0)
+ return -1;
+ if (buf[i] == '\n')
+ break;
+ if (buf[i] != '\r')
+ i++;
+ }
+ }
+ if (!going)
+ return -1;
+ buf[i] = '\0';
+ return i;
+}
+
+static gpointer
+http_buffer_loop(gpointer arg)
+{
+ gchar line[1024], *user, *pass, *host, *filename,
+ *status, *url, *temp, *file;
+ gchar *chost;
+ gint cnt, written, error, err_len, port, cport;
+ gboolean redirect;
+ gint udp_sock = 0;
+ fd_set set;
+ struct hostent *hp;
+ struct sockaddr_in address;
+ struct timeval tv;
+
+ url = (gchar *) arg;
+ do {
+ redirect = FALSE;
+
+ g_strstrip(url);
+
+ parse_url(url, &user, &pass, &host, &port, &filename);
+
+ if ((!filename || !*filename) && url[strlen(url) - 1] != '/')
+ temp = g_strconcat(url, "/", NULL);
+ else
+ temp = g_strdup(url);
+ g_free(url);
+ url = temp;
+
+ chost = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_host : host;
+ cport = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_port : port;
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ fcntl(sock, F_SETFL, O_NONBLOCK);
+ address.sin_family = AF_INET;
+
+ status = g_strdup_printf(_("LOOKING UP %s"), chost);
+ mpg123_ip.set_info_text(status);
+ g_free(status);
+
+ if (!(hp = gethostbyname(chost))) {
+ status = g_strdup_printf(_("Couldn't look up host %s"), chost);
+ show_error_message(status);
+ g_free(status);
+
+ mpg123_ip.set_info_text(NULL);
+ eof = TRUE;
+ }
+
+ if (!eof) {
+ memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list),
+ sizeof(address.sin_addr.s_addr));
+ address.sin_port = g_htons(cport);
+
+ status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport);
+ mpg123_ip.set_info_text(status);
+ g_free(status);
+ if (connect
+ (sock, (struct sockaddr *) &address,
+ sizeof(struct sockaddr_in)) == -1) {
+ if (errno != EINPROGRESS) {
+ status =
+ g_strdup_printf(_("Couldn't connect to host %s"),
+ chost);
+ show_error_message(status);
+ g_free(status);
+
+ mpg123_ip.set_info_text(NULL);
+ eof = TRUE;
+ }
+ }
+ while (going) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 10000;
+ FD_ZERO(&set);
+ FD_SET(sock, &set);
+ if (select(sock + 1, NULL, &set, NULL, &tv) > 0) {
+ err_len = sizeof(error);
+ getsockopt(sock, SOL_SOCKET, SO_ERROR, &error, &err_len);
+ if (error) {
+ status =
+ g_strdup_printf(_
+ ("Couldn't connect to host %s"),
+ chost);
+ show_error_message(status);
+ g_free(status);
+
+ mpg123_ip.set_info_text(NULL);
+ eof = TRUE;
+
+ }
+ break;
+ }
+ }
+ if (!eof) {
+ gchar *auth = NULL, *proxy_auth = NULL;
+ gchar udpspace[30];
+ gint udp_port;
+
+ if (mpg123_cfg.use_udp_channel) {
+ udp_port = udp_establish_listener(&udp_sock);
+ if (udp_port > 0)
+ sprintf(udpspace, "x-audiocast-udpport: %d\r\n",
+ udp_port);
+ else
+ udp_sock = 0;
+ }
+
+ if (user && pass)
+ auth =
+ basic_authentication_encode(user, pass,
+ "Authorization");
+
+ if (mpg123_cfg.use_proxy) {
+ file = g_strdup(url);
+ if (mpg123_cfg.proxy_use_auth && mpg123_cfg.proxy_user
+ && mpg123_cfg.proxy_pass) {
+ proxy_auth =
+ basic_authentication_encode(mpg123_cfg.
+ proxy_user,
+ mpg123_cfg.
+ proxy_pass,
+ "Proxy-Authorization");
+ }
+ }
+ else
+ file = g_strconcat("/", filename, NULL);
+ temp = g_strdup_printf("GET %s HTTP/1.0\r\n"
+ "Host: %s\r\n"
+ "User-Agent: %s/%s\r\n"
+ "%s%s%s%s\r\n",
+ file, host, PACKAGE, VERSION,
+ proxy_auth ? proxy_auth : "",
+ auth ? auth : "",
+ "Icy-MetaData:1\r\n",
+ mpg123_cfg.
+ use_udp_channel ? udpspace : "");
+
+ g_free(file);
+ if (proxy_auth)
+ g_free(proxy_auth);
+ if (auth)
+ g_free(auth);
+ write(sock, temp, strlen(temp));
+ g_free(temp);
+ mpg123_ip.set_info_text(_("CONNECTED: WAITING FOR REPLY"));
+ while (going && !eof) {
+ if (http_check_for_data()) {
+ if (mpg123_http_read_line(line, 1024)) {
+ status = strchr(line, ' ');
+ if (status) {
+ if (status[1] == '2')
+ break;
+ else if (status[1] == '3'
+ && status[2] == '0'
+ && status[3] == '2') {
+ while (going) {
+ if (http_check_for_data()) {
+ if ((cnt =
+ mpg123_http_read_line
+ (line, 1024)) != -1) {
+ if (!cnt)
+ break;
+ if (!strncmp
+ (line, "Location:", 9)) {
+ g_free(url);
+ url = g_strdup(line + 10);
+ }
+ }
+ else {
+ eof = TRUE;
+ mpg123_ip.set_info_text(NULL);
+ break;
+ }
+ }
+ }
+ redirect = TRUE;
+ break;
+ }
+ else {
+ status =
+ g_strdup_printf(_
+ ("Couldn't connect to host %s\nServer reported: %s"),
+ chost, status);
+ show_error_message(status);
+ g_free(status);
+ break;
+ }
+ }
+ }
+ else {
+ eof = TRUE;
+ mpg123_ip.set_info_text(NULL);
+ }
+ }
+ }
+
+ while (going && !redirect) {
+ if (http_check_for_data()) {
+ if ((cnt = mpg123_http_read_line(line, 1024)) != -1) {
+ if (!cnt)
+ break;
+ if (!strncmp(line, "icy-name:", 9))
+ icy_name = g_strdup(line + 9);
+ else if (!strncmp(line, "x-audiocast-name:", 17))
+ icy_name = g_strdup(line + 17);
+ if (!strncmp(line, "icy-metaint:", 12))
+ icy_metaint = atoi(line + 12);
+ if (!strncmp(line, "x-audiocast-udpport:", 20)) {
+#ifdef DEBUG_UDP
+ fprintf(stderr,
+ "Server wants udp messages on port %d\n",
+ atoi(line + 20));
+#endif
+/* udp_serverport = atoi (line + 20); */
+ }
+
+ }
+ else {
+ eof = TRUE;
+ mpg123_ip.set_info_text(NULL);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (redirect) {
+ if (output_file) {
+ vfs_fclose(output_file);
+ output_file = NULL;
+ }
+ close(sock);
+ g_free(user);
+ g_free(pass);
+ g_free(host);
+ g_free(filename);
+ }
+ } while (redirect);
+
+ if (mpg123_cfg.save_http_stream) {
+ gchar *output_name;
+ gint i = 1;
+
+ file = mpg123_http_get_title(url);
+ output_name = file;
+ if (!strncasecmp(output_name, "http://", 7))
+ output_name += 7;
+ temp = strrchr(output_name, '.');
+ if (temp && !strcasecmp(temp, ".mp3"))
+ *temp = '\0';
+
+ while ((temp = strchr(output_name, '/')))
+ *temp = '_';
+ output_name = g_strdup_printf("%s/%s.mp3",
+ mpg123_cfg.save_http_path, output_name);
+ while (!access(output_name, F_OK) && i < 100000) {
+ g_free(output_name);
+ output_name = g_strdup_printf("%s/%s-%d.mp3",
+ mpg123_cfg.save_http_path,
+ output_name, i++);
+ }
+
+ g_free(file);
+
+ output_file = vfs_fopen(output_name, "wb");
+ g_free(output_name);
+ }
+
+ while (going) {
+
+ if (!http_used() && !mpg123_ip.output->buffer_playing())
+ prebuffering = TRUE;
+ if (http_free() > 0 && !eof) {
+ if (http_check_for_data()) {
+ cnt = min(http_free(), buffer_length - wr_index);
+ if (cnt > 1024)
+ cnt = 1024;
+ written = read(sock, buffer + wr_index, cnt);
+ if (written <= 0) {
+ eof = TRUE;
+ if (prebuffering) {
+ prebuffering = FALSE;
+
+ mpg123_ip.set_info_text(NULL);
+ }
+
+ }
+ else
+ wr_index = (wr_index + written) % buffer_length;
+ }
+
+ if (prebuffering) {
+ if (http_used() > prebuffer_length) {
+ prebuffering = FALSE;
+ mpg123_ip.set_info_text(NULL);
+ }
+ else {
+ status =
+ g_strdup_printf(_("PRE-BUFFERING: %dKB/%dKB"),
+ http_used() / 1024,
+ prebuffer_length / 1024);
+ mpg123_ip.set_info_text(status);
+ g_free(status);
+ }
+
+ }
+ }
+ else
+ xmms_usleep(10000);
+
+ if (mpg123_cfg.use_udp_channel && udp_sock != 0)
+ if (udp_check_for_data(udp_sock) < 0) {
+ close(udp_sock);
+ udp_sock = 0;
+ }
+ }
+ if (output_file) {
+ vfs_fclose(output_file);
+ output_file = NULL;
+ }
+ close(sock);
+ if (udp_sock != 0)
+ close(udp_sock);
+
+ g_free(user);
+ g_free(pass);
+ g_free(host);
+ g_free(filename);
+ g_free(buffer);
+ g_free(url);
+
+ return NULL;
+}
+
+int
+mpg123_http_open(gchar * _url)
+{
+ gchar *url;
+
+ url = g_strdup(_url);
+
+ rd_index = 0;
+ wr_index = 0;
+ buffer_length = mpg123_cfg.http_buffer_size * 1024;
+ prebuffer_length = (buffer_length * mpg123_cfg.http_prebuffer) / 100;
+ buffer_read = 0;
+ icy_metaint = 0;
+ prebuffering = TRUE;
+ going = TRUE;
+ eof = FALSE;
+ buffer = g_malloc(buffer_length);
+
+ thread = g_thread_create(http_buffer_loop, url, TRUE, NULL);
+
+ return 0;
+}
+
+char *
+mpg123_http_get_title(gchar * url)
+{
+ if (icy_name)
+ return g_strdup(icy_name);
+ if (g_basename(url) && strlen(g_basename(url)) > 0)
+ return g_strdup(g_basename(url));
+ return g_strdup(url);
+}
+
+/* Start UDP Channel specific stuff */
+
+/* Find a good local udp port and bind udp_sock to it, return the port */
+static gint
+udp_establish_listener(gint * sock)
+{
+ struct sockaddr_in sin;
+ socklen_t sinlen = sizeof(struct sockaddr_in);
+
+#ifdef DEBUG_UDP
+ fprintf(stderr, "Establishing udp listener\n");
+#endif
+
+ if ((*sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ g_log(NULL, G_LOG_LEVEL_CRITICAL,
+ "udp_establish_listener(): unable to create socket");
+ return -1;
+ }
+
+ memset(&sin, 0, sinlen);
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = g_htonl(INADDR_ANY);
+
+ if (bind(*sock, (struct sockaddr *) &sin, sinlen) < 0) {
+ g_log(NULL, G_LOG_LEVEL_CRITICAL,
+ "udp_establish_listener(): Failed to bind socket to localhost: %s",
+ strerror(errno));
+ close(*sock);
+ return -1;
+ }
+ if (fcntl(*sock, F_SETFL, O_NONBLOCK) < 0) {
+ g_log(NULL, G_LOG_LEVEL_CRITICAL,
+ "udp_establish_listener(): Failed to set flags: %s",
+ strerror(errno));
+ close(*sock);
+ return -1;
+ }
+
+ memset(&sin, 0, sinlen);
+ if (getsockname(*sock, (struct sockaddr *) &sin, &sinlen) < 0) {
+ g_log(NULL, G_LOG_LEVEL_CRITICAL,
+ "udp_establish_listener(): Failed to retrieve socket info: %s",
+ strerror(errno));
+ close(*sock);
+ return -1;
+ }
+#ifdef DEBUG_UDP
+ fprintf(stderr, "Listening on local %s:%d\n", inet_ntoa(sin.sin_addr),
+ g_ntohs(sin.sin_port));
+#endif
+
+ return g_ntohs(sin.sin_port);
+}
+
+static int
+udp_check_for_data(int sock)
+{
+ char buf[1025], **lines;
+ char *valptr;
+ gchar *title;
+ gint len, i;
+ struct sockaddr_in from;
+ socklen_t fromlen;
+
+ fromlen = sizeof(struct sockaddr_in);
+
+ if ((len =
+ recvfrom(sock, buf, 1024, 0, (struct sockaddr *) &from,
+ &fromlen)) < 0) {
+ if (errno != EAGAIN) {
+ g_log(NULL, G_LOG_LEVEL_CRITICAL,
+ "udp_read_data(): Error reading from socket: %s",
+ strerror(errno));
+ return -1;
+ }
+ return 0;
+ }
+ buf[len] = '\0';
+#ifdef DEBUG_UDP
+ fprintf(stderr, "Received: [%s]\n", buf);
+#endif
+ lines = g_strsplit(buf, "\n", 0);
+ if (!lines)
+ return 0;
+
+ for (i = 0; lines[i]; i++) {
+ while ((lines[i][strlen(lines[i]) - 1] == '\n') ||
+ (lines[i][strlen(lines[i]) - 1] == '\r'))
+ lines[i][strlen(lines[i]) - 1] = '\0';
+
+ valptr = strchr(lines[i], ':');
+
+ if (!valptr)
+ continue;
+ else
+ valptr++;
+
+ g_strstrip(valptr);
+ if (!strlen(valptr))
+ continue;
+
+ if (strstr(lines[i], "x-audiocast-streamtitle") != NULL) {
+ title = g_strdup_printf("%s (%s)", valptr, icy_name);
+ if (going)
+ mpg123_ip.set_info(title, -1, mpg123_bitrate * 1000,
+ mpg123_frequency, mpg123_stereo);
+ g_free(title);
+ }
+#if 0
+ else if (strstr(lines[i], "x-audiocast-streamlength") != NULL) {
+ if (atoi(valptr) != -1)
+ mpg123_ip.set_info(NULL, atoi(valptr),
+ mpg123_bitrate * 1000, mpg123_frequency,
+ mpg123_stereo);
+ }
+#endif
+
+ else if (strstr(lines[i], "x-audiocast-streammsg") != NULL) {
+ /* mpg123_ip.set_info(title, -1, mpg123_bitrate * 1000, mpg123_frequency, mpg123_stereo); */
+/* xmms_show_message(_("Message"), valptr, _("Ok"), */
+/* FALSE, NULL, NULL); */
+ g_message("Stream_message: %s", valptr);
+ }
+#if 0
+ /* Use this to direct your webbrowser.. yeah right.. */
+ else if (strstr(lines[i], "x-audiocast-streamurl") != NULL) {
+ if (lasturl && g_strcmp(valptr, lasturl)) {
+ c_message(stderr, "Song URL: %s\n", valptr);
+ g_free(lasturl);
+ lasturl = g_strdup(valptr);
+ }
+ }
+#endif
+ else if (strstr(lines[i], "x-audiocast-udpseqnr:") != NULL) {
+ gchar obuf[60];
+ sprintf(obuf, "x-audiocast-ack: %ld \r\n", atol(valptr));
+ if (sendto
+ (sock, obuf, strlen(obuf), 0, (struct sockaddr *) &from,
+ fromlen) < 0) {
+ g_log(NULL, G_LOG_LEVEL_WARNING,
+ "udp_check_for_data(): Unable to send ack to server: %s",
+ strerror(errno));
+ }
+#ifdef DEBUG_UDP
+ else
+ fprintf(stderr, "Sent ack: %s", obuf);
+ fprintf(stderr, "Remote: %s:%d\n", inet_ntoa(from.sin_addr),
+ g_ntohs(from.sin_port));
+#endif
+ }
+ }
+ g_strfreev(lines);
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/huffman.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/huffman.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/huffman.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,313 @@
+
+/*
+ * huffman tables ... recalcualted to work with my optimzed
+ * decoder scheme (MH)
+ *
+ * probably we could save a few bytes of memory, because the
+ * smaller tables are often the part of a bigger table
+ */
+
+struct newhuff {
+ unsigned int linbits;
+ short *table;
+};
+
+static short tab0[] = {
+ 0
+};
+
+static short tab1[] = {
+ -5, -3, -1, 17, 1, 16, 0
+};
+
+static short tab2[] = {
+ -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1,
+ 16, 0
+};
+
+static short tab3[] = {
+ -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1,
+ 1, 0
+};
+
+static short tab5[] = {
+ -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19,
+ 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16,
+ 0
+};
+
+static short tab6[] = {
+ -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19,
+ 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16,
+ 0
+};
+
+static short tab7[] = {
+ -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83,
+ -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1,
+ 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, 65, 64, -11, -7,
+ -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, 34, 18,
+ -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0
+};
+
+static short tab8[] = {
+ -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83,
+ -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52,
+ 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, 65, -3, -1, 4,
+ 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, 34, -1,
+ 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0
+};
+
+static short tab9[] = {
+ -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1,
+ 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67,
+ -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, 20, 65, -5,
+ -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, 2,
+ 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0
+};
+
+static short tab10[] = {
+ -125, -121, -111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1,
+ 118,
+ 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3,
+ -1, 115, 70, -3, -1, 85, 84, 99, -1, 39, 114, -11, -5, -3, -1,
+ 100, 7, 112, -1, 98, -1, 69, 53, -5, -1, 6, -1, 83, 68, 23,
+ -17, -5, -1, 113, -1, 54, 38, -5, -3, -1, 37, 82, 21, -1, 81,
+ -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, 80, -19, -11, -7,
+ -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, 64, 35, -1,
+ 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, -1,
+ 2, 32, 17, -1, 1, 16, 0
+};
+
+static short tab11[] = {
+ -121, -113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118,
+ 117,
+ -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55,
+ -1, 115, 70, -9, -7, -3, -1, 69, 84, -1, 53, 83, 39, -1, 114,
+ -1, 100, 7, -5, -1, 113, -1, 23, 112, -3, -1, 54, 99, -1, 96,
+ -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, 98, -3, -1, 38,
+ 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, 51, -1,
+ 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, 50,
+ -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2,
+ 32, 17, -3, -1, 1, 16, 0
+};
+
+static short tab12[] = {
+ -115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87,
+ 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115,
+ 85, 39, -7, -3, -1, 114, 70, -1, 100, 23, -5, -1, 113, -1, 7,
+ 112, -1, 54, 99, -13, -9, -3, -1, 69, 84, -1, 68, -1, 6, 5,
+ -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, 53, 83, -1, 37,
+ 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, -1, 80, 4,
+ 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, -3,
+ -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1,
+ 2, 32, 0, 17, -1, 1, 16
+};
+
+static short tab13[] = {
+ -509, -503, -475, -405, -333, -265, -205, -153, -115, -83, -53, -35,
+ -21, -13, -9,
+ -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238,
+ 207, -1, 222, 191, -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1,
+ 236, 221, -9, -5, -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249,
+ 234, -1, 189, 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158,
+ -5, -1, 142, -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1,
+ 203, 246, 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245,
+ 231, -1, 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1,
+ 63, -1, 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15,
+ -5, -3, -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1,
+ 200, 214, 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1,
+ 240, -1, 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1,
+ 46, 14, -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3,
+ -1, 199, 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1,
+ 198, 61, -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5,
+ -1, 183, -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167,
+ 151, 75, 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76,
+ 196, -1, 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137,
+ 28, -43, -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106,
+ -5, -3, -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43,
+ -1, 165, 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178,
+ -11, -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1,
+ 58, 163, -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161,
+ -3, -1, 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88,
+ -1, 133, 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1,
+ 131, -1, 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25,
+ 145, -3, -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100,
+ 40, -1, 130, 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113,
+ -1, 85, 7, -7, -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38,
+ -1, 98, 53, -5, -1, 129, -1, 8, 128, -3, -1, 22, 97, -1, 6,
+ 96, -13, -9, -5, -3, -1, 83, 68, 37, -1, 82, 5, -1, 21, 81,
+ -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -19, -11,
+ -5, -1, 65, -1, 4, 64, -3, -1, 35, 50, 19, -3, -1, 49, 3,
+ -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
+ 0
+};
+
+static short tab15[] = {
+ -495, -445, -355, -263, -183, -115, -77, -43, -27, -13, -7, -3, -1,
+ 255, 239,
+ -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237,
+ 191, -1, 251, -1, 206, 236, -7, -3, -1, 221, 175, -1, 250, 190, -3,
+ -1, 235, 205, -1, 220, 159, -15, -7, -3, -1, 249, 234, -1, 189, 219,
+ -3, -1, 143, 248, -1, 204, 158, -7, -3, -1, 233, 127, -1, 247, 173,
+ -3, -1, 218, 188, -1, 111, -1, 174, 15, -19, -11, -3, -1, 203, 246,
+ -3, -1, 142, 232, -1, 95, 157, -3, -1, 245, 126, -1, 231, 172, -9,
+ -3, -1, 202, 187, -3, -1, 217, 141, 79, -3, -1, 244, 63, -1, 243,
+ 216, -33, -17, -9, -3, -1, 230, 47, -1, 242, -1, 110, 240, -3, -1,
+ 31, 241, -1, 156, 201, -7, -3, -1, 94, 171, -1, 186, 229, -3, -1,
+ 125, 215, -1, 78, 228, -15, -7, -3, -1, 140, 200, -1, 62, 109, -3,
+ -1, 214, 227, -1, 155, 185, -7, -3, -1, 46, 170, -1, 226, 30, -5,
+ -1, 225, -1, 14, 224, -1, 93, 213, -45, -25, -13, -7, -3, -1, 124,
+ 199, -1, 77, 139, -1, 212, -1, 184, 154, -7, -3, -1, 169, 108, -1,
+ 198, 61, -1, 211, 210, -9, -5, -3, -1, 45, 13, 29, -1, 123, 183,
+ -5, -1, 209, -1, 92, 208, -1, 197, 138, -17, -7, -3, -1, 168, 76,
+ -1, 196, 107, -5, -1, 182, -1, 153, 12, -1, 60, 195, -9, -3, -1,
+ 122, 167, -1, 166, -1, 192, 11, -1, 194, -1, 44, 91, -55, -29, -15,
+ -7, -3, -1, 181, 28, -1, 137, 152, -3, -1, 193, 75, -1, 180, 106,
+ -5, -3, -1, 59, 121, 179, -3, -1, 151, 136, -1, 43, 90, -11, -5,
+ -1, 178, -1, 165, 27, -1, 177, -1, 176, 105, -7, -3, -1, 150, 74,
+ -1, 164, 120, -3, -1, 135, 58, 163, -17, -7, -3, -1, 89, 149, -1,
+ 42, 162, -3, -1, 26, 161, -3, -1, 10, 160, 104, -7, -3, -1, 134,
+ 73, -1, 148, 57, -5, -1, 147, -1, 119, 9, -1, 88, 133, -53, -29,
+ -13, -7, -3, -1, 41, 103, -1, 118, 146, -1, 145, -1, 25, 144, -7,
+ -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 71, -7,
+ -3, -1, 40, 130, -1, 24, 129, -7, -3, -1, 116, 8, -1, 128, 86,
+ -3, -1, 101, 55, -1, 115, 70, -17, -7, -3, -1, 39, 114, -1, 100,
+ 23, -3, -1, 85, 113, -3, -1, 7, 112, 54, -7, -3, -1, 99, 69,
+ -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, 96, 53, -33, -19, -9,
+ -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, 21, 81, -3, -1,
+ 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, -1, 20,
+ 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48,
+ 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16,
+ 0
+};
+
+static short tab16[] = {
+ -509, -503, -461, -323, -103, -37, -27, -15, -7, -3, -1, 239, 254, -1,
+ 223,
+ 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3,
+ -1, 249, 248, 143, -7, -3, -1, 127, 247, -1, 111, 246, 255, -9, -5,
+ -3, -1, 95, 245, 79, -1, 244, 243, -53, -1, 240, -1, 63, -29, -19,
+ -13, -7, -5, -1, 206, -1, 236, 221, 222, -1, 233, -1, 234, 217, -1,
+ 238, -1, 237, 235, -3, -1, 190, 205, -3, -1, 220, 219, 174, -11, -5,
+ -1, 204, -1, 173, 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125,
+ 94, 189, 242, -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13,
+ -5, -1, 158, -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3,
+ -1, 187, 141, -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186,
+ -1, 229, 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1,
+ 214, 155, -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169,
+ -5, -1, 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213,
+ -3, -1, 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154,
+ 108, -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1,
+ 153, 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1,
+ 192, -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45,
+ -1, 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107,
+ -1, 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12,
+ -1, 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1,
+ 178, 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74,
+ 164, -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33,
+ -19, -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3,
+ -1, 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147,
+ -1, 88, 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1,
+ 145, -1, 144, 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3,
+ -1, 102, 40, 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1,
+ 8, 86, 55, -9, -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3,
+ -1, 100, 85, 7, 23, -23, -13, -5, -1, 113, -1, 112, 54, -3, -1,
+ 99, 69, -1, 84, 38, -3, -1, 98, 22, -1, 97, -1, 6, 96, -9,
+ -5, -1, 83, -1, 53, 68, -1, 37, 82, -1, 81, -1, 21, 5, -33,
+ -23, -13, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20,
+ -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, 19, 49, -3, -1,
+ 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
+ 0
+};
+
+static short tab24[] = {
+ -451, -117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1,
+ 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9,
+ -5, -3, -1, 143, 127, 247, -1, 111, 246, -3, -1, 95, 245, -1, 79,
+ 244, -71, -7, -3, -1, 63, 243, -1, 47, 242, -5, -1, 241, -1, 31,
+ 240, -25, -9, -1, 15, -3, -1, 238, 222, -1, 237, 206, -7, -3, -1,
+ 236, 221, -1, 190, 235, -3, -1, 205, 220, -1, 174, 234, -15, -7, -3,
+ -1, 189, 219, -1, 204, 158, -3, -1, 233, 173, -1, 218, 188, -7, -3,
+ -1, 203, 142, -1, 232, 157, -3, -1, 217, 126, -1, 231, 172, 255, -235,
+ -143, -77, -45, -25, -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3,
+ -1, 14, 224, 13, 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9,
+ -5, -1, 229, -1, 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1,
+ 78, 46, 62, -15, -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185,
+ 170, -1, 226, 30, -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199,
+ 77, -1, 139, 184, -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3,
+ -1, 198, 61, -1, 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3,
+ -1, 209, 92, -1, 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196,
+ -3, -1, 107, 182, -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1,
+ 167, 44, -3, -1, 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1,
+ 137, 152, -1, 193, 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10,
+ 26, -5, -1, 180, -1, 106, 166, -3, -1, 121, 151, -3, -1, 160, 9,
+ 144, -9, -3, -1, 179, 136, -3, -1, 43, 90, 178, -7, -3, -1, 165,
+ 27, -1, 177, 105, -1, 150, 164, -17, -9, -5, -3, -1, 74, 120, 135,
+ -1, 58, 163, -3, -1, 89, 149, -1, 42, 162, -7, -3, -1, 161, 104,
+ -1, 134, 119, -3, -1, 73, 148, -1, 57, 147, -63, -31, -15, -7, -3,
+ -1, 88, 133, -1, 41, 103, -3, -1, 118, 146, -1, 25, 145, -7, -3,
+ -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 40, -17, -7,
+ -3, -1, 130, 24, -1, 71, 116, -5, -1, 129, -1, 8, 128, -1, 86,
+ 101, -7, -5, -1, 23, -1, 7, 112, 115, -3, -1, 55, 39, 114, -15,
+ -7, -3, -1, 70, 100, -1, 85, 113, -3, -1, 54, 99, -1, 69, 84,
+ -7, -3, -1, 38, 98, -1, 22, 97, -5, -3, -1, 6, 96, 53, -1,
+ 83, 68, -51, -37, -23, -15, -9, -3, -1, 37, 82, -1, 21, -1, 5,
+ 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, 51, 20, -9, -5,
+ -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, -3, -1,
+ 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16,
+ 0
+};
+
+static short tab_c0[] = {
+ -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5,
+ 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8,
+ 0
+};
+
+static short tab_c1[] = {
+ -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9,
+ 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1,
+ 0
+};
+
+static struct newhuff ht[] = {
+ { /* 0 */ 0, tab0},
+ { /* 2 */ 0, tab1},
+ { /* 3 */ 0, tab2},
+ { /* 3 */ 0, tab3},
+ { /* 0 */ 0, tab0},
+ { /* 4 */ 0, tab5},
+ { /* 4 */ 0, tab6},
+ { /* 6 */ 0, tab7},
+ { /* 6 */ 0, tab8},
+ { /* 6 */ 0, tab9},
+ { /* 8 */ 0, tab10},
+ { /* 8 */ 0, tab11},
+ { /* 8 */ 0, tab12},
+ { /* 16 */ 0, tab13},
+ { /* 0 */ 0, tab0},
+ { /* 16 */ 0, tab15},
+
+ { /* 16 */ 1, tab16},
+ { /* 16 */ 2, tab16},
+ { /* 16 */ 3, tab16},
+ { /* 16 */ 4, tab16},
+ { /* 16 */ 6, tab16},
+ { /* 16 */ 8, tab16},
+ { /* 16 */ 10, tab16},
+ { /* 16 */ 13, tab16},
+ { /* 16 */ 4, tab24},
+ { /* 16 */ 5, tab24},
+ { /* 16 */ 6, tab24},
+ { /* 16 */ 7, tab24},
+ { /* 16 */ 8, tab24},
+ { /* 16 */ 9, tab24},
+ { /* 16 */ 11, tab24},
+ { /* 16 */ 13, tab24}
+};
+
+static struct newhuff htc[] = {
+ { /* 1 , 1 , */ 0, tab_c0},
+ { /* 1 , 1 , */ 0, tab_c1}
+};
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,637 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1999, 2001, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3.c
+ * Description: Code for accessing ID3 tags.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Fri Feb 5 23:55:13 1999
+ *
+ * $Id: id3.c,v 1.6 2004/07/20 21:47:22 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <glib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "xmms-id3.h"
+#include "id3_header.h"
+
+
+/*
+**
+** Functions for accessing the ID3 tag using a memory pointer.
+**
+*/
+
+/*
+ * Function id3_seek_mem (id3, offset)
+ *
+ * Seek `offset' bytes forward in the indicated ID3-tag. Return 0
+ * upon success, or -1 if an error occured.
+ *
+ */
+static int
+id3_seek_mem(struct id3_tag *id3, int offset)
+{
+ if (id3->id3_pos + offset > id3->id3_tagsize || id3->id3_pos + offset < 0) {
+ id3_error(id3, "seeking beyond tag boundary");
+ return -1;
+ }
+ id3->s.me.id3_ptr = (char *) id3->s.me.id3_ptr + offset;
+ id3->id3_pos += offset;
+
+ return 0;
+}
+
+
+/*
+ * Function id3_read_mem (id3, buf, size)
+ *
+ * Read `size' bytes from indicated ID3-tag. If `buf' is non-NULL,
+ * read into that buffer. Return a pointer to the data which was
+ * read, or NULL upon error.
+ *
+ */
+static void *
+id3_read_mem(struct id3_tag *id3, void *buf, int size)
+{
+ void *ret = id3->s.me.id3_ptr;
+
+ /*
+ * Check boundary.
+ */
+ if (id3->id3_pos + size > id3->id3_tagsize) {
+ return NULL;
+ }
+
+ /*
+ * If buffer is non-NULL, we have to copy the data.
+ */
+ if (buf != NULL) {
+ if (size > ID3_FD_BUFSIZE)
+ return NULL;
+ memcpy(buf, id3->s.me.id3_ptr, size);
+ }
+
+ /*
+ * Update memory pointer.
+ */
+ id3->s.me.id3_ptr = (char *) id3->s.me.id3_ptr + size;
+ id3->id3_pos += size;
+
+ return ret;
+}
+
+
+/*
+**
+** Functions for accessing the ID3 tag using a file descriptor.
+**
+*/
+
+/*
+ * Function id3_seek_fd (id3, offset)
+ *
+ * Seek `offset' bytes forward in the indicated ID3-tag. Return 0
+ * upon success, or -1 if an error occured.
+ *
+ */
+static int
+id3_seek_fd(struct id3_tag *id3, int offset)
+{
+ /*
+ * Check boundary.
+ */
+ if (id3->id3_pos + offset > id3->id3_tagsize || id3->id3_pos + offset < 0)
+ return -1;
+
+ if (lseek(id3->s.fd.id3_fd, offset, SEEK_CUR) == -1) {
+ id3_error(id3, "seeking beyond tag boundary");
+ return -1;
+ }
+ id3->id3_pos += offset;
+
+ return 0;
+}
+
+
+/*
+ * Function id3_read_fd (id3, buf, size)
+ *
+ * Read `size' bytes from indicated ID3-tag. If `buf' is non-NULL,
+ * read into that buffer. Return a pointer to the data which was
+ * read, or NULL upon error.
+ *
+ */
+static void *
+id3_read_fd(struct id3_tag *id3, void *buf, int size)
+{
+ int done = 0;
+
+ /*
+ * Check boundary.
+ */
+ if (id3->id3_pos + size > id3->id3_tagsize) {
+ return NULL;
+ }
+
+ /*
+ * If buffer is NULL, we use the default buffer.
+ */
+ if (buf == NULL) {
+ if (size > ID3_FD_BUFSIZE)
+ return NULL;
+ buf = id3->s.fd.id3_buf;
+ }
+
+ /*
+ * Read until we have slurped as much data as we wanted.
+ */
+ while (done < size) {
+ char *buffer = (char *) buf + done;
+ int ret;
+
+ /*
+ * Try reading from file.
+ */
+ ret = read(id3->s.fd.id3_fd, buffer, size);
+ if (ret <= 0) {
+ id3_error(id3, "read(2) failed");
+ return NULL;
+ }
+
+ id3->id3_pos += ret;
+ done += ret;
+ }
+
+ return buf;
+}
+
+
+/*
+**
+** Functions for accessing the ID3 tag using a file pointer.
+**
+*/
+
+/*
+ * Function id3_seek_fp (id3, offset)
+ *
+ * Seek `offset' bytes forward in the indicated ID3-tag. Return 0
+ * upon success, or -1 if an error occured.
+ *
+ */
+static int
+id3_seek_fp(struct id3_tag *id3, int offset)
+{
+ /*
+ * Check boundary.
+ */
+ if (id3->id3_pos + offset > id3->id3_tagsize || id3->id3_pos + offset < 0)
+ return -1;
+
+ if (offset > 0) {
+ /*
+ * If offset is positive, we use vfs_fread() instead of vfs_fseek(). This
+ * is more robust with respect to streams.
+ */
+ char buf[64];
+ int r, remain = offset;
+
+ while (remain > 0) {
+ int size = MIN(64, remain);
+ r = vfs_fread(buf, 1, size, id3->s.fp.id3_fp);
+ if (r == 0) {
+ id3_error(id3, "vfs_fread() failed");
+ return -1;
+ }
+ remain -= r;
+ }
+ }
+ else {
+ /*
+ * If offset is negative, we ahve to use vfs_fseek(). Let us hope
+ * that it works.
+ */
+ if (vfs_fseek(id3->s.fp.id3_fp, offset, SEEK_CUR) == -1) {
+ id3_error(id3, "seeking beyond tag boundary");
+ return -1;
+ }
+ }
+ id3->id3_pos += offset;
+
+ return 0;
+}
+
+
+/*
+ * Function id3_read_fp (id3, buf, size)
+ *
+ * Read `size' bytes from indicated ID3-tag. If `buf' is non-NULL,
+ * read into that buffer. Return a pointer to the data which was
+ * read, or NULL upon error.
+ *
+ */
+static void *
+id3_read_fp(struct id3_tag *id3, void *buf, int size)
+{
+ int ret;
+
+ /*
+ * Check boundary.
+ */
+ if (id3->id3_pos + size > id3->id3_tagsize) {
+ size = id3->id3_tagsize - id3->id3_pos;
+ }
+
+ /*
+ * If buffer is NULL, we use the default buffer.
+ */
+ if (buf == NULL) {
+ if (size > ID3_FD_BUFSIZE)
+ return NULL;
+ buf = id3->s.fd.id3_buf;
+ }
+
+ /*
+ * Try reading from file.
+ */
+ ret = vfs_fread(buf, 1, size, id3->s.fp.id3_fp);
+ if (ret != size) {
+ id3_error(id3, "vfs_fread() failed");
+ return NULL;
+ }
+
+ id3->id3_pos += ret;
+
+ return buf;
+}
+
+
+
+
+/*
+ * Function id3_open_mem (ptr, flags)
+ *
+ * Open an ID3 tag using a memory pointer. Return a pointer to a
+ * structure describing the ID3 tag, or NULL if an error occured.
+ *
+ */
+struct id3_tag *
+id3_open_mem(void *ptr, int flags)
+{
+ struct id3_tag *id3;
+
+ /*
+ * Allocate ID3 structure.
+ */
+ id3 = g_malloc0(sizeof(struct id3_tag));
+
+ /*
+ * Initialize access pointers.
+ */
+ id3->id3_seek = id3_seek_mem;
+ id3->id3_read = id3_read_mem;
+
+ id3->id3_oflags = flags;
+ id3->id3_type = ID3_TYPE_MEM;
+ id3->id3_pos = 0;
+ id3->s.me.id3_ptr = ptr;
+
+ /*
+ * Try reading ID3 tag.
+ */
+ if (id3_read_tag(id3) == -1) {
+ if (~flags & ID3_OPENF_CREATE)
+ goto Return_NULL;
+ id3_init_tag(id3);
+ }
+
+ return id3;
+
+ Return_NULL:
+ g_free(id3);
+ return NULL;
+}
+
+
+/*
+ * Function id3_open_fd (fd, flags)
+ *
+ * Open an ID3 tag using a file descriptor. Return a pointer to a
+ * structure describing the ID3 tag, or NULL if an error occured.
+ *
+ */
+struct id3_tag *
+id3_open_fd(int fd, int flags)
+{
+ struct id3_tag *id3;
+
+ /*
+ * Allocate ID3 structure.
+ */
+ id3 = g_malloc0(sizeof(struct id3_tag));
+
+ /*
+ * Initialize access pointers.
+ */
+ id3->id3_seek = id3_seek_fd;
+ id3->id3_read = id3_read_fd;
+
+ id3->id3_oflags = flags;
+ id3->id3_type = ID3_TYPE_FD;
+ id3->id3_pos = 0;
+ id3->s.fd.id3_fd = fd;
+
+ /*
+ * Allocate buffer to hold read data.
+ */
+ id3->s.fd.id3_buf = g_malloc(ID3_FD_BUFSIZE);
+
+ /*
+ * Try reading ID3 tag.
+ */
+ if (id3_read_tag(id3) == -1) {
+ if (~flags & ID3_OPENF_CREATE)
+ goto Return_NULL;
+ id3_init_tag(id3);
+ }
+
+ return id3;
+
+ /*
+ * Cleanup code.
+ */
+ Return_NULL:
+ g_free(id3->s.fd.id3_buf);
+ g_free(id3);
+ return NULL;
+}
+
+
+/*
+ * Function id3_open_fp (fp, flags)
+ *
+ * Open an ID3 tag using a file pointer. Return a pointer to a
+ * structure describing the ID3 tag, or NULL if an error occured.
+ *
+ */
+struct id3_tag *
+id3_open_fp(VFSFile * fp, int flags)
+{
+ struct id3_tag *id3;
+
+ /*
+ * Allocate ID3 structure.
+ */
+ id3 = g_malloc0(sizeof(struct id3_tag));
+
+ /*
+ * Initialize access pointers.
+ */
+ id3->id3_seek = id3_seek_fp;
+ id3->id3_read = id3_read_fp;
+
+ id3->id3_oflags = flags;
+ id3->id3_type = ID3_TYPE_FP;
+ id3->id3_pos = 0;
+ id3->s.fp.id3_fp = fp;
+
+ /*
+ * Allocate buffer to hold read data.
+ */
+ id3->s.fp.id3_buf = g_malloc(ID3_FD_BUFSIZE);
+
+ /*
+ * Try reading ID3 tag.
+ */
+ if (id3_read_tag(id3) == -1) {
+ if (~flags & ID3_OPENF_CREATE)
+ goto Return_NULL;
+ id3_init_tag(id3);
+ }
+
+
+ return id3;
+
+ /*
+ * Cleanup code.
+ */
+ Return_NULL:
+ g_free(id3->s.fp.id3_buf);
+ g_free(id3);
+ return NULL;
+}
+
+
+/*
+ * Function id3_close (id3)
+ *
+ * Free all resources assoicated with the ID3 tag.
+ *
+ */
+int
+id3_close(struct id3_tag *id3)
+{
+ int ret = 0;
+
+ switch (id3->id3_type) {
+ case ID3_TYPE_MEM:
+ break;
+ case ID3_TYPE_FD:
+ g_free(id3->s.fd.id3_buf);
+ break;
+ case ID3_TYPE_FP:
+ g_free(id3->s.fp.id3_buf);
+ break;
+ case ID3_TYPE_NONE:
+ id3_error(id3, "unknown ID3 type");
+ ret = -1;
+ }
+
+ id3_destroy_frames(id3);
+
+ g_free(id3);
+
+ return ret;
+}
+
+
+/*
+ * Function id3_tell (id3)
+ *
+ * Return the current position in ID3 tag. This will always be
+ * directly after the tag.
+ *
+ */
+#if 0
+int
+id3_tell(struct id3_tag *id3)
+{
+ if (id3->id3_newtag) {
+ return 0;
+ }
+ else {
+ return id3->id3_tagsize + 3 + sizeof(id3_taghdr_t);
+ }
+}
+#endif
+
+
+/*
+ * Function id3_alter_file (id3)
+ *
+ * When altering a file, some ID3 tags should be discarded. As the ID3
+ * library has no means of knowing when a file has been altered
+ * outside of the library, this function must be called manually
+ * whenever the file is altered.
+ *
+ */
+int
+id3_alter_file(struct id3_tag *id3)
+{
+ /*
+ * List of frame classes that should be discarded whenever the
+ * file is altered.
+ */
+ static guint32 discard_list[] = {
+ ID3_ETCO, ID3_EQUA, ID3_MLLT, ID3_POSS, ID3_SYLT,
+ ID3_SYTC, ID3_RVAD, ID3_TENC, ID3_TLEN, ID3_TSIZ,
+ 0
+ };
+ struct id3_frame *fr;
+ guint32 id, i = 0;
+
+ /*
+ * Go through list of frame types that should be discarded.
+ */
+ while ((id = discard_list[i++]) != 0) {
+ /*
+ * Discard all frames of that type.
+ */
+ while ((fr = id3_get_frame(id3, id, 1))) {
+ id3_delete_frame(fr);
+ }
+ }
+
+ return 0;
+}
+
+
+/*
+ * Function safe_write (fd, buf, size)
+ *
+ * Like write(2), except that the whole buffer will be written.
+ *
+ */
+static int
+safe_write(int fd, void *buf, int size)
+{
+ int remaining = size;
+ char *ptr = buf;
+ int r;
+
+ while (remaining > 0) {
+ if ((r = write(fd, ptr, remaining)) == -1)
+ return -1;
+ remaining -= r;
+ ptr += r;
+ }
+
+ return 0;
+}
+
+
+/*
+ * Function id3_write_tag (id3, fd)
+ *
+ * Wrtite the ID3 tag to the indicated file descriptor. Return 0
+ * upon success, or -1 if an error occured.
+ *
+ */
+int
+id3_write_tag(struct id3_tag *id3, int fd)
+{
+ struct id3_frame *fr;
+ GList *node;
+ int size = 0;
+ char buf[ID3_TAGHDR_SIZE];
+
+ /*
+ * Calculate size of ID3 tag.
+ */
+ for (node = id3->id3_frame; node != NULL; node = node->next) {
+ fr = node->data;
+ size += fr->fr_size + ID3_FRAMEHDR_SIZE;
+ }
+
+ /*
+ * Write tag header.
+ */
+ buf[0] = id3->id3_version;
+ buf[1] = id3->id3_revision;
+ buf[2] = id3->id3_flags;
+ ID3_SET_SIZE28(size, buf[3], buf[4], buf[5], buf[6]);
+
+ if (safe_write(fd, "ID3", 3) == -1)
+ return -1;
+ if (safe_write(fd, buf, ID3_TAGHDR_SIZE) == -1)
+ return -1;
+
+ /*
+ * TODO: Write extended header.
+ */
+#if 0
+ if (id3->id3_flags & ID3_THFLAG_EXT) {
+ id3_exthdr_t exthdr;
+ }
+#endif
+
+ for (node = id3->id3_frame; node != NULL; node = node->next) {
+ char fhdr[ID3_FRAMEHDR_SIZE];
+
+ fr = node->data;
+
+ /*
+ * TODO: Support compressed headers, encoded
+ * headers, and grouping info.
+ */
+ /* fhdr.fh_id = fr->fr_desc ? g_htonl(fr->fr_desc->fd_id) : 0; */
+ fhdr[3] = (fr->fr_size >> 24) & 0xff;
+ fhdr[4] = (fr->fr_size >> 16) & 0xff;
+ fhdr[5] = (fr->fr_size >> 8) & 0xff;
+ fhdr[6] = fr->fr_size & 0xff;
+ fhdr[7] = (fr->fr_flags >> 8) & 0xff;
+ fhdr[8] = fr->fr_flags & 0xff;
+
+ if (safe_write(fd, fhdr, sizeof(fhdr)) == -1)
+ return -1;
+
+ if (safe_write(fd, fr->fr_data, fr->fr_size) == -1)
+ return -1;
+ }
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,765 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1999-2000, 2001, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3_frame.c
+ * Description: Code for handling ID3 frames.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Fri Feb 5 23:47:08 1999
+ *
+ * $Id: id3_frame.c,v 1.5 2004/07/20 21:47:22 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#include "config.h"
+
+#ifdef HAVE_LIBZ
+#include <zlib.h>
+#endif
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "xmms-id3.h"
+#include "id3_header.h"
+
+static void *id3_frame_get_dataptr(struct id3_frame *frame);
+static int id3_frame_get_size(struct id3_frame *frame);
+static int id3_read_frame_v22(struct id3_tag *id3);
+
+
+/*
+ * Description of all valid ID3v2 frames.
+ */
+static struct id3_framedesc framedesc[] = {
+ {ID3_AENC, "AENC", "Audio encryption"},
+ {ID3_APIC, "APIC", "Attached picture"},
+ {ID3_ASPI, "ASPI", "Audio seek point index"}, /* v4 only */
+
+ {ID3_COMM, "COMM", "Comments"},
+ {ID3_COMR, "COMR", "Commercial frame"},
+
+ {ID3_ENCR, "ENCR", "Encryption method registration"},
+ {ID3_EQUA, "EQUA", "Equalization"}, /* v3 only */
+ {ID3_EQU2, "EQU2", "Equalization (2)"}, /* v4 only */
+ {ID3_ETCO, "ETCO", "Event timing codes"},
+
+ {ID3_GEOB, "GEOB", "General encapsulated object"},
+ {ID3_GRID, "GRID", "Group identification registration"},
+
+ {ID3_IPLS, "IPLS", "Involved people list"}, /* v3 only */
+
+ {ID3_LINK, "LINK", "Linked information"},
+
+ {ID3_MCDI, "MCDI", "Music CD identifier"},
+ {ID3_MLLT, "MLLT", "MPEG location lookup table"},
+
+ {ID3_OWNE, "OWNE", "Ownership frame"},
+
+ {ID3_PRIV, "PRIV", "Private frame"},
+ {ID3_PCNT, "PCNT", "Play counter"},
+ {ID3_POPM, "POPM", "Popularimeter"},
+ {ID3_POSS, "POSS", "Position synchronisation frame"},
+
+ {ID3_RBUF, "RBUF", "Recommended buffer size"},
+ {ID3_RVAD, "RVAD", "Relative volume adjustment"}, /* v3 only */
+ {ID3_RVA2, "RVA2", "RVA2 Relative volume adjustment (2)"}, /* v4 only */
+ {ID3_RVRB, "RVRB", "Reverb"},
+
+ {ID3_SEEK, "SEEK", "Seek frame"}, /* v4 only */
+ {ID3_SIGN, "SIGN", "Signature frame"}, /* v4 only */
+ {ID3_SYLT, "SYLT", "Synchronized lyric/text"},
+ {ID3_SYTC, "SYTC", "Synchronized tempo codes"},
+
+ {ID3_TALB, "TALB", "Album/Movie/Show title"},
+ {ID3_TBPM, "TBPM", "BPM (beats per minute)"},
+ {ID3_TCOM, "TCOM", "Composer"},
+ {ID3_TCON, "TCON", "Content type"},
+ {ID3_TCOP, "TCOP", "Copyright message"},
+ {ID3_TDAT, "TDAT", "Date"}, /* v3 only */
+ {ID3_TDEN, "TDEN", "Encoding time"}, /* v4 only */
+ {ID3_TDLY, "TDLY", "Playlist delay"},
+ {ID3_TDOR, "TDOR", "Original release time"}, /* v4 only */
+ {ID3_TDRC, "TDRC", "Recording time"}, /* v4 only */
+ {ID3_TDRL, "TDRL", "Release time"}, /* v4 only */
+ {ID3_TDTG, "TDTG", "Tagging time"}, /* v4 only */
+
+ {ID3_TENC, "TENC", "Encoded by"},
+ {ID3_TEXT, "TEXT", "Lyricist/Text writer"},
+ {ID3_TFLT, "TFLT", "File type"},
+ {ID3_TIME, "TIME", "Time"}, /* v3 only */
+ {ID3_TIPL, "TIPL", "Involved people list"}, /* v4 only */
+ {ID3_TIT1, "TIT1", "Content group description"},
+ {ID3_TIT2, "TIT2", "Title/songname/content description"},
+ {ID3_TIT3, "TIT3", "Subtitle/Description refinement"},
+ {ID3_TKEY, "TKEY", "Initial key"},
+ {ID3_TLAN, "TLAN", "Language(s)"},
+ {ID3_TLEN, "TLEN", "Length"},
+ {ID3_TMCL, "TMCL", "Musician credits list"}, /* v4 only */
+ {ID3_TMOO, "TMOO", "Mood"}, /* v4 only */
+ {ID3_TMED, "TMED", "Media type"},
+ {ID3_TOAL, "TOAL", "Original album/movie/show title"},
+ {ID3_TOFN, "TOFN", "Original filename"},
+ {ID3_TOLY, "TOLY", "Original lyricist(s)/text writer(s)"},
+ {ID3_TOPE, "TOPE", "Original artist(s)/performer(s)"},
+ {ID3_TORY, "TORY", "Original release year"}, /* v3 only */
+ {ID3_TOWN, "TOWN", "File owner/licensee"},
+ {ID3_TPE1, "TPE1", "Lead performer(s)/Soloist(s)"},
+ {ID3_TPE2, "TPE2", "Band/orchestra/accompaniment"},
+ {ID3_TPE3, "TPE3", "Conductor/performer refinement"},
+ {ID3_TPE4, "TPE4", "Interpreted, remixed, or otherwise modified by"},
+ {ID3_TPOS, "TPOS", "Part of a set"},
+ {ID3_TPRO, "TPRO", "Produced notice"}, /* v4 only */
+ {ID3_TPUB, "TPUB", "Publisher"},
+ {ID3_TRCK, "TRCK", "Track number/Position in set"},
+ {ID3_TRDA, "TRDA", "Recording dates"}, /* v3 only */
+ {ID3_TRSN, "TRSN", "Internet radio station name"},
+ {ID3_TRSO, "TRSO", "Internet radio station owner"},
+ {ID3_TSIZ, "TSIZ", "Size"}, /* v3 only */
+ {ID3_TSOA, "TSOA", "Album sort order"}, /* v4 only */
+ {ID3_TSOP, "TSOP", "Performer sort order"}, /* v4 only */
+ {ID3_TSOT, "TSOT", "Title sort order"}, /* v4 only */
+
+ {ID3_TSRC, "TSRC", "ISRC (international standard recording code)"},
+ {ID3_TSSE, "TSSE", "Software/Hardware and settings used for encoding"},
+ {ID3_TSST, "TSST", "Set subtitle"}, /* v4 only */
+ {ID3_TYER, "TYER", "Year"}, /* v3 only */
+ {ID3_TXXX, "TXXX", "User defined text information frame"},
+
+ {ID3_UFID, "UFID", "Unique file identifier"},
+ {ID3_USER, "USER", "Terms of use"},
+ {ID3_USLT, "USLT", "Unsychronized lyric/text transcription"},
+
+ {ID3_WCOM, "WCOM", "Commercial information"},
+ {ID3_WCOP, "WCOP", "Copyright/Legal information"},
+ {ID3_WOAF, "WOAF", "Official audio file webpage"},
+ {ID3_WOAR, "WOAR", "Official artist/performer webpage"},
+ {ID3_WOAS, "WOAS", "Official audio source webpage"},
+ {ID3_WORS, "WORS", "Official internet radio station homepage"},
+ {ID3_WPAY, "WPAY", "Payment"},
+ {ID3_WPUB, "WPUB", "Publishers official webpage"},
+ {ID3_WXXX, "WXXX", "User defined URL link frame"},
+};
+
+struct id3_framedesc22 {
+ guint32 fd_v22, fd_v24;
+};
+
+static struct id3_framedesc22 framedesc22[] = {
+ {ID3_BUF, ID3_RBUF}, /* Recommended buffer size */
+
+ {ID3_CNT, ID3_PCNT}, /* Play counter */
+ {ID3_COM, ID3_COMM}, /* Comments */
+ {ID3_CRA, ID3_AENC}, /* Audio encryption */
+ {ID3_CRM, 0}, /* Encrypted meta frame */
+
+ {ID3_ETC, ID3_ETCO}, /* Event timing codes */
+ /* Could be converted to EQU2 */
+ {ID3_EQU, 0}, /* Equalization */
+
+ {ID3_GEO, ID3_GEOB}, /* General encapsulated object */
+
+ /* Would need conversion to TIPL */
+ {ID3_IPL, 0}, /* Involved people list */
+
+ /* This is so fragile it's not worth trying to save */
+ {ID3_LNK, 0}, /* Linked information */
+
+ {ID3_MCI, ID3_MCDI}, /* Music CD Identifier */
+ {ID3_MLL, ID3_MLLT}, /* MPEG location lookup table */
+
+ /* Would need to convert header for APIC */
+ {ID3_PIC, 0}, /* Attached picture */
+ {ID3_POP, ID3_POPM}, /* Popularimeter */
+
+ {ID3_REV, ID3_RVRB}, /* Reverb */
+ /* Could be converted to RVA2 */
+ {ID3_RVA, 0}, /* Relative volume adjustment */
+
+ {ID3_SLT, ID3_SYLT}, /* Synchronized lyric/text */
+ {ID3_STC, ID3_SYTC}, /* Synced tempo codes */
+
+ {ID3_TAL, ID3_TALB}, /* Album/Movie/Show title */
+ {ID3_TBP, ID3_TBPM}, /* BPM (Beats Per Minute) */
+ {ID3_TCM, ID3_TCOM}, /* Composer */
+ {ID3_TCO, ID3_TCON}, /* Content type */
+ {ID3_TCR, ID3_TCOP}, /* Copyright message */
+ /* This could be incorporated into TDRC */
+ {ID3_TDA, 0}, /* Date */
+ {ID3_TDY, ID3_TDLY}, /* Playlist delay */
+ {ID3_TEN, ID3_TENC}, /* Encoded by */
+ {ID3_TFT, ID3_TFLT}, /* File type */
+ /* This could be incorporated into TDRC */
+ {ID3_TIM, 0}, /* Time */
+ {ID3_TKE, ID3_TKEY}, /* Initial key */
+ {ID3_TLA, ID3_TLAN}, /* Language(s) */
+ {ID3_TLE, ID3_TLEN}, /* Length */
+ {ID3_TMT, ID3_TMED}, /* Media type */
+ {ID3_TOA, ID3_TOPE}, /* Original artist(s)/performer(s) */
+ {ID3_TOF, ID3_TOFN}, /* Original filename */
+ {ID3_TOL, ID3_TOLY}, /* Original Lyricist(s)/text writer(s) */
+ /*
+ * The docs says that original release year should be in
+ * milliseconds! Hopefully that is a typo.
+ */
+ {ID3_TOR, ID3_TDOR}, /* Original release year */
+ {ID3_TOT, ID3_TOAL}, /* Original album/Movie/Show title */
+ {ID3_TP1, ID3_TPE1}, /* Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group */
+ {ID3_TP2, ID3_TPE2}, /* Band/Orchestra/Accompaniment */
+ {ID3_TP3, ID3_TPE3}, /* Conductor/Performer refinement */
+ {ID3_TP4, ID3_TPE4}, /* Interpreted, remixed, or otherwise modified by */
+ {ID3_TPA, ID3_TPOS}, /* Part of a set */
+ {ID3_TPB, ID3_TPUB}, /* Publisher */
+ {ID3_TRC, ID3_TSRC}, /* ISRC (International Standard Recording Code) */
+ {ID3_TRD, 0}, /* Recording dates */
+ {ID3_TRK, ID3_TRCK}, /* Track number/Position in set */
+ {ID3_TSI, 0}, /* Size */
+ {ID3_TSS, ID3_TSSE}, /* Software/hardware and settings used for encoding */
+ {ID3_TT1, ID3_TIT1}, /* Content group description */
+ {ID3_TT2, ID3_TIT2}, /* Title/Songname/Content description */
+ {ID3_TT3, ID3_TIT3}, /* Subtitle/Description refinement */
+ {ID3_TXT, ID3_TEXT}, /* Lyricist/text writer */
+ {ID3_TXX, ID3_TXXX}, /* User defined text information frame */
+ {ID3_TYE, ID3_TDRC}, /* Year */
+
+ {ID3_UFI, ID3_UFID}, /* Unique file identifier */
+ {ID3_ULT, ID3_USLT}, /* Unsychronized lyric/text transcription */
+
+ {ID3_WAF, ID3_WOAF}, /* Official audio file webpage */
+ {ID3_WAR, ID3_WOAR}, /* Official artist/performer webpage */
+ {ID3_WAS, ID3_WOAS}, /* Official audio source webpage */
+ {ID3_WCM, ID3_WCOM}, /* Commercial information */
+ {ID3_WCP, ID3_WCOP}, /* Copyright/Legal information */
+ {ID3_WPB, ID3_WPUB}, /* Publishers official webpage */
+ {ID3_WXX, ID3_WXXX}, /* User defined URL link frame */
+};
+
+static struct id3_framedesc *
+find_frame_description(guint32 id)
+{
+ int i;
+ for (i = 0; i < sizeof(framedesc) / sizeof(struct id3_framedesc); i++)
+ if (framedesc[i].fd_id == id)
+ return &framedesc[i];
+ return NULL;
+}
+
+
+/*
+ * Function id3_read_frame (id3)
+ *
+ * Read next frame from the indicated ID3 tag. Return 0 upon
+ * success, or -1 if an error occured.
+ *
+ */
+int
+id3_read_frame(struct id3_tag *id3)
+{
+ struct id3_frame *frame;
+ guint32 id;
+ char *buf;
+
+ if (id3->id3_version == 2)
+ return id3_read_frame_v22(id3);
+
+ /*
+ * Read frame header.
+ */
+ buf = id3->id3_read(id3, NULL, ID3_FRAMEHDR_SIZE);
+ if (buf == NULL)
+ return -1;
+
+ /*
+ * If we encounter an invalid frame id, we assume that there is
+ * some padding in the header. We just skip the rest of the ID3
+ * tag.
+ */
+ if (!((buf[0] >= '0' && buf[0] <= '9')
+ || (buf[0] >= 'A' && buf[0] <= 'Z'))) {
+ id3->id3_seek(id3, id3->id3_tagsize - id3->id3_pos);
+ return 0;
+ }
+ id = ID3_FRAME_ID(buf[0], buf[1], buf[2], buf[3]);
+
+ /*
+ * Allocate frame.
+ */
+ frame = g_malloc0(sizeof(*frame));
+
+ frame->fr_owner = id3;
+ /* FIXME v2.4.0 */
+ frame->fr_raw_size = buf[4] << 24 | buf[5] << 16 | buf[6] << 8 | buf[7];
+ if (frame->fr_raw_size < 0 || frame->fr_raw_size > 1000000) {
+ g_free(frame);
+ return -1;
+ }
+ frame->fr_flags = buf[8] << 8 | buf[9];
+
+ /*
+ * Determine the type of the frame.
+ */
+
+ frame->fr_desc = find_frame_description(id);
+
+ /*
+ * Check if frame had a valid id.
+ */
+ if (frame->fr_desc == NULL) {
+ /*
+ * No. Ignore the frame.
+ */
+ if (id3->id3_seek(id3, frame->fr_raw_size) < 0) {
+ g_free(frame);
+ return -1;
+ }
+ return 0;
+ }
+
+ /*
+ * Initialize frame.
+ */
+
+ /*
+ * We allocate 2 extra bytes. This simplifies retrieval of
+ * text strings.
+ */
+ frame->fr_raw_data = g_malloc0(frame->fr_raw_size + 2);
+ if (id3->id3_read(id3, frame->fr_raw_data, frame->fr_raw_size) == NULL) {
+ g_free(frame->fr_raw_data);
+ g_free(frame);
+ return -1;
+ }
+
+ /*
+ * Insert frame into linked list.
+ */
+ id3->id3_frame = g_list_append(id3->id3_frame, frame);
+
+ /*
+ * Check if frame is compressed using zlib.
+ */
+ if (frame->fr_flags & ID3_FHFLAG_COMPRESS)
+ return 0;
+
+ frame->fr_data = id3_frame_get_dataptr(frame);
+ frame->fr_size = id3_frame_get_size(frame);
+
+ return 0;
+}
+
+
+/*
+ * Function id3_get_frame (id3, type, num)
+ *
+ * Search in the list of frames for the ID3-tag, and return a frame
+ * of the indicated type. If tag contains several frames of the
+ * indicated type, the third argument tells which of the frames to
+ * return.
+ *
+ */
+struct id3_frame *
+id3_get_frame(struct id3_tag *id3, guint32 type, int num)
+{
+ GList *node;
+
+ for (node = id3->id3_frame; node != NULL; node = node->next) {
+ struct id3_frame *fr = node->data;
+ if (fr->fr_desc && fr->fr_desc->fd_id == type) {
+ if (--num <= 0)
+ return fr;
+ }
+ }
+ return NULL;
+}
+
+/*
+ * Function decompress_frame(frame)
+ *
+ * Uncompress the indicated frame. Return 0 upon success, or -1 if
+ * an error occured.
+ *
+ */
+static int
+decompress_frame(struct id3_frame *frame)
+{
+#ifdef HAVE_LIBZ
+ z_stream z;
+ int r;
+
+ /*
+ * Fetch the size of the decompressed data.
+ */
+ frame->fr_size_z = g_ntohl(*((guint32 *) frame->fr_raw_data));
+ if (frame->fr_size_z < 0 || frame->fr_size_z > 1000000)
+ return -1;
+
+ /*
+ * Allocate memory to hold uncompressed frame.
+ */
+ frame->fr_data_z = g_malloc(frame->fr_size_z +
+ (id3_frame_is_text(frame) ? 2 : 0));
+
+ /*
+ * Initialize zlib.
+ */
+ z.next_in = id3_frame_get_dataptr(frame);
+ z.avail_in = id3_frame_get_size(frame);
+ z.zalloc = NULL;
+ z.zfree = NULL;
+ z.opaque = NULL;
+
+ r = inflateInit(&z);
+ switch (r) {
+ case Z_OK:
+ break;
+ case Z_MEM_ERROR:
+ id3_error(frame->fr_owner, "zlib - no memory");
+ goto Error_init;
+ case Z_VERSION_ERROR:
+ id3_error(frame->fr_owner, "zlib - invalid version");
+ goto Error_init;
+ default:
+ id3_error(frame->fr_owner, "zlib - unknown error");
+ goto Error_init;
+ }
+
+ /*
+ * Decompress frame.
+ */
+ z.next_out = frame->fr_data_z;
+ z.avail_out = frame->fr_size_z;
+ r = inflate(&z, Z_SYNC_FLUSH);
+ switch (r) {
+ case Z_STREAM_END:
+ break;
+ case Z_OK:
+ if (z.avail_in == 0)
+ /*
+ * This should not be possible with a correct stream.
+ * We will be nice however, and try to go on.
+ */
+ break;
+ id3_error(frame->fr_owner, "zlib - buffer exhausted");
+ goto Error_inflate;
+ default:
+ id3_error(frame->fr_owner, "zlib - unknown error");
+ goto Error_inflate;
+ }
+
+ r = inflateEnd(&z);
+ if (r != Z_OK)
+ id3_error(frame->fr_owner, "zlib - inflateEnd error");
+
+ /*
+ * Null-terminate text frames.
+ */
+ if (id3_frame_is_text(frame)) {
+ ((char *) frame->fr_data_z)[frame->fr_size_z] = 0;
+ ((char *) frame->fr_data_z)[frame->fr_size_z + 1] = 0;
+ }
+ frame->fr_data = frame->fr_data_z;
+ frame->fr_size = frame->fr_size_z + (id3_frame_is_text(frame) ? 2 : 0);
+
+ return 0;
+
+ /*
+ * Cleanup code.
+ */
+ Error_inflate:
+ r = inflateEnd(&z);
+ Error_init:
+ g_free(frame->fr_data_z);
+ frame->fr_data_z = NULL;
+#endif
+ return -1;
+}
+
+/*
+ * Function id3_decompress_frame(frame)
+ *
+ * Check if frame is compressed, and uncompress if necessary.
+ * Return 0 upon success, or -1 if an error occured.
+ *
+ */
+int
+id3_decompress_frame(struct id3_frame *frame)
+{
+ if (!(frame->fr_flags & ID3_FHFLAG_COMPRESS))
+ /* Frame not compressed */
+ return 0;
+ if (frame->fr_data_z)
+ /* Frame already decompressed */
+ return 0;
+ /* Do decompression */
+ return decompress_frame(frame);
+}
+
+
+/*
+ * Function id3_delete_frame (frame)
+ *
+ * Remove frame from ID3 tag and release memory ocupied by it.
+ *
+ */
+int
+id3_delete_frame(struct id3_frame *frame)
+{
+ GList *list = frame->fr_owner->id3_frame;
+ int ret;
+
+ /*
+ * Search for frame in list.
+ */
+
+ if (g_list_find(list, frame) != NULL) {
+ /*
+ * Frame does not exist in frame list.
+ */
+ ret = -1;
+
+ }
+ else {
+ /*
+ * Remove frame from frame list.
+ */
+ list = g_list_remove(list, frame);
+ frame->fr_owner->id3_altered = 1;
+ ret = 0;
+ }
+
+ /*
+ * Release memory occupied by frame.
+ */
+ if (frame->fr_raw_data)
+ g_free(frame->fr_raw_data);
+ if (frame->fr_data_z)
+ g_free(frame->fr_data_z);
+ g_free(frame);
+
+ return ret;
+}
+
+
+/*
+ * Function id3_add_frame (id3, type)
+ *
+ * Add a new frame to the ID3 tag. Return a pointer to the new
+ * frame, or NULL if an error occured.
+ *
+ */
+struct id3_frame *
+id3_add_frame(struct id3_tag *id3, guint32 type)
+{
+ struct id3_frame *frame;
+ int i;
+
+ /*
+ * Allocate frame.
+ */
+ frame = g_malloc0(sizeof(*frame));
+
+ /*
+ * Initialize frame
+ */
+ frame->fr_owner = id3;
+
+ /*
+ * Try finding the correct frame descriptor.
+ */
+ for (i = 0; i < sizeof(framedesc) / sizeof(struct id3_framedesc); i++) {
+ if (framedesc[i].fd_id == type) {
+ frame->fr_desc = &framedesc[i];
+ break;
+ }
+ }
+
+ /*
+ * Insert frame into linked list.
+ */
+ id3->id3_frame = g_list_append(id3->id3_frame, frame);
+ id3->id3_altered = 1;
+
+ return frame;
+}
+
+
+/*
+ * Destroy all frames in an id3 tag, and free all data
+ */
+void
+id3_destroy_frames(struct id3_tag *id)
+{
+ GList *node;
+
+ for (node = id->id3_frame; node != NULL; node = node->next) {
+ struct id3_frame *frame = node->data;
+ /*
+ * Release memory occupied by frame.
+ */
+ if (frame->fr_raw_data)
+ g_free(frame->fr_raw_data);
+ if (frame->fr_data_z)
+ g_free(frame->fr_data_z);
+ g_free(frame);
+ }
+ g_list_free(id->id3_frame);
+ id->id3_frame = NULL;
+}
+
+static int
+id3_frame_extra_headers(struct id3_frame *frame)
+{
+ int retv = 0;
+ /*
+ * If frame is encrypted, we have four extra bytes in the
+ * header.
+ */
+ if (frame->fr_flags & ID3_FHFLAG_COMPRESS)
+ retv += 4;
+ /*
+ * If frame is encrypted, we have one extra byte in the
+ * header.
+ */
+ if (frame->fr_flags & ID3_FHFLAG_ENCRYPT)
+ retv += 1;
+
+ /*
+ * If frame has grouping identity, we have one extra byte in
+ * the header.
+ */
+ if (frame->fr_flags & ID3_FHFLAG_GROUP)
+ retv += 1;
+
+ return retv;
+}
+
+static void *
+id3_frame_get_dataptr(struct id3_frame *frame)
+{
+ char *ptr = frame->fr_raw_data;
+
+ ptr += id3_frame_extra_headers(frame);
+
+ return ptr;
+}
+
+static int
+id3_frame_get_size(struct id3_frame *frame)
+{
+ return frame->fr_raw_size - id3_frame_extra_headers(frame);
+}
+
+void
+id3_frame_clear_data(struct id3_frame *frame)
+{
+ if (frame->fr_raw_data)
+ g_free(frame->fr_raw_data);
+ if (frame->fr_data_z)
+ g_free(frame->fr_data_z);
+ frame->fr_raw_data = NULL;
+ frame->fr_raw_size = 0;
+ frame->fr_data = NULL;
+ frame->fr_size = 0;
+ frame->fr_data_z = NULL;
+ frame->fr_size_z = 0;
+}
+
+static guint32
+find_v24_id(guint32 v22)
+{
+ int i;
+ for (i = 0; i < sizeof(framedesc22) / sizeof(framedesc22[0]); i++)
+ if (framedesc22[i].fd_v22 == v22)
+ return framedesc22[i].fd_v24;
+
+ return 0;
+}
+
+static int
+id3_read_frame_v22(struct id3_tag *id3)
+{
+ struct id3_frame *frame;
+ guint32 id, idv24;
+ char *buf;
+ int size;
+
+ /*
+ * Read frame header.
+ */
+ buf = id3->id3_read(id3, NULL, ID3_FRAMEHDR_SIZE_22);
+ if (buf == NULL)
+ return -1;
+
+ /*
+ * If we encounter an invalid frame id, we assume that there
+ * is some. We just skip the rest of the ID3 tag.
+ */
+ if (!((buf[0] >= '0' && buf[0] <= '9')
+ || (buf[0] >= 'A' && buf[0] <= 'Z'))) {
+ id3->id3_seek(id3, id3->id3_tagsize - id3->id3_pos);
+ return 0;
+ }
+
+ id = ID3_FRAME_ID_22(buf[0], buf[1], buf[2]);
+ size = buf[3] << 16 | buf[4] << 8 | buf[5];
+
+ if ((idv24 = find_v24_id(id)) == 0) {
+ if (id3->id3_seek(id3, size) < 0)
+ return -1;
+ return 0;
+ }
+
+ /*
+ * Allocate frame.
+ */
+ frame = g_malloc0(sizeof(*frame));
+
+ frame->fr_owner = id3;
+ frame->fr_raw_size = size;
+ if (frame->fr_raw_size < 0 || frame->fr_raw_size > 1000000) {
+ g_free(frame);
+ return -1;
+ }
+
+ /*
+ * Initialize frame.
+ */
+ frame->fr_desc = find_frame_description(idv24);
+
+ /*
+ * We allocate 2 extra bytes. This simplifies retrieval of
+ * text strings.
+ */
+ frame->fr_raw_data = g_malloc0(frame->fr_raw_size + 2);
+ if (id3->id3_read(id3, frame->fr_raw_data, frame->fr_raw_size) == NULL) {
+ g_free(frame->fr_raw_data);
+ g_free(frame);
+ return -1;
+ }
+
+ /*
+ * Insert frame into linked list.
+ */
+ id3->id3_frame = g_list_append(id3->id3_frame, frame);
+
+ frame->fr_data = frame->fr_raw_data;
+ frame->fr_size = frame->fr_raw_size;
+
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_content.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_content.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_content.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,138 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1999, 2002, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3_frame_content.c
+ * Description: Code for handling ID3 content frames.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Mon Feb 8 17:13:46 1999
+ *
+ * $Id: id3_frame_content.c,v 1.7 2004/07/20 21:47:22 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "xmms-id3.h"
+
+#include "mpg123.h"
+
+
+/*
+ * Function id3_get_content (frame)
+ *
+ * Expand content type string of frame and return it. Return NULL
+ * upon error.
+ *
+ */
+char *
+id3_get_content(struct id3_frame *frame)
+{
+ char *text, *text_beg, *ptr;
+ char buffer[256];
+ int spc = sizeof(buffer) - 1;
+
+ /* Type check */
+ if (frame->fr_desc->fd_id != ID3_TCON)
+ return NULL;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return NULL;
+
+ if (*(guint8 *) frame->fr_data == ID3_ENCODING_ISO_8859_1)
+ text_beg = text = g_strdup((char *) frame->fr_data + 1);
+ else
+ text_beg = text = id3_utf16_to_ascii((char *) frame->fr_data + 1);
+
+ /*
+ * If content is just plain text, return it.
+ */
+ if (text[0] != '(') {
+ return text;
+ }
+
+ /*
+ * Expand ID3v1 genre numbers.
+ */
+ ptr = buffer;
+ while (text[0] == '(' && text[1] != '(' && spc > 0) {
+ const char *genre;
+ int num = 0;
+
+ if (text[1] == 'R' && text[2] == 'X') {
+ text += 4;
+ genre = _(" (Remix)");
+ if (ptr == buffer)
+ genre++;
+
+ }
+ else if (text[1] == 'C' && text[2] == 'R') {
+ text += 4;
+ genre = _(" (Cover)");
+ if (ptr == buffer)
+ genre++;
+
+ }
+ else {
+ /* Get ID3v1 genre number */
+ text++;
+ while (*text != ')') {
+ num *= 10;
+ num += *text++ - '0';
+ }
+ text++;
+
+ /* Boundary check */
+ if (num >= sizeof(mpg123_id3_genres) / sizeof(char *))
+ continue;
+
+ genre = gettext(mpg123_id3_genres[num]);
+
+ if (ptr != buffer && spc-- > 0)
+ *ptr++ = '/';
+ }
+
+ /* Expand string into buffer */
+ while (*genre != '\0' && spc > 0) {
+ *ptr++ = *genre++;
+ spc--;
+ }
+ }
+
+ /*
+ * Add plaintext refinement.
+ */
+ if (*text == '(')
+ text++;
+ if (*text != '\0' && ptr != buffer && spc-- > 0)
+ *ptr++ = ' ';
+ while (*text != '\0' && spc > 0) {
+ *ptr++ = *text++;
+ spc--;
+ }
+ *ptr = '\0';
+
+ g_free(text_beg);
+
+ /*
+ * Return the expanded content string.
+ */
+ return g_strdup(buffer);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_text.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_text.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_text.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,366 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1999, 2001, 2002, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3_frame_text.c
+ * Description: Code for handling ID3 text frames.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Fri Feb 5 23:50:33 1999
+ *
+ * $Id: id3_frame_text.c,v 1.7 2004/08/21 13:04:47 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#include "config.h"
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xmms-id3.h"
+#include "id3_header.h"
+
+
+char *
+id3_utf16_to_ascii(void *utf16)
+{
+ char ascii[256];
+ char *uc = (char *) utf16 + 2;
+ int i;
+
+ for (i = 0; *uc != 0 && i < sizeof(ascii); i++, uc += 2)
+ ascii[i] = *uc;
+
+ ascii[i] = 0;
+ return g_strdup(ascii);
+}
+
+
+/*
+ * Function id3_get_encoding (frame)
+ *
+ * Return text encoding for frame, or -1 if frame does not have any
+ * text encoding.
+ *
+ */
+gint8
+id3_get_encoding(struct id3_frame * frame)
+{
+ /* Type check */
+ if (!id3_frame_is_text(frame) &&
+ frame->fr_desc->fd_id != ID3_WXXX &&
+ frame->fr_desc->fd_id != ID3_IPLS &&
+ frame->fr_desc->fd_id != ID3_USLT &&
+ frame->fr_desc->fd_id != ID3_SYLT &&
+ frame->fr_desc->fd_id != ID3_COMM &&
+ frame->fr_desc->fd_id != ID3_APIC &&
+ frame->fr_desc->fd_id != ID3_GEOB &&
+ frame->fr_desc->fd_id != ID3_USER &&
+ frame->fr_desc->fd_id != ID3_OWNE &&
+ frame->fr_desc->fd_id != ID3_COMR)
+ return -1;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return -1;
+
+ return *(gint8 *) frame->fr_data;
+}
+
+
+/*
+ * Function id3_set_encoding (frame, encoding)
+ *
+ * Set text encoding for frame. Return 0 upon success, or -1 if an
+ * error occured.
+ *
+ */
+int
+id3_set_encoding(struct id3_frame *frame, gint8 encoding)
+{
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'T' &&
+ frame->fr_desc->fd_id != ID3_WXXX &&
+ frame->fr_desc->fd_id != ID3_IPLS &&
+ frame->fr_desc->fd_id != ID3_USLT &&
+ frame->fr_desc->fd_id != ID3_SYLT &&
+ frame->fr_desc->fd_id != ID3_COMM &&
+ frame->fr_desc->fd_id != ID3_APIC &&
+ frame->fr_desc->fd_id != ID3_GEOB &&
+ frame->fr_desc->fd_id != ID3_USER &&
+ frame->fr_desc->fd_id != ID3_OWNE &&
+ frame->fr_desc->fd_id != ID3_COMR)
+ return -1;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return -1;
+
+ /* Changing the encoding of frames is not supported yet */
+ if (*(gint8 *) frame->fr_data != encoding)
+ return -1;
+
+ /* Set encoding */
+ *(gint8 *) frame->fr_data = encoding;
+ return 0;
+}
+
+
+/*
+ * Function id3_get_text (frame)
+ *
+ * Return string contents of frame.
+ *
+ */
+char *
+id3_get_text(struct id3_frame *frame)
+{
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'T' && frame->fr_desc->fd_id != ID3_COMM)
+ return NULL;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return NULL;
+
+ if (frame->fr_desc->fd_id == ID3_TXXX || frame->fr_desc->fd_id == ID3_COMM) {
+ /*
+ * This is a user defined text frame. Skip the description.
+ */
+ switch (*(guint8 *) frame->fr_data) {
+ case ID3_ENCODING_ISO_8859_1:
+ {
+ char *text = (char *) frame->fr_data + 1;
+
+ while (*text != 0)
+ text++;
+
+ return g_strdup(++text);
+ }
+ case ID3_ENCODING_UTF16:
+ {
+ char *text16 = (char *) frame->fr_data + 1;
+
+ while (*text16 != 0 || *(text16 + 1) != 0)
+ text16 += 2;
+
+ return id3_utf16_to_ascii(text16 + 2);
+ }
+ default:
+ return NULL;
+ }
+ }
+
+ if (*(guint8 *) frame->fr_data == ID3_ENCODING_ISO_8859_1)
+ return g_strdup((char *) frame->fr_data + 1);
+ else
+ return id3_utf16_to_ascii(((char *) frame->fr_data + 1));
+}
+
+
+/*
+ * Function id3_get_text_desc (frame)
+ *
+ * Get description part of a text frame.
+ *
+ */
+char *
+id3_get_text_desc(struct id3_frame *frame)
+{
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'T')
+ return NULL;
+
+ /* If predefined text frame, return description. */
+ if (frame->fr_desc->fd_id != ID3_TXXX)
+ return frame->fr_desc->fd_description;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return NULL;
+
+ if (*(guint8 *) frame->fr_data == ID3_ENCODING_ISO_8859_1)
+ return g_strdup((char *) frame->fr_data + 1);
+ else
+ return id3_utf16_to_ascii((char *) frame->fr_data + 1);
+}
+
+
+/*
+ * Function id3_get_text_number (frame)
+ *
+ * Return string contents of frame translated to a positive
+ * integer, or -1 if an error occured.
+ *
+ */
+int
+id3_get_text_number(struct id3_frame *frame)
+{
+ int number = 0;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return -1;
+
+ /*
+ * Generate integer according to encoding.
+ */
+ switch (*(guint8 *) frame->fr_data) {
+ case ID3_ENCODING_ISO_8859_1:
+ {
+ char *text = ((char *) frame->fr_data) + 1;
+
+ while (*text >= '0' && *text <= '9') {
+ number *= 10;
+ number += *text - '0';
+ text++;
+ }
+
+ return number;
+ }
+ case ID3_ENCODING_UTF16:
+ {
+ char *text = ((char *) frame->fr_data) + 3;
+
+/* if (*(gint16 *) frame->fr_data == 0xfeff) */
+/* text++; */
+
+ while (*text >= '0' && *text <= '9') {
+ number *= 10;
+ number += *text - '0';
+ text++;
+ }
+
+ return number;
+ }
+
+ default:
+ return -1;
+ }
+}
+
+
+/*
+ * Function id3_set_text (frame, text)
+ *
+ * Set text for the indicated frame (only ISO-8859-1 is currently
+ * supported). Return 0 upon success, or -1 if an error occured.
+ *
+ */
+int
+id3_set_text(struct id3_frame *frame, char *text)
+{
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'T')
+ return -1;
+
+ /*
+ * Release memory occupied by previous data.
+ */
+ id3_frame_clear_data(frame);
+
+ /*
+ * Allocate memory for new data.
+ */
+ frame->fr_raw_size = strlen(text) + 1;
+ frame->fr_raw_data = g_malloc(frame->fr_raw_size + 1);
+
+ /*
+ * Copy contents.
+ */
+ *(gint8 *) frame->fr_raw_data = ID3_ENCODING_ISO_8859_1;
+ memcpy((char *) frame->fr_raw_data + 1, text, frame->fr_raw_size);
+
+ frame->fr_altered = 1;
+ frame->fr_owner->id3_altered = 1;
+
+ frame->fr_data = frame->fr_raw_data;
+ frame->fr_size = frame->fr_raw_size;
+
+ return 0;
+}
+
+
+/*
+ * Function id3_set_text_number (frame, number)
+ *
+ * Set number for the indicated frame (only ISO-8859-1 is currently
+ * supported). Return 0 upon success, or -1 if an error occured.
+ *
+ */
+int
+id3_set_text_number(struct id3_frame *frame, int number)
+{
+ char buf[64];
+ int pos;
+ char *text;
+
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'T')
+ return -1;
+
+ /*
+ * Release memory occupied by previous data.
+ */
+ id3_frame_clear_data(frame);
+
+ /*
+ * Create a string with a reversed number.
+ */
+ pos = 0;
+ while (number > 0 && pos < 64) {
+ buf[pos++] = (number % 10) + '0';
+ number /= 10;
+ }
+ if (pos == 64)
+ return -1;
+ if (pos == 0)
+ buf[pos++] = '0';
+
+ /*
+ * Allocate memory for new data.
+ */
+ frame->fr_raw_size = pos + 1;
+ frame->fr_raw_data = g_malloc(frame->fr_raw_size + 1);
+
+ /*
+ * Insert contents.
+ */
+ *(gint8 *) frame->fr_raw_data = ID3_ENCODING_ISO_8859_1;
+ text = (char *) frame->fr_raw_data + 1;
+ while (--pos >= 0)
+ *text++ = buf[pos];
+ *text = '\0';
+
+ frame->fr_altered = 1;
+ frame->fr_owner->id3_altered = 1;
+
+ frame->fr_data = frame->fr_raw_data;
+ frame->fr_size = frame->fr_raw_size;
+
+ return 0;
+}
+
+gboolean
+id3_frame_is_text(struct id3_frame * frame)
+{
+ if (frame && frame->fr_desc &&
+ (frame->fr_desc->fd_idstr[0] == 'T' ||
+ frame->fr_desc->fd_idstr[0] == 'W'))
+ return TRUE;
+ return FALSE;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_url.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_url.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_frame_url.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,109 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1999, 2001, 2002,
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3_frame_url.c
+ * Description: Code for handling ID3 URL frames.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Tue Feb 9 21:10:45 1999
+ *
+ * $Id: id3_frame_url.c,v 1.6 2004/07/20 21:47:22 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#include "config.h"
+
+#include "xmms-id3.h"
+#include "id3_header.h"
+
+
+
+/*
+ * Function id3_get_url (frame)
+ *
+ * Return URL of frame.
+ *
+ */
+char *
+id3_get_url(struct id3_frame *frame)
+{
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'W')
+ return NULL;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return NULL;
+
+ if (frame->fr_desc->fd_id == ID3_WXXX) {
+ /*
+ * This is a user defined link frame. Skip the description.
+ */
+ switch (*(guint8 *) frame->fr_data) {
+ case ID3_ENCODING_ISO_8859_1:
+ {
+ char *text = (char *) frame->fr_data + 1;
+
+ while (*text != 0)
+ text++;
+
+ return g_strdup(++text);
+ }
+ case ID3_ENCODING_UTF16:
+ {
+ gint16 *text16 = (gint16 *) ((glong) frame->fr_data + 1);
+
+ while (*text16 != 0)
+ text16++;
+
+ return g_strdup((char *) (++text16));
+ }
+ default:
+ return NULL;
+ }
+ }
+
+ return g_strdup((char *) frame->fr_data);
+}
+
+
+/*
+ * Function id3_get_url_desc (frame)
+ *
+ * Get description of a URL.
+ *
+ */
+char *
+id3_get_url_desc(struct id3_frame *frame)
+{
+ /* Type check */
+ if (frame->fr_desc->fd_idstr[0] != 'W')
+ return NULL;
+
+ /* If predefined link frame, return description. */
+ if (frame->fr_desc->fd_id != ID3_WXXX)
+ return frame->fr_desc->fd_description;
+
+ /* Check if frame is compressed */
+ if (id3_decompress_frame(frame) == -1)
+ return NULL;
+
+ if (*(guint8 *) frame->fr_data == ID3_ENCODING_ISO_8859_1)
+ return g_strdup((char *) frame->fr_data + 1);
+ else
+ return id3_utf16_to_ascii((gint16 *) ((glong) frame->fr_data + 1));
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_header.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_header.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_header.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,158 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1998, 1999, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3_header.h
+ * Description: Definitions for various ID3 headers.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Thu Nov 5 15:55:10 1998
+ *
+ * $Id: id3_header.h,v 1.4 2004/04/13 23:53:01 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#ifndef ID3_HEADER_H
+#define ID3_HEADER_H
+
+#include <stdio.h>
+
+/*
+ * Layout for the ID3 tag header.
+ */
+#if 0
+struct id3_taghdr {
+ guint8 th_version;
+ guint8 th_revision;
+ guint8 th_flags;
+ guint32 th_size;
+};
+#endif
+
+/* Header size excluding "ID3" */
+#define ID3_TAGHDR_SIZE 7 /* Size on disk */
+
+#define ID3_THFLAG_USYNC 0x80000000
+#define ID3_THFLAG_EXT 0x40000000
+#define ID3_THFLAG_EXP 0x20000000
+
+#if 0
+#define ID3_SET_SIZE28(size) \
+ ( ((size << 3) & 0x7f000000) | \
+ ((size << 2) & 0x007f0000) | \
+ ((size << 1) & 0x00007f00) | \
+ ((size ) & 0x0000007f) )
+
+#define ID3_GET_SIZE28(size) \
+ ( ((size & 0x7f000000) >> 3) | \
+ ((size & 0x007f0000) >> 2) | \
+ ((size & 0x00007f00) >> 1) | \
+ ((size & 0x0000007f) ) )
+#endif
+
+#define ID3_SET_SIZE28(size, a, b, c, d) \
+do { \
+ a = (size >> (24 + 3)) & 0x7f; \
+ b = (size >> (16 + 2)) & 0x7f; \
+ c = (size >> ( 8 + 1)) & 0x7f; \
+ d = size & 0x7f; \
+} while (0)
+
+#define ID3_GET_SIZE28(a, b, c, d) \
+(((a & 0x7f) << (24 - 3)) | \
+ ((b & 0x7f) << (16 - 2)) | \
+ ((c & 0x7f) << ( 8 - 1)) | \
+ ((d & 0x7f)))
+
+
+
+/*
+ * Layout for the extended header.
+ */
+#if 0
+struct id3_exthdr {
+ guint32 eh_size;
+ guint16 eh_flags;
+ guint32 eh_padsize;
+};
+#endif
+
+#define ID3_EXTHDR_SIZE 10
+
+#define ID3_EHFLAG_CRC 0x80000000
+
+
+
+/*
+ * Layout for the frame header.
+ */
+#if 0
+struct id3_framehdr {
+ guint32 fh_id;
+ guint32 fh_size;
+ guint16 fh_flags;
+};
+#endif
+
+#define ID3_FRAMEHDR_SIZE 10
+
+
+#define ID3_FHFLAG_TAGALT 0x8000
+#define ID3_FHFLAG_FILEALT 0x4000
+#define ID3_FHFLAG_RO 0x2000
+#define ID3_FHFLAG_COMPRESS 0x0080
+#define ID3_FHFLAG_ENCRYPT 0x0040
+#define ID3_FHFLAG_GROUP 0x0020
+
+
+typedef enum {
+ ID3_UNI_LATIN = 0x007f,
+ ID3_UNI_LATIN_1 = 0x00ff,
+
+ ID3_UNI_SUPPORTED = 0x00ff,
+ ID3_UNI_UNSUPPORTED = 0xffff,
+} id3_unicode_blocks;
+
+#define DEBUG_ID3
+#ifdef DEBUG_ID3
+#define id3_error(id3, error) \
+ (void) ( id3->id3_error_msg = error, \
+ printf( "Error %s, line %d: %s\n", __FILE__, __LINE__, error ) )
+
+
+#else
+#define id3_error(id3, error) \
+ (void) ( id3->id3_error_msg = error )
+
+#endif
+
+/*
+ * Version 2.2.0
+ */
+
+/*
+ * Layout for the frame header.
+ */
+#if 0
+struct id3_framehdr {
+ char fh_id[3];
+ guint8 fh_size[3];
+};
+#endif
+
+#define ID3_FRAMEHDR_SIZE_22 6
+
+#endif /* ID3_HEADER_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_tag.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_tag.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/id3_tag.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,134 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1999-2000, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3_tag.c
+ * Description: Code for handling ID3 tags.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Tue Feb 9 21:13:19 1999
+ *
+ * $Id: id3_tag.c,v 1.6 2004/07/20 21:47:22 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#include <glib.h>
+
+#include "xmms-id3.h"
+#include "id3_header.h"
+
+
+/*
+ * Function id3_init_tag (id3)
+ *
+ * Initialize an empty ID3 tag.
+ *
+ */
+void
+id3_init_tag(struct id3_tag *id3)
+{
+ /*
+ * Initialize header.
+ */
+ id3->id3_version = 3;
+ id3->id3_revision = 0;
+ id3->id3_flags = ID3_THFLAG_USYNC | ID3_THFLAG_EXP;
+ id3->id3_tagsize = 0;
+
+ id3->id3_altered = 1;
+ id3->id3_newtag = 1;
+ id3->id3_pos = 0;
+
+ /*
+ * Initialize frames.
+ */
+ id3->id3_frame = NULL;
+}
+
+
+/*
+ * Function id3_read_tag (id3)
+ *
+ * Read the ID3 tag from the input stream. The start of the tag
+ * must be positioned in the next tag in the stream. Return 0 upon
+ * success, or -1 if an error occured.
+ *
+ */
+int
+id3_read_tag(struct id3_tag *id3)
+{
+ char *buf;
+
+ /*
+ * We know that the tag will be at least this big.
+ *
+ * tag header + "ID3"
+ */
+ id3->id3_tagsize = ID3_TAGHDR_SIZE + 3;
+
+ if (!(id3->id3_oflags & ID3_OPENF_NOCHK)) {
+ /*
+ * Check if we have a valid ID3 tag.
+ */
+ char *id = id3->id3_read(id3, NULL, 3);
+ if (id == NULL)
+ return -1;
+
+ if (id[0] != 'I' || id[1] != 'D' || id[2] != '3') {
+ /*
+ * ID3 tag was not detected.
+ */
+ id3->id3_seek(id3, -3);
+ return -1;
+ }
+ }
+
+ /*
+ * Read ID3 tag-header.
+ */
+ buf = id3->id3_read(id3, NULL, ID3_TAGHDR_SIZE);
+ if (buf == NULL)
+ return -1;
+
+ id3->id3_version = buf[0];
+ id3->id3_revision = buf[1];
+ id3->id3_flags = buf[2];
+ id3->id3_tagsize = ID3_GET_SIZE28(buf[3], buf[4], buf[5], buf[6]);
+ id3->id3_newtag = 0;
+ id3->id3_pos = 0;
+
+ if (id3->id3_version < 2 || id3->id3_version > 4)
+ return -1;
+
+ /*
+ * Parse extended header.
+ */
+ if (id3->id3_flags & ID3_THFLAG_EXT) {
+ buf = id3->id3_read(id3, NULL, ID3_EXTHDR_SIZE);
+ if (buf == NULL)
+ return -1;
+ }
+
+ /*
+ * Parse frames.
+ */
+ while (id3->id3_pos < id3->id3_tagsize) {
+ if (id3_read_frame(id3) == -1)
+ return -1;
+ }
+
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/l2tables.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/l2tables.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/l2tables.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,997 @@
+/*
+ * Layer 2 Alloc tables ..
+ * most other tables are calculated on program start (which is (of course)
+ * not ISO-conform) ..
+ * Layer-3 huffman table is in huffman.h
+ */
+
+struct al_table alloc_0[] = {
+ {4, 0},
+ {5, 3},
+ {3, -3},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {3, -3},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {3, -3},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767}
+};
+
+struct al_table alloc_1[] = {
+ {4, 0},
+ {5, 3},
+ {3, -3},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {3, -3},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {3, -3},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {16, -32767}
+};
+
+struct al_table alloc_2[] = {
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63}
+};
+
+struct al_table alloc_3[] = {
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {15, -16383},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63}
+};
+
+struct al_table alloc_4[] = {
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {4, 0},
+ {5, 3},
+ {7, 5},
+ {3, -3},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {8, -127},
+ {9, -255},
+ {10, -511},
+ {11, -1023},
+ {12, -2047},
+ {13, -4095},
+ {14, -8191},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {3, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {4, -7},
+ {5, -15},
+ {6, -31},
+ {7, -63},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9},
+ {2, 0},
+ {5, 3},
+ {7, 5},
+ {10, 9}
+};
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer1.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer1.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer1.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,185 @@
+
+/*
+ * Mpeg Layer-1 audio decoder
+ * --------------------------
+ * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
+ * near unoptimzed ...
+ *
+ * may have a few bugs after last optimization ...
+ *
+ */
+
+
+#include "beep/output.h"
+#include "mpg123.h"
+#include "getbits.h"
+
+
+/* Used by the getbits macros */
+static unsigned long rval;
+
+void
+I_step_one(unsigned int balloc[],
+ unsigned int scale_index[2][SBLIMIT], struct frame *fr)
+{
+ unsigned int *ba = balloc;
+ unsigned int *sca = (unsigned int *) scale_index;
+
+ if (fr->stereo) {
+ int i;
+ int jsbound = fr->jsbound;
+
+ for (i = 0; i < jsbound; i++) {
+ *ba++ = mpg123_getbits(4);
+ *ba++ = mpg123_getbits(4);
+ }
+ for (i = jsbound; i < SBLIMIT; i++)
+ *ba++ = mpg123_getbits(4);
+
+ ba = balloc;
+
+ for (i = 0; i < jsbound; i++) {
+ if ((*ba++))
+ *sca++ = mpg123_getbits(6);
+ if ((*ba++))
+ *sca++ = mpg123_getbits(6);
+ }
+ for (i = jsbound; i < SBLIMIT; i++)
+ if ((*ba++)) {
+ *sca++ = mpg123_getbits(6);
+ *sca++ = mpg123_getbits(6);
+ }
+ }
+ else {
+ int i;
+
+ for (i = 0; i < SBLIMIT; i++)
+ *ba++ = mpg123_getbits(4);
+ ba = balloc;
+ for (i = 0; i < SBLIMIT; i++)
+ if ((*ba++))
+ *sca++ = mpg123_getbits(6);
+ }
+}
+
+void
+I_step_two(real fraction[2][SBLIMIT],
+ unsigned int balloc[2 * SBLIMIT],
+ unsigned int scale_index[2][SBLIMIT], struct frame *fr)
+{
+ int i, n;
+ int smpb[2 * SBLIMIT]; /* values: 0-65535 */
+ int *sample;
+ register unsigned int *ba;
+ register unsigned int *sca = (unsigned int *) scale_index;
+
+ if (fr->stereo) {
+ int jsbound = fr->jsbound;
+ register real *f0 = fraction[0];
+ register real *f1 = fraction[1];
+
+ ba = balloc;
+ for (sample = smpb, i = 0; i < jsbound; i++) {
+ if ((n = *ba++))
+ *sample++ = mpg123_getbits(n + 1);
+ if ((n = *ba++))
+ *sample++ = mpg123_getbits(n + 1);
+ }
+ for (i = jsbound; i < SBLIMIT; i++)
+ if ((n = *ba++))
+ *sample++ = mpg123_getbits(n + 1);
+
+ ba = balloc;
+ for (sample = smpb, i = 0; i < jsbound; i++) {
+ if ((n = *ba++))
+ *f0++ =
+ (real) (((-1) << n) + (*sample++) +
+ 1) * mpg123_muls[n + 1][*sca++];
+ else
+ *f0++ = 0.0;
+ if ((n = *ba++))
+ *f1++ =
+ (real) (((-1) << n) + (*sample++) +
+ 1) * mpg123_muls[n + 1][*sca++];
+ else
+ *f1++ = 0.0;
+ }
+ for (i = jsbound; i < SBLIMIT; i++) {
+ if ((n = *ba++)) {
+ real samp = (((-1) << n) + (*sample++) + 1);
+
+ *f0++ = samp * mpg123_muls[n + 1][*sca++];
+ *f1++ = samp * mpg123_muls[n + 1][*sca++];
+ }
+ else
+ *f0++ = *f1++ = 0.0;
+ }
+ for (i = fr->down_sample_sblimit; i < 32; i++)
+ fraction[0][i] = fraction[1][i] = 0.0;
+ }
+ else {
+ register real *f0 = fraction[0];
+
+ ba = balloc;
+ for (sample = smpb, i = 0; i < SBLIMIT; i++)
+ if ((n = *ba++))
+ *sample++ = mpg123_getbits(n + 1);
+ ba = balloc;
+ for (sample = smpb, i = 0; i < SBLIMIT; i++) {
+ if ((n = *ba++))
+ *f0++ =
+ (real) (((-1) << n) + (*sample++) +
+ 1) * mpg123_muls[n + 1][*sca++];
+ else
+ *f0++ = 0.0;
+ }
+ for (i = fr->down_sample_sblimit; i < 32; i++)
+ fraction[0][i] = 0.0;
+ }
+}
+
+int
+mpg123_do_layer1(struct frame *fr)
+{
+ int i, stereo = fr->stereo;
+ unsigned int balloc[2 * SBLIMIT];
+ unsigned int scale_index[2][SBLIMIT];
+ real fraction[2][SBLIMIT];
+ int single = fr->single;
+
+ fr->jsbound =
+ (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext << 2) + 4 : 32;
+
+ if (stereo == 1 || single == 3)
+ single = 0;
+
+ I_step_one(balloc, scale_index, fr);
+
+ for (i = 0; i < SCALE_BLOCK; i++) {
+ I_step_two(fraction, balloc, scale_index, fr);
+
+ if (single >= 0) {
+ (fr->synth_mono) ((real *) fraction[single], mpg123_pcm_sample,
+ &mpg123_pcm_point);
+ }
+ else {
+ int p1 = mpg123_pcm_point;
+
+ (fr->synth) ((real *) fraction[0], 0, mpg123_pcm_sample, &p1);
+ (fr->synth) ((real *) fraction[1], 1, mpg123_pcm_sample,
+ &mpg123_pcm_point);
+ }
+ if (mpg123_info->output_audio && mpg123_info->jump_to_time == -1) {
+ produce_audio(mpg123_ip.output->written_time(),
+ mpg123_cfg.resolution ==
+ 16 ? FMT_S16_NE : FMT_U8,
+ mpg123_cfg.channels ==
+ 2 ? fr->stereo : 1, mpg123_pcm_point,
+ mpg123_pcm_sample, &mpg123_info->going);
+ }
+
+ mpg123_pcm_point = 0;
+ }
+
+ return 1;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer2.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer2.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer2.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,341 @@
+
+/*
+ * Mpeg Layer-2 audio decoder
+ * --------------------------
+ * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
+ *
+ */
+
+#include <glib.h>
+#include <math.h>
+
+#include "beep/output.h"
+#include "mpg123.h"
+#include "l2tables.h"
+#include "getbits.h"
+
+
+static int grp_3tab[32 * 3] = { 0, }; /* used: 27 */
+static int grp_5tab[128 * 3] = { 0, }; /* used: 125 */
+static int grp_9tab[1024 * 3] = { 0, }; /* used: 729 */
+
+real mpg123_muls[27][64]; /* also used by layer 1 */
+
+/* Used by the getbits macros */
+static unsigned long rval;
+
+void
+mpg123_init_layer2(gboolean mmx)
+{
+ static double mulmul[27] = {
+ 0.0, -2.0 / 3.0, 2.0 / 3.0, 2.0 / 7.0, 2.0 / 15.0,
+ 2.0 / 31.0, 2.0 / 63.0, 2.0 / 127.0, 2.0 / 255.0,
+ 2.0 / 511.0, 2.0 / 1023.0, 2.0 / 2047.0, 2.0 / 4095.0,
+ 2.0 / 8191.0, 2.0 / 16383.0, 2.0 / 32767.0, 2.0 / 65535.0,
+ -4.0 / 5.0, -2.0 / 5.0, 2.0 / 5.0, 4.0 / 5.0, -8.0 / 9.0,
+ -4.0 / 9.0, -2.0 / 9.0, 2.0 / 9.0, 4.0 / 9.0, 8.0 / 9.0
+ };
+ static int base[3][9] = {
+ {1, 0, 2,},
+ {17, 18, 0, 19, 20,},
+ {21, 1, 22, 23, 0, 24, 25, 2, 26}
+ };
+ int i, j, k, l, len;
+ real *table;
+ static int tablen[3] = { 3, 5, 9 };
+ static int *itable, *tables[3] = { grp_3tab, grp_5tab, grp_9tab };
+
+ for (i = 0; i < 3; i++) {
+ itable = tables[i];
+ len = tablen[i];
+ for (j = 0; j < len; j++)
+ for (k = 0; k < len; k++)
+ for (l = 0; l < len; l++) {
+ *itable++ = base[i][l];
+ *itable++ = base[i][k];
+ *itable++ = base[i][j];
+ }
+ }
+
+ for (k = 0; k < 27; k++) {
+ double m = mulmul[k];
+ table = mpg123_muls[k];
+#ifdef USE_SIMD
+ if (mmx)
+ for (j = 3, i = 0; i < 63; i++, j--)
+ *table++ = 16384 * m * pow(2.0, (double) j / 3.0);
+ else
+#endif
+ for (j = 3, i = 0; i < 63; i++, j--)
+ *table++ = m * pow(2.0, (double) j / 3.0);
+ *table++ = 0.0;
+ }
+}
+
+void
+II_step_one(unsigned int *bit_alloc, int *scale, struct frame *fr)
+{
+ int stereo = fr->stereo - 1;
+ int sblimit = fr->II_sblimit;
+ int jsbound = fr->jsbound;
+ int sblimit2 = fr->II_sblimit << stereo;
+ struct al_table *alloc1 = fr->alloc;
+ int i;
+ static unsigned int scfsi_buf[64];
+ unsigned int *scfsi, *bita;
+ int sc, step;
+
+ bita = bit_alloc;
+ if (stereo) {
+ for (i = jsbound; i > 0; i--, alloc1 += (1 << step)) {
+ *bita++ = (char) mpg123_getbits(step = alloc1->bits);
+ *bita++ = (char) mpg123_getbits(step);
+ }
+ for (i = sblimit - jsbound; i > 0; i--, alloc1 += (1 << step)) {
+ bita[0] = (char) mpg123_getbits(step = alloc1->bits);
+ bita[1] = bita[0];
+ bita += 2;
+ }
+ bita = bit_alloc;
+ scfsi = scfsi_buf;
+ for (i = sblimit2; i; i--)
+ if (*bita++)
+ *scfsi++ = (char) mpg123_getbits_fast(2);
+ }
+ else
+ /* mono */
+ {
+ for (i = sblimit; i; i--, alloc1 += (1 << step))
+ *bita++ = (char) mpg123_getbits(step = alloc1->bits);
+ bita = bit_alloc;
+ scfsi = scfsi_buf;
+ for (i = sblimit; i; i--)
+ if (*bita++)
+ *scfsi++ = (char) mpg123_getbits_fast(2);
+ }
+
+ bita = bit_alloc;
+ scfsi = scfsi_buf;
+ for (i = sblimit2; i; i--)
+ if (*bita++)
+ switch (*scfsi++) {
+ case 0:
+ *scale++ = mpg123_getbits_fast(6);
+ *scale++ = mpg123_getbits_fast(6);
+ *scale++ = mpg123_getbits_fast(6);
+ break;
+ case 1:
+ *scale++ = sc = mpg123_getbits_fast(6);
+ *scale++ = sc;
+ *scale++ = mpg123_getbits_fast(6);
+ break;
+ case 2:
+ *scale++ = sc = mpg123_getbits_fast(6);
+ *scale++ = sc;
+ *scale++ = sc;
+ break;
+ default: /* case 3 */
+ *scale++ = mpg123_getbits_fast(6);
+ *scale++ = sc = mpg123_getbits_fast(6);
+ *scale++ = sc;
+ break;
+ }
+
+}
+
+void
+II_step_two(unsigned int *bit_alloc, real fraction[2][4][SBLIMIT],
+ int *scale, struct frame *fr, int x1)
+{
+ int i, j, k, ba;
+ int stereo = fr->stereo;
+ int sblimit = fr->II_sblimit;
+ int jsbound = fr->jsbound;
+ struct al_table *alloc2, *alloc1 = fr->alloc;
+ unsigned int *bita = bit_alloc;
+ int d1, step;
+
+ for (i = 0; i < jsbound; i++, alloc1 += (1 << step)) {
+ step = alloc1->bits;
+ for (j = 0; j < stereo; j++) {
+ if ((ba = *bita++)) {
+ k = (alloc2 = alloc1 + ba)->bits;
+ if ((d1 = alloc2->d) < 0) {
+ real cm = mpg123_muls[k][scale[x1]];
+
+ fraction[j][0][i] =
+ ((real) ((int) mpg123_getbits(k) + d1)) * cm;
+ fraction[j][1][i] =
+ ((real) ((int) mpg123_getbits(k) + d1)) * cm;
+ fraction[j][2][i] =
+ ((real) ((int) mpg123_getbits(k) + d1)) * cm;
+ }
+ else {
+ static int *table[] =
+ { 0, 0, 0, grp_3tab, 0, grp_5tab, 0, 0, 0,
+ grp_9tab
+ };
+ unsigned int idx, *tab, m = scale[x1];
+
+ idx = (unsigned int) mpg123_getbits(k);
+ tab = (unsigned int *) (table[d1] + idx + idx + idx);
+ fraction[j][0][i] = mpg123_muls[*tab++][m];
+ fraction[j][1][i] = mpg123_muls[*tab++][m];
+ fraction[j][2][i] = mpg123_muls[*tab][m];
+ }
+ scale += 3;
+ }
+ else
+ fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] =
+ 0.0;
+ }
+ }
+
+ for (i = jsbound; i < sblimit; i++, alloc1 += (1 << step)) {
+ step = alloc1->bits;
+ bita++; /* channel 1 and channel 2 bitalloc are the same */
+ if ((ba = *bita++)) {
+ k = (alloc2 = alloc1 + ba)->bits;
+ if ((d1 = alloc2->d) < 0) {
+ real cm;
+
+ cm = mpg123_muls[k][scale[x1 + 3]];
+ fraction[1][0][i] = (fraction[0][0][i] =
+ (real) ((int) mpg123_getbits(k) +
+ d1)) * cm;
+ fraction[1][1][i] = (fraction[0][1][i] =
+ (real) ((int) mpg123_getbits(k) +
+ d1)) * cm;
+ fraction[1][2][i] = (fraction[0][2][i] =
+ (real) ((int) mpg123_getbits(k) +
+ d1)) * cm;
+ cm = mpg123_muls[k][scale[x1]];
+ fraction[0][0][i] *= cm;
+ fraction[0][1][i] *= cm;
+ fraction[0][2][i] *= cm;
+ }
+ else {
+ static int *table[] =
+ { 0, 0, 0, grp_3tab, 0, grp_5tab, 0, 0, 0, grp_9tab };
+ unsigned int idx, *tab, m1, m2;
+
+ m1 = scale[x1];
+ m2 = scale[x1 + 3];
+ idx = (unsigned int) mpg123_getbits(k);
+ tab = (unsigned int *) (table[d1] + idx + idx + idx);
+ fraction[0][0][i] = mpg123_muls[*tab][m1];
+ fraction[1][0][i] = mpg123_muls[*tab++][m2];
+ fraction[0][1][i] = mpg123_muls[*tab][m1];
+ fraction[1][1][i] = mpg123_muls[*tab++][m2];
+ fraction[0][2][i] = mpg123_muls[*tab][m1];
+ fraction[1][2][i] = mpg123_muls[*tab][m2];
+ }
+ scale += 6;
+ }
+ else {
+ fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] =
+ fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] =
+ 0.0;
+ }
+/*
+ should we use individual scalefac for channel 2 or
+ is the current way the right one , where we just copy channel 1 to
+ channel 2 ??
+ The current 'strange' thing is, that we throw away the scalefac
+ values for the second channel ...!!
+ -> changed .. now we use the scalefac values of channel one !!
+ */
+ }
+
+ if (sblimit > (fr->down_sample_sblimit))
+ sblimit = fr->down_sample_sblimit;
+
+ for (i = sblimit; i < SBLIMIT; i++)
+ for (j = 0; j < stereo; j++)
+ fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
+
+}
+
+static void
+II_select_table(struct frame *fr)
+{
+ static int translate[3][2][16] = {
+ {{0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 0},
+ {0, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}},
+ {{0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
+ {{0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 0},
+ {0, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}}
+ };
+
+ int table, sblim;
+ static struct al_table *tables[5] =
+ { alloc_0, alloc_1, alloc_2, alloc_3, alloc_4 };
+ static int sblims[5] = { 27, 30, 8, 12, 30 };
+
+ if (fr->lsf)
+ table = 4;
+ else
+ table =
+ translate[fr->sampling_frequency][2 -
+ fr->stereo][fr->bitrate_index];
+ sblim = sblims[table];
+
+ fr->alloc = tables[table];
+ fr->II_sblimit = sblim;
+}
+
+
+int
+mpg123_do_layer2(struct frame *fr)
+{
+ int i, j;
+ int stereo = fr->stereo;
+ real fraction[2][4][SBLIMIT]; /* pick_table clears unused subbands */
+ unsigned int bit_alloc[64];
+ int scale[192];
+ int single = fr->single;
+
+ II_select_table(fr);
+ fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ?
+ (fr->mode_ext << 2) + 4 : fr->II_sblimit;
+ if (fr->jsbound > fr->II_sblimit)
+ fr->jsbound = fr->II_sblimit;
+
+ if (stereo == 1 || single == 3)
+ single = 0;
+
+ II_step_one(bit_alloc, scale, fr);
+
+ for (i = 0; i < SCALE_BLOCK; i++) {
+ II_step_two(bit_alloc, fraction, scale, fr, i >> 2);
+ for (j = 0; j < 3; j++) {
+ if (single >= 0) {
+ (fr->synth_mono) (fraction[single][j], mpg123_pcm_sample,
+ &mpg123_pcm_point);
+ }
+ else {
+ int p1 = mpg123_pcm_point;
+
+ (fr->synth) (fraction[0][j], 0, mpg123_pcm_sample, &p1);
+ (fr->synth) (fraction[1][j], 1, mpg123_pcm_sample,
+ &mpg123_pcm_point);
+ }
+
+ /* if(mpg123_pcm_point >= audiobufsize)
+ audio_flush(outmode,ai); */
+ }
+ }
+ if (mpg123_info->output_audio && mpg123_info->jump_to_time == -1) {
+ produce_audio(mpg123_ip.output->written_time(),
+ mpg123_cfg.resolution ==
+ 16 ? FMT_S16_NE : FMT_U8,
+ mpg123_cfg.channels ==
+ 2 ? fr->stereo : 1, mpg123_pcm_point,
+ mpg123_pcm_sample, &mpg123_info->going);
+ }
+
+ mpg123_pcm_point = 0;
+
+ return 1;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer3.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer3.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/layer3.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1880 @@
+
+/*
+ * Mpeg Layer-3 audio decoder
+ * --------------------------
+ * copyright (c) 1995-1999 by Michael Hipp.
+ * All rights reserved. See also 'README'
+ *
+ * Optimize-TODO: put short bands into the band-field without the stride of 3 reals
+ * Length-optimze: unify long and short band code where it is possible
+ */
+
+#include <stdlib.h>
+#include <math.h>
+
+#include "beep/output.h"
+
+#include "mpg123.h"
+#include "huffman.h"
+#include "getbits.h"
+
+
+static real ispow[8207];
+static real aa_ca[8], aa_cs[8];
+static real COS1[12][6];
+static real win[4][36];
+static real win1[4][36];
+static real gainpow2[256 + 118 + 4];
+real COS9[9];
+static real COS6_1, COS6_2;
+real tfcos36[9];
+static real tfcos12[3];
+#define NEW_DCT9
+#ifdef NEW_DCT9
+static real cos9[3], cos18[3];
+#endif
+
+#ifdef USE_SIMD
+# define DCT36 (fr->dct36)
+#else
+# define DCT36 mpg123_dct36
+#endif
+
+struct bandInfoStruct {
+ int longIdx[23];
+ int longDiff[22];
+ int shortIdx[14];
+ int shortDiff[13];
+};
+
+int longLimit[9][23];
+int shortLimit[9][14];
+
+/* Used by the getbits macros */
+static unsigned long rval;
+static unsigned char rval_uc;
+
+struct bandInfoStruct bandInfo[9] = {
+/* MPEG 1.0 */
+ {{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162,
+ 196, 238, 288, 342, 418, 576},
+ {4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10, 12, 16, 20, 24, 28, 34, 42, 50, 54,
+ 76, 158},
+ {0, 4 * 3, 8 * 3, 12 * 3, 16 * 3, 22 * 3, 30 * 3, 40 * 3, 52 * 3,
+ 66 * 3, 84 * 3, 106 * 3, 136 * 3, 192 * 3},
+ {4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56}},
+
+ {{0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156,
+ 190, 230, 276, 330, 384, 576},
+ {4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10, 12, 16, 18, 22, 28, 34, 40, 46, 54,
+ 54, 192},
+ {0, 4 * 3, 8 * 3, 12 * 3, 16 * 3, 22 * 3, 28 * 3, 38 * 3, 50 * 3,
+ 64 * 3, 80 * 3, 100 * 3, 126 * 3, 192 * 3},
+ {4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66}},
+
+ {{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194,
+ 240, 296, 364, 448, 550, 576},
+ {4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12, 16, 20, 24, 30, 38, 46, 56, 68,
+ 84, 102, 26},
+ {0, 4 * 3, 8 * 3, 12 * 3, 16 * 3, 22 * 3, 30 * 3, 42 * 3, 58 * 3,
+ 78 * 3, 104 * 3, 138 * 3, 180 * 3, 192 * 3},
+ {4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12}},
+
+/* MPEG 2.0 */
+ {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200,
+ 238, 284, 336, 396, 464, 522, 576},
+ {6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60,
+ 68, 58, 54},
+ {0, 4 * 3, 8 * 3, 12 * 3, 18 * 3, 24 * 3, 32 * 3, 42 * 3, 56 * 3,
+ 74 * 3, 100 * 3, 132 * 3, 174 * 3, 192 * 3},
+ {4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18}},
+/*
+ { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
+ {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
+*/
+/* changed 19th value fropm 330 to 332 */
+ {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194,
+ 232, 278, 332, 394, 464, 540, 576},
+ {6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 18, 22, 26, 32, 38, 46, 54, 62,
+ 70, 76, 36},
+ {0, 4 * 3, 8 * 3, 12 * 3, 18 * 3, 26 * 3, 36 * 3, 48 * 3, 62 * 3,
+ 80 * 3, 104 * 3, 136 * 3, 180 * 3, 192 * 3},
+ {4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12}},
+
+ {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200,
+ 238, 284, 336, 396, 464, 522, 576},
+ {6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60,
+ 68, 58, 54},
+ {0, 4 * 3, 8 * 3, 12 * 3, 18 * 3, 26 * 3, 36 * 3, 48 * 3, 62 * 3,
+ 80 * 3, 104 * 3, 134 * 3, 174 * 3, 192 * 3},
+ {4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18}},
+/* MPEG 2.5 */
+ {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200,
+ 238, 284, 336, 396, 464, 522, 576},
+ {6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60,
+ 68, 58, 54},
+ {0, 12, 24, 36, 54, 78, 108, 144, 186, 240, 312, 402, 522, 576},
+ {4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18}},
+ {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200,
+ 238, 284, 336, 396, 464, 522, 576},
+ {6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60,
+ 68, 58, 54},
+ {0, 12, 24, 36, 54, 78, 108, 144, 186, 240, 312, 402, 522, 576},
+ {4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18}},
+ {{0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336,
+ 400, 476, 566, 568, 570, 572, 574, 576},
+ {12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32, 40, 48, 56, 64, 76, 90,
+ 2, 2, 2, 2, 2},
+ {0, 24, 48, 72, 108, 156, 216, 288, 372, 480, 486, 492, 498, 576},
+ {8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26}},
+};
+
+static int mapbuf0[9][152];
+static int mapbuf1[9][156];
+static int mapbuf2[9][44];
+static int *map[9][3];
+static int *mapend[9][3];
+
+static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
+static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
+
+static real tan1_1[16], tan2_1[16], tan1_2[16], tan2_2[16];
+static real pow1_1[2][16], pow2_1[2][16], pow1_2[2][16], pow2_2[2][16];
+
+/*
+ * init tables for layer-3
+ */
+void
+mpg123_init_layer3(int down_sample_sblimit)
+{
+ int i, j, k, l;
+
+ for (i = -256; i < 118 + 4; i++)
+ gainpow2[i + 256] = pow((double) 2.0, -0.25 * (double) (i + 210));
+ for (i = 0; i < 8207; i++)
+ ispow[i] = pow((double) i, (double) 4.0 / 3.0);
+
+ for (i = 0; i < 8; i++) {
+ static double Ci[8] =
+ { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142,
+ -0.0037
+ };
+ double sq = sqrt(1.0 + Ci[i] * Ci[i]);
+
+ aa_cs[i] = 1.0 / sq;
+ aa_ca[i] = Ci[i] / sq;
+ }
+
+ for (i = 0; i < 18; i++) {
+ win[0][i] = win[1][i] =
+ 0.5 * sin(M_PI / 72.0 * (double) (2 * (i + 0) + 1)) /
+ cos(M_PI * (double) (2 * (i + 0) + 19) / 72.0);
+ win[0][i + 18] = win[3][i + 18] =
+ 0.5 * sin(M_PI / 72.0 * (double) (2 * (i + 18) + 1)) /
+ cos(M_PI * (double) (2 * (i + 18) + 19) / 72.0);
+ }
+ for (i = 0; i < 6; i++) {
+ win[1][i + 18] =
+ 0.5 / cos(M_PI * (double) (2 * (i + 18) + 19) / 72.0);
+ win[3][i + 12] =
+ 0.5 / cos(M_PI * (double) (2 * (i + 12) + 19) / 72.0);
+ win[1][i + 24] =
+ 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 13)) / cos(M_PI *
+ (double)
+ (2 *
+ (i +
+ 24) +
+ 19) / 72.0);
+ win[1][i + 30] = win[3][i] = 0.0;
+ win[3][i + 6] =
+ 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI *
+ (double) (2
+ *
+ (i
+ +
+ 6)
+ +
+ 19)
+ / 72.0);
+ }
+
+ for (i = 0; i < 9; i++)
+ COS9[i] = cos(M_PI / 18.0 * (double) i);
+
+ for (i = 0; i < 9; i++)
+ tfcos36[i] = 0.5 / cos(M_PI * (double) (i * 2 + 1) / 36.0);
+ for (i = 0; i < 3; i++)
+ tfcos12[i] = 0.5 / cos(M_PI * (double) (i * 2 + 1) / 12.0);
+
+ COS6_1 = cos(M_PI / 6.0 * (double) 1);
+ COS6_2 = cos(M_PI / 6.0 * (double) 2);
+
+#ifdef NEW_DCT9
+ cos9[0] = cos(1.0 * M_PI / 9.0);
+ cos9[1] = cos(5.0 * M_PI / 9.0);
+ cos9[2] = cos(7.0 * M_PI / 9.0);
+ cos18[0] = cos(1.0 * M_PI / 18.0);
+ cos18[1] = cos(11.0 * M_PI / 18.0);
+ cos18[2] = cos(13.0 * M_PI / 18.0);
+#endif
+
+ for (i = 0; i < 12; i++) {
+ win[2][i] =
+ 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI *
+ (double) (2
+ *
+ i
+ + 7)
+ / 24.0);
+ for (j = 0; j < 6; j++)
+ COS1[i][j] =
+ cos(M_PI / 24.0 * (double) ((2 * i + 7) * (2 * j + 1)));
+ }
+
+ for (j = 0; j < 4; j++) {
+ static int len[4] = { 36, 36, 12, 36 };
+
+ for (i = 0; i < len[j]; i += 2)
+ win1[j][i] = +win[j][i];
+ for (i = 1; i < len[j]; i += 2)
+ win1[j][i] = -win[j][i];
+ }
+
+ for (i = 0; i < 16; i++) {
+ double t = tan((double) i * M_PI / 12.0);
+
+ tan1_1[i] = t / (1.0 + t);
+ tan2_1[i] = 1.0 / (1.0 + t);
+ tan1_2[i] = M_SQRT2 * t / (1.0 + t);
+ tan2_2[i] = M_SQRT2 / (1.0 + t);
+
+ for (j = 0; j < 2; j++) {
+ double base = pow(2.0, -0.25 * (j + 1.0));
+ double p1 = 1.0, p2 = 1.0;
+
+ if (i > 0) {
+ if (i & 1)
+ p1 = pow(base, (i + 1.0) * 0.5);
+ else
+ p2 = pow(base, i * 0.5);
+ }
+ pow1_1[j][i] = p1;
+ pow2_1[j][i] = p2;
+ pow1_2[j][i] = M_SQRT2 * p1;
+ pow2_2[j][i] = M_SQRT2 * p2;
+ }
+ }
+
+ for (j = 0; j < 9; j++) {
+ struct bandInfoStruct *bi = &bandInfo[j];
+ int *mp;
+ int cb, lwin;
+ int *bdf;
+
+ mp = map[j][0] = mapbuf0[j];
+ bdf = bi->longDiff;
+ for (i = 0, cb = 0; cb < 8; cb++, i += *bdf++) {
+ *mp++ = (*bdf) >> 1;
+ *mp++ = i;
+ *mp++ = 3;
+ *mp++ = cb;
+ }
+ bdf = bi->shortDiff + 3;
+ for (cb = 3; cb < 13; cb++) {
+ int l = (*bdf++) >> 1;
+
+ for (lwin = 0; lwin < 3; lwin++) {
+ *mp++ = l;
+ *mp++ = i + lwin;
+ *mp++ = lwin;
+ *mp++ = cb;
+ }
+ i += 6 * l;
+ }
+ mapend[j][0] = mp;
+
+ mp = map[j][1] = mapbuf1[j];
+ bdf = bi->shortDiff + 0;
+ for (i = 0, cb = 0; cb < 13; cb++) {
+ int l = (*bdf++) >> 1;
+
+ for (lwin = 0; lwin < 3; lwin++) {
+ *mp++ = l;
+ *mp++ = i + lwin;
+ *mp++ = lwin;
+ *mp++ = cb;
+ }
+ i += 6 * l;
+ }
+ mapend[j][1] = mp;
+
+ mp = map[j][2] = mapbuf2[j];
+ bdf = bi->longDiff;
+ for (cb = 0; cb < 22; cb++) {
+ *mp++ = (*bdf++) >> 1;
+ *mp++ = cb;
+ }
+ mapend[j][2] = mp;
+
+ }
+
+ for (j = 0; j < 9; j++) {
+ for (i = 0; i < 23; i++) {
+ longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
+ if (longLimit[j][i] > (down_sample_sblimit))
+ longLimit[j][i] = down_sample_sblimit;
+ }
+ for (i = 0; i < 14; i++) {
+ shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
+ if (shortLimit[j][i] > (down_sample_sblimit))
+ shortLimit[j][i] = down_sample_sblimit;
+ }
+ }
+
+ for (i = 0; i < 5; i++) {
+ for (j = 0; j < 6; j++) {
+ for (k = 0; k < 6; k++) {
+ int n = k + j * 6 + i * 36;
+
+ i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12);
+ }
+ }
+ }
+ for (i = 0; i < 4; i++) {
+ for (j = 0; j < 4; j++) {
+ for (k = 0; k < 4; k++) {
+ int n = k + j * 4 + i * 16;
+
+ i_slen2[n + 180] = i | (j << 3) | (k << 6) | (4 << 12);
+ }
+ }
+ }
+ for (i = 0; i < 4; i++) {
+ for (j = 0; j < 3; j++) {
+ int n = j + i * 3;
+
+ i_slen2[n + 244] = i | (j << 3) | (5 << 12);
+ n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15);
+ }
+ }
+
+ for (i = 0; i < 5; i++) {
+ for (j = 0; j < 5; j++) {
+ for (k = 0; k < 4; k++) {
+ for (l = 0; l < 4; l++) {
+ int n = l + k * 4 + j * 16 + i * 80;
+
+ n_slen2[n] =
+ i | (j << 3) | (k << 6) | (l << 9) | (0 << 12);
+ }
+ }
+ }
+ }
+ for (i = 0; i < 5; i++) {
+ for (j = 0; j < 5; j++) {
+ for (k = 0; k < 4; k++) {
+ int n = k + j * 4 + i * 20;
+
+ n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12);
+ }
+ }
+ }
+}
+
+/*
+ * read additional side information (for MPEG 1 and MPEG 2)
+ */
+static int
+III_get_side_info(struct III_sideinfo *si, int stereo,
+ int ms_stereo, long sfreq, int single, int lsf)
+{
+ int ch, gr;
+ int powdiff = (single == 3) ? 4 : 0;
+
+ static const int tabs[2][5] = { {2, 9, 5, 3, 4}, {1, 8, 1, 2, 9} };
+ const int *tab = tabs[lsf];
+
+ si->main_data_begin = mpg123_getbits(tab[1]);
+ if (stereo == 1)
+ si->private_bits = mpg123_getbits_fast(tab[2]);
+ else
+ si->private_bits = mpg123_getbits_fast(tab[3]);
+
+ if (!lsf) {
+ for (ch = 0; ch < stereo; ch++) {
+ si->ch[ch].gr[0].scfsi = -1;
+ si->ch[ch].gr[1].scfsi = mpg123_getbits_fast(4);
+ }
+ }
+
+ for (gr = 0; gr < tab[0]; gr++) {
+ for (ch = 0; ch < stereo; ch++) {
+ register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
+
+ gr_info->part2_3_length = mpg123_getbits(12);
+ gr_info->big_values = mpg123_getbits(9);
+ if (gr_info->big_values > 288) {
+ /* fprintf(stderr, "big_values too large!\n"); */
+ /* gr_info->big_values = 288; */
+ return 0;
+ }
+ gr_info->pow2gain =
+ gainpow2 + 256 - mpg123_getbits_fast(8) + powdiff;
+ if (ms_stereo)
+ gr_info->pow2gain += 2;
+ gr_info->scalefac_compress = mpg123_getbits(tab[4]);
+
+ if (mpg123_get1bit()) { /* window switch flag */
+ int i;
+
+ gr_info->block_type = mpg123_getbits_fast(2);
+ gr_info->mixed_block_flag = mpg123_get1bit();
+ gr_info->table_select[0] = mpg123_getbits_fast(5);
+ gr_info->table_select[1] = mpg123_getbits_fast(5);
+ /*
+ * table_select[2] not needed, because
+ * there is no region2, but to satisfy
+ * some verifications tools we set it
+ * either.
+ */
+ gr_info->table_select[2] = 0;
+ for (i = 0; i < 3; i++)
+ gr_info->full_gain[i] =
+ gr_info->pow2gain + (mpg123_getbits_fast(3) << 3);
+
+ if (gr_info->block_type == 0) {
+ /* fprintf(stderr, "Blocktype == 0 and window-switching == 1 not allowed.\n"); */
+ /* exit(1); */
+ return 0;
+ }
+
+ /* region_count/start parameters are implicit in this case. */
+ if (!lsf || gr_info->block_type == 2)
+ gr_info->region1start = 36 >> 1;
+ else {
+ /* check this again for 2.5 and sfreq=8 */
+ if (sfreq == 8)
+ gr_info->region1start = 108 >> 1;
+ else
+ gr_info->region1start = 54 >> 1;
+ }
+ gr_info->region2start = 576 >> 1;
+ }
+ else {
+ int i, r0c, r1c;
+
+ for (i = 0; i < 3; i++)
+ gr_info->table_select[i] = mpg123_getbits_fast(5);
+ r0c = mpg123_getbits_fast(4);
+ r1c = mpg123_getbits_fast(3);
+ gr_info->region1start = bandInfo[sfreq].longIdx[r0c + 1] >> 1;
+ if (r0c + r1c + 2 > 22)
+ gr_info->region2start = 576 >> 1;
+ else
+ gr_info->region2start =
+ bandInfo[sfreq].longIdx[r0c + 1 + r1c + 1] >> 1;
+ gr_info->block_type = 0;
+ gr_info->mixed_block_flag = 0;
+ }
+ if (!lsf)
+ gr_info->preflag = mpg123_get1bit();
+ gr_info->scalefac_scale = mpg123_get1bit();
+ gr_info->count1table_select = mpg123_get1bit();
+ }
+ }
+ return 1;
+}
+
+
+/*
+ * read scalefactors
+ */
+static int
+III_get_scale_factors_1(int *scf, struct gr_info_s *gr_info)
+{
+ static const unsigned char slen[2][16] = {
+ {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
+ {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
+ };
+ int numbits;
+ int num0 = slen[0][gr_info->scalefac_compress];
+ int num1 = slen[1][gr_info->scalefac_compress];
+
+ if (gr_info->block_type == 2) {
+ int i = 18;
+
+ numbits = (num0 + num1) * 18;
+
+ if (gr_info->mixed_block_flag) {
+ for (i = 8; i; i--)
+ *scf++ = mpg123_getbits_fast(num0);
+ i = 9;
+ numbits -= num0; /* num0 * 17 + num1 * 18 */
+ }
+
+ for (; i; i--)
+ *scf++ = mpg123_getbits_fast(num0);
+ for (i = 18; i; i--)
+ *scf++ = mpg123_getbits_fast(num1);
+ *scf++ = 0;
+ *scf++ = 0;
+ *scf++ = 0; /* short[13][0..2] = 0 */
+ }
+ else {
+ int i;
+ int scfsi = gr_info->scfsi;
+
+ if (scfsi < 0) { /* scfsi < 0 => granule == 0 */
+ for (i = 11; i; i--)
+ *scf++ = mpg123_getbits_fast(num0);
+ for (i = 10; i; i--)
+ *scf++ = mpg123_getbits_fast(num1);
+ numbits = (num0 + num1) * 10 + num0;
+ *scf++ = 0;
+ }
+ else {
+ numbits = 0;
+ if (!(scfsi & 0x8)) {
+ for (i = 0; i < 6; i++)
+ *scf++ = mpg123_getbits_fast(num0);
+ numbits += num0 * 6;
+ }
+ else {
+ scf += 6;
+ }
+
+ if (!(scfsi & 0x4)) {
+ for (i = 0; i < 5; i++)
+ *scf++ = mpg123_getbits_fast(num0);
+ numbits += num0 * 5;
+ }
+ else {
+ scf += 5;
+ }
+
+ if (!(scfsi & 0x2)) {
+ for (i = 0; i < 5; i++)
+ *scf++ = mpg123_getbits_fast(num1);
+ numbits += num1 * 5;
+ }
+ else {
+ scf += 5;
+ }
+
+ if (!(scfsi & 0x1)) {
+ for (i = 0; i < 5; i++)
+ *scf++ = mpg123_getbits_fast(num1);
+ numbits += num1 * 5;
+ }
+ else {
+ scf += 5;
+ }
+ *scf++ = 0; /* no l[21] in original sources */
+ }
+ }
+ return numbits;
+}
+
+static int
+III_get_scale_factors_2(int *scf, struct gr_info_s *gr_info, int i_stereo)
+{
+ unsigned char *pnt;
+ int i, j, n = 0, numbits = 0;
+ unsigned int slen;
+
+ static unsigned char stab[3][6][4] = {
+ {{6, 5, 5, 5}, {6, 5, 7, 3}, {11, 10, 0, 0},
+ {7, 7, 7, 0}, {6, 6, 6, 3}, {8, 8, 5, 0}},
+ {{9, 9, 9, 9}, {9, 9, 12, 6}, {18, 18, 0, 0},
+ {12, 12, 12, 0}, {12, 9, 9, 6}, {15, 12, 9, 0}},
+ {{6, 9, 9, 9}, {6, 9, 12, 6}, {15, 18, 0, 0},
+ {6, 15, 12, 0}, {6, 12, 9, 6}, {6, 18, 9, 0}}
+ };
+
+ if (i_stereo) /* i_stereo AND second channel -> mpg123_do_layer3() checks this */
+ slen = i_slen2[gr_info->scalefac_compress >> 1];
+ else
+ slen = n_slen2[gr_info->scalefac_compress];
+
+ gr_info->preflag = (slen >> 15) & 0x1;
+
+ n = 0;
+ if (gr_info->block_type == 2) {
+ n++;
+ if (gr_info->mixed_block_flag)
+ n++;
+ }
+
+ pnt = stab[n][(slen >> 12) & 0x7];
+
+ for (i = 0; i < 4; i++) {
+ int num = slen & 0x7;
+
+ slen >>= 3;
+ if (num) {
+ for (j = 0; j < (int) (pnt[i]); j++)
+ *scf++ = mpg123_getbits_fast(num);
+ numbits += pnt[i] * num;
+ }
+ else {
+ for (j = 0; j < (int) (pnt[i]); j++)
+ *scf++ = 0;
+ }
+ }
+
+ n = (n << 1) + 1;
+ for (i = 0; i < n; i++)
+ *scf++ = 0;
+
+ return numbits;
+}
+
+static int pretab1[22] =
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 };
+static int pretab2[22] =
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+/*
+ * Dequantize samples (includes huffman decoding)
+ */
+/* 24 is enough because tab13 has max. a 19 bit huffvector */
+#define BITSHIFT ((sizeof (long) - 1) * 8)
+
+#define REFRESH_MASK() \
+while(num < BITSHIFT) { \
+ mask |= ((unsigned long)mpg123_getbyte()) << (BITSHIFT - num); \
+ num += 8; \
+ part2remain -= 8; \
+}
+
+static int
+III_dequantize_sample(real xr[SBLIMIT][SSLIMIT], int *scf,
+ struct gr_info_s *gr_info, int sfreq, int part2bits)
+{
+ int shift = 1 + gr_info->scalefac_scale;
+ real *xrpnt = (real *) xr;
+ int l[3], l3;
+ int part2remain = gr_info->part2_3_length - part2bits;
+ int *me;
+
+ int num = mpg123_getbitoffset();
+ long mask;
+ /* we must split this, because for num==0 the shift is undefined if you do it in one step */
+ mask = ((unsigned long) mpg123_getbits(num)) << BITSHIFT;
+ mask <<= 8 - num;
+ part2remain -= num;
+
+ {
+ int bv = gr_info->big_values;
+ int region1 = gr_info->region1start;
+ int region2 = gr_info->region2start;
+
+ l3 = ((576 >> 1) - bv) >> 1;
+/*
+ * we may lose the 'odd' bit here !!
+ * check this later again
+ */
+ if (bv <= region1) {
+ l[0] = bv;
+ l[1] = 0;
+ l[2] = 0;
+ }
+ else {
+ l[0] = region1;
+ if (bv <= region2) {
+ l[1] = bv - l[0];
+ l[2] = 0;
+ }
+ else {
+ l[1] = region2 - l[0];
+ l[2] = bv - region2;
+ }
+ }
+ }
+
+ if (gr_info->block_type == 2) {
+ /*
+ * decoding with short or mixed mode BandIndex table
+ */
+ int i, max[4];
+ int step = 0, lwin = 3, cb = 0;
+ register real v = 0.0;
+ register int *m, mc;
+
+ if (gr_info->mixed_block_flag) {
+ max[3] = -1;
+ max[0] = max[1] = max[2] = 2;
+ m = map[sfreq][0];
+ me = mapend[sfreq][0];
+ }
+ else {
+ max[0] = max[1] = max[2] = max[3] = -1;
+ /* max[3] not really needed in this case */
+ m = map[sfreq][1];
+ me = mapend[sfreq][1];
+ }
+
+ mc = 0;
+ for (i = 0; i < 2; i++) {
+ int lp = l[i];
+ struct newhuff *h = ht + gr_info->table_select[i];
+
+ for (; lp; lp--, mc--) {
+ register int x, y;
+ if ((!mc)) {
+ mc = *m++;
+ xrpnt = ((real *) xr) + (*m++);
+ lwin = *m++;
+ cb = *m++;
+ if (lwin == 3) {
+ v = gr_info->pow2gain[(*scf++) << shift];
+ step = 1;
+ }
+ else {
+ v = gr_info->full_gain[lwin][(*scf++) << shift];
+ step = 3;
+ }
+ }
+ {
+ register short *val = h->table;
+
+ REFRESH_MASK();
+ while ((y = *val++) < 0) {
+ if (mask < 0)
+ val -= y;
+ num--;
+ mask <<= 1;
+ }
+ x = y >> 4;
+ y &= 0xf;
+ }
+ if (x == 15 && h->linbits) {
+ max[lwin] = cb;
+ REFRESH_MASK();
+ x += ((unsigned long) mask) >> (BITSHIFT + 8 -
+ h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if (mask < 0)
+ *xrpnt = -ispow[x] * v;
+ else
+ *xrpnt = ispow[x] * v;
+ mask <<= 1;
+ }
+ else if (x) {
+ max[lwin] = cb;
+ if (mask < 0)
+ *xrpnt = -ispow[x] * v;
+ else
+ *xrpnt = ispow[x] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ if (y == 15 && h->linbits) {
+ max[lwin] = cb;
+ REFRESH_MASK();
+ y += ((unsigned long) mask) >> (BITSHIFT + 8 -
+ h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if (mask < 0)
+ *xrpnt = -ispow[y] * v;
+ else
+ *xrpnt = ispow[y] * v;
+ mask <<= 1;
+ }
+ else if (y) {
+ max[lwin] = cb;
+ if (mask < 0)
+ *xrpnt = -ispow[y] * v;
+ else
+ *xrpnt = ispow[y] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ }
+ }
+
+ for (; l3 && (part2remain + num > 0); l3--) {
+ struct newhuff *h = htc + gr_info->count1table_select;
+ register short *val = h->table, a;
+
+ REFRESH_MASK();
+ while ((a = *val++) < 0) {
+ if (mask < 0)
+ val -= a;
+ num--;
+ mask <<= 1;
+ }
+ if (part2remain + num <= 0) {
+ num -= part2remain + num;
+ break;
+ }
+
+ for (i = 0; i < 4; i++) {
+ if (!(i & 1)) {
+ if (!mc) {
+ mc = *m++;
+ xrpnt = ((real *) xr) + (*m++);
+ lwin = *m++;
+ cb = *m++;
+ if (lwin == 3) {
+ v = gr_info->pow2gain[(*scf++) << shift];
+ step = 1;
+ }
+ else {
+ v = gr_info->full_gain[lwin][(*scf++) << shift];
+ step = 3;
+ }
+ }
+ mc--;
+ }
+ if ((a & (0x8 >> i))) {
+ max[lwin] = cb;
+ if (part2remain + num <= 0) {
+ break;
+ }
+ if (mask < 0)
+ *xrpnt = -v;
+ else
+ *xrpnt = v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ }
+ }
+
+ if (lwin < 3) { /* short band? */
+ while (1) {
+ /* HACK Prevent overflowing the xr buffer */
+ if (mc * 6 > &xr[SBLIMIT][SSLIMIT] - xrpnt)
+ return 1;
+
+ for (; mc > 0; mc--) {
+ *xrpnt = 0.0;
+ xrpnt += 3; /* short band -> step=3 */
+ *xrpnt = 0.0;
+ xrpnt += 3;
+ }
+ if (m >= me)
+ break;
+ mc = *m++;
+ xrpnt = ((real *) xr) + *m++;
+ if (*m++ == 0)
+ break; /* optimize: field will be set to zero at the end of the function */
+ m++; /* cb */
+ }
+ }
+
+ gr_info->maxband[0] = max[0] + 1;
+ gr_info->maxband[1] = max[1] + 1;
+ gr_info->maxband[2] = max[2] + 1;
+ gr_info->maxbandl = max[3] + 1;
+
+ {
+ int rmax = max[0] > max[1] ? max[0] : max[1];
+
+ rmax = (rmax > max[2] ? rmax : max[2]) + 1;
+ gr_info->maxb =
+ rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3] + 1];
+ }
+
+ }
+ else {
+ /*
+ * decoding with 'long' BandIndex table (block_type != 2)
+ */
+ int *pretab = gr_info->preflag ? pretab1 : pretab2;
+ int i, max = -1;
+ int cb = 0;
+ int *m = map[sfreq][2];
+ register real v = 0.0;
+ int mc = 0;
+
+ /*
+ * long hash table values
+ */
+ for (i = 0; i < 3; i++) {
+ int lp = l[i];
+ struct newhuff *h = ht + gr_info->table_select[i];
+
+ for (; lp; lp--, mc--) {
+ int x, y;
+
+ if (!mc) {
+ mc = *m++;
+ cb = *m++;
+/* if (cb == 21) */
+/* v = 0.0; */
+/* else */
+ v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
+
+ }
+ {
+ register short *val = h->table;
+ REFRESH_MASK();
+ while ((y = *val++) < 0) {
+ if (mask < 0)
+ val -= y;
+ num--;
+ mask <<= 1;
+ }
+ x = y >> 4;
+ y &= 0xf;
+ }
+
+ if (x == 15 && h->linbits) {
+ max = cb;
+ REFRESH_MASK();
+ x += ((unsigned long) mask) >> (BITSHIFT + 8 -
+ h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if (mask < 0)
+ *xrpnt++ = -ispow[x] * v;
+ else
+ *xrpnt++ = ispow[x] * v;
+ mask <<= 1;
+ }
+ else if (x) {
+ max = cb;
+ if (mask < 0)
+ *xrpnt++ = -ispow[x] * v;
+ else
+ *xrpnt++ = ispow[x] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt++ = 0.0;
+
+ if (y == 15 && h->linbits) {
+ max = cb;
+ REFRESH_MASK();
+ y += ((unsigned long) mask) >> (BITSHIFT + 8 -
+ h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if (mask < 0)
+ *xrpnt++ = -ispow[y] * v;
+ else
+ *xrpnt++ = ispow[y] * v;
+ mask <<= 1;
+ }
+ else if (y) {
+ max = cb;
+ if (mask < 0)
+ *xrpnt++ = -ispow[y] * v;
+ else
+ *xrpnt++ = ispow[y] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt++ = 0.0;
+ }
+ }
+
+ /*
+ * short (count1table) values
+ */
+ for (; l3 && (part2remain + num > 0); l3--) {
+ struct newhuff *h = htc + gr_info->count1table_select;
+ register short *val = h->table, a;
+
+ REFRESH_MASK();
+ while ((a = *val++) < 0) {
+ if (mask < 0)
+ val -= a;
+ num--;
+ mask <<= 1;
+ }
+ if (part2remain + num <= 0) {
+ num -= part2remain + num;
+ break;
+ }
+
+ for (i = 0; i < 4; i++) {
+ if (!(i & 1)) {
+ if (!mc) {
+ mc = *m++;
+ cb = *m++;
+/* if (cb == 21) */
+/* v = 0.0; */
+/* else */
+ v = gr_info->
+ pow2gain[((*scf++) + (*pretab++)) << shift];
+ }
+ mc--;
+ }
+ if ((a & (0x8 >> i))) {
+ max = cb;
+ if (part2remain + num <= 0) {
+ break;
+ }
+ if (mask < 0)
+ *xrpnt++ = -v;
+ else
+ *xrpnt++ = v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt++ = 0.0;
+ }
+ }
+
+ gr_info->maxbandl = max + 1;
+ gr_info->maxb = longLimit[sfreq][gr_info->maxbandl];
+ }
+
+ part2remain += num;
+ mpg123_backbits(num);
+ num = 0;
+
+ while (xrpnt < &xr[SBLIMIT][0])
+ *xrpnt++ = 0.0;
+
+ while (part2remain > 16) {
+ mpg123_getbits(16); /* Dismiss stuffing Bits */
+ part2remain -= 16;
+ }
+ if (part2remain > 0)
+ mpg123_getbits(part2remain);
+ else if (part2remain < 0) {
+/* fprintf(stderr, "mpg123: Can't rewind stream by %d bits!\n", */
+/* -part2remain); */
+ return 1; /* -> error */
+ }
+ return 0;
+}
+
+/*
+ * III_stereo: calculate real channel values for Joint-I-Stereo-mode
+ */
+static void
+III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT], int *scalefac,
+ struct gr_info_s *gr_info, int sfreq, int ms_stereo, int lsf)
+{
+ real(*xr)[SBLIMIT * SSLIMIT] = (real(*)[SBLIMIT * SSLIMIT]) xr_buf;
+ struct bandInfoStruct *bi = &bandInfo[sfreq];
+
+ const real *tab1, *tab2;
+
+#if 1
+ int tab;
+ static const real *tabs[3][2][2] = {
+ {{tan1_1, tan2_1}, {tan1_2, tan2_2}},
+ {{pow1_1[0], pow2_1[0]}, {pow1_2[0], pow2_2[0]}},
+ {{pow1_1[1], pow2_1[1]}, {pow1_2[1], pow2_2[1]}}
+ };
+
+ tab = lsf + (gr_info->scalefac_compress & lsf);
+ tab1 = tabs[tab][ms_stereo][0];
+ tab2 = tabs[tab][ms_stereo][1];
+#else
+ if (lsf) {
+ int p = gr_info->scalefac_compress & 0x1;
+
+ if (ms_stereo) {
+ tab1 = pow1_2[p];
+ tab2 = pow2_2[p];
+ }
+ else {
+ tab1 = pow1_1[p];
+ tab2 = pow2_1[p];
+ }
+ }
+ else {
+ if (ms_stereo) {
+ tab1 = tan1_2;
+ tab2 = tan2_2;
+ }
+ else {
+ tab1 = tan1_1;
+ tab2 = tan2_1;
+ }
+ }
+#endif
+
+ if (gr_info->block_type == 2) {
+ int lwin, do_l = 0;
+
+ if (gr_info->mixed_block_flag)
+ do_l = 1;
+
+ for (lwin = 0; lwin < 3; lwin++) { /* process each window */
+ /* get first band with zero values */
+ int is_p, sb, idx, sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */
+
+ if (sfb > 3)
+ do_l = 0;
+
+ for (; sfb < 12; sfb++) {
+ is_p = scalefac[sfb * 3 + lwin - gr_info->mixed_block_flag]; /* scale: 0-15 */
+ if (is_p != 7) {
+ real t1, t2;
+
+ sb = bi->shortDiff[sfb];
+ idx = bi->shortIdx[sfb] + lwin;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for (; sb > 0; sb--, idx += 3) {
+ real v = xr[0][idx];
+
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ }
+
+#if 1
+/* in the original: copy 10 to 11 , here: copy 11 to 12
+ maybe still wrong??? (copy 12 to 13?) */
+ is_p = scalefac[11 * 3 + lwin - gr_info->mixed_block_flag]; /* scale: 0-15 */
+ sb = bi->shortDiff[12];
+ idx = bi->shortIdx[12] + lwin;
+#else
+ is_p = scalefac[10 * 3 + lwin - gr_info->mixed_block_flag]; /* scale: 0-15 */
+ sb = bi->shortDiff[11];
+ idx = bi->shortIdx[11] + lwin;
+#endif
+ if (is_p != 7) {
+ real t1, t2;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for (; sb > 0; sb--, idx += 3) {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ } /* end for(lwin; .. ; . ) */
+
+/* also check l-part, if ALL bands in the three windows are 'empty'
+ * and mode = mixed_mode
+ */
+ if (do_l) {
+ int sfb = gr_info->maxbandl;
+ int idx = bi->longIdx[sfb];
+
+ for (; sfb < 8; sfb++) {
+ int sb = bi->longDiff[sfb];
+ int is_p = scalefac[sfb]; /* scale: 0-15 */
+
+ if (is_p != 7) {
+ real t1, t2;
+
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for (; sb > 0; sb--, idx++) {
+ real v = xr[0][idx];
+
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ else
+ idx += sb;
+ }
+ }
+ }
+ else { /* ((gr_info->block_type != 2)) */
+ int sfb = gr_info->maxbandl;
+ int is_p, idx = bi->longIdx[sfb];
+
+/* hmm ... maybe the maxbandl stuff for i-stereo is buggy? */
+ if (sfb <= 21) {
+ for (; sfb < 21; sfb++) {
+ int sb = bi->longDiff[sfb];
+
+ is_p = scalefac[sfb]; /* scale: 0-15 */
+ if (is_p != 7) {
+ real t1, t2;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for (; sb > 0; sb--, idx++) {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ else
+ idx += sb;
+ }
+
+ is_p = scalefac[20];
+ if (is_p != 7) { /* copy l-band 20 to l-band 21 */
+ int sb;
+ real t1 = tab1[is_p], t2 = tab2[is_p];
+
+ for (sb = bi->longDiff[21]; sb > 0; sb--, idx++) {
+ real v = xr[0][idx];
+
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ }
+ } /* ... */
+}
+
+static void
+III_antialias(real xr[SBLIMIT][SSLIMIT], struct gr_info_s *gr_info)
+{
+ int sblim;
+
+ if (gr_info->block_type == 2) {
+ if (!gr_info->mixed_block_flag)
+ return;
+ sblim = 1;
+ }
+ else {
+ sblim = gr_info->maxb - 1;
+ }
+
+ /* 31 alias-reduction operations between each pair of sub-bands */
+ /* with 8 butterflies between each pair */
+
+ {
+ int sb;
+ real *xr1 = (real *) xr[1];
+
+ if (sblim < 1 || sblim > SBLIMIT)
+ return;
+
+ for (sb = sblim; sb; sb--, xr1 += 10) {
+ int ss;
+ real *cs = aa_cs, *ca = aa_ca;
+ real *xr2 = xr1;
+
+ for (ss = 7; ss >= 0; ss--) { /* upper and lower butterfly inputs */
+ register real bu = *--xr2, bd = *xr1;
+
+ *xr2 = (bu * (*cs)) - (bd * (*ca));
+ *xr1++ = (bd * (*cs++)) + (bu * (*ca++));
+ }
+ }
+ }
+}
+
+/*
+ This is an optimized DCT from Jeff Tsay's maplay 1.2+ package.
+ Saved one multiplication by doing the 'twiddle factor' stuff
+ together with the window mul. (MH)
+
+ This uses Byeong Gi Lee's Fast Cosine Transform algorithm, but the
+ 9 point IDCT needs to be reduced further. Unfortunately, I don't
+ know how to do that, because 9 is not an even number. - Jeff.
+
+ ****************************************************************
+
+ 9 Point Inverse Discrete Cosine Transform
+
+ This piece of code is Copyright 1997 Mikko Tommila and is freely usable
+ by anybody. The algorithm itself is of course in the public domain.
+
+ Again derived heuristically from the 9-point WFTA.
+
+ The algorithm is optimized (?) for speed, not for small rounding errors or
+ good readability.
+
+ 36 additions, 11 multiplications
+
+ Again this is very likely sub-optimal.
+
+ The code is optimized to use a minimum number of temporary variables,
+ so it should compile quite well even on 8-register Intel x86 processors.
+ This makes the code quite obfuscated and very difficult to understand.
+
+ References:
+ [1] S. Winograd: "On Computing the Discrete Fourier Transform",
+ Mathematics of Computation, Volume 32, Number 141, January 1978,
+ Pages 175-199
+*/
+
+/*------------------------------------------------------------------*/
+/* */
+/* Function: Calculation of the inverse MDCT */
+/* */
+/*------------------------------------------------------------------*/
+
+#define MACRO(v) \
+do { \
+ real tmpval; \
+ \
+ tmpval = tmp[(v)] + tmp[17-(v)]; \
+ out2[9+(v)] = tmpval * w[27+(v)]; \
+ out2[8-(v)] = tmpval * w[26-(v)]; \
+ tmpval = tmp[(v)] - tmp[17-(v)]; \
+ ts[SBLIMIT*(8-(v))] = out1[8-(v)] + tmpval * w[8-(v)]; \
+ ts[SBLIMIT*(9+(v))] = out1[9+(v)] + tmpval * w[9+(v)]; \
+} while (0)
+
+#ifndef USE_SIMD
+static
+#endif
+ void
+mpg123_dct36(real * inbuf, real * o1, real * o2, real * wintab, real * tsbuf)
+{
+ real tmp[18];
+ register real *in = inbuf;
+
+ in[17] += in[16];
+ in[16] += in[15];
+ in[15] += in[14];
+ in[14] += in[13];
+ in[13] += in[12];
+ in[12] += in[11];
+ in[11] += in[10];
+ in[10] += in[9];
+ in[9] += in[8];
+ in[8] += in[7];
+ in[7] += in[6];
+ in[6] += in[5];
+ in[5] += in[4];
+ in[4] += in[3];
+ in[3] += in[2];
+ in[2] += in[1];
+ in[1] += in[0];
+
+ in[17] += in[15];
+ in[15] += in[13];
+ in[13] += in[11];
+ in[11] += in[9];
+ in[9] += in[7];
+ in[7] += in[5];
+ in[5] += in[3];
+ in[3] += in[1];
+
+
+ {
+ real t3;
+ {
+ real t0, t1, t2;
+
+ t0 = COS6_2 * (in[8] + in[16] - in[4]);
+ t1 = COS6_2 * in[12];
+
+ t3 = in[0];
+ t2 = t3 - t1 - t1;
+ tmp[1] = tmp[7] = t2 - t0;
+ tmp[4] = t2 + t0 + t0;
+ t3 += t1;
+
+ t2 = COS6_1 * (in[10] + in[14] - in[2]);
+ tmp[1] -= t2;
+ tmp[7] += t2;
+ }
+ {
+ real t0, t1, t2;
+
+ t0 = cos9[0] * (in[4] + in[8]);
+ t1 = cos9[1] * (in[8] - in[16]);
+ t2 = cos9[2] * (in[4] + in[16]);
+
+ tmp[2] = tmp[6] = t3 - t0 - t2;
+ tmp[0] = tmp[8] = t3 + t0 + t1;
+ tmp[3] = tmp[5] = t3 - t1 + t2;
+ }
+ }
+ {
+ real t1, t2, t3;
+
+ t1 = cos18[0] * (in[2] + in[10]);
+ t2 = cos18[1] * (in[10] - in[14]);
+ t3 = COS6_1 * in[6];
+
+ {
+ real t0 = t1 + t2 + t3;
+ tmp[0] += t0;
+ tmp[8] -= t0;
+ }
+
+ t2 -= t3;
+ t1 -= t3;
+
+ t3 = cos18[2] * (in[2] + in[14]);
+
+ t1 += t3;
+ tmp[3] += t1;
+ tmp[5] -= t1;
+
+ t2 -= t3;
+ tmp[2] += t2;
+ tmp[6] -= t2;
+ }
+
+ {
+ real t0, t1, t2, t3, t4, t5, t6, t7;
+
+ t1 = COS6_2 * in[13];
+ t2 = COS6_2 * (in[9] + in[17] - in[5]);
+
+ t3 = in[1] + t1;
+ t4 = in[1] - t1 - t1;
+ t5 = t4 - t2;
+
+ t0 = cos9[0] * (in[5] + in[9]);
+ t1 = cos9[1] * (in[9] - in[17]);
+
+ tmp[13] = (t4 + t2 + t2) * tfcos36[17 - 13];
+ t2 = cos9[2] * (in[5] + in[17]);
+
+ t6 = t3 - t0 - t2;
+ t0 += t3 + t1;
+ t3 += t2 - t1;
+
+ t2 = cos18[0] * (in[3] + in[11]);
+ t4 = cos18[1] * (in[11] - in[15]);
+ t7 = COS6_1 * in[7];
+
+ t1 = t2 + t4 + t7;
+ tmp[17] = (t0 + t1) * tfcos36[17 - 17];
+ tmp[9] = (t0 - t1) * tfcos36[17 - 9];
+ t1 = cos18[2] * (in[3] + in[15]);
+ t2 += t1 - t7;
+
+ tmp[14] = (t3 + t2) * tfcos36[17 - 14];
+ t0 = COS6_1 * (in[11] + in[15] - in[3]);
+ tmp[12] = (t3 - t2) * tfcos36[17 - 12];
+
+ t4 -= t1 + t7;
+
+ tmp[16] = (t5 - t0) * tfcos36[17 - 16];
+ tmp[10] = (t5 + t0) * tfcos36[17 - 10];
+ tmp[15] = (t6 + t4) * tfcos36[17 - 15];
+ tmp[11] = (t6 - t4) * tfcos36[17 - 11];
+ }
+
+ {
+ register real *out2 = o2;
+ register real *w = wintab;
+ register real *out1 = o1;
+ register real *ts = tsbuf;
+
+ MACRO(0);
+ MACRO(1);
+ MACRO(2);
+ MACRO(3);
+ MACRO(4);
+ MACRO(5);
+ MACRO(6);
+ MACRO(7);
+ MACRO(8);
+ }
+}
+
+/*
+ * new DCT12
+ */
+static void
+dct12(real * in, real * rawout1, real * rawout2,
+ register real * wi, register real * ts)
+{
+
+#define DCT12_PART1() \
+do { \
+ in5 = in[5*3]; \
+ in5 += (in4 = in[4*3]); \
+ in4 += (in3 = in[3*3]); \
+ in3 += (in2 = in[2*3]); \
+ in2 += (in1 = in[1*3]); \
+ in1 += (in0 = in[0*3]); \
+ \
+ in5 += in3; in3 += in1; \
+ \
+ in2 *= COS6_1; \
+ in3 *= COS6_1; \
+} while (0)
+
+#define DCT12_PART2() \
+do { \
+ in0 += in4 * COS6_2; \
+ \
+ in4 = in0 + in2; \
+ in0 -= in2; \
+ \
+ in1 += in5 * COS6_2; \
+ \
+ in5 = (in1 + in3) * tfcos12[0]; \
+ in1 = (in1 - in3) * tfcos12[2]; \
+ \
+ in3 = in4 + in5; \
+ in4 -= in5; \
+ \
+ in2 = in0 + in1; \
+ in0 -= in1; \
+} while (0)
+
+
+ {
+ real in0, in1, in2, in3, in4, in5;
+ register real *out1 = rawout1;
+
+ ts[SBLIMIT * 0] = out1[0];
+ ts[SBLIMIT * 1] = out1[1];
+ ts[SBLIMIT * 2] = out1[2];
+ ts[SBLIMIT * 3] = out1[3];
+ ts[SBLIMIT * 4] = out1[4];
+ ts[SBLIMIT * 5] = out1[5];
+
+ DCT12_PART1();
+
+ {
+ real tmp0, tmp1 = (in0 - in4);
+
+ {
+ real tmp2 = (in1 - in5) * tfcos12[1];
+
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ ts[(17 - 1) * SBLIMIT] = out1[17 - 1] + tmp0 * wi[11 - 1];
+ ts[(12 + 1) * SBLIMIT] = out1[12 + 1] + tmp0 * wi[6 + 1];
+ ts[(6 + 1) * SBLIMIT] = out1[6 + 1] + tmp1 * wi[1];
+ ts[(11 - 1) * SBLIMIT] = out1[11 - 1] + tmp1 * wi[5 - 1];
+ }
+
+ DCT12_PART2();
+
+ ts[(17 - 0) * SBLIMIT] = out1[17 - 0] + in2 * wi[11 - 0];
+ ts[(12 + 0) * SBLIMIT] = out1[12 + 0] + in2 * wi[6 + 0];
+ ts[(12 + 2) * SBLIMIT] = out1[12 + 2] + in3 * wi[6 + 2];
+ ts[(17 - 2) * SBLIMIT] = out1[17 - 2] + in3 * wi[11 - 2];
+
+ ts[(6 + 0) * SBLIMIT] = out1[6 + 0] + in0 * wi[0];
+ ts[(11 - 0) * SBLIMIT] = out1[11 - 0] + in0 * wi[5 - 0];
+ ts[(6 + 2) * SBLIMIT] = out1[6 + 2] + in4 * wi[2];
+ ts[(11 - 2) * SBLIMIT] = out1[11 - 2] + in4 * wi[5 - 2];
+ }
+
+ in++;
+
+ {
+ real in0, in1, in2, in3, in4, in5;
+ register real *out2 = rawout2;
+
+ DCT12_PART1();
+
+ {
+ real tmp0, tmp1 = (in0 - in4);
+
+ {
+ real tmp2 = (in1 - in5) * tfcos12[1];
+
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ out2[5 - 1] = tmp0 * wi[11 - 1];
+ out2[0 + 1] = tmp0 * wi[6 + 1];
+ ts[(12 + 1) * SBLIMIT] += tmp1 * wi[1];
+ ts[(17 - 1) * SBLIMIT] += tmp1 * wi[5 - 1];
+ }
+
+ DCT12_PART2();
+
+ out2[5 - 0] = in2 * wi[11 - 0];
+ out2[0 + 0] = in2 * wi[6 + 0];
+ out2[0 + 2] = in3 * wi[6 + 2];
+ out2[5 - 2] = in3 * wi[11 - 2];
+
+ ts[(12 + 0) * SBLIMIT] += in0 * wi[0];
+ ts[(17 - 0) * SBLIMIT] += in0 * wi[5 - 0];
+ ts[(12 + 2) * SBLIMIT] += in4 * wi[2];
+ ts[(17 - 2) * SBLIMIT] += in4 * wi[5 - 2];
+ }
+
+ in++;
+
+ {
+ real in0, in1, in2, in3, in4, in5;
+ register real *out2 = rawout2;
+
+ out2[12] = out2[13] = out2[14] = out2[15] = out2[16] = out2[17] = 0.0;
+
+ DCT12_PART1();
+
+ {
+ real tmp0, tmp1 = (in0 - in4);
+
+ {
+ real tmp2 = (in1 - in5) * tfcos12[1];
+
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ out2[11 - 1] = tmp0 * wi[11 - 1];
+ out2[6 + 1] = tmp0 * wi[6 + 1];
+ out2[0 + 1] += tmp1 * wi[1];
+ out2[5 - 1] += tmp1 * wi[5 - 1];
+ }
+
+ DCT12_PART2();
+
+ out2[11 - 0] = in2 * wi[11 - 0];
+ out2[6 + 0] = in2 * wi[6 + 0];
+ out2[6 + 2] = in3 * wi[6 + 2];
+ out2[11 - 2] = in3 * wi[11 - 2];
+
+ out2[0 + 0] += in0 * wi[0];
+ out2[5 - 0] += in0 * wi[5 - 0];
+ out2[0 + 2] += in4 * wi[2];
+ out2[5 - 2] += in4 * wi[5 - 2];
+ }
+}
+
+/*
+ * III_hybrid
+ */
+static void
+III_hybrid(real fsIn[SBLIMIT][SSLIMIT],
+ real tsOut[SSLIMIT][SBLIMIT], int ch,
+ struct gr_info_s *gr_info, struct frame *fr)
+{
+ static real block[2][2][SBLIMIT * SSLIMIT] = { {{0,}} };
+ static int blc[2] = { 0, 0 };
+
+ real *tspnt = (real *) tsOut;
+ real *rawout1, *rawout2;
+ int bt, sb = 0;
+
+ {
+ int b = blc[ch];
+ rawout1 = block[b][ch];
+ b = -b + 1;
+ rawout2 = block[b][ch];
+ blc[ch] = b;
+ }
+
+ if (gr_info->mixed_block_flag) {
+ sb = 2;
+ DCT36(fsIn[0], rawout1, rawout2, win[0], tspnt);
+ DCT36(fsIn[1], rawout1 + 18, rawout2 + 18, win1[0], tspnt + 1);
+ rawout1 += 36;
+ rawout2 += 36;
+ tspnt += 2;
+ }
+
+ bt = gr_info->block_type;
+ if (bt == 2) {
+ for (; sb < gr_info->maxb;
+ sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36) {
+ dct12(fsIn[sb], rawout1, rawout2, win[2], tspnt);
+ dct12(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, win1[2],
+ tspnt + 1);
+ }
+ }
+ else {
+ for (; sb < gr_info->maxb;
+ sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36) {
+ DCT36(fsIn[sb], rawout1, rawout2, win[bt], tspnt);
+ DCT36(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, win1[bt],
+ tspnt + 1);
+ }
+ }
+
+ for (; sb < SBLIMIT; sb++, tspnt++) {
+ int i;
+ for (i = 0; i < SSLIMIT; i++) {
+ tspnt[i * SBLIMIT] = *rawout1++;
+ *rawout2++ = 0.0;
+ }
+ }
+}
+
+/*
+ * main layer3 handler
+ */
+int
+mpg123_do_layer3(struct frame *fr)
+{
+ int gr, ch, ss;
+ int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
+ struct III_sideinfo sideinfo;
+ int stereo = fr->stereo;
+ int single = fr->single;
+ int ms_stereo, i_stereo;
+ int sfreq = fr->sampling_frequency;
+ int stereo1, granules;
+
+ if (stereo == 1) { /* stream is mono */
+ stereo1 = 1;
+ single = 0;
+ }
+ else if (single >= 0) /* stream is stereo, but force to mono */
+ stereo1 = 1;
+ else
+ stereo1 = 2;
+
+ if (fr->mode == MPG_MD_JOINT_STEREO) {
+ ms_stereo = (fr->mode_ext & 0x2) >> 1;
+ i_stereo = fr->mode_ext & 0x1;
+ }
+ else
+ ms_stereo = i_stereo = 0;
+
+ granules = fr->lsf ? 1 : 2;
+ if (!III_get_side_info
+ (&sideinfo, stereo, ms_stereo, sfreq, single, fr->lsf))
+ return 0;
+
+ mpg123_set_pointer(sideinfo.main_data_begin);
+
+ for (gr = 0; gr < granules; gr++) {
+ real hybridIn[2][SBLIMIT][SSLIMIT];
+ real hybridOut[2][SSLIMIT][SBLIMIT];
+
+ {
+ struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
+ long part2bits;
+
+ if (fr->lsf)
+ part2bits = III_get_scale_factors_2(scalefacs[0], gr_info, 0);
+ else
+ part2bits = III_get_scale_factors_1(scalefacs[0], gr_info);
+
+ if (III_dequantize_sample
+ (hybridIn[0], scalefacs[0], gr_info, sfreq, part2bits))
+ return 0;
+ }
+
+ if (stereo == 2) {
+ struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
+ long part2bits;
+
+ if (fr->lsf)
+ part2bits =
+ III_get_scale_factors_2(scalefacs[1], gr_info, i_stereo);
+ else
+ part2bits = III_get_scale_factors_1(scalefacs[1], gr_info);
+
+ if (III_dequantize_sample
+ (hybridIn[1], scalefacs[1], gr_info, sfreq, part2bits))
+ return 0;
+
+ if (ms_stereo) {
+ int i;
+ int maxb = sideinfo.ch[0].gr[gr].maxb;
+
+ if (sideinfo.ch[1].gr[gr].maxb > maxb)
+ maxb = sideinfo.ch[1].gr[gr].maxb;
+ for (i = 0; i < SSLIMIT * maxb; i++) {
+ real tmp0 = ((real *) hybridIn[0])[i];
+ real tmp1 = ((real *) hybridIn[1])[i];
+ ((real *) hybridIn[0])[i] = tmp0 + tmp1;
+ ((real *) hybridIn[1])[i] = tmp0 - tmp1;
+ }
+ }
+
+ if (i_stereo)
+ III_i_stereo(hybridIn, scalefacs[1], gr_info, sfreq,
+ ms_stereo, fr->lsf);
+
+ if (ms_stereo || i_stereo || (single == 3)) {
+ if (gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
+ sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
+ else
+ gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
+ }
+
+ switch (single) {
+ case 3:
+ {
+ register int i;
+ register real *in0 = (real *) hybridIn[0],
+ *in1 = (real *) hybridIn[1];
+ for (i = 0; i < SSLIMIT * gr_info->maxb; i++, in0++)
+ *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */
+ }
+ break;
+ case 1:
+ {
+ register int i;
+ register real *in0 = (real *) hybridIn[0],
+ *in1 = (real *) hybridIn[1];
+ for (i = 0; i < SSLIMIT * gr_info->maxb; i++)
+ *in0++ = *in1++;
+ }
+ break;
+ }
+ }
+
+#ifdef XMMS_EQ
+ if (mpg123_info->eq_active) {
+ int i, sb;
+
+ if (single < 0) {
+ for (sb = 0, i = 0; sb < SBLIMIT; sb++) {
+ for (ss = 0; ss < SSLIMIT; ss++) {
+ hybridIn[0][sb][ss] *= mpg123_info->eq_mul[i];
+ hybridIn[1][sb][ss] *= mpg123_info->eq_mul[i++];
+ }
+ }
+ }
+ else {
+ for (sb = 0, i = 0; sb < SBLIMIT; sb++) {
+ for (ss = 0; ss < SSLIMIT; ss++)
+ hybridIn[0][sb][ss] *= mpg123_info->eq_mul[i++];
+ }
+ }
+ }
+#endif
+
+#ifdef USE_SIMD
+ if (fr->synth_type == SYNTH_MMX && single < 0) {
+ int i, sb;
+
+ for (sb = 0, i = 0; sb < SBLIMIT; sb++) {
+ for (ss = 0; ss < SSLIMIT; ss++) {
+ hybridIn[0][sb][ss] *= 16384.0;
+ hybridIn[1][sb][ss] *= 16384.0;
+ }
+ }
+ }
+#endif
+ for (ch = 0; ch < stereo1; ch++) {
+ struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
+
+ III_antialias(hybridIn[ch], gr_info);
+ if (gr_info->maxb < 1 || gr_info->maxb > SBLIMIT)
+ return 0;
+ III_hybrid(hybridIn[ch], hybridOut[ch], ch, gr_info, fr);
+ }
+
+ for (ss = 0; ss < SSLIMIT; ss++) {
+ if (single >= 0) {
+ (fr->synth_mono) (hybridOut[0][ss], mpg123_pcm_sample,
+ &mpg123_pcm_point);
+ }
+ else {
+ int p1 = mpg123_pcm_point;
+
+ (fr->synth) (hybridOut[0][ss], 0, mpg123_pcm_sample, &p1);
+ (fr->synth) (hybridOut[1][ss], 1, mpg123_pcm_sample,
+ &mpg123_pcm_point);
+ }
+ }
+
+ if (mpg123_info->output_audio && mpg123_info->jump_to_time == -1) {
+ produce_audio(mpg123_ip.output->written_time(),
+ mpg123_cfg.resolution ==
+ 16 ? FMT_S16_NE : FMT_U8,
+ mpg123_cfg.channels ==
+ 2 ? fr->stereo : 1, mpg123_pcm_point,
+ mpg123_pcm_sample, &mpg123_info->going);
+ }
+
+ mpg123_pcm_point = 0;
+ }
+ return 1;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mp3.xpm
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mp3.xpm 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mp3.xpm 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,963 @@
+/* XPM */
+static char * gnome_mime_audio_xpm[] = {
+"48 52 908 2",
+" c None",
+". c #000000",
+"+ c #010100",
+"@ c #020201",
+"# c #030201",
+"$ c #232323",
+"% c #1F1F1F",
+"& c #DADADA",
+"* c #FFFFFF",
+"= c #F6F6F6",
+"- c #CFCFCF",
+"; c #707070",
+"> c #FFFFFE",
+", c #FEFEFE",
+"' c #FBFBFB",
+") c #EDEDED",
+"! c #C0C0C0",
+"~ c #FFFEFE",
+"{ c #F8F5F2",
+"] c #EBE7E1",
+"^ c #ECEDE8",
+"/ c #ECEFEA",
+"( c #E6E9E4",
+"_ c #CED0CE",
+": c #BCBFBC",
+"< c #F0F0EF",
+"[ c #FEFEFD",
+"} c #F7F7F7",
+"| c #D7D7D7",
+"1 c #F1F1F1",
+"2 c #B7B7B7",
+"3 c #EAEDEA",
+"4 c #8EA299",
+"5 c #697D70",
+"6 c #546459",
+"7 c #404D44",
+"8 c #2C352F",
+"9 c #4E5649",
+"0 c #D6D8D3",
+"a c #D2D2D2",
+"b c #AEAEAE",
+"c c #070707",
+"d c #FCFCFB",
+"e c #6D7C75",
+"f c #5A5D4C",
+"g c #6B735F",
+"h c #6E7B63",
+"i c #5B6052",
+"j c #4A5042",
+"k c #CED0CB",
+"l c #FEFDFD",
+"m c #FDFDFD",
+"n c #B8B8B8",
+"o c #DCDCDC",
+"p c #A4A4A3",
+"q c #0E0E0E",
+"r c #8A928F",
+"s c #6A7F68",
+"t c #4D564E",
+"u c #4E5950",
+"v c #585E57",
+"w c #333530",
+"x c #9D9C9B",
+"y c #FCFDFE",
+"z c #FDFEFE",
+"A c #FDFDFE",
+"B c #F5F5F4",
+"C c #B5B5B5",
+"D c #F9F9F9",
+"E c #FCFCFC",
+"F c #CBCBCB",
+"G c #A5A5A5",
+"H c #CECDCB",
+"I c #788976",
+"J c #C6BDBB",
+"K c #E2E2E2",
+"L c #E2E0DF",
+"M c #656A65",
+"N c #4A4B49",
+"O c #EAEDF1",
+"P c #CED5DD",
+"Q c #DBE0E9",
+"R c #DDE1E9",
+"S c #D3D7DD",
+"T c #D9DCE1",
+"U c #F4F4F4",
+"V c #ACACAC",
+"W c #ECECEC",
+"X c #C3C3C3",
+"Y c #C2C2C2",
+"Z c #C9C9C8",
+"` c #A8A8A8",
+" . c #F6F8F6",
+".. c #A7ADA5",
+"+. c #6D7F71",
+"@. c #ECECE9",
+"#. c #FDFDFC",
+"$. c #939C9A",
+"%. c #1B2321",
+"&. c #FCFBFA",
+"*. c #F2F6F9",
+"=. c #B4BFCC",
+"-. c #7E8A9B",
+";. c #515B6F",
+">. c #50596A",
+",. c #737D8D",
+"'. c #BEC6CE",
+"). c #C4CBD5",
+"!. c #BFC5D1",
+"~. c #F1F2F4",
+"{. c #F4F4F3",
+"]. c #ABABAB",
+"^. c #515151",
+"/. c #474747",
+"(. c #464645",
+"_. c #464646",
+":. c #5D5D5C",
+"<. c #A9A9A9",
+"[. c #FAFAF9",
+"}. c #EDEFF0",
+"|. c #F1F5F5",
+"1. c #636E62",
+"2. c #636E5F",
+"3. c #D4D5D3",
+"4. c #FBF7F4",
+"5. c #9BA595",
+"6. c #657366",
+"7. c #001514",
+"8. c #FCFAF8",
+"9. c #FDFCFC",
+"0. c #FBF9F7",
+"a. c #E3E6EA",
+"b. c #9DACBF",
+"c. c #515A6D",
+"d. c #111828",
+"e. c #131B29",
+"f. c #0F1A2B",
+"g. c #081125",
+"h. c #0D1328",
+"i. c #C2C9D1",
+"j. c #C5CBD4",
+"k. c #A6AEBB",
+"l. c #F6F6F7",
+"m. c #FAFAFA",
+"n. c #F2F2F2",
+"o. c #F3F3F3",
+"p. c #AAAAAA",
+"q. c #A0A09F",
+"r. c #8A8A8A",
+"s. c #7A7A7A",
+"t. c #6C6C6C",
+"u. c #454545",
+"v. c #ABB3AF",
+"w. c #A8B6A3",
+"x. c #D0DBD0",
+"y. c #F2F3F0",
+"z. c #DEE1E0",
+"A. c #66736A",
+"B. c #354336",
+"C. c #556254",
+"D. c #C5C7C6",
+"E. c #F2EDEA",
+"F. c #CADAD9",
+"G. c #9BA893",
+"H. c #1B3128",
+"I. c #FCF4EF",
+"J. c #FDFBF9",
+"K. c #DDDFE4",
+"L. c #97A3B4",
+"M. c #374152",
+"N. c #0D131C",
+"O. c #1C2026",
+"P. c #262C3A",
+"Q. c #242E43",
+"R. c #202D41",
+"S. c #172538",
+"T. c #121523",
+"U. c #BABCC3",
+"V. c #9DA6B5",
+"W. c #BABEC4",
+"X. c #F8F8F7",
+"Y. c #E7E7E7",
+"Z. c #C6C6C5",
+"`. c #BABAB9",
+" + c #E7E9E9",
+".+ c #63736C",
+"++ c #464945",
+"@+ c #5F7361",
+"#+ c #CED4C3",
+"$+ c #DBDEDA",
+"%+ c #979999",
+"&+ c #404342",
+"*+ c #606E6B",
+"=+ c #E5E5E3",
+"-+ c #4B5F52",
+";+ c #455845",
+">+ c #2D362F",
+",+ c #FCFAF9",
+"'+ c #E4E4E7",
+")+ c #97A8B9",
+"!+ c #343C4A",
+"~+ c #13181E",
+"{+ c #1B2027",
+"]+ c #1D232B",
+"^+ c #1F2632",
+"/+ c #212A3C",
+"(+ c #242F45",
+"_+ c #2A374D",
+":+ c #121C2F",
+"<+ c #525A67",
+"[+ c #D9DDE5",
+"}+ c #737C8C",
+"|+ c #EAEBEB",
+"1+ c #F7F7F6",
+"2+ c #F6F6F5",
+"3+ c #F5F5F5",
+"4+ c #EDEDEB",
+"5+ c #FBFBFA",
+"6+ c #6C8175",
+"7+ c #778673",
+"8+ c #121613",
+"9+ c #4C504A",
+"0+ c #8FA695",
+"a+ c #E2DCD8",
+"b+ c #E5E6E7",
+"c+ c #FBFAF9",
+"d+ c #CAC6C1",
+"e+ c #847F79",
+"f+ c #FCFAFA",
+"g+ c #ECE9E9",
+"h+ c #A6B1C4",
+"i+ c #232B37",
+"j+ c #12171E",
+"k+ c #191F27",
+"l+ c #1D222B",
+"m+ c #1E242B",
+"n+ c #1E252F",
+"o+ c #202937",
+"p+ c #232F44",
+"q+ c #283853",
+"r+ c #253046",
+"s+ c #0A1526",
+"t+ c #D5D7DB",
+"u+ c #727D90",
+"v+ c #CFD0D2",
+"w+ c #B1B1B1",
+"x+ c #99A597",
+"y+ c #7B9173",
+"z+ c #65705D",
+"A+ c #1F201B",
+"B+ c #58655E",
+"C+ c #F3F2F1",
+"D+ c #AAB3C1",
+"E+ c #525C6D",
+"F+ c #0A0F17",
+"G+ c #1C2129",
+"H+ c #1E242A",
+"I+ c #1E242C",
+"J+ c #1F232D",
+"K+ c #232E41",
+"L+ c #2B3855",
+"M+ c #2C3B57",
+"N+ c #070D1F",
+"O+ c #A3ABB6",
+"P+ c #828EA0",
+"Q+ c #B9BCC2",
+"R+ c #F3F3F2",
+"S+ c #F1EFEC",
+"T+ c #72886D",
+"U+ c #4E5849",
+"V+ c #748268",
+"W+ c #808080",
+"X+ c #D6D9DE",
+"Y+ c #5E6A7A",
+"Z+ c #121621",
+"`+ c #161D26",
+" @ c #1D242C",
+".@ c #1F242B",
+"+@ c #1E2427",
+"@@ c #212C3F",
+"#@ c #283552",
+"$@ c #2F405D",
+"%@ c #0E162B",
+"&@ c #59657B",
+"*@ c #8A98AA",
+"=@ c #AFB4BC",
+"-@ c #F2F2F1",
+";@ c #7D9074",
+">@ c #494949",
+",@ c #676D65",
+"'@ c #C8CBC7",
+")@ c #818B9B",
+"!@ c #1B232F",
+"~@ c #0F151F",
+"{@ c #1B212B",
+"]@ c #1E232D",
+"^@ c #20252C",
+"/@ c #24272C",
+"(@ c #1F2429",
+"_@ c #1C2228",
+":@ c #1F2A3C",
+"<@ c #1F2A40",
+"[@ c #25344E",
+"}@ c #314464",
+"|@ c #15223A",
+"1@ c #34445E",
+"2@ c #939FB3",
+"3@ c #ACB2BC",
+"4@ c #F1F1F0",
+"5@ c #ECEEEB",
+"6@ c #B8BCB7",
+"7@ c #647C65",
+"8@ c #797E78",
+"9@ c #C4C3C2",
+"0@ c #919191",
+"a@ c #DCE3EA",
+"b@ c #242C3D",
+"c@ c #0B101C",
+"d@ c #1A212A",
+"e@ c #1F242C",
+"f@ c #21252C",
+"g@ c #222629",
+"h@ c #1C232A",
+"i@ c #212B3D",
+"j@ c #33415B",
+"k@ c #27344B",
+"l@ c #212F47",
+"m@ c #374A68",
+"n@ c #1A2840",
+"o@ c #34445F",
+"p@ c #96A3B5",
+"q@ c #B3B7C0",
+"r@ c #F2F2F0",
+"s@ c #F0F0F0",
+"t@ c #E2E7E2",
+"u@ c #939E92",
+"v@ c #50644E",
+"w@ c #3D443E",
+"x@ c #D4D2CF",
+"y@ c #7F8898",
+"z@ c #020A14",
+"A@ c #171E28",
+"B@ c #1C222A",
+"C@ c #1E232B",
+"D@ c #1F242D",
+"E@ c #1F2228",
+"F@ c #1D2328",
+"G@ c #283449",
+"H@ c #4A5C7B",
+"I@ c #697D98",
+"J@ c #4D5D79",
+"K@ c #1F2D45",
+"L@ c #394A6B",
+"M@ c #1B2943",
+"N@ c #425371",
+"O@ c #95A3B5",
+"P@ c #B8BDC2",
+"Q@ c #EFEFEE",
+"R@ c #EFEFED",
+"S@ c #EDEEED",
+"T@ c #EFF0F0",
+"U@ c #F7FCF3",
+"V@ c #313F30",
+"W@ c #1C2120",
+"X@ c #C9CBC9",
+"Y@ c #F9F9F8",
+"Z@ c #E9EEF2",
+"`@ c #3C4352",
+" # c #0C111D",
+".# c #1E232E",
+"+# c #1D212A",
+"@# c #20242C",
+"## c #1B1D20",
+"$# c #263043",
+"%# c #576886",
+"&# c #8396B1",
+"*# c #7A8FAD",
+"=# c #677B99",
+"-# c #28374F",
+";# c #384A69",
+"># c #182642",
+",# c #5D708F",
+"'# c #828FA3",
+")# c #C5C7CB",
+"!# c #F1F1EF",
+"~# c #EEEEED",
+"{# c #EEEEEC",
+"]# c #9DA7A4",
+"^# c #2A3B34",
+"/# c #222725",
+"(# c #80807E",
+"_# c #EFEEEC",
+":# c #F1F0EF",
+"<# c #F4F3F2",
+"[# c #F8F8F8",
+"}# c #A8AFBB",
+"|# c #0D1522",
+"1# c #1A212E",
+"2# c #1D232C",
+"3# c #21252D",
+"4# c #1E2327",
+"5# c #171B20",
+"6# c #637593",
+"7# c #95A6BE",
+"8# c #6D7F9C",
+"9# c #617395",
+"0# c #5A6E8B",
+"a# c #2A354A",
+"b# c #3D4E6D",
+"c# c #1C2A46",
+"d# c #748DAB",
+"e# c #6D798A",
+"f# c #DEDFE0",
+"g# c #EEEEEE",
+"h# c #EDEDEC",
+"i# c #ECEAE7",
+"j# c #ADB1B0",
+"k# c #B5B9BA",
+"l# c #F1F0F0",
+"m# c #F9F8F8",
+"n# c #F7F5F4",
+"o# c #A7AAA4",
+"p# c #B7BAB4",
+"q# c #F7F6F6",
+"r# c #ECEFF1",
+"s# c #747F8E",
+"t# c #0A121E",
+"u# c #232C3A",
+"v# c #1D232E",
+"w# c #222932",
+"x# c #1B1D21",
+"y# c #1C273E",
+"z# c #C1CFE1",
+"A# c #8FA1B7",
+"B# c #6D81A0",
+"C# c #596D93",
+"D# c #455674",
+"E# c #293343",
+"F# c #4A5C7D",
+"G# c #304060",
+"H# c #7690B8",
+"I# c #5D6878",
+"J# c #BBC0CC",
+"K# c #ECECEB",
+"L# c #F6F4F3",
+"M# c #F4F1EF",
+"N# c #F7F5F3",
+"O# c #F9F8F7",
+"P# c #BBBDB9",
+"Q# c #4D5852",
+"R# c #71746D",
+"S# c #F0EAE7",
+"T# c #DBDEE3",
+"U# c #3E495B",
+"V# c #1C2435",
+"W# c #273041",
+"X# c #283040",
+"Y# c #293141",
+"Z# c #262B38",
+"`# c #1D212D",
+" $ c #4A5B77",
+".$ c #CFDBEB",
+"+$ c #7A8FAC",
+"@$ c #6C83A5",
+"#$ c #4D6389",
+"$$ c #35445E",
+"%$ c #404D60",
+"&$ c #506586",
+"*$ c #4F6687",
+"=$ c #6983AB",
+"-$ c #343E50",
+";$ c #4D5F7A",
+">$ c #B8C0CC",
+",$ c #F7F6F5",
+"'$ c #D2D6D3",
+")$ c #6C866F",
+"!$ c #5A715E",
+"~$ c #566758",
+"{$ c #B5C1B4",
+"]$ c #B2BAC8",
+"^$ c #273245",
+"/$ c #29354A",
+"($ c #323D53",
+"_$ c #364258",
+":$ c #333F52",
+"<$ c #343F52",
+"[$ c #28354A",
+"}$ c #6D7B92",
+"|$ c #ACBDD2",
+"1$ c #5B7297",
+"2$ c #495F87",
+"3$ c #3A4D6B",
+"4$ c #252F44",
+"5$ c #8292AC",
+"6$ c #586E94",
+"7$ c #6782A9",
+"8$ c #37404D",
+"9$ c #394860",
+"0$ c #475977",
+"a$ c #6E7E99",
+"b$ c #EBEBEA",
+"c$ c #BEC3BE",
+"d$ c #CFD1CE",
+"e$ c #F4F2F0",
+"f$ c #7D8F84",
+"g$ c #6A8667",
+"h$ c #D5D8D4",
+"i$ c #6B6B6B",
+"j$ c #9E9E9F",
+"k$ c #7A8EA8",
+"l$ c #2B374D",
+"m$ c #313E56",
+"n$ c #34425B",
+"o$ c #36425A",
+"p$ c #354257",
+"q$ c #39465D",
+"r$ c #3B4963",
+"s$ c #64738B",
+"t$ c #768CAD",
+"u$ c #354C72",
+"v$ c #2E3D5B",
+"w$ c #1D273A",
+"x$ c #3D4655",
+"y$ c #A7BACE",
+"z$ c #607799",
+"A$ c #617494",
+"B$ c #191B1B",
+"C$ c #445675",
+"D$ c #3A4A65",
+"E$ c #6C7A91",
+"F$ c #ECECEA",
+"G$ c #EAEAE9",
+"H$ c #EAEAE8",
+"I$ c #F7F6F4",
+"J$ c #B5B9B6",
+"K$ c #D7DCD9",
+"L$ c #7B8982",
+"M$ c #A9AEAD",
+"N$ c #517257",
+"O$ c #839284",
+"P$ c #DEDEDD",
+"Q$ c #D8D9D9",
+"R$ c #F3F2EE",
+"S$ c #51698C",
+"T$ c #313F55",
+"U$ c #35435B",
+"V$ c #36445A",
+"W$ c #35425C",
+"X$ c #37465D",
+"Y$ c #3D4A62",
+"Z$ c #516079",
+"`$ c #47536A",
+" % c #354561",
+".% c #212F46",
+"+% c #0F1624",
+"@% c #1A2231",
+"#% c #99A5B7",
+"$% c #97A8C3",
+"%% c #6A7DA0",
+"&% c #394559",
+"*% c #1C1D26",
+"=% c #35435C",
+"-% c #344159",
+";% c #8E96A2",
+">% c #E9E9E8",
+",% c #E9E9E7",
+"'% c #F6F5F5",
+")% c #70827F",
+"!% c #C6D0C3",
+"~% c #445344",
+"{% c #637161",
+"]% c #4B6C4C",
+"^% c #CAC8C8",
+"/% c #3D5271",
+"(% c #3A4863",
+"_% c #384862",
+":% c #3E4C65",
+"<% c #424D67",
+"[% c #45536C",
+"}% c #4D5A74",
+"|% c #66768F",
+"1% c #76869D",
+"2% c #2A3243",
+"3% c #151A27",
+"4% c #252C3A",
+"5% c #B2BBCE",
+"6% c #C3D0E3",
+"7% c #7B8CA9",
+"8% c #51627E",
+"9% c #171C22",
+"0% c #141920",
+"a% c #242C3A",
+"b% c #3F4B60",
+"c% c #BDC0C6",
+"d% c #EBEBE9",
+"e% c #D1D7D3",
+"f% c #4F5753",
+"g% c #27322D",
+"h% c #57655B",
+"i% c #7E8B86",
+"j% c #F0EFED",
+"k% c #3E516C",
+"l% c #3F4E68",
+"m% c #3C4A64",
+"n% c #4C5A74",
+"o% c #55637C",
+"p% c #5A6881",
+"q% c #707D95",
+"r% c #8493A6",
+"s% c #BFC8D8",
+"t% c #D8E4F0",
+"u% c #CCD5E4",
+"v% c #E2E8F1",
+"w% c #D2DAE9",
+"x% c #8D9DB7",
+"y% c #526380",
+"z% c #323E53",
+"A% c #080B11",
+"B% c #0E1217",
+"C% c #272E3A",
+"D% c #747D8A",
+"E% c #D6D7D8",
+"F% c #E8E8E7",
+"G% c #E8E8E6",
+"H% c #D2D2D0",
+"I% c #B3B7B4",
+"J% c #BFC1BF",
+"K% c #EBE8E7",
+"L% c #5A718E",
+"M% c #3F4C65",
+"N% c #38475F",
+"O% c #68768E",
+"P% c #6E7C92",
+"Q% c #78879B",
+"R% c #959FB1",
+"S% c #AAB4C1",
+"T% c #C4CBD8",
+"U% c #D7DCE6",
+"V% c #D3D9E1",
+"W% c #CCD3DC",
+"X% c #8C9CB4",
+"Y% c #52627B",
+"Z% c #38475E",
+"`% c #080E1A",
+" & c #060910",
+".& c #0E0F14",
+"+& c #4F5869",
+"@& c #B6B8BC",
+"#& c #DDDDDC",
+"$& c #E2E2E1",
+"%& c #E5E5E4",
+"&& c #E6E6E5",
+"*& c #F2F1F1",
+"=& c #F2F1F0",
+"-& c #93A8C2",
+";& c #2F3E56",
+">& c #6C7A93",
+",& c #939EAE",
+"'& c #A9B3C0",
+")& c #BDC3CB",
+"!& c #C8CCD2",
+"~& c #CDCFD5",
+"{& c #CBD2DB",
+"]& c #C7CFDC",
+"^& c #A4B2C7",
+"/& c #4C576D",
+"(& c #262C3C",
+"_& c #252D3B",
+":& c #232C3D",
+"<& c #323B4B",
+"[& c #464B5A",
+"}& c #959697",
+"|& c #BDBDBC",
+"1& c #C9C9C9",
+"2& c #D6D6D5",
+"3& c #E2E2E0",
+"4& c #E7E7E6",
+"5& c #E6E6E4",
+"6& c #C8D6E7",
+"7& c #515D76",
+"8& c #33415A",
+"9& c #66728A",
+"0& c #C0C7D2",
+"a& c #CACED7",
+"b& c #CCCDD2",
+"c& c #CBCED1",
+"d& c #C8CED3",
+"e& c #C2CDDB",
+"f& c #A2B1C5",
+"g& c #586377",
+"h& c #181F27",
+"i& c #363B40",
+"j& c #575857",
+"k& c #626261",
+"l& c #656463",
+"m& c #787877",
+"n& c #929291",
+"o& c #9F9F9D",
+"p& c #B0B0AE",
+"q& c #C3C3C2",
+"r& c #D1D1D0",
+"s& c #DCDCDB",
+"t& c #DFE4EB",
+"u& c #5F708B",
+"v& c #717E92",
+"w& c #4F5E78",
+"x& c #8391A4",
+"y& c #A9B4C2",
+"z& c #B1BBC5",
+"A& c #BAC3CE",
+"B& c #D5DDE8",
+"C& c #9EA7B9",
+"D& c #444D63",
+"E& c #1F242F",
+"F& c #2D2F33",
+"G& c #424242",
+"H& c #4D4D4D",
+"I& c #515150",
+"J& c #575756",
+"K& c #60605F",
+"L& c #747473",
+"M& c #838381",
+"N& c #989897",
+"O& c #B3B3B2",
+"P& c #C6C6C4",
+"Q& c #D3D3D2",
+"R& c #F0EFEE",
+"S& c #D0D1D3",
+"T& c #959FB4",
+"U& c #5B697E",
+"V& c #9DA7B7",
+"W& c #D8DEE4",
+"X& c #D4DAE1",
+"Y& c #DBE1E5",
+"Z& c #DBDDE3",
+"`& c #818894",
+" * c #1E293A",
+".* c #1B222B",
+"+* c #222425",
+"@* c #313131",
+"#* c #343434",
+"$* c #363635",
+"%* c #3A3A3A",
+"&* c #40403F",
+"** c #484847",
+"=* c #585858",
+"-* c #6B6B6A",
+";* c #838382",
+">* c #A5A5A3",
+",* c #BCBCBA",
+"'* c #CFCFCE",
+")* c #EFEFEF",
+"!* c #E3E3E2",
+"~* c #D9D9D8",
+"{* c #BCBCBB",
+"]* c #9DA0A4",
+"^* c #616678",
+"/* c #2F3A4F",
+"(* c #2C3649",
+"_* c #394250",
+":* c #111923",
+"<* c #010613",
+"[* c #0A0F16",
+"}* c #1F2225",
+"|* c #262628",
+"1* c #282828",
+"2* c #292828",
+"3* c #292929",
+"4* c #2D2D2C",
+"5* c #2F2F2F",
+"6* c #343433",
+"7* c #3D3D3C",
+"8* c #5C5C5C",
+"9* c #A1A1A0",
+"0* c #B9B9B8",
+"a* c #CECECC",
+"b* c #E4E4E2",
+"c* c #D7D7D5",
+"d* c #989896",
+"e* c #717174",
+"f* c #464B51",
+"g* c #2F353C",
+"h* c #23272C",
+"i* c #222529",
+"j* c #25272A",
+"k* c #2E2F31",
+"l* c #313030",
+"m* c #313130",
+"n* c #333332",
+"o* c #363636",
+"p* c #3C3C3C",
+"q* c #545454",
+"r* c #686867",
+"s* c #848483",
+"t* c #A8A8A7",
+"u* c #C0C0BE",
+"v* c #D3D3D1",
+"w* c #D9D9D7",
+"x* c #C0C0BF",
+"y* c #A3A3A2",
+"z* c #888886",
+"A* c #6E6D6C",
+"B* c #5F6061",
+"C* c #585859",
+"D* c #525252",
+"E* c #A3A3A1",
+"F* c #A2A2A0",
+"G* c #A2A1A0",
+"H* c #A2A2A1",
+"I* c #A3A2A1",
+"J* c #A4A3A2",
+"K* c #A4A4A2",
+"L* c #A6A6A4",
+"M* c #A9A8A6",
+"N* c #ABAAA8",
+"O* c #AFAEAB",
+"P* c #B3B1AE",
+"Q* c #B5B4B1",
+"R* c #B8B6B2",
+"S* c #BAB8B4",
+"T* c #6E6B62",
+"U* c #DEDEDC",
+"V* c #D1D1CF",
+"W* c #BFBFBE",
+"X* c #AFAFAF",
+"Y* c #9F9F9F",
+"Z* c #919190",
+"`* c #888888",
+" = c #302E28",
+".= c #2E2C27",
+"+= c #2D2B26",
+"@= c #312F29",
+"#= c #33312B",
+"$= c #36332D",
+"%= c #38362F",
+"&= c #3D3A33",
+"*= c #413E36",
+"== c #47433B",
+"-= c #4D4940",
+";= c #514D44",
+">= c #535046",
+",= c #565248",
+"'= c #23211D",
+")= c #EBEAE9",
+"!= c #DADAD9",
+"~= c #C9C9C7",
+"{= c #B6B6B6",
+"]= c #B2B0AD",
+"^= c #423F37",
+"/= c #E3E2E1",
+"(= c #4E4B44",
+"_= c #403D36",
+":= c #413E37",
+"<= c #908E8A",
+"[= c #46433B",
+"}= c #D8D7D5",
+"|= c #75726A",
+"1= c #ACAAA5",
+"2= c #D7D6D3",
+"3= c #DBDAD8",
+"4= c #86837C",
+"5= c #D5D5D4",
+"6= c #B6B5B1",
+"7= c #4E4A41",
+"8= c #D5D4D2",
+"9= c #514E46",
+"0= c #5E5B52",
+"a= c #504D43",
+"b= c #545147",
+"c= c #8A8780",
+"d= c #E3E3E1",
+"e= c #D2D1CE",
+"f= c #7B7770",
+"g= c #58544A",
+"h= c #7C7971",
+"i= c #E7E7E5",
+"j= c #CCCBC8",
+"k= c #C4C2BF",
+"l= c #C4C3BF",
+"m= c #FBFAFA",
+"n= c #817E76",
+"o= c #D1D0CD",
+"p= c #67635A",
+"q= c #F5F4F4",
+"r= c #67645B",
+"s= c #908E87",
+"t= c #E5E4E3",
+"u= c #6F6C63",
+"v= c #8B8881",
+"w= c #C0BEBA",
+"x= c #8C8982",
+"y= c #C8C7C4",
+"z= c #656259",
+"A= c #77736B",
+"B= c #E4E4E3",
+"C= c #D3D2CF",
+"D= c #76736B",
+"E= c #59554B",
+"F= c #E7E6E5",
+"G= c #AFADA8",
+"H= c #DFDFDD",
+"I= c #D0CFCC",
+"J= c #736F67",
+"K= c #A9A9A7",
+"L= c #8D8D8D",
+"M= c #E1E1DF",
+"N= c #9A9A9A",
+"O= c #8C8C8C",
+" . . . . . . . . . . . . . + @ # + . . . . . . . . . . . . . . . . . $ % ",
+". & * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * = - ; . ",
+". * * * * * * * * * * * * * * * * * * * > * * , , , , , , , , , , , , ' = ) ! . ",
+". * * * * * * ~ * * { ] ^ / ( _ : < * * * , [ [ , , , , , , , , , , , } | * 1 2 . ",
+". * * * * * * ~ * * 3 4 5 6 7 8 9 0 * , , , , , , , , , , , , , , , , } a * * ) b c ",
+". * * * * * * * * * d e f g h i j k , , , , , l , , , , , , , , , m m = n * m * o p q ",
+". * * * * * * * * * * r s t u v w x , , , , , l , , y z A m m m m m m B C * D E * F G . ",
+". * * * * * * * * * * H I J K L M N , , , , l m z O P Q R S T ' E E E U V W X F n Y Z ` . ",
+". * * * * * * * * m ...+. at ., #.$.%., , , , &.*.=.-.;.>.,.'.).!.~.E d {.].^./.(._._.:.<.. ",
+". * * * * [. .m * }.|.1.2.3.4.5.6.7.8.m 9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.! p.q.r.s.t.u.. ",
+". * * , n.v.w.x.y.z.A.B.C.D.E.F.G.H.I.m J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.D ' } } Y.Z.Z `.s.. ",
+". * * , +.+++ at +#+$+%+&+*+=+E -+;+>+,+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+} X.1+2+3+3+3+4+<.. ",
+". * * , 5+6+7+8+9+0+1 a+b+c+E d+e+` f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+= } 3+3+B B o.o.w+. ",
+". * , , 9.x+y+z+A+B+c+E E E E E E d C+D+E+F+G+l+m+H+I+J+K+L+M+N+O+P+Q+B B B U {.o.R+R+C . ",
+". * m m m S+T+U+V+W+X.E E d ' ' ' ' X+Y+Z+`+ @I+. at .@+@^+@@#@$@%@&@*@=@o.U {.R+R+R+- at -@C . ",
+". * m #.E ' ;@>@,@'@5+' ' ' ' 5+5+m.)@!@~@{@]@^@/@(@_@:@<@[@}@|@1 at 2@3@{.R+R+n.n.- at 4@4 at C . ",
+". * E ' 5 at 6@7 at 8@9 at 0@} ' 5+5+m.m.m.a at b@c at d@l+e at f@g at h@i at j@k at l@m at n@o at p@q at n.n.-@r at 4@4 at s@s at C . ",
+". * d [.t at u@v at w@x@{.m.m.m.m.m.[.m.y at z@A at B@C at D@E at F@G at H@I at J@K at L@M at N@O at P@- at -@r at s@s@< Q at R@C . ",
+". * ' S at T@U at V@W at X@m.m.[.[.[.D Y at Z@`@ #.#+#@#D@##$#%#&#*#=#-#;#>#,#'#)#4@!#< < Q@~#~#{#C . ",
+". * 5+3+]#^#/#(#_#[.D :#<#D X.[#}#|#1#2#3#f at 4#5#6#7#8#9#0#a#b#c#d#e#f#< < g#g#~#{#h#h#C . ",
+". * m.X.i#j#k#l#m#D n#o#p#q#} r#s#t#u#v#w#^@x#y#z#A#B#C#D#E#F#G#H#I#J#|+~#~#{#h#h#W K#C . ",
+". * [.L#M#N#[#O#O#1+P#Q#R#S#1+T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>${#h#4+4+K#K#K#C . ",
+". * D ,$X.Y@[#[#} '$)$!$~${$3+]$^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$0$a$4+4+K#K#b$b$b$C . ",
+". * [#[#[#n#c$d$e$f$g$h$i$j${.k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$K#F$b$b$b$G$H$C . ",
+". * X.1+I$J$K$L$M$N$O$< P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%b$b$b$G$>%>%,%C . ",
+". * = = '%)%!%~%{%]%^%o.R+R+{./%(%_%:%<%[%}%|%1%2%3%4%5%6%7%8%9%0%a%b%c%d%>%>%>%,%,%,%C . ",
+". * 2+2+2+e%f%g%h%i%j%R+- at 1 - at k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%F%>%,%F%F%G%C . ",
+". * 3+U {.{.H%I%J%K%- at 4@4 at 4@4 at L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&F%G%G%G%C . ",
+". * {.{.R+n.*&=&=&4 at 4@4 at s@< Q at -&M%;&>&,&'&)&!&~&{&]&^&/&(&_&:&<&[&}&|&1&2&#&3&4&4&4&5&C . ",
+". * n.- at -@- at -@4 at 4@s@< < < ~#b$6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&4&5&5&%&C . ",
+". * - at -@- at 4@< < < < < Q at R@G$%&t&u&v&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&%&%&%&%&C . ",
+". * 1 4@< < j%R&Q at Q@R@~#h#&&P$S&T&U&V&W&X&Y&Z&`& *.*+*@*#*$*%*&***=*-*;*>*,*'*%&=+=+=+C . ",
+". * < < )*Q at Q@Q at R@~#~#K#G$!*~*{*]*^*/*(*_*:*<*[*}*|*1*2*3*4*5*6*7*>@8*m&9*0*a*=+=+=+b*C . ",
+". * Q at Q@Q at Q@R@~#{#K#K#K#>%!*c*,*d*e*f*g*h*i*j*k*l*m*5*@*@*n*o*p*u.q*r*s*t*u*v*=+=+b*b*C . ",
+". * Q at Q@~#~#{#K#K#K#K#b$>%!*w*x*y*z*A*B*C*D*E*F*F*F*G*F*H*I*J*K*L*M*N*O*P*Q*R*S*S*S*S*S*S*S*S*T*",
+". * ~#~#4+K#K#F$b$b$b$b$H$5&U*V*W*X*Y*N&Z*`*N* =.=+=+=.= =@=#=$=%=&=*===-=;=>=,=,=,=,=,=,=,=,='=",
+". * 4+K#F$)=)=)=b$d%d%G$H$G%b*!=H%~=x*{*0*{=]=^=* /=(=_=:=<=* * [=* * * m.}=|=,=1=2=D X.3=4=,='=",
+". * F$b$b$b$d%G$G$G$G$H$H$G%5&3&#&~*5=Q&Q&H%6=7=* * 8=9=0={.* * a=* * b=c=* d=,=e=f=g=h=* R+,='=",
+". * d%d%G$G$G$G$G$H$H$G%G%G%G%i=i=i=i=i=&&5&S*,=* j=* k=l=j=* * ,=* * ,=g=* m=,=,=,=,=n=* o=,='=",
+". * G$G$G$H$H$>%>%F%G%G%G%i=i=i=i=i=5&5&=+=+S*,=* p={.* q=r=* * ,=* * ,=s=* o=,=,=,=* * t=u=,='=",
+". * H$>%>%>%>%F%G%G%4&4&i=i=i=i=5&5&=+=+=+=+S*,=* ,=v=w=x=,=* * ,=* * * m#y=z=,=,=,=,=A=* )=,='=",
+". * >%>%>%G%4&4&4&4&i=i=i=&&&&5&=+=+=+=+B=B=S*,=* ,=,=,=,=,=* * ,=* * ,=,=,=,=,=C=D=E=4=* F=,='=",
+". * ,%4&4&4&4&i=i=i=&&&&&&5&=+=+=+B=B=b*b*b*S*,=* ,=,=,=,=,=* * ,=* * ,=,=,=,=,=G=H=m=q#I=J=,='=",
+". * 4&i=i=i=&&&&&&&&5&5&=+B=B=B=b*b*b*b*b*b*S*,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,=,='=",
+". * i=&&&&&&5&5&5&5&B=B=b*b*b*b*b*b*b*b*b*d=T*'='='='='='='='='='='='='='='='='='='='='='='='='=",
+". * &&5&5&5&5&%&B=b*b*b*b*b*b*b*b*b*b*d=d=d=d=K=p p p y*y*y*y*E*E*E*E*E*E*E*E*E*E*E*E*L=. ",
+". & 5&5&5&=+b*b*b*b*b*b*b*b*b*b*!*d=d=d=d=d=d=d=d=3&3&3&3&M=M=M=M=M=M=M=M=M=M=M=M=M=M=N=. ",
+". Y C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C N=O=. ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" ",
+" ",
+" "};
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1220 @@
+#include "mpg123.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <libbeep/util.h>
+#include <libbeep/configdb.h>
+#include <libbeep/vfs.h>
+#include <libbeep/titlestring.h>
+
+#include "beep/util.h"
+
+
+#define CPU_HAS_MMX() (cpu_fflags & 0x800000)
+#define CPU_HAS_3DNOW() (cpu_efflags & 0x80000000)
+
+
+static const long outscale = 32768;
+
+static struct frame fr, temp_fr;
+
+PlayerInfo *mpg123_info = NULL;
+static GThread *decode_thread;
+
+static gboolean audio_error = FALSE, output_opened = FALSE, dopause = FALSE;
+gint mpg123_bitrate, mpg123_frequency, mpg123_length, mpg123_layer,
+ mpg123_lsf;
+gchar *mpg123_title = NULL, *mpg123_filename = NULL;
+static int disp_bitrate, skip_frames = 0;
+static int cpu_fflags, cpu_efflags;
+gboolean mpg123_stereo, mpg123_mpeg25;
+int mpg123_mode;
+
+gchar **mpg123_id3_encoding_list = NULL;
+
+const char *mpg123_id3_genres[GENRE_MAX] = {
+ N_("Blues"), N_("Classic Rock"), N_("Country"), N_("Dance"),
+ N_("Disco"), N_("Funk"), N_("Grunge"), N_("Hip-Hop"),
+ N_("Jazz"), N_("Metal"), N_("New Age"), N_("Oldies"),
+ N_("Other"), N_("Pop"), N_("R&B"), N_("Rap"), N_("Reggae"),
+ N_("Rock"), N_("Techno"), N_("Industrial"), N_("Alternative"),
+ N_("Ska"), N_("Death Metal"), N_("Pranks"), N_("Soundtrack"),
+ N_("Euro-Techno"), N_("Ambient"), N_("Trip-Hop"), N_("Vocal"),
+ N_("Jazz+Funk"), N_("Fusion"), N_("Trance"), N_("Classical"),
+ N_("Instrumental"), N_("Acid"), N_("House"), N_("Game"),
+ N_("Sound Clip"), N_("Gospel"), N_("Noise"), N_("AlternRock"),
+ N_("Bass"), N_("Soul"), N_("Punk"), N_("Space"),
+ N_("Meditative"), N_("Instrumental Pop"),
+ N_("Instrumental Rock"), N_("Ethnic"), N_("Gothic"),
+ N_("Darkwave"), N_("Techno-Industrial"), N_("Electronic"),
+ N_("Pop-Folk"), N_("Eurodance"), N_("Dream"),
+ N_("Southern Rock"), N_("Comedy"), N_("Cult"),
+ N_("Gangsta Rap"), N_("Top 40"), N_("Christian Rap"),
+ N_("Pop/Funk"), N_("Jungle"), N_("Native American"),
+ N_("Cabaret"), N_("New Wave"), N_("Psychedelic"), N_("Rave"),
+ N_("Showtunes"), N_("Trailer"), N_("Lo-Fi"), N_("Tribal"),
+ N_("Acid Punk"), N_("Acid Jazz"), N_("Polka"), N_("Retro"),
+ N_("Musical"), N_("Rock & Roll"), N_("Hard Rock"), N_("Folk"),
+ N_("Folk/Rock"), N_("National Folk"), N_("Swing"),
+ N_("Fast-Fusion"), N_("Bebob"), N_("Latin"), N_("Revival"),
+ N_("Celtic"), N_("Bluegrass"), N_("Avantgarde"),
+ N_("Gothic Rock"), N_("Progressive Rock"),
+ N_("Psychedelic Rock"), N_("Symphonic Rock"), N_("Slow Rock"),
+ N_("Big Band"), N_("Chorus"), N_("Easy Listening"),
+ N_("Acoustic"), N_("Humour"), N_("Speech"), N_("Chanson"),
+ N_("Opera"), N_("Chamber Music"), N_("Sonata"), N_("Symphony"),
+ N_("Booty Bass"), N_("Primus"), N_("Porn Groove"),
+ N_("Satire"), N_("Slow Jam"), N_("Club"), N_("Tango"),
+ N_("Samba"), N_("Folklore"), N_("Ballad"), N_("Power Ballad"),
+ N_("Rhythmic Soul"), N_("Freestyle"), N_("Duet"),
+ N_("Punk Rock"), N_("Drum Solo"), N_("A Cappella"),
+ N_("Euro-House"), N_("Dance Hall"), N_("Goa"),
+ N_("Drum & Bass"), N_("Club-House"), N_("Hardcore"),
+ N_("Terror"), N_("Indie"), N_("BritPop"), N_("Negerpunk"),
+ N_("Polsk Punk"), N_("Beat"), N_("Christian Gangsta Rap"),
+ N_("Heavy Metal"), N_("Black Metal"), N_("Crossover"),
+ N_("Contemporary Christian"), N_("Christian Rock"),
+ N_("Merengue"), N_("Salsa"), N_("Thrash Metal"),
+ N_("Anime"), N_("JPop"), N_("Synthpop")
+};
+
+double
+mpg123_compute_tpf(struct frame *fr)
+{
+ const int bs[4] = { 0, 384, 1152, 1152 };
+ double tpf;
+
+ tpf = bs[fr->lay];
+ tpf /= mpg123_freqs[fr->sampling_frequency] << (fr->lsf);
+ return tpf;
+}
+
+static void
+set_synth_functions(struct frame *fr)
+{
+ typedef int (*func) (real *, int, unsigned char *, int *);
+ typedef int (*func_mono) (real *, unsigned char *, int *);
+ typedef void (*func_dct36) (real *, real *, real *, real *, real *);
+
+ int ds = fr->down_sample;
+ int p8 = 0;
+
+ static func funcs[][3] = {
+ {mpg123_synth_1to1,
+ mpg123_synth_2to1,
+ mpg123_synth_4to1},
+ {mpg123_synth_1to1_8bit,
+ mpg123_synth_2to1_8bit,
+ mpg123_synth_4to1_8bit},
+#ifdef USE_SIMD
+ {mpg123_synth_1to1_mmx,
+ mpg123_synth_2to1,
+ mpg123_synth_4to1},
+ {mpg123_synth_1to1_3dnow,
+ mpg123_synth_2to1,
+ mpg123_synth_4to1}
+#endif
+ };
+
+ static func_mono funcs_mono[2][4] = {
+ {mpg123_synth_1to1_mono,
+ mpg123_synth_2to1_mono,
+ mpg123_synth_4to1_mono},
+ {mpg123_synth_1to1_8bit_mono,
+ mpg123_synth_2to1_8bit_mono,
+ mpg123_synth_4to1_8bit_mono}
+ };
+
+#ifdef USE_SIMD
+ static func_dct36 funcs_dct36[2] = { mpg123_dct36, dct36_3dnow };
+#endif
+
+ if (mpg123_cfg.resolution == 8)
+ p8 = 1;
+ fr->synth = funcs[p8][ds];
+ fr->synth_mono = funcs_mono[p8][ds];
+ fr->synth_type = SYNTH_FPU;
+
+#ifdef USE_SIMD
+ fr->dct36 = funcs_dct36[0];
+
+ if (CPU_HAS_3DNOW() && !p8 &&
+ (mpg123_cfg.default_synth == SYNTH_3DNOW ||
+ mpg123_cfg.default_synth == SYNTH_AUTO)) {
+ fr->synth = funcs[3][ds]; /* 3DNow! optimized synth_1to1() */
+ fr->dct36 = funcs_dct36[1]; /* 3DNow! optimized dct36() */
+ fr->synth_type = SYNTH_3DNOW;
+ }
+ else if (CPU_HAS_MMX() && !p8 &&
+ (mpg123_cfg.default_synth == SYNTH_MMX ||
+ mpg123_cfg.default_synth == SYNTH_AUTO)) {
+ fr->synth = funcs[2][ds]; /* MMX optimized synth_1to1() */
+ fr->synth_type = SYNTH_MMX;
+ }
+#endif
+ if (p8) {
+ mpg123_make_conv16to8_table();
+ }
+}
+
+static void
+init(void)
+{
+ ConfigDb *db;
+
+ mpg123_make_decode_tables(outscale);
+
+ mpg123_cfg.resolution = 16;
+ mpg123_cfg.channels = 2;
+ mpg123_cfg.downsample = 0;
+ mpg123_cfg.http_buffer_size = 128;
+ mpg123_cfg.http_prebuffer = 25;
+ mpg123_cfg.proxy_port = 8080;
+ mpg123_cfg.proxy_use_auth = FALSE;
+ mpg123_cfg.proxy_user = NULL;
+ mpg123_cfg.proxy_pass = NULL;
+ mpg123_cfg.use_udp_channel = TRUE;
+ mpg123_cfg.title_override = FALSE;
+ mpg123_cfg.disable_id3v2 = FALSE;
+ mpg123_cfg.detect_by = DETECT_EXTENSION;
+ mpg123_cfg.default_synth = SYNTH_AUTO;
+
+ mpg123_cfg.title_encoding_enabled = FALSE;
+ mpg123_cfg.title_encoding = NULL;
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_get_int(db, "MPG123", "resolution", &mpg123_cfg.resolution);
+ bmp_cfg_db_get_int(db, "MPG123", "channels", &mpg123_cfg.channels);
+ bmp_cfg_db_get_int(db, "MPG123", "downsample", &mpg123_cfg.downsample);
+ bmp_cfg_db_get_int(db, "MPG123", "http_buffer_size",
+ &mpg123_cfg.http_buffer_size);
+ bmp_cfg_db_get_int(db, "MPG123", "http_prebuffer",
+ &mpg123_cfg.http_prebuffer);
+ bmp_cfg_db_get_bool(db, "MPG123", "save_http_stream",
+ &mpg123_cfg.save_http_stream);
+ if (!bmp_cfg_db_get_string
+ (db, "MPG123", "save_http_path", &mpg123_cfg.save_http_path))
+ mpg123_cfg.save_http_path = g_strdup(g_get_home_dir());
+
+ bmp_cfg_db_get_bool(db, "MPG123", "use_udp_channel",
+ &mpg123_cfg.use_udp_channel);
+
+ bmp_cfg_db_get_bool(db, "MPG123", "use_proxy", &mpg123_cfg.use_proxy);
+ if (!bmp_cfg_db_get_string
+ (db, "MPG123", "proxy_host", &mpg123_cfg.proxy_host))
+ mpg123_cfg.proxy_host = g_strdup("localhost");
+ bmp_cfg_db_get_int(db, "MPG123", "proxy_port", &mpg123_cfg.proxy_port);
+ bmp_cfg_db_get_bool(db, "MPG123", "proxy_use_auth",
+ &mpg123_cfg.proxy_use_auth);
+ bmp_cfg_db_get_string(db, "MPG123", "proxy_user", &mpg123_cfg.proxy_user);
+ bmp_cfg_db_get_string(db, "MPG123", "proxy_pass", &mpg123_cfg.proxy_pass);
+
+ bmp_cfg_db_get_bool(db, "MPG123", "title_override",
+ &mpg123_cfg.title_override);
+ bmp_cfg_db_get_bool(db, "MPG123", "disable_id3v2",
+ &mpg123_cfg.disable_id3v2);
+ if (!bmp_cfg_db_get_string
+ (db, "MPG123", "id3_format", &mpg123_cfg.id3_format))
+ mpg123_cfg.id3_format = g_strdup("%p - %t");
+ bmp_cfg_db_get_int(db, "MPG123", "detect_by", &mpg123_cfg.detect_by);
+ bmp_cfg_db_get_int(db, "MPG123", "default_synth",
+ &mpg123_cfg.default_synth);
+
+ bmp_cfg_db_get_bool(db, "MPG123", "title_encoding_enabled", &mpg123_cfg.title_encoding_enabled);
+ bmp_cfg_db_get_string(db, "MPG123", "title_encoding", &mpg123_cfg.title_encoding);
+ if (mpg123_cfg.title_encoding_enabled)
+ mpg123_id3_encoding_list = g_strsplit_set(mpg123_cfg.title_encoding, ENCODING_SEPARATOR, 0);
+
+ bmp_cfg_db_close(db);
+
+ if (mpg123_cfg.resolution != 16 && mpg123_cfg.resolution != 8)
+ mpg123_cfg.resolution = 16;
+
+ mpg123_cfg.channels = CLAMP(mpg123_cfg.channels, 0, 2);
+ mpg123_cfg.downsample = CLAMP(mpg123_cfg.downsample, 0, 2);
+ mpg123_getcpuflags(&cpu_fflags, &cpu_efflags);
+}
+
+static void
+cleanup(void)
+{
+ g_strfreev(mpg123_id3_encoding_list);
+}
+
+/* needed for is_our_file() */
+static int
+read_n_bytes(VFSFile * file, guint8 * buf, int n)
+{
+
+ if (vfs_fread(buf, 1, n, file) != n) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static guint32
+convert_to_header(guint8 * buf)
+{
+
+ return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
+}
+
+static guint32
+convert_to_long(guint8 * buf)
+{
+
+ return (buf[3] << 24) + (buf[2] << 16) + (buf[1] << 8) + buf[0];
+}
+
+static guint16
+read_wav_id(char *filename)
+{
+ VFSFile *file;
+ guint16 wavid;
+ guint8 buf[4];
+ guint32 head;
+ long seek;
+
+ if (!(file = vfs_fopen(filename, "rb"))) { /* Could not open file */
+ return 0;
+ }
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ head = convert_to_header(buf);
+ if (head == ('R' << 24) + ('I' << 16) + ('F' << 8) + 'F') { /* Found a riff -- maybe WAVE */
+ if (vfs_fseek(file, 4, SEEK_CUR) != 0) { /* some error occured */
+ vfs_fclose(file);
+ return 0;
+ }
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ head = convert_to_header(buf);
+ if (head == ('W' << 24) + ('A' << 16) + ('V' << 8) + 'E') { /* Found a WAVE */
+ seek = 0;
+ do {
+/* we'll be looking for the fmt-chunk which comes before the data-chunk */
+/* A chunk consists of an header identifier (4 bytes), the length of the chunk
+ (4 bytes), and the chunkdata itself, padded to be an even number of bytes.
+ We'll skip all chunks until we find the "data"-one which could contain
+ mpeg-data */
+ if (seek != 0) {
+ if (vfs_fseek(file, seek, SEEK_CUR) != 0) { /* some error occured */
+ vfs_fclose(file);
+ return 0;
+ }
+ }
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ head = convert_to_header(buf);
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ seek = convert_to_long(buf);
+ seek = seek + (seek % 2); /* Has to be even (padding) */
+ if (seek >= 2
+ && head == ('f' << 24) + ('m' << 16) + ('t' << 8) + ' ') {
+ if (!(read_n_bytes(file, buf, 2))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ wavid = buf[0] + 256 * buf[1];
+ seek -= 2;
+ /* we could go on looking for
+ other things, but all we
+ wanted was the wavid */
+ vfs_fclose(file);
+ return wavid;
+ }
+ }
+ while (head != ('d' << 24) + ('a' << 16) + ('t' << 8) + 'a');
+ /* it's RIFF WAVE */
+ }
+ /* it's RIFF */
+ }
+ /* it's not even RIFF */
+ vfs_fclose(file);
+ return 0;
+}
+
+#define DET_BUF_SIZE 1024
+
+static gboolean
+mpg123_detect_by_content(char *filename)
+{
+ VFSFile *file;
+ guchar tmp[4];
+ guint32 head;
+ struct frame fr;
+ guchar buf[DET_BUF_SIZE];
+ int in_buf, i;
+ gboolean ret = FALSE;
+
+ if ((file = vfs_fopen(filename, "rb")) == NULL)
+ return FALSE;
+ if (vfs_fread(tmp, 1, 4, file) != 4)
+ goto done;
+ head = convert_to_header(tmp);
+ while (!mpg123_head_check(head)) {
+ /*
+ * The mpeg-stream can start anywhere in the file,
+ * so we check the entire file
+ */
+ /* Optimize this */
+ in_buf = vfs_fread(buf, 1, DET_BUF_SIZE, file);
+ if (in_buf == 0)
+ goto done;
+
+ for (i = 0; i < in_buf; i++) {
+ head <<= 8;
+ head |= buf[i];
+ if (mpg123_head_check(head)) {
+ vfs_fseek(file, i + 1 - in_buf, SEEK_CUR);
+ break;
+ }
+ }
+ }
+ if (mpg123_decode_header(&fr, head)) {
+ /*
+ * We found something which looks like a MPEG-header.
+ * We check the next frame too, to be sure
+ */
+
+ if (vfs_fseek(file, fr.framesize, SEEK_CUR) != 0)
+ goto done;
+ if (vfs_fread(tmp, 1, 4, file) != 4)
+ goto done;
+ head = convert_to_header(tmp);
+ if (mpg123_head_check(head) && mpg123_decode_header(&fr, head))
+ ret = TRUE;
+ }
+
+ done:
+ vfs_fclose(file);
+ return ret;
+}
+
+static int
+is_our_file(char *filename)
+{
+ char *ext;
+ guint16 wavid;
+
+ /* FIXME: wtf? */
+ /* We assume all http:// (except those ending in .ogg) are mpeg --
+ * why do we do that? */
+ if (!strncasecmp(filename, "http://", 7)) {
+ ext = strrchr(filename, '.');
+ if (ext) {
+ if (!strncasecmp(ext, ".ogg", 4))
+ return FALSE;
+ if (!strncasecmp(ext, ".rm", 3) ||
+ !strncasecmp(ext, ".ra", 3) ||
+ !strncasecmp(ext, ".rpm", 4) ||
+ !strncasecmp(ext, ".ram", 4))
+ return FALSE;
+ }
+ return TRUE;
+ }
+ if (mpg123_cfg.detect_by == DETECT_CONTENT)
+ return (mpg123_detect_by_content(filename));
+
+ ext = strrchr(filename, '.');
+ if (ext) {
+ if (!strncasecmp(ext, ".mp2", 4) || !strncasecmp(ext, ".mp3", 4)) {
+ return TRUE;
+ }
+ if (!strncasecmp(ext, ".wav", 4)) {
+ wavid = read_wav_id(filename);
+ if (wavid == 85 || wavid == 80) { /* Microsoft says 80, files say 85... */
+ return TRUE;
+ }
+ }
+ }
+
+ if (mpg123_cfg.detect_by == DETECT_BOTH)
+ return (mpg123_detect_by_content(filename));
+ return FALSE;
+}
+
+static void
+play_frame(struct frame *fr)
+{
+ if (fr->error_protection) {
+ bsi.wordpointer += 2;
+ /* mpg123_getbits(16); *//* skip crc */
+ }
+ if (!fr->do_layer(fr)) {
+ skip_frames = 2;
+ mpg123_info->output_audio = FALSE;
+ }
+ else {
+ if (!skip_frames)
+ mpg123_info->output_audio = TRUE;
+ else
+ skip_frames--;
+ }
+}
+
+static const char *
+get_id3_genre(unsigned char genre_code)
+{
+ if (genre_code < GENRE_MAX)
+ return gettext(mpg123_id3_genres[genre_code]);
+
+ return "";
+}
+
+guint
+mpg123_strip_spaces(char *src, size_t n)
+/* strips trailing spaces from string of length n
+ returns length of adjusted string */
+{
+ gchar *space = NULL, /* last space in src */
+ *start = src;
+
+ while (n--)
+ switch (*src++) {
+ case '\0':
+ n = 0; /* breaks out of while loop */
+
+ src--;
+ break;
+ case ' ':
+ if (space == NULL)
+ space = src - 1;
+ break;
+ default:
+ space = NULL; /* don't terminate intermediate spaces */
+
+ break;
+ }
+ if (space != NULL) {
+ src = space;
+ *src = '\0';
+ }
+ return src - start;
+}
+
+/*
+ * Function extname (filename)
+ *
+ * Return pointer within filename to its extenstion, or NULL if
+ * filename has no extension.
+ *
+ */
+static gchar *
+extname(const char *filename)
+{
+ gchar *ext = strrchr(filename, '.');
+
+ if (ext != NULL)
+ ++ext;
+
+ return ext;
+}
+
+/*
+ * Function id3v1_to_id3v2 (v1, v2)
+ *
+ * Convert ID3v1 tag `v1' to ID3v2 tag `v2'.
+ *
+ */
+void
+mpg123_id3v1_to_id3v2(struct id3v1tag_t *v1, struct id3tag_t *v2)
+{
+ memset(v2, 0, sizeof(struct id3tag_t));
+ strncpy(v2->title, v1->title, 30);
+ strncpy(v2->artist, v1->artist, 30);
+ strncpy(v2->album, v1->album, 30);
+ strncpy(v2->comment, v1->u.v1_0.comment, 30);
+ strncpy(v2->genre, get_id3_genre(v1->genre), sizeof(v2->genre));
+ g_strstrip(v2->title);
+ g_strstrip(v2->artist);
+ g_strstrip(v2->album);
+ g_strstrip(v2->comment);
+ g_strstrip(v2->genre);
+ v2->year = atoi(v1->year);
+
+ /* Check for v1.1 tags. */
+ if (v1->u.v1_1.__zero == 0)
+ v2->track_number = v1->u.v1_1.track_number;
+ else
+ v2->track_number = 0;
+}
+
+static char *
+mpg123_getstr(char *str)
+{
+ if (str && strlen(str) > 0)
+ return str;
+ return NULL;
+}
+
+static gchar *
+convert_id3_title(gchar * title)
+{
+ gchar **encoding = mpg123_id3_encoding_list;
+ gchar *new_title = NULL;
+
+ if (g_utf8_validate(title, -1, NULL))
+ return title;
+
+ while (*encoding && !new_title) {
+ new_title = g_convert(title, strlen(title), "UTF-8", *encoding++,
+ NULL, NULL, NULL);
+ }
+
+ if (new_title) {
+ g_free(title);
+ return new_title;
+ }
+
+ /* FIXME: We're relying on BMP core to provide fallback
+ * conversion */
+ return title;
+}
+
+/*
+ * Function mpg123_format_song_title (tag, filename)
+ *
+ * Create song title according to `tag' and/or `filename' and
+ * return it. The title must be subsequently freed using g_free().
+ *
+ */
+gchar *
+mpg123_format_song_title(struct id3tag_t * tag, gchar * filename)
+{
+ gchar *title = NULL;
+ TitleInput *input;
+
+ input = bmp_title_input_new();
+
+ if (tag) {
+ input->performer = mpg123_getstr(tag->artist);
+ input->album_name = mpg123_getstr(tag->album);
+ input->track_name = mpg123_getstr(tag->title);
+ input->year = tag->year;
+ input->track_number = tag->track_number;
+ input->genre = mpg123_getstr(tag->genre);
+ input->comment = mpg123_getstr(tag->comment);
+ }
+
+ input->file_name = g_path_get_basename(filename);
+ input->file_path = g_path_get_dirname(filename);
+ input->file_ext = extname(filename);
+
+ title = xmms_get_titlestring(mpg123_cfg.title_override ?
+ mpg123_cfg.id3_format :
+ xmms_get_gentitle_format(), input);
+
+ if (!title) {
+ /* Format according to filename. */
+ title = g_path_get_basename(filename);
+ if (extname(title))
+ *(extname(title) - 1) = '\0'; /* removes period */
+ }
+
+ g_free(input->file_path);
+ g_free(input->file_name);
+ g_free(input);
+
+ if (mpg123_cfg.title_encoding_enabled)
+ title = convert_id3_title(title);
+
+ return title;
+}
+
+/*
+ * Function mpg123_get_id3v2 (id3d, tag)
+ *
+ * Get desired contents from the indicated id3tag and store it in
+ * `tag'.
+ *
+ */
+void
+mpg123_get_id3v2(struct id3_tag *id3d, struct id3tag_t *tag)
+{
+ struct id3_frame *id3frm;
+ gchar *txt;
+ gint tlen, num;
+
+#define ID3_SET(_tid,_fld) \
+{ \
+ id3frm = id3_get_frame( id3d, _tid, 1 ); \
+ if (id3frm) { \
+ txt = _tid == ID3_TCON ? id3_get_content(id3frm) \
+ : id3_get_text(id3frm); \
+ if(txt) \
+ { \
+ tlen = strlen(txt); \
+ if ( tlen >= sizeof(tag->_fld) ) \
+ tlen = sizeof(tag->_fld)-1; \
+ strncpy( tag->_fld, txt, tlen ); \
+ tag->_fld[tlen] = 0; \
+ g_free(txt); \
+ } \
+ else \
+ tag->_fld[0] = 0; \
+ } else { \
+ tag->_fld[0] = 0; \
+ } \
+}
+
+#define ID3_SET_NUM(_tid,_fld) \
+{ \
+ id3frm = id3_get_frame(id3d, _tid, 1); \
+ if (id3frm) { \
+ num = id3_get_text_number(id3frm); \
+ tag->_fld = num >= 0 ? num : 0; \
+ } else \
+ tag->_fld = 0; \
+}
+
+ ID3_SET(ID3_TIT2, title);
+ ID3_SET(ID3_TPE1, artist);
+ if (strlen(tag->artist) == 0)
+ ID3_SET(ID3_TPE2, artist);
+ ID3_SET(ID3_TALB, album);
+ ID3_SET_NUM(ID3_TYER, year);
+ ID3_SET_NUM(ID3_TRCK, track_number);
+ ID3_SET(ID3_COMM, comment);
+ ID3_SET(ID3_TCON, genre);
+}
+
+
+/*
+ * Function get_song_title (fd, filename)
+ *
+ * Get song title of file. File position of `fd' will be
+ * clobbered. `fd' may be NULL, in which case `filename' is opened
+ * separately. The returned song title must be subsequently freed
+ * using g_free().
+ *
+ */
+static gchar *
+get_song_title(VFSFile * fd, char *filename)
+{
+ VFSFile *file = fd;
+ char *ret = NULL;
+ struct id3v1tag_t id3v1tag;
+ struct id3tag_t id3tag;
+
+ if (file || (file = vfs_fopen(filename, "rb")) != 0) {
+ struct id3_tag *id3 = NULL;
+
+ /*
+ * Try reading ID3v2 tag.
+ */
+ if (!mpg123_cfg.disable_id3v2) {
+ vfs_fseek(file, 0, SEEK_SET);
+ id3 = id3_open_fp(file, 0);
+ if (id3) {
+ mpg123_get_id3v2(id3, &id3tag);
+ ret = mpg123_format_song_title(&id3tag, filename);
+ id3_close(id3);
+ }
+ }
+
+ /*
+ * Try reading ID3v1 tag.
+ */
+ if (!id3 && (vfs_fseek(file, -1 * sizeof(id3v1tag), SEEK_END) == 0) &&
+ (vfs_fread(&id3v1tag, 1, sizeof(id3v1tag), file) ==
+ sizeof(id3v1tag)) && (strncmp(id3v1tag.tag, "TAG", 3) == 0)) {
+ mpg123_id3v1_to_id3v2(&id3v1tag, &id3tag);
+ ret = mpg123_format_song_title(&id3tag, filename);
+ }
+
+ if (!fd)
+ /*
+ * File was opened in this function.
+ */
+ vfs_fclose(file);
+ }
+
+ if (ret == NULL)
+ /*
+ * Unable to get ID3 tag.
+ */
+ ret = mpg123_format_song_title(NULL, filename);
+
+ return ret;
+}
+
+static long
+get_song_length(VFSFile * file)
+{
+ int len;
+ char tmp[4];
+
+ vfs_fseek(file, 0, SEEK_END);
+ len = vfs_ftell(file);
+ vfs_fseek(file, -128, SEEK_END);
+ vfs_fread(tmp, 1, 3, file);
+ if (!strncmp(tmp, "TAG", 3))
+ len -= 128;
+ return len;
+}
+
+
+static guint
+get_song_time(VFSFile * file)
+{
+ guint32 head;
+ guchar tmp[4], *buf;
+ struct frame frm;
+ xing_header_t xing_header;
+ double tpf, bpf;
+ guint32 len;
+
+ if (!file)
+ return -1;
+
+ vfs_fseek(file, 0, SEEK_SET);
+ if (vfs_fread(tmp, 1, 4, file) != 4)
+ return 0;
+ head = convert_to_header(tmp);
+ while (!mpg123_head_check(head)) {
+ head <<= 8;
+ if (vfs_fread(tmp, 1, 1, file) != 1)
+ return 0;
+ head |= tmp[0];
+ }
+ if (mpg123_decode_header(&frm, head)) {
+ buf = g_malloc(frm.framesize + 4);
+ vfs_fseek(file, -4, SEEK_CUR);
+ vfs_fread(buf, 1, frm.framesize + 4, file);
+ tpf = mpg123_compute_tpf(&frm);
+ if (mpg123_get_xing_header(&xing_header, buf)) {
+ g_free(buf);
+ if (xing_header.bytes == 0)
+ xing_header.bytes = get_song_length(file);
+ return (tpf * xing_header.frames * 1000);
+ }
+ g_free(buf);
+ bpf = mpg123_compute_bpf(&frm);
+ len = get_song_length(file);
+ return ((guint) (len / bpf) * tpf * 1000);
+ }
+ return 0;
+}
+
+static void
+get_song_info(char *filename, char **title_real, int *len_real)
+{
+ VFSFile *file;
+
+ (*len_real) = -1;
+ (*title_real) = NULL;
+
+ /*
+ * TODO: Getting song info from http streams.
+ */
+ if (!strncasecmp(filename, "http://", 7))
+ return;
+
+ if ((file = vfs_fopen(filename, "rb")) != NULL) {
+ (*len_real) = get_song_time(file);
+ (*title_real) = get_song_title(file, filename);
+ vfs_fclose(file);
+ }
+}
+
+static int
+open_output(void)
+{
+ int r;
+ AFormat fmt = mpg123_cfg.resolution == 16 ? FMT_S16_NE : FMT_U8;
+ int freq = mpg123_freqs[fr.sampling_frequency] >> mpg123_cfg.downsample;
+ int channels = mpg123_cfg.channels == 2 ? fr.stereo : 1;
+ r = mpg123_ip.output->open_audio(fmt, freq, channels);
+
+ if (r && dopause) {
+ mpg123_ip.output->pause(TRUE);
+ dopause = FALSE;
+ }
+
+ return r;
+}
+
+
+static int
+mpg123_seek(struct frame *fr, xing_header_t * xh, gboolean vbr, int time)
+{
+ int jumped = -1;
+
+ if (xh) {
+ int percent = ((double) time * 100.0) /
+ (mpg123_info->num_frames * mpg123_info->tpf);
+ int byte = mpg123_seek_point(xh, percent);
+ jumped = mpg123_stream_jump_to_byte(fr, byte);
+ }
+ else if (vbr && mpg123_length > 0) {
+ int byte = ((guint64) time * 1000 * mpg123_info->filesize) /
+ mpg123_length;
+ jumped = mpg123_stream_jump_to_byte(fr, byte);
+ }
+ else {
+ int frame = time / mpg123_info->tpf;
+ jumped = mpg123_stream_jump_to_frame(fr, frame);
+ }
+
+ return jumped;
+}
+
+
+static void *
+decode_loop(void *arg)
+{
+ gboolean have_xing_header = FALSE, vbr = FALSE;
+ int disp_count = 0, temp_time;
+ char *filename = arg;
+ xing_header_t xing_header;
+
+ /* This is used by fileinfo on http streams */
+ mpg123_bitrate = 0;
+
+ mpg123_pcm_sample = g_malloc0(32768);
+ mpg123_pcm_point = 0;
+ mpg123_filename = filename;
+
+ mpg123_read_frame_init();
+
+ mpg123_open_stream(filename, -1);
+
+ if (mpg123_info->eof || !mpg123_read_frame(&fr))
+ mpg123_info->eof = TRUE;
+
+ if (!mpg123_info->eof && mpg123_info->going) {
+ if (mpg123_cfg.channels == 2)
+ fr.single = -1;
+ else
+ fr.single = 3;
+
+ fr.down_sample = mpg123_cfg.downsample;
+ fr.down_sample_sblimit = SBLIMIT >> mpg123_cfg.downsample;
+ set_synth_functions(&fr);
+ mpg123_init_layer3(fr.down_sample_sblimit);
+
+ mpg123_info->tpf = mpg123_compute_tpf(&fr);
+ if (strncasecmp(filename, "http://", 7)) {
+ if (mpg123_stream_check_for_xing_header(&fr, &xing_header)) {
+ mpg123_info->num_frames = xing_header.frames;
+ have_xing_header = TRUE;
+ mpg123_read_frame(&fr);
+ }
+ }
+
+ for (;;) {
+ memcpy(&temp_fr, &fr, sizeof(struct frame));
+ if (!mpg123_read_frame(&temp_fr)) {
+ mpg123_info->eof = TRUE;
+ break;
+ }
+ if (fr.lay != temp_fr.lay ||
+ fr.sampling_frequency != temp_fr.sampling_frequency ||
+ fr.stereo != temp_fr.stereo || fr.lsf != temp_fr.lsf)
+ memcpy(&fr, &temp_fr, sizeof(struct frame));
+ else
+ break;
+ }
+
+ if (!have_xing_header && strncasecmp(filename, "http://", 7))
+ mpg123_info->num_frames = mpg123_calc_numframes(&fr);
+
+ memcpy(&fr, &temp_fr, sizeof(struct frame));
+ mpg123_bitrate = tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index];
+ disp_bitrate = mpg123_bitrate;
+ mpg123_frequency = mpg123_freqs[fr.sampling_frequency];
+ mpg123_stereo = fr.stereo;
+ mpg123_layer = fr.lay;
+ mpg123_lsf = fr.lsf;
+ mpg123_mpeg25 = fr.mpeg25;
+ mpg123_mode = fr.mode;
+
+ if (strncasecmp(filename, "http://", 7)) {
+ mpg123_length = mpg123_info->num_frames * mpg123_info->tpf * 1000;
+ if (!mpg123_title)
+ mpg123_title = get_song_title(NULL, filename);
+ }
+ else {
+ if (!mpg123_title)
+ mpg123_title = mpg123_http_get_title(filename);
+ mpg123_length = -1;
+ }
+
+ mpg123_ip.set_info(mpg123_title, mpg123_length,
+ mpg123_bitrate * 1000,
+ mpg123_freqs[fr.sampling_frequency], fr.stereo);
+
+ output_opened = TRUE;
+
+ if (!open_output()) {
+ audio_error = TRUE;
+ mpg123_info->eof = TRUE;
+ }
+ else
+ play_frame(&fr);
+ }
+
+ mpg123_info->first_frame = FALSE;
+ while (mpg123_info->going) {
+ if (mpg123_info->jump_to_time != -1) {
+ void *xp = NULL;
+ if (have_xing_header)
+ xp = &xing_header;
+ if (mpg123_seek(&fr, xp, vbr, mpg123_info->jump_to_time) > -1) {
+ mpg123_ip.output->flush(mpg123_info->jump_to_time * 1000);
+ mpg123_info->eof = FALSE;
+ }
+ mpg123_info->jump_to_time = -1;
+ }
+ if (!mpg123_info->eof) {
+ if (mpg123_read_frame(&fr) != 0) {
+ if (fr.lay != mpg123_layer || fr.lsf != mpg123_lsf) {
+ memcpy(&temp_fr, &fr, sizeof(struct frame));
+ if (mpg123_read_frame(&temp_fr) != 0) {
+ if (fr.lay == temp_fr.lay && fr.lsf == temp_fr.lsf) {
+ mpg123_layer = fr.lay;
+ mpg123_lsf = fr.lsf;
+ memcpy(&fr, &temp_fr, sizeof(struct frame));
+ }
+ else {
+ memcpy(&fr, &temp_fr, sizeof(struct frame));
+ skip_frames = 2;
+ mpg123_info->output_audio = FALSE;
+ continue;
+ }
+
+ }
+ }
+ if (mpg123_freqs[fr.sampling_frequency] != mpg123_frequency
+ || mpg123_stereo != fr.stereo) {
+ memcpy(&temp_fr, &fr, sizeof(struct frame));
+ if (mpg123_read_frame(&temp_fr) != 0) {
+ if (fr.sampling_frequency ==
+ temp_fr.sampling_frequency
+ && temp_fr.stereo == fr.stereo) {
+ mpg123_ip.output->buffer_free();
+ mpg123_ip.output->buffer_free();
+ while (mpg123_ip.output->buffer_playing()
+ && mpg123_info->going
+ && mpg123_info->jump_to_time == -1)
+ xmms_usleep(20000);
+ if (!mpg123_info->going)
+ break;
+ temp_time = mpg123_ip.output->output_time();
+ mpg123_ip.output->close_audio();
+ mpg123_frequency =
+ mpg123_freqs[fr.sampling_frequency];
+ mpg123_stereo = fr.stereo;
+ if (!mpg123_ip.output->
+ open_audio(mpg123_cfg.resolution ==
+ 16 ? FMT_S16_NE : FMT_U8,
+ mpg123_freqs[fr.sampling_frequency]
+ >> mpg123_cfg.downsample,
+ mpg123_cfg.channels ==
+ 2 ? fr.stereo : 1)) {
+ audio_error = TRUE;
+ mpg123_info->eof = TRUE;
+ }
+ mpg123_ip.output->flush(temp_time);
+ mpg123_ip.set_info(mpg123_title, mpg123_length,
+ mpg123_bitrate * 1000,
+ mpg123_frequency,
+ mpg123_stereo);
+ memcpy(&fr, &temp_fr, sizeof(struct frame));
+ }
+ else {
+ memcpy(&fr, &temp_fr, sizeof(struct frame));
+ skip_frames = 2;
+ mpg123_info->output_audio = FALSE;
+ continue;
+ }
+ }
+ }
+
+ if (tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index] !=
+ mpg123_bitrate)
+ mpg123_bitrate =
+ tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index];
+
+ if (!disp_count) {
+ disp_count = 20;
+ if (mpg123_bitrate != disp_bitrate) {
+ /* FIXME networks streams */
+ disp_bitrate = mpg123_bitrate;
+ if (!have_xing_header
+ && strncasecmp(filename, "http://", 7)) {
+ double rel = mpg123_relative_pos();
+ if (rel) {
+ mpg123_length =
+ mpg123_ip.output->written_time() / rel;
+ vbr = TRUE;
+ }
+
+ if (rel == 0 || !(mpg123_length > 0)) {
+ mpg123_info->num_frames =
+ mpg123_calc_numframes(&fr);
+ mpg123_info->tpf = mpg123_compute_tpf(&fr);
+ mpg123_length =
+ mpg123_info->num_frames *
+ mpg123_info->tpf * 1000;
+ }
+
+
+ }
+ mpg123_ip.set_info(mpg123_title, mpg123_length,
+ mpg123_bitrate * 1000,
+ mpg123_frequency, mpg123_stereo);
+ }
+ }
+ else
+ disp_count--;
+ play_frame(&fr);
+ }
+ else {
+ mpg123_ip.output->buffer_free();
+ mpg123_ip.output->buffer_free();
+ mpg123_info->eof = TRUE;
+ xmms_usleep(10000);
+ }
+ }
+ else {
+ xmms_usleep(10000);
+ }
+ }
+ g_free(mpg123_title);
+ mpg123_title = NULL;
+ mpg123_stream_close();
+ if (output_opened && !audio_error)
+ mpg123_ip.output->close_audio();
+ g_free(mpg123_pcm_sample);
+ mpg123_filename = NULL;
+ g_free(filename);
+
+ return NULL;
+}
+
+static void
+play_file(char *filename)
+{
+ memset(&fr, 0, sizeof(struct frame));
+ memset(&temp_fr, 0, sizeof(struct frame));
+
+ mpg123_info = g_malloc0(sizeof(PlayerInfo));
+ mpg123_info->going = 1;
+ mpg123_info->first_frame = TRUE;
+ mpg123_info->output_audio = TRUE;
+ mpg123_info->jump_to_time = -1;
+ skip_frames = 0;
+ audio_error = FALSE;
+ output_opened = FALSE;
+ dopause = FALSE;
+
+ decode_thread = g_thread_create(decode_loop, g_strdup(filename), TRUE,
+ NULL);
+}
+
+static void
+stop(void)
+{
+ if (mpg123_info && mpg123_info->going) {
+ mpg123_info->going = FALSE;
+ g_thread_join(decode_thread);
+ g_free(mpg123_info);
+ mpg123_info = NULL;
+ }
+}
+
+static void
+seek(int time)
+{
+ mpg123_info->jump_to_time = time;
+
+ while (mpg123_info->jump_to_time != -1)
+ xmms_usleep(10000);
+}
+
+static void
+do_pause(short p)
+{
+ if (output_opened)
+ mpg123_ip.output->pause(p);
+ else
+ dopause = p;
+}
+
+static int
+get_time(void)
+{
+ if (audio_error)
+ return -2;
+ if (!mpg123_info)
+ return -1;
+ if (!mpg123_info->going
+ || (mpg123_info->eof && !mpg123_ip.output->buffer_playing()))
+ return -1;
+ return mpg123_ip.output->output_time();
+}
+
+static void
+aboutbox(void)
+{
+ static GtkWidget *aboutbox;
+
+ if (aboutbox != NULL)
+ return;
+
+ aboutbox = xmms_show_message(_("About MPEG Audio Plugin"),
+ _("mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+ "Plugin by The XMMS team"),
+ _("Ok"),
+ FALSE, NULL, NULL);
+
+ g_signal_connect(G_OBJECT(aboutbox), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &aboutbox);
+}
+
+InputPlugin mpg123_ip = {
+ NULL,
+ NULL,
+ NULL, /* Description */
+ init,
+ aboutbox,
+ mpg123_configure,
+ is_our_file,
+ NULL,
+ play_file,
+ stop,
+ do_pause,
+ seek,
+ mpg123_set_eq,
+ get_time,
+ NULL, NULL,
+ cleanup,
+ NULL,
+ NULL, NULL, NULL,
+ get_song_info,
+ mpg123_file_info_box, /* file_info_box */
+ NULL
+};
+
+InputPlugin *
+get_iplugin_info(void)
+{
+ mpg123_ip.description = g_strdup_printf(_("MPEG Audio Plugin"));
+ return &mpg123_ip;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/mpg123.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,303 @@
+/*
+ * mpg123 defines
+ * used source: musicout.h from mpegaudio package
+ */
+
+#ifndef __MPG123_H__
+#define __MPG123_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+
+enum {
+ SYNTH_AUTO,
+ SYNTH_FPU,
+ SYNTH_3DNOW,
+ SYNTH_MMX,
+};
+
+enum {
+ DETECT_EXTENSION,
+ DETECT_CONTENT,
+ DETECT_BOTH
+};
+
+#include <gtk/gtk.h>
+
+#include "beep/plugin.h"
+#include "dxhead.h"
+#include "xmms-id3.h"
+
+#define real float
+
+#define SBLIMIT 32
+#define SCALE_BLOCK 12
+#define SSLIMIT 18
+
+#define MPG_MD_STEREO 0
+#define MPG_MD_JOINT_STEREO 1
+#define MPG_MD_DUAL_CHANNEL 2
+#define MPG_MD_MONO 3
+
+#define ENCODING_SEPARATOR " ,:;|/"
+
+struct id3v1tag_t {
+ char tag[3]; /* always "TAG": defines ID3v1 tag 128 bytes before EOF */
+ char title[30];
+ char artist[30];
+ char album[30];
+ char year[4];
+ union {
+ struct {
+ char comment[30];
+ } v1_0;
+ struct {
+ char comment[28];
+ char __zero;
+ unsigned char track_number;
+ } v1_1;
+ } u;
+ unsigned char genre;
+};
+
+struct id3tag_t {
+ char title[64];
+ char artist[64];
+ char album[64];
+ char comment[256];
+ char genre[256];
+ gint year;
+ gint track_number;
+};
+
+typedef struct {
+ int going, num_frames, eof, jump_to_time, eq_active;
+ int songtime;
+ double tpf;
+ float eq_mul[576];
+ gboolean output_audio, first_frame, network_stream;
+ guint32 filesize; /* Filesize without junk */
+} PlayerInfo;
+
+void mpg123_set_eq(int on, float preamp, float *band);
+void mpg123_file_info_box(char *);
+
+extern PlayerInfo *mpg123_info;
+extern InputPlugin mpg123_ip;
+
+struct al_table {
+ short bits;
+ short d;
+};
+
+struct frame {
+ struct al_table *alloc;
+ int (*synth) (real *, int, unsigned char *, int *);
+ int (*synth_mono) (real *, unsigned char *, int *);
+#ifdef USE_SIMD
+ void (*dct36) (real *, real *, real *, real *, real *);
+#endif
+ int stereo;
+ int jsbound;
+ int single;
+ int II_sblimit;
+ int down_sample_sblimit;
+ int lsf;
+ int mpeg25;
+ int down_sample;
+ int header_change;
+ int lay;
+ int (*do_layer) (struct frame * fr);
+ int error_protection;
+ int bitrate_index;
+ int sampling_frequency;
+ int padding;
+ int extension;
+ int mode;
+ int mode_ext;
+ int copyright;
+ int original;
+ int emphasis;
+ int framesize; /* computed framesize */
+ int synth_type;
+};
+
+void mpg123_configure(void);
+
+typedef struct {
+ gint resolution;
+ gint channels;
+ gint downsample;
+ gint http_buffer_size;
+ gint http_prebuffer;
+ gboolean use_proxy;
+ gchar *proxy_host;
+ gint proxy_port;
+ gboolean proxy_use_auth;
+ gchar *proxy_user, *proxy_pass;
+ gboolean save_http_stream;
+ gchar *save_http_path;
+ gboolean use_udp_channel;
+ gchar *id3_format;
+ gboolean title_override, disable_id3v2;
+ gboolean title_encoding_enabled;
+ gchar *title_encoding;
+ int detect_by;
+ int default_synth;
+} MPG123Config;
+
+extern MPG123Config mpg123_cfg;
+
+struct bitstream_info {
+ int bitindex;
+ unsigned char *wordpointer;
+};
+
+extern struct bitstream_info bsi;
+
+/* ------ Declarations from "http.c" ------ */
+
+extern int mpg123_http_open(char *url);
+int mpg123_http_read(gpointer data, gint length);
+void mpg123_http_close(void);
+char *mpg123_http_get_title(char *url);
+int mpg123_http_get_length(void);
+void mpg123_http_seek(long pos);
+
+/* ------ Declarations from "common.c" ------ */
+extern unsigned int mpg123_get1bit(void);
+extern unsigned int mpg123_getbits(int);
+extern unsigned int mpg123_getbits_fast(int);
+
+extern void mpg123_open_stream(char *bs_filenam, int fd);
+extern int mpg123_head_check(unsigned long);
+extern void mpg123_stream_close(void);
+
+extern void mpg123_set_pointer(long);
+
+extern unsigned char *mpg123_pcm_sample;
+extern int mpg123_pcm_point;
+
+struct gr_info_s {
+ int scfsi;
+ unsigned part2_3_length;
+ unsigned big_values;
+ unsigned scalefac_compress;
+ unsigned block_type;
+ unsigned mixed_block_flag;
+ unsigned table_select[3];
+ unsigned subblock_gain[3];
+ unsigned maxband[3];
+ unsigned maxbandl;
+ unsigned maxb;
+ unsigned region1start;
+ unsigned region2start;
+ unsigned preflag;
+ unsigned scalefac_scale;
+ unsigned count1table_select;
+ real *full_gain[3];
+ real *pow2gain;
+};
+
+struct III_sideinfo {
+ unsigned main_data_begin;
+ unsigned private_bits;
+ struct {
+ struct gr_info_s gr[2];
+ } ch[2];
+};
+
+extern void open_stream(char *, int fd);
+extern long mpg123_tell_stream(void);
+extern void mpg123_read_frame_init(void);
+extern int mpg123_read_frame(struct frame *fr);
+extern int mpg123_back_frame(struct frame *fr, int num);
+int mpg123_stream_jump_to_frame(struct frame *fr, int frame);
+int mpg123_stream_jump_to_byte(struct frame *fr, int byte);
+int mpg123_stream_check_for_xing_header(struct frame *fr,
+ xing_header_t * xhead);
+int mpg123_calc_numframes(struct frame *fr);
+
+extern int mpg123_do_layer3(struct frame *fr);
+extern int mpg123_do_layer2(struct frame *fr);
+extern int mpg123_do_layer1(struct frame *fr);
+
+extern int mpg123_synth_1to1(real *, int, unsigned char *, int *);
+extern int mpg123_synth_1to1_8bit(real *, int, unsigned char *, int *);
+extern int mpg123_synth_1to1_mono(real *, unsigned char *, int *);
+extern int mpg123_synth_1to1_mono2stereo(real *, unsigned char *, int *);
+extern int mpg123_synth_1to1_8bit_mono(real *, unsigned char *, int *);
+extern int mpg123_synth_1to1_8bit_mono2stereo(real *, unsigned char *,
+ int *);
+
+extern int mpg123_synth_2to1(real *, int, unsigned char *, int *);
+extern int mpg123_synth_2to1_8bit(real *, int, unsigned char *, int *);
+extern int mpg123_synth_2to1_mono(real *, unsigned char *, int *);
+extern int mpg123_synth_2to1_mono2stereo(real *, unsigned char *, int *);
+extern int mpg123_synth_2to1_8bit_mono(real *, unsigned char *, int *);
+extern int mpg123_synth_2to1_8bit_mono2stereo(real *, unsigned char *,
+ int *);
+
+extern int mpg123_synth_4to1(real *, int, unsigned char *, int *);
+extern int mpg123_synth_4to1_8bit(real *, int, unsigned char *, int *);
+extern int mpg123_synth_4to1_mono(real *, unsigned char *, int *);
+extern int mpg123_synth_4to1_mono2stereo(real *, unsigned char *, int *);
+extern int mpg123_synth_4to1_8bit_mono(real *, unsigned char *, int *);
+extern int mpg123_synth_4to1_8bit_mono2stereo(real *, unsigned char *,
+ int *);
+
+extern void mpg123_rewindNbits(int bits);
+extern int mpg123_hsstell(void);
+extern void mpg123_set_pointer(long);
+extern void mpg123_huffman_decoder(int, int *);
+extern void mpg123_huffman_count1(int, int *);
+extern int mpg123_get_songlen(struct frame *fr, int no);
+
+#ifdef USE_SIMD
+void mpg123_dct64_mmx(real *, real *, real *);
+int mpg123_synth_1to1_mmx(real *, int, unsigned char *, int *);
+
+void mpg123_dct36(real *, real *, real *, real *, real *);
+void dct36_3dnow(real *, real *, real *, real *, real *);
+int mpg123_synth_1to1_3dnow(real *, int, unsigned char *, int *);
+
+int mpg123_getcpuflags(guint32 * fflags, guint32 * efflags);
+#else
+#define mpg123_getcpuflags(a, b) \
+do { \
+ *(a) = 0; \
+ *(b) = 0; \
+} while (0)
+#endif
+
+void mpg123_init_layer3(int);
+void mpg123_init_layer2(gboolean);
+void mpg123_make_decode_tables(long scaleval);
+void mpg123_make_conv16to8_table(void);
+void mpg123_dct64(real *, real *, real *);
+
+int mpg123_decode_header(struct frame *fr, unsigned long newhead);
+double mpg123_compute_bpf(struct frame *fr);
+double mpg123_compute_tpf(struct frame *fr);
+guint mpg123_strip_spaces(char *src, size_t n);
+void mpg123_get_id3v2(struct id3_tag *id3d, struct id3tag_t *tag);
+gchar *mpg123_format_song_title(struct id3tag_t *tag, gchar * filename);
+double mpg123_relative_pos(void);
+
+
+extern gchar ** mpg123_id3_encoding_list;
+extern unsigned char *mpg123_conv16to8;
+extern const int mpg123_freqs[9];
+extern real mpg123_muls[27][64];
+extern real mpg123_decwin[512 + 32];
+extern real *mpg123_pnts[5];
+
+#define GENRE_MAX 0x94
+extern const char *mpg123_id3_genres[GENRE_MAX];
+extern const int tabsel_123[2][3][16];
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/tabinit.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/tabinit.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/tabinit.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,153 @@
+
+#include <stdlib.h>
+#include <math.h>
+
+#include "mpg123.h"
+
+real mpg123_decwin[512 + 32];
+static real cos64[16], cos32[8], cos16[4], cos8[2], cos4[1];
+real *mpg123_pnts[] = { cos64, cos32, cos16, cos8, cos4 };
+
+static unsigned char *mpg123_conv16to8_buf = NULL;
+unsigned char *mpg123_conv16to8;
+
+static long intwinbase[] = {
+ 0, -1, -1, -1, -1, -1, -1, -2, -2, -2,
+ -2, -3, -3, -4, -4, -5, -5, -6, -7, -7,
+ -8, -9, -10, -11, -13, -14, -16, -17, -19, -21,
+ -24, -26, -29, -31, -35, -38, -41, -45, -49, -53,
+ -58, -63, -68, -73, -79, -85, -91, -97, -104, -111,
+ -117, -125, -132, -139, -147, -154, -161, -169, -176, -183,
+ -190, -196, -202, -208, -213, -218, -222, -225, -227, -228,
+ -228, -227, -224, -221, -215, -208, -200, -189, -177, -163,
+ -146, -127, -106, -83, -57, -29, 2, 36, 72, 111,
+ 153, 197, 244, 294, 347, 401, 459, 519, 581, 645,
+ 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356,
+ 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
+ 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000,
+ 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970,
+ 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388,
+ -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
+ -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
+ -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
+ -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
+ -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
+ -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455,
+ 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
+ 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
+ 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
+ 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
+ 73415, 73908, 74313, 74630, 74856, 74992, 75038
+};
+
+void mpg123_make_decode_tables_fpu(long scaleval);
+void mpg123_make_decode_tables_mmx(long scaleval);
+
+void
+mpg123_make_decode_tables_fpu(long scaleval)
+{
+ int i, j;
+ real *table, *costab;
+
+ for (i = 0; i < 5; i++) {
+ int kr = 0x10 >> i;
+ int divv = 0x40 >> i;
+ costab = mpg123_pnts[i];
+ for (j = 0; j < kr; j++)
+ costab[j] =
+ 1.0 / (2.0 *
+ cos(M_PI * ((double) j * 2.0 + 1.0) / (double) divv));
+ }
+
+ table = mpg123_decwin;
+ scaleval = -scaleval;
+ for (i = 0, j = 0; i < 256; i++, j++, table += 32) {
+ if (table < mpg123_decwin + 512 + 16)
+ table[16] = table[0] =
+ (double) intwinbase[j] / 65536.0 * (double) scaleval;
+ if (i % 32 == 31)
+ table -= 1023;
+ if (i % 64 == 63)
+ scaleval = -scaleval;
+ }
+
+ for ( /* i=256 */ ; i < 512; i++, j--, table += 32) {
+ if (table < mpg123_decwin + 512 + 16)
+ table[16] = table[0] =
+ (double) intwinbase[j] / 65536.0 * (double) scaleval;
+ if (i % 32 == 31)
+ table -= 1023;
+ if (i % 64 == 63)
+ scaleval = -scaleval;
+ }
+}
+
+#ifdef USE_SIMD
+
+gint16 mpg123_decwins[(512 + 32) * 2];
+
+void
+mpg123_make_decode_tables_mmx(long scaleval)
+{
+ int i, j, p, a;
+
+ scaleval = -scaleval;
+ a = 1;
+ for (i = 0, j = 0, p = 0; i < 512; i++, j += a, p += 32) {
+ if (p < 512 + 16) {
+ int val = ((gint64) intwinbase[j] * scaleval) >> 17;
+ val = CLAMP(val, -32767, 32767);
+ if (p < 512) {
+ int n = 1055 - p;
+ mpg123_decwins[n - 16] = val;
+ mpg123_decwins[n] = val;
+ }
+ if (!(p & 1))
+ val = -val;
+ mpg123_decwins[p + 16] = val;
+ mpg123_decwins[p] = val;
+ }
+ if (i % 32 == 31)
+ p -= 1023;
+ if (i % 64 == 63)
+ scaleval = -scaleval;
+ if (i == 256)
+ a = -1;
+ }
+}
+
+#else
+void
+mpg123_make_decode_tables_mmx(long scaleval)
+{
+}
+#endif
+
+void
+mpg123_make_decode_tables(long scaleval)
+{
+ mpg123_make_decode_tables_fpu(scaleval);
+ mpg123_make_decode_tables_mmx(scaleval);
+}
+
+
+
+
+void
+mpg123_make_conv16to8_table(void)
+{
+ int i;
+
+ /*
+ * ????: 8.0 is right but on SB cards '2.0' is a better value ???
+ */
+
+ if (!mpg123_conv16to8_buf) {
+ mpg123_conv16to8_buf = g_malloc(8192);
+ mpg123_conv16to8 = mpg123_conv16to8_buf + 4096;
+ }
+
+ for (i = -4096; i < 4096; i++) {
+ mpg123_conv16to8[i] = (i >> 5) + 128;
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/xmms-id3.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/xmms-id3.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/mpg123/xmms-id3.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,367 @@
+/*********************************************************************
+ *
+ * Copyright (C) 1998, 1999, 2002, Espen Skoglund
+ * Department of Computer Science, University of Tromsø
+ *
+ * Filename: id3.h
+ * Description: Include file for accessing the ID3 library.
+ * Author: Espen Skoglund <espensk at stud.cs.uit.no>
+ * Created at: Thu Nov 5 15:55:10 1998
+ *
+ * $Id: xmms-id3.h,v 1.1 2004/07/20 21:47:22 descender Exp $
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ ********************************************************************/
+#ifndef ID3_H
+#define ID3_H
+
+#include <glib.h>
+#include <libbeep/vfs.h>
+
+/*
+ * Option flags to id3_open_*().
+ */
+#define ID3_OPENF_NONE 0x0000
+#define ID3_OPENF_NOCHK 0x0001
+#define ID3_OPENF_CREATE 0x0002
+
+
+/*
+ * The size of the read buffer used by file operations.
+ */
+#define ID3_FD_BUFSIZE 8192
+
+
+/*
+ * Structure describing the ID3 tag.
+ */
+struct id3_tag {
+ int id3_type; /* Memory or file desriptor */
+ int id3_oflags; /* Flags from open call */
+ int id3_flags; /* Flags from tag header */
+ int id3_altered; /* Set when tag has been altered */
+ int id3_newtag; /* Set if this is a new tag */
+
+ int id3_version; /* Major ID3 version number */
+ int id3_revision; /* ID3 revision number */
+
+ int id3_tagsize; /* Total size of ID3 tag */
+ int id3_pos; /* Current position within tag */
+
+ char *id3_error_msg; /* Last error message */
+
+ char id3_buffer[256]; /* Used for various strings */
+
+ union {
+ /*
+ * Memory specific fields.
+ */
+ struct {
+ void *id3_ptr;
+ } me;
+
+ /*
+ * File desc. specific fields.
+ */
+ struct {
+ int id3_fd;
+ void *id3_buf;
+ } fd;
+
+ /*
+ * File ptr. specific fields.
+ */
+ struct {
+ VFSFile *id3_fp;
+ void *id3_buf;
+ } fp;
+ } s;
+
+ /*
+ * Functions for doing operations within ID3 tag.
+ */
+ int (*id3_seek) (struct id3_tag *, int);
+ void *(*id3_read) (struct id3_tag *, void *, int);
+
+ /*
+ * Linked list of ID3 frames.
+ */
+ GList *id3_frame;
+};
+
+#define ID3_TYPE_NONE 0
+#define ID3_TYPE_MEM 1
+#define ID3_TYPE_FD 2
+#define ID3_TYPE_FP 3
+
+
+/*
+ * Structure describing an ID3 frame.
+ */
+struct id3_frame {
+ struct id3_tag *fr_owner;
+ struct id3_framedesc *fr_desc;
+ int fr_flags;
+ unsigned char fr_encryption;
+ unsigned char fr_grouping;
+ unsigned char fr_altered;
+
+ void *fr_data; /* Pointer to frame data, excluding headers */
+ int fr_size; /* Size of uncompressed frame */
+
+ void *fr_raw_data; /* Frame data */
+ int fr_raw_size; /* Frame size */
+
+ void *fr_data_z; /* The decompressed compressed frame */
+ int fr_size_z; /* Size of decompressed compressed frame */
+};
+
+
+/*
+ * Structure describing an ID3 frame type.
+ */
+struct id3_framedesc {
+ guint32 fd_id;
+ char fd_idstr[4];
+ char *fd_description;
+};
+
+
+/*
+ * Text encodings.
+ */
+#define ID3_ENCODING_ISO_8859_1 0x00
+#define ID3_ENCODING_UTF16 0x01
+#define ID3_ENCODING_UTF16BE 0x02
+#define ID3_ENCODING_UTF8 0x03
+
+
+
+/*
+ * ID3 frame id numbers.
+ */
+#define ID3_FRAME_ID(a,b,c,d) ((a << 24) | (b << 16) | (c << 8) | d)
+
+#define ID3_AENC ID3_FRAME_ID('A','E','N','C')
+#define ID3_APIC ID3_FRAME_ID('A','P','I','C')
+#define ID3_ASPI ID3_FRAME_ID('A','S','P','I')
+#define ID3_COMM ID3_FRAME_ID('C','O','M','M')
+#define ID3_COMR ID3_FRAME_ID('C','O','M','R')
+#define ID3_ENCR ID3_FRAME_ID('E','N','C','R')
+#define ID3_EQUA ID3_FRAME_ID('E','Q','U','A')
+#define ID3_EQU2 ID3_FRAME_ID('E','Q','U','2')
+#define ID3_ETCO ID3_FRAME_ID('E','T','C','O')
+#define ID3_GEOB ID3_FRAME_ID('G','E','O','B')
+#define ID3_GRID ID3_FRAME_ID('G','R','I','D')
+#define ID3_IPLS ID3_FRAME_ID('I','P','L','S')
+#define ID3_LINK ID3_FRAME_ID('L','I','N','K')
+#define ID3_MCDI ID3_FRAME_ID('M','C','D','I')
+#define ID3_MLLT ID3_FRAME_ID('M','L','L','T')
+#define ID3_OWNE ID3_FRAME_ID('O','W','N','E')
+#define ID3_PRIV ID3_FRAME_ID('P','R','I','V')
+#define ID3_PCNT ID3_FRAME_ID('P','C','N','T')
+#define ID3_POPM ID3_FRAME_ID('P','O','P','M')
+#define ID3_POSS ID3_FRAME_ID('P','O','S','S')
+#define ID3_RBUF ID3_FRAME_ID('R','B','U','F')
+#define ID3_RVAD ID3_FRAME_ID('R','V','A','D')
+#define ID3_RVA2 ID3_FRAME_ID('R','V','A','2')
+#define ID3_RVRB ID3_FRAME_ID('R','V','R','B')
+#define ID3_SEEK ID3_FRAME_ID('S','E','E','K')
+#define ID3_SIGN ID3_FRAME_ID('S','I','G','N')
+#define ID3_SYLT ID3_FRAME_ID('S','Y','L','T')
+#define ID3_SYTC ID3_FRAME_ID('S','Y','T','C')
+#define ID3_TALB ID3_FRAME_ID('T','A','L','B')
+#define ID3_TBPM ID3_FRAME_ID('T','B','P','M')
+#define ID3_TCOM ID3_FRAME_ID('T','C','O','M')
+#define ID3_TCON ID3_FRAME_ID('T','C','O','N')
+#define ID3_TCOP ID3_FRAME_ID('T','C','O','P')
+#define ID3_TDAT ID3_FRAME_ID('T','D','A','T')
+#define ID3_TDEN ID3_FRAME_ID('T','D','E','N')
+#define ID3_TDLY ID3_FRAME_ID('T','D','L','Y')
+#define ID3_TDOR ID3_FRAME_ID('T','D','O','R')
+#define ID3_TDRC ID3_FRAME_ID('T','D','R','C')
+#define ID3_TDRL ID3_FRAME_ID('T','D','R','L')
+#define ID3_TDTG ID3_FRAME_ID('T','D','T','G')
+#define ID3_TENC ID3_FRAME_ID('T','E','N','C')
+#define ID3_TEXT ID3_FRAME_ID('T','E','X','T')
+#define ID3_TFLT ID3_FRAME_ID('T','F','L','T')
+#define ID3_TIME ID3_FRAME_ID('T','I','M','E')
+#define ID3_TIPL ID3_FRAME_ID('T','I','P','L')
+#define ID3_TIT1 ID3_FRAME_ID('T','I','T','1')
+#define ID3_TIT2 ID3_FRAME_ID('T','I','T','2')
+#define ID3_TIT3 ID3_FRAME_ID('T','I','T','3')
+#define ID3_TKEY ID3_FRAME_ID('T','K','E','Y')
+#define ID3_TLAN ID3_FRAME_ID('T','L','A','N')
+#define ID3_TLEN ID3_FRAME_ID('T','L','E','N')
+#define ID3_TMCL ID3_FRAME_ID('T','M','C','L')
+#define ID3_TMED ID3_FRAME_ID('T','M','E','D')
+#define ID3_TMOO ID3_FRAME_ID('T','M','O','O')
+#define ID3_TOAL ID3_FRAME_ID('T','O','A','L')
+#define ID3_TOFN ID3_FRAME_ID('T','O','F','N')
+#define ID3_TOLY ID3_FRAME_ID('T','O','L','Y')
+#define ID3_TOPE ID3_FRAME_ID('T','O','P','E')
+#define ID3_TORY ID3_FRAME_ID('T','O','R','Y')
+#define ID3_TOWN ID3_FRAME_ID('T','O','W','N')
+#define ID3_TPE1 ID3_FRAME_ID('T','P','E','1')
+#define ID3_TPE2 ID3_FRAME_ID('T','P','E','2')
+#define ID3_TPE3 ID3_FRAME_ID('T','P','E','3')
+#define ID3_TPE4 ID3_FRAME_ID('T','P','E','4')
+#define ID3_TPOS ID3_FRAME_ID('T','P','O','S')
+#define ID3_TPRO ID3_FRAME_ID('T','P','R','O')
+#define ID3_TPUB ID3_FRAME_ID('T','P','U','B')
+#define ID3_TRCK ID3_FRAME_ID('T','R','C','K')
+#define ID3_TRDA ID3_FRAME_ID('T','R','D','A')
+#define ID3_TRSN ID3_FRAME_ID('T','R','S','N')
+#define ID3_TRSO ID3_FRAME_ID('T','R','S','O')
+#define ID3_TSIZ ID3_FRAME_ID('T','S','I','Z')
+#define ID3_TSOA ID3_FRAME_ID('T','S','O','A')
+#define ID3_TSOP ID3_FRAME_ID('T','S','O','P')
+#define ID3_TSOT ID3_FRAME_ID('T','S','O','T')
+#define ID3_TSRC ID3_FRAME_ID('T','S','R','C')
+#define ID3_TSSE ID3_FRAME_ID('T','S','S','E')
+#define ID3_TSST ID3_FRAME_ID('T','S','S','T')
+#define ID3_TYER ID3_FRAME_ID('T','Y','E','R')
+#define ID3_TXXX ID3_FRAME_ID('T','X','X','X')
+#define ID3_UFID ID3_FRAME_ID('U','F','I','D')
+#define ID3_USER ID3_FRAME_ID('U','S','E','R')
+#define ID3_USLT ID3_FRAME_ID('U','S','L','T')
+#define ID3_WCOM ID3_FRAME_ID('W','C','O','M')
+#define ID3_WCOP ID3_FRAME_ID('W','C','O','P')
+#define ID3_WOAF ID3_FRAME_ID('W','O','A','F')
+#define ID3_WOAR ID3_FRAME_ID('W','O','A','R')
+#define ID3_WOAS ID3_FRAME_ID('W','O','A','S')
+#define ID3_WORS ID3_FRAME_ID('W','O','R','S')
+#define ID3_WPAY ID3_FRAME_ID('W','P','A','Y')
+#define ID3_WPUB ID3_FRAME_ID('W','P','U','B')
+#define ID3_WXXX ID3_FRAME_ID('W','X','X','X')
+
+/*
+ * Version 2.2.0
+ */
+
+#define ID3_FRAME_ID_22(a, b, c) ((a << 16) | (b << 8) | c)
+
+#define ID3_BUF ID3_FRAME_ID_22('B', 'U', 'F')
+#define ID3_CNT ID3_FRAME_ID_22('C', 'N', 'T')
+#define ID3_COM ID3_FRAME_ID_22('C', 'O', 'M')
+#define ID3_CRA ID3_FRAME_ID_22('C', 'R', 'A')
+#define ID3_CRM ID3_FRAME_ID_22('C', 'R', 'M')
+#define ID3_ETC ID3_FRAME_ID_22('E', 'T', 'C')
+#define ID3_EQU ID3_FRAME_ID_22('E', 'Q', 'U')
+#define ID3_GEO ID3_FRAME_ID_22('G', 'E', 'O')
+#define ID3_IPL ID3_FRAME_ID_22('I', 'P', 'L')
+#define ID3_LNK ID3_FRAME_ID_22('L', 'N', 'K')
+#define ID3_MCI ID3_FRAME_ID_22('M', 'C', 'I')
+#define ID3_MLL ID3_FRAME_ID_22('M', 'L', 'L')
+#define ID3_PIC ID3_FRAME_ID_22('P', 'I', 'C')
+#define ID3_POP ID3_FRAME_ID_22('P', 'O', 'P')
+#define ID3_REV ID3_FRAME_ID_22('R', 'E', 'V')
+#define ID3_RVA ID3_FRAME_ID_22('R', 'V', 'A')
+#define ID3_SLT ID3_FRAME_ID_22('S', 'L', 'T')
+#define ID3_STC ID3_FRAME_ID_22('S', 'T', 'C')
+#define ID3_TAL ID3_FRAME_ID_22('T', 'A', 'L')
+#define ID3_TBP ID3_FRAME_ID_22('T', 'B', 'P')
+#define ID3_TCM ID3_FRAME_ID_22('T', 'C', 'M')
+#define ID3_TCO ID3_FRAME_ID_22('T', 'C', 'O')
+#define ID3_TCR ID3_FRAME_ID_22('T', 'C', 'R')
+#define ID3_TDA ID3_FRAME_ID_22('T', 'D', 'A')
+#define ID3_TDY ID3_FRAME_ID_22('T', 'D', 'Y')
+#define ID3_TEN ID3_FRAME_ID_22('T', 'E', 'N')
+#define ID3_TFT ID3_FRAME_ID_22('T', 'F', 'T')
+#define ID3_TIM ID3_FRAME_ID_22('T', 'I', 'M')
+#define ID3_TKE ID3_FRAME_ID_22('T', 'K', 'E')
+#define ID3_TLA ID3_FRAME_ID_22('T', 'L', 'A')
+#define ID3_TLE ID3_FRAME_ID_22('T', 'L', 'E')
+#define ID3_TMT ID3_FRAME_ID_22('T', 'M', 'T')
+#define ID3_TOA ID3_FRAME_ID_22('T', 'O', 'A')
+#define ID3_TOF ID3_FRAME_ID_22('T', 'O', 'F')
+#define ID3_TOL ID3_FRAME_ID_22('T', 'O', 'L')
+#define ID3_TOR ID3_FRAME_ID_22('T', 'O', 'R')
+#define ID3_TOT ID3_FRAME_ID_22('T', 'O', 'T')
+#define ID3_TP1 ID3_FRAME_ID_22('T', 'P', '1')
+#define ID3_TP2 ID3_FRAME_ID_22('T', 'P', '2')
+#define ID3_TP3 ID3_FRAME_ID_22('T', 'P', '3')
+#define ID3_TP4 ID3_FRAME_ID_22('T', 'P', '4')
+#define ID3_TPA ID3_FRAME_ID_22('T', 'P', 'A')
+#define ID3_TPB ID3_FRAME_ID_22('T', 'P', 'B')
+#define ID3_TRC ID3_FRAME_ID_22('T', 'R', 'C')
+#define ID3_TRD ID3_FRAME_ID_22('T', 'R', 'D')
+#define ID3_TRK ID3_FRAME_ID_22('T', 'R', 'K')
+#define ID3_TSI ID3_FRAME_ID_22('T', 'S', 'I')
+#define ID3_TSS ID3_FRAME_ID_22('T', 'S', 'S')
+#define ID3_TT1 ID3_FRAME_ID_22('T', 'T', '1')
+#define ID3_TT2 ID3_FRAME_ID_22('T', 'T', '2')
+#define ID3_TT3 ID3_FRAME_ID_22('T', 'T', '3')
+#define ID3_TXT ID3_FRAME_ID_22('T', 'X', 'T')
+#define ID3_TXX ID3_FRAME_ID_22('T', 'X', 'X')
+#define ID3_TYE ID3_FRAME_ID_22('T', 'Y', 'E')
+#define ID3_UFI ID3_FRAME_ID_22('U', 'F', 'I')
+#define ID3_ULT ID3_FRAME_ID_22('U', 'L', 'T')
+#define ID3_WAF ID3_FRAME_ID_22('W', 'A', 'F')
+#define ID3_WAR ID3_FRAME_ID_22('W', 'A', 'R')
+#define ID3_WAS ID3_FRAME_ID_22('W', 'A', 'S')
+#define ID3_WCM ID3_FRAME_ID_22('W', 'C', 'M')
+#define ID3_WCP ID3_FRAME_ID_22('W', 'C', 'P')
+#define ID3_WPB ID3_FRAME_ID_22('W', 'P', 'B')
+#define ID3_WXX ID3_FRAME_ID_22('W', 'X', 'X')
+
+
+/*
+ * Prototypes.
+ */
+
+/* From id3.c */
+struct id3_tag *id3_open_mem(void *, int);
+struct id3_tag *id3_open_fd(int, int);
+struct id3_tag *id3_open_fp(VFSFile *, int);
+int id3_set_output(struct id3_tag *, char *);
+int id3_close(struct id3_tag *);
+int id3_tell(struct id3_tag *);
+int id3_alter_file(struct id3_tag *);
+int id3_write_tag(struct id3_tag *, int);
+
+/* From id3_frame.c */
+int id3_read_frame(struct id3_tag *id3);
+struct id3_frame *id3_get_frame(struct id3_tag *, guint32, int);
+int id3_delete_frame(struct id3_frame *frame);
+struct id3_frame *id3_add_frame(struct id3_tag *, guint32);
+int id3_decompress_frame(struct id3_frame *);
+void id3_destroy_frames(struct id3_tag *id);
+void id3_frame_clear_data(struct id3_frame *frame);
+
+/* From id3_frame_text.c */
+char *id3_utf16_to_ascii(void *);
+gint8 id3_get_encoding(struct id3_frame *);
+int id3_set_encoding(struct id3_frame *, gint8);
+char *id3_get_text(struct id3_frame *);
+char *id3_get_text_desc(struct id3_frame *);
+int id3_get_text_number(struct id3_frame *);
+int id3_set_text(struct id3_frame *, char *);
+int id3_set_text_number(struct id3_frame *, int);
+gboolean id3_frame_is_text(struct id3_frame *frame);
+
+/* From id3_frame_content.c */
+char *id3_get_content(struct id3_frame *);
+
+/* From id3_frame_url.c */
+char *id3_get_url(struct id3_frame *);
+char *id3_get_url_desc(struct id3_frame *);
+
+/* From id3_tag.c */
+void id3_init_tag(struct id3_tag *id3);
+int id3_read_tag(struct id3_tag *id3);
+
+#endif /* ID3_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,20 @@
+if HAVE_OGGVORBIS
+
+lib_LTLIBRARIES = libvorbis.la
+
+endif
+
+libdir = $(plugindir)/$(INPUT_PLUGIN_DIR)
+
+INCLUDES = $(GTK_CFLAGS) $(OGG_VORBIS_CFLAGS) -I$(top_builddir)/intl -I$(top_srcdir)
+libvorbis_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+libvorbis_la_LIBADD = $(GTK_LIBS) $(OGG_VORBIS_LIBS) $(LTLIBICONV)
+
+libvorbis_la_SOURCES = \
+vorbis.c vorbis.h \
+configure.c \
+http.c http.h \
+fileinfo.c \
+vcedit.c vcedit.h
+
+EXTRA_DIST = ogg.xpm
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/configure.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/configure.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/configure.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,586 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "vorbis.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libbeep/configdb.h"
+#include "libbeep/dirbrowser.h"
+#include "libbeep/titlestring.h"
+#include "libbeep/util.h"
+#include "beep/plugin.h"
+
+extern GMutex *vf_mutex;
+
+static GtkWidget *vorbis_configurewin = NULL;
+static GtkWidget *vbox, *notebook;
+
+static GtkWidget *streaming_proxy_use, *streaming_proxy_host_entry;
+static GtkWidget *streaming_proxy_port_entry, *streaming_save_entry;
+static GtkWidget *streaming_save_use, *streaming_size_spin,
+ *streaming_pre_spin;
+static GtkWidget *streaming_proxy_auth_use;
+static GtkWidget *streaming_proxy_auth_pass_entry,
+ *streaming_proxy_auth_user_entry;
+static GtkWidget *streaming_proxy_auth_user_label,
+ *streaming_proxy_auth_pass_label;
+static GtkWidget *streaming_proxy_hbox, *streaming_proxy_auth_hbox;
+static GtkWidget *streaming_save_dirbrowser, *streaming_save_hbox;
+static GtkWidget *title_tag_override, *title_tag_box, *title_tag_entry,
+ *title_desc;
+static GtkWidget *rg_switch, *rg_clip_switch, *rg_booster_switch,
+ *rg_track_gain;
+
+vorbis_config_t vorbis_cfg;
+
+static void
+vorbis_configurewin_ok(GtkWidget * widget, gpointer data)
+{
+ ConfigDb *db;
+ GtkToggleButton *tb;
+
+ vorbis_cfg.http_buffer_size =
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON
+ (streaming_size_spin));
+ vorbis_cfg.http_prebuffer =
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(streaming_pre_spin));
+
+ vorbis_cfg.use_proxy =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use));
+ g_free(vorbis_cfg.proxy_host);
+ vorbis_cfg.proxy_host =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_host_entry)));
+ vorbis_cfg.proxy_port =
+ atoi(gtk_entry_get_text(GTK_ENTRY(streaming_proxy_port_entry)));
+
+ vorbis_cfg.proxy_use_auth =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use));
+
+ g_free(vorbis_cfg.proxy_user);
+ vorbis_cfg.proxy_user = NULL;
+ if (strlen
+ (gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_user_entry))) > 0)
+ vorbis_cfg.proxy_user =
+ g_strdup(gtk_entry_get_text
+ (GTK_ENTRY(streaming_proxy_auth_user_entry)));
+
+ g_free(vorbis_cfg.proxy_pass);
+ vorbis_cfg.proxy_pass = NULL;
+ if (strlen
+ (gtk_entry_get_text(GTK_ENTRY(streaming_proxy_auth_pass_entry))) > 0)
+ vorbis_cfg.proxy_pass =
+ g_strdup(gtk_entry_get_text
+ (GTK_ENTRY(streaming_proxy_auth_pass_entry)));
+
+
+ vorbis_cfg.save_http_stream =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use));
+ g_free(vorbis_cfg.save_http_path);
+ vorbis_cfg.save_http_path =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(streaming_save_entry)));
+ g_free(vorbis_cfg.tag_format);
+ vorbis_cfg.tag_format =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(title_tag_entry)));
+
+ tb = GTK_TOGGLE_BUTTON(title_tag_override);
+ vorbis_cfg.tag_override = gtk_toggle_button_get_active(tb);
+ tb = GTK_TOGGLE_BUTTON(rg_switch);
+ vorbis_cfg.use_replaygain = gtk_toggle_button_get_active(tb);
+ tb = GTK_TOGGLE_BUTTON(rg_clip_switch);
+ vorbis_cfg.use_anticlip = gtk_toggle_button_get_active(tb);
+ tb = GTK_TOGGLE_BUTTON(rg_booster_switch);
+ vorbis_cfg.use_booster = gtk_toggle_button_get_active(tb);
+ tb = GTK_TOGGLE_BUTTON(rg_track_gain);
+ if (gtk_toggle_button_get_active(tb))
+ vorbis_cfg.replaygain_mode = REPLAYGAIN_MODE_TRACK;
+ else
+ vorbis_cfg.replaygain_mode = REPLAYGAIN_MODE_ALBUM;
+
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_set_int(db, "vorbis", "http_buffer_size",
+ vorbis_cfg.http_buffer_size);
+ bmp_cfg_db_set_int(db, "vorbis", "http_prebuffer",
+ vorbis_cfg.http_prebuffer);
+ bmp_cfg_db_set_bool(db, "vorbis", "use_proxy", vorbis_cfg.use_proxy);
+ bmp_cfg_db_set_string(db, "vorbis", "proxy_host", vorbis_cfg.proxy_host);
+ bmp_cfg_db_set_bool(db, "vorbis", "save_http_stream",
+ vorbis_cfg.save_http_stream);
+ bmp_cfg_db_set_string(db, "vorbis", "save_http_path",
+ vorbis_cfg.save_http_path);
+ bmp_cfg_db_set_bool(db, "vorbis", "tag_override",
+ vorbis_cfg.tag_override);
+ bmp_cfg_db_set_string(db, "vorbis", "tag_format", vorbis_cfg.tag_format);
+ bmp_cfg_db_set_int(db, "vorbis", "proxy_port", vorbis_cfg.proxy_port);
+ bmp_cfg_db_set_bool(db, "vorbis", "proxy_use_auth",
+ vorbis_cfg.proxy_use_auth);
+ if (vorbis_cfg.proxy_user)
+ bmp_cfg_db_set_string(db, "vorbis", "proxy_user",
+ vorbis_cfg.proxy_user);
+ else
+ bmp_cfg_db_unset_key(db, "vorbis", "proxy_user");
+
+ if (vorbis_cfg.proxy_pass)
+ bmp_cfg_db_set_string(db, "vorbis", "proxy_pass",
+ vorbis_cfg.proxy_pass);
+ else
+ bmp_cfg_db_unset_key(db, "vorbis", "proxy_pass");
+ bmp_cfg_db_set_bool(db, "vorbis", "use_anticlip",
+ vorbis_cfg.use_anticlip);
+ bmp_cfg_db_set_bool(db, "vorbis", "use_replaygain",
+ vorbis_cfg.use_replaygain);
+ bmp_cfg_db_set_int(db, "vorbis", "replaygain_mode",
+ vorbis_cfg.replaygain_mode);
+ bmp_cfg_db_set_bool(db, "vorbis", "use_booster", vorbis_cfg.use_booster);
+ bmp_cfg_db_close(db);
+ gtk_widget_destroy(vorbis_configurewin);
+}
+
+static void
+proxy_use_cb(GtkWidget * w, gpointer data)
+{
+ gboolean use_proxy, use_proxy_auth;
+
+ use_proxy =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use));
+ use_proxy_auth =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use));
+
+ gtk_widget_set_sensitive(streaming_proxy_hbox, use_proxy);
+ gtk_widget_set_sensitive(streaming_proxy_auth_use, use_proxy);
+ gtk_widget_set_sensitive(streaming_proxy_auth_hbox, use_proxy
+ && use_proxy_auth);
+}
+
+static void
+proxy_auth_use_cb(GtkWidget * w, gpointer data)
+{
+ gboolean use_proxy, use_proxy_auth;
+
+ use_proxy =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_proxy_use));
+ use_proxy_auth =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use));
+
+ gtk_widget_set_sensitive(streaming_proxy_auth_hbox, use_proxy
+ && use_proxy_auth);
+}
+
+static void
+streaming_save_dirbrowser_cb(gchar * dir)
+{
+ gtk_entry_set_text(GTK_ENTRY(streaming_save_entry), dir);
+}
+
+static void
+streaming_save_browse_cb(GtkWidget * w, gpointer data)
+{
+ if (streaming_save_dirbrowser)
+ return;
+
+ streaming_save_dirbrowser =
+ xmms_create_dir_browser(_("Select the directory where you want "
+ "to store the Ogg Vorbis streams:"),
+ vorbis_cfg.save_http_path,
+ GTK_SELECTION_SINGLE,
+ streaming_save_dirbrowser_cb);
+ g_signal_connect(G_OBJECT(streaming_save_dirbrowser),
+ "destroy", G_CALLBACK(gtk_widget_destroyed),
+ &streaming_save_dirbrowser);
+ gtk_window_set_transient_for(GTK_WINDOW(streaming_save_dirbrowser),
+ GTK_WINDOW(vorbis_configurewin));
+ gtk_widget_show(streaming_save_dirbrowser);
+}
+
+static void
+streaming_save_use_cb(GtkWidget * w, gpointer data)
+{
+ gboolean save_stream;
+
+ save_stream =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(streaming_save_use));
+
+ gtk_widget_set_sensitive(streaming_save_hbox, save_stream);
+}
+
+static void
+configure_destroy(GtkWidget * w, gpointer data)
+{
+/* if (streaming_save_dirbrowser) */
+/* gtk_widget_destroy(streaming_save_dirbrowser); */
+}
+
+static void
+title_tag_override_cb(GtkWidget * w, gpointer data)
+{
+ gboolean override;
+ override =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title_tag_override));
+ gtk_widget_set_sensitive(title_tag_box, override);
+ gtk_widget_set_sensitive(title_desc, override);
+}
+
+static void
+rg_switch_cb(GtkWidget * w, gpointer data)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(data),
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (w)));
+}
+
+void
+vorbis_configure(void)
+{
+ GtkWidget *streaming_vbox;
+ GtkWidget *streaming_buf_frame, *streaming_buf_hbox;
+ GtkWidget *streaming_size_box, *streaming_size_label;
+ GtkWidget *streaming_pre_box, *streaming_pre_label;
+ GtkWidget *streaming_proxy_frame, *streaming_proxy_vbox;
+ GtkWidget *streaming_proxy_port_label, *streaming_proxy_host_label;
+ GtkWidget *streaming_save_frame, *streaming_save_vbox;
+ GtkWidget *streaming_save_label, *streaming_save_browse;
+ GtkWidget *title_frame, *title_tag_vbox, *title_tag_label;
+ GtkWidget *rg_frame, *rg_vbox;
+ GtkWidget *bbox, *ok, *cancel;
+ GtkWidget *rg_type_frame, *rg_type_vbox, *rg_album_gain;
+ GtkObject *streaming_size_adj, *streaming_pre_adj;
+
+ char *temp;
+
+ if (vorbis_configurewin != NULL) {
+ gtk_window_present(GTK_WINDOW(vorbis_configurewin));
+ return;
+ }
+
+ vorbis_configurewin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(vorbis_configurewin),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_position(GTK_WINDOW(vorbis_configurewin),
+ GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(vorbis_configurewin), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &vorbis_configurewin);
+ g_signal_connect(G_OBJECT(vorbis_configurewin), "destroy",
+ G_CALLBACK(configure_destroy), &vorbis_configurewin);
+ gtk_window_set_title(GTK_WINDOW(vorbis_configurewin),
+ _("Ogg Vorbis Audio Plugin Configuration"));
+ gtk_window_set_resizable(GTK_WINDOW(vorbis_configurewin), FALSE);
+ gtk_container_border_width(GTK_CONTAINER(vorbis_configurewin), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(vorbis_configurewin), vbox);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ streaming_vbox = gtk_vbox_new(FALSE, 0);
+
+ streaming_buf_frame = gtk_frame_new(_("Buffering:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_buf_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_buf_frame, FALSE,
+ FALSE, 0);
+
+ streaming_buf_hbox = gtk_hbox_new(TRUE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_buf_hbox), 5);
+ gtk_container_add(GTK_CONTAINER(streaming_buf_frame), streaming_buf_hbox);
+
+ streaming_size_box = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(streaming_buf_hbox), streaming_size_box,
+ TRUE, TRUE, 0);
+ streaming_size_label = gtk_label_new(_("Buffer size (kb):"));
+ gtk_box_pack_start(GTK_BOX(streaming_size_box), streaming_size_label,
+ FALSE, FALSE, 0);
+ streaming_size_adj =
+ gtk_adjustment_new(vorbis_cfg.http_buffer_size, 4, 4096, 4, 4, 4);
+ streaming_size_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(streaming_size_adj), 8, 0);
+ gtk_widget_set_usize(streaming_size_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(streaming_size_box), streaming_size_spin,
+ FALSE, FALSE, 0);
+
+ streaming_pre_box = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(streaming_buf_hbox), streaming_pre_box,
+ TRUE, TRUE, 0);
+ streaming_pre_label = gtk_label_new(_("Pre-buffer (percent):"));
+ gtk_box_pack_start(GTK_BOX(streaming_pre_box), streaming_pre_label,
+ FALSE, FALSE, 0);
+ streaming_pre_adj =
+ gtk_adjustment_new(vorbis_cfg.http_prebuffer, 0, 90, 1, 1, 1);
+ streaming_pre_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(streaming_pre_adj), 1, 0);
+ gtk_widget_set_usize(streaming_pre_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(streaming_pre_box), streaming_pre_spin,
+ FALSE, FALSE, 0);
+
+ /*
+ * Proxy config.
+ */
+ streaming_proxy_frame = gtk_frame_new(_("Proxy:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_proxy_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_proxy_frame,
+ FALSE, FALSE, 0);
+
+ streaming_proxy_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_proxy_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(streaming_proxy_frame),
+ streaming_proxy_vbox);
+
+ streaming_proxy_use = gtk_check_button_new_with_label(_("Use proxy"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(streaming_proxy_use),
+ vorbis_cfg.use_proxy);
+ g_signal_connect(G_OBJECT(streaming_proxy_use), "clicked",
+ G_CALLBACK(proxy_use_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox), streaming_proxy_use,
+ FALSE, FALSE, 0);
+
+ streaming_proxy_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(streaming_proxy_hbox, vorbis_cfg.use_proxy);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox), streaming_proxy_hbox,
+ FALSE, FALSE, 0);
+
+ streaming_proxy_host_label = gtk_label_new(_("Host:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_host_label, FALSE, FALSE, 0);
+
+ streaming_proxy_host_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_host_entry),
+ vorbis_cfg.proxy_host);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_host_entry, TRUE, TRUE, 0);
+
+ streaming_proxy_port_label = gtk_label_new(_("Port:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_port_label, FALSE, FALSE, 0);
+
+ streaming_proxy_port_entry = gtk_entry_new();
+ gtk_widget_set_usize(streaming_proxy_port_entry, 50, -1);
+ temp = g_strdup_printf("%d", vorbis_cfg.proxy_port);
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_port_entry), temp);
+ g_free(temp);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_hbox),
+ streaming_proxy_port_entry, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_use =
+ gtk_check_button_new_with_label(_("Use authentication"));
+ gtk_widget_set_sensitive(streaming_proxy_auth_use, vorbis_cfg.use_proxy);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
+ (streaming_proxy_auth_use),
+ vorbis_cfg.proxy_use_auth);
+ g_signal_connect(G_OBJECT(streaming_proxy_auth_use), "clicked",
+ G_CALLBACK(proxy_auth_use_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox),
+ streaming_proxy_auth_use, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(streaming_proxy_auth_hbox,
+ vorbis_cfg.use_proxy
+ && vorbis_cfg.proxy_use_auth);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_vbox),
+ streaming_proxy_auth_hbox, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_user_label = gtk_label_new(_("Username:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_user_label, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_user_entry = gtk_entry_new();
+ if (vorbis_cfg.proxy_user)
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_auth_user_entry),
+ vorbis_cfg.proxy_user);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_user_entry, TRUE, TRUE, 0);
+
+ streaming_proxy_auth_pass_label = gtk_label_new(_("Password:"));
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_pass_label, FALSE, FALSE, 0);
+
+ streaming_proxy_auth_pass_entry = gtk_entry_new();
+ if (vorbis_cfg.proxy_pass)
+ gtk_entry_set_text(GTK_ENTRY(streaming_proxy_auth_pass_entry),
+ vorbis_cfg.proxy_pass);
+ gtk_entry_set_visibility(GTK_ENTRY(streaming_proxy_auth_pass_entry),
+ FALSE);
+ gtk_box_pack_start(GTK_BOX(streaming_proxy_auth_hbox),
+ streaming_proxy_auth_pass_entry, TRUE, TRUE, 0);
+
+
+ /*
+ * Save to disk config.
+ */
+ streaming_save_frame = gtk_frame_new(_("Save stream to disk:"));
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_save_frame), 5);
+ gtk_box_pack_start(GTK_BOX(streaming_vbox), streaming_save_frame,
+ FALSE, FALSE, 0);
+
+ streaming_save_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(streaming_save_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(streaming_save_frame),
+ streaming_save_vbox);
+
+ streaming_save_use =
+ gtk_check_button_new_with_label(_("Save stream to disk"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(streaming_save_use),
+ vorbis_cfg.save_http_stream);
+ g_signal_connect(G_OBJECT(streaming_save_use), "clicked",
+ G_CALLBACK(streaming_save_use_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_save_vbox), streaming_save_use,
+ FALSE, FALSE, 0);
+
+ streaming_save_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(streaming_save_hbox,
+ vorbis_cfg.save_http_stream);
+ gtk_box_pack_start(GTK_BOX(streaming_save_vbox), streaming_save_hbox,
+ FALSE, FALSE, 0);
+
+ streaming_save_label = gtk_label_new(_("Path:"));
+ gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_label,
+ FALSE, FALSE, 0);
+
+ streaming_save_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(streaming_save_entry),
+ vorbis_cfg.save_http_path);
+ gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_entry,
+ TRUE, TRUE, 0);
+
+ streaming_save_browse = gtk_button_new_with_label(_("Browse"));
+ g_signal_connect(G_OBJECT(streaming_save_browse), "clicked",
+ G_CALLBACK(streaming_save_browse_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(streaming_save_hbox), streaming_save_browse,
+ FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), streaming_vbox,
+ gtk_label_new(_("Streaming")));
+
+ /* Title config.. */
+
+ title_frame = gtk_frame_new(_("Ogg Vorbis Tags:"));
+ gtk_container_border_width(GTK_CONTAINER(title_frame), 5);
+
+ title_tag_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_border_width(GTK_CONTAINER(title_tag_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(title_frame), title_tag_vbox);
+
+ title_tag_override =
+ gtk_check_button_new_with_label(_("Override generic titles"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(title_tag_override),
+ vorbis_cfg.tag_override);
+ g_signal_connect(G_OBJECT(title_tag_override), "clicked",
+ G_CALLBACK(title_tag_override_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(title_tag_vbox), title_tag_override, FALSE,
+ FALSE, 0);
+
+ title_tag_box = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(title_tag_box, vorbis_cfg.tag_override);
+ gtk_box_pack_start(GTK_BOX(title_tag_vbox), title_tag_box, FALSE,
+ FALSE, 0);
+
+ title_tag_label = gtk_label_new(_("Title format:"));
+ gtk_box_pack_start(GTK_BOX(title_tag_box), title_tag_label, FALSE,
+ FALSE, 0);
+
+ title_tag_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(title_tag_entry), vorbis_cfg.tag_format);
+ gtk_box_pack_start(GTK_BOX(title_tag_box), title_tag_entry, TRUE, TRUE,
+ 0);
+
+ title_desc = xmms_titlestring_descriptions("pafFetndgc", 2);
+ gtk_widget_set_sensitive(title_desc, vorbis_cfg.tag_override);
+ gtk_box_pack_start(GTK_BOX(title_tag_vbox), title_desc, FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), title_frame,
+ gtk_label_new(_("Title")));
+
+ /* Replay Gain.. */
+
+ rg_frame = gtk_frame_new(_("ReplayGain Settings:"));
+ gtk_container_border_width(GTK_CONTAINER(rg_frame), 5);
+
+ rg_vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_border_width(GTK_CONTAINER(rg_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(rg_frame), rg_vbox);
+
+ rg_clip_switch =
+ gtk_check_button_new_with_label(_("Enable Clipping Prevention"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_clip_switch),
+ vorbis_cfg.use_anticlip);
+ gtk_box_pack_start(GTK_BOX(rg_vbox), rg_clip_switch, FALSE, FALSE, 0);
+
+ rg_switch = gtk_check_button_new_with_label(_("Enable ReplayGain"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_switch),
+ vorbis_cfg.use_replaygain);
+ gtk_box_pack_start(GTK_BOX(rg_vbox), rg_switch, FALSE, FALSE, 0);
+
+ rg_type_frame = gtk_frame_new(_("ReplayGain Type:"));
+ gtk_box_pack_start(GTK_BOX(rg_vbox), rg_type_frame, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(rg_switch), "toggled",
+ G_CALLBACK(rg_switch_cb), rg_type_frame);
+
+ rg_type_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(rg_type_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(rg_type_frame), rg_type_vbox);
+
+ rg_track_gain =
+ gtk_radio_button_new_with_label(NULL, _("use Track Gain/Peak"));
+ if (vorbis_cfg.replaygain_mode == REPLAYGAIN_MODE_TRACK)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_track_gain), TRUE);
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_track_gain), FALSE);
+ gtk_box_pack_start(GTK_BOX(rg_type_vbox), rg_track_gain, FALSE, FALSE, 0);
+
+ rg_album_gain =
+ gtk_radio_button_new_with_label(gtk_radio_button_group
+ (GTK_RADIO_BUTTON(rg_track_gain)),
+ _("use Album Gain/Peak"));
+ if (vorbis_cfg.replaygain_mode == REPLAYGAIN_MODE_ALBUM)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_album_gain), TRUE);
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_album_gain), FALSE);
+ gtk_box_pack_start(GTK_BOX(rg_type_vbox), rg_album_gain, FALSE, FALSE, 0);
+
+ if (!vorbis_cfg.use_replaygain)
+ gtk_widget_set_sensitive(rg_type_frame, FALSE);
+
+ rg_booster_switch =
+ gtk_check_button_new_with_label(_
+ ("Enable 6dB Boost + Hard Limiting"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_booster_switch),
+ vorbis_cfg.use_booster);
+ gtk_box_pack_start(GTK_BOX(rg_vbox), rg_booster_switch, FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), rg_frame,
+ gtk_label_new(_("ReplayGain")));
+
+ /* Buttons */
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ gtk_button_set_use_stock(GTK_BUTTON(cancel), TRUE);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ G_OBJECT(vorbis_configurewin));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_OK);
+ gtk_button_set_use_stock(GTK_BUTTON(ok), TRUE);
+ g_signal_connect(G_OBJECT(ok), "clicked",
+ G_CALLBACK(vorbis_configurewin_ok), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ gtk_widget_grab_default(ok);
+
+ gtk_widget_show_all(vorbis_configurewin);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/fileinfo.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/fileinfo.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/fileinfo.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1067 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <ogg/ogg.h>
+#include <vorbis/codec.h>
+#include <vorbis/vorbisfile.h>
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+
+#include "beep/util.h"
+#include <libbeep/util.h>
+#include <libbeep/vfs.h>
+
+#include "vorbis.h"
+#include "vcedit.h"
+
+#include "ogg.xpm"
+
+static struct vte_struct {
+ VFSFile *in;
+ gchar *filename;
+} vte;
+
+static void fail(const gchar * error);
+static void save_cb(GtkWidget * w, gpointer data);
+static void remove_cb(GtkWidget * w, gpointer data);
+static gint init_files(vcedit_state * state);
+static gint close_files(vcedit_state * state);
+
+extern GMutex *vf_mutex;
+static GtkWidget *window = NULL;
+static GList *genre_list = NULL;
+
+static GtkWidget *title_entry, *album_entry, *performer_entry;
+static GtkWidget *tracknumber_entry, *date_entry;
+static GtkWidget *genre_combo, *user_comment_entry;
+#ifdef ALL_VORBIS_TAGS
+static GtkWidget *description_entry, *version_entry, *isrc_entry;
+static GtkWidget *copyright_entry, *organization_entry, *location_entry;
+#endif
+static GtkWidget *rg_track_entry, *rg_album_entry, *rg_track_peak_entry,
+ *rg_album_peak_entry;
+static GtkWidget *rg_track_label, *rg_album_label, *rg_track_peak_label,
+ *rg_album_peak_label;
+static GtkWidget *rg_show_button;
+
+GtkWidget *save_button, *remove_button;
+GtkWidget *rg_frame, *rg_table;
+
+/* From mpg123.c, as no standardized Ogg Vorbis genres exists. */
+static const gchar *vorbis_genres[] = {
+ N_("Blues"), N_("Classic Rock"), N_("Country"), N_("Dance"),
+ N_("Disco"), N_("Funk"), N_("Grunge"), N_("Hip-Hop"),
+ N_("Jazz"), N_("Metal"), N_("New Age"), N_("Oldies"),
+ N_("Other"), N_("Pop"), N_("R&B"), N_("Rap"), N_("Reggae"),
+ N_("Rock"), N_("Techno"), N_("Industrial"), N_("Alternative"),
+ N_("Ska"), N_("Death Metal"), N_("Pranks"), N_("Soundtrack"),
+ N_("Euro-Techno"), N_("Ambient"), N_("Trip-Hop"), N_("Vocal"),
+ N_("Jazz+Funk"), N_("Fusion"), N_("Trance"), N_("Classical"),
+ N_("Instrumental"), N_("Acid"), N_("House"), N_("Game"),
+ N_("Sound Clip"), N_("Gospel"), N_("Noise"), N_("AlternRock"),
+ N_("Bass"), N_("Soul"), N_("Punk"), N_("Space"),
+ N_("Meditative"), N_("Instrumental Pop"),
+ N_("Instrumental Rock"), N_("Ethnic"), N_("Gothic"),
+ N_("Darkwave"), N_("Techno-Industrial"), N_("Electronic"),
+ N_("Pop-Folk"), N_("Eurodance"), N_("Dream"),
+ N_("Southern Rock"), N_("Comedy"), N_("Cult"),
+ N_("Gangsta Rap"), N_("Top 40"), N_("Christian Rap"),
+ N_("Pop/Funk"), N_("Jungle"), N_("Native American"),
+ N_("Cabaret"), N_("New Wave"), N_("Psychedelic"), N_("Rave"),
+ N_("Showtunes"), N_("Trailer"), N_("Lo-Fi"), N_("Tribal"),
+ N_("Acid Punk"), N_("Acid Jazz"), N_("Polka"), N_("Retro"),
+ N_("Musical"), N_("Rock & Roll"), N_("Hard Rock"), N_("Folk"),
+ N_("Folk/Rock"), N_("National Folk"), N_("Swing"),
+ N_("Fast-Fusion"), N_("Bebob"), N_("Latin"), N_("Revival"),
+ N_("Celtic"), N_("Bluegrass"), N_("Avantgarde"),
+ N_("Gothic Rock"), N_("Progressive Rock"),
+ N_("Psychedelic Rock"), N_("Symphonic Rock"), N_("Slow Rock"),
+ N_("Big Band"), N_("Chorus"), N_("Easy Listening"),
+ N_("Acoustic"), N_("Humour"), N_("Speech"), N_("Chanson"),
+ N_("Opera"), N_("Chamber Music"), N_("Sonata"), N_("Symphony"),
+ N_("Booty Bass"), N_("Primus"), N_("Porn Groove"),
+ N_("Satire"), N_("Slow Jam"), N_("Club"), N_("Tango"),
+ N_("Samba"), N_("Folklore"), N_("Ballad"), N_("Power Ballad"),
+ N_("Rhythmic Soul"), N_("Freestyle"), N_("Duet"),
+ N_("Punk Rock"), N_("Drum Solo"), N_("A Cappella"),
+ N_("Euro-House"), N_("Dance Hall"), N_("Goa"),
+ N_("Drum & Bass"), N_("Club-House"), N_("Hardcore"),
+ N_("Terror"), N_("Indie"), N_("BritPop"), N_("Negerpunk"),
+ N_("Polsk Punk"), N_("Beat"), N_("Christian Gangsta Rap"),
+ N_("Heavy Metal"), N_("Black Metal"), N_("Crossover"),
+ N_("Contemporary Christian"), N_("Christian Rock"),
+ N_("Merengue"), N_("Salsa"), N_("Thrash Metal"),
+ N_("Anime"), N_("JPop"), N_("Synthpop")
+};
+
+static const gchar *
+get_comment(vorbis_comment * vc, const gchar * tag)
+{
+ const gchar *value;
+
+ g_return_val_if_fail(tag != NULL, "");
+
+ if (!vc)
+ return "";
+
+ if ((value = vorbis_comment_query(vc, (gchar *) tag, 0)))
+ return value;
+ else
+ return "";
+}
+
+static gboolean
+str_equal_nocase(gconstpointer a,
+ gconstpointer b)
+{
+ return strcasecmp((const gchar *) a, (const gchar *) b) == 0;
+}
+
+static GHashTable *
+hash_table_from_vorbis_comment(vorbis_comment * vc)
+{
+ GHashTable *table;
+ gint i;
+
+ table = g_hash_table_new_full(g_str_hash, str_equal_nocase,
+ g_free, g_free);
+
+ for (i = 0; i < vc->comments; i++) {
+ gchar **frags;
+#ifdef DEBUG
+ g_message(vc->user_comments[i]);
+#endif
+ frags = g_strsplit(vc->user_comments[i], "=", 2);
+
+ /* FIXME: need more rigorous checks to guard against
+ borqued comments */
+
+ /* No RHS? */
+ if (!frags[1]) frags[1] = g_strdup("");
+
+ g_hash_table_replace(table, frags[0], frags[1]);
+ g_free(frags);
+ }
+
+ return table;
+}
+
+static void
+comment_hash_add_tag(GHashTable * table,
+ const gchar * tag,
+ const gchar * value)
+{
+ g_hash_table_replace(table, g_strdup(tag), g_strdup(value));
+}
+
+
+static void
+vorbis_comment_add_swapped(gchar * key,
+ gchar * value,
+ vorbis_comment * vc)
+{
+ vorbis_comment_add_tag(vc, key, value);
+}
+
+static void
+hash_table_to_vorbis_comment(vorbis_comment * vc, GHashTable * table)
+{
+ vorbis_comment_clear(vc);
+ g_hash_table_foreach(table, (GHFunc) vorbis_comment_add_swapped,
+ vc);
+}
+
+
+static void
+fail(const gchar * error)
+{
+ gchar *errorstring;
+ errorstring = g_strdup_printf(_("An error occured:\n%s"), error);
+
+ xmms_show_message(_("Error!"), errorstring, _("Ok"), FALSE, NULL, NULL);
+
+ g_free(errorstring);
+ return;
+}
+
+
+static void
+save_cb(GtkWidget * w, gpointer data)
+{
+ const gchar *track_name, *performer, *album_name, *date, *track_number;
+ const gchar *genre, *user_comment;
+#ifdef ALL_VORBIS_TAGS
+ const gchar *description, *version, *isrc, *copyright, *organization;
+ const gchar *location;
+#endif
+ const gchar *rg_track_gain, *rg_album_gain, *rg_track_peak, *rg_album_peak;
+
+ GHashTable *comment_hash;
+
+ vcedit_state *state;
+ vorbis_comment *comment;
+
+ if (!g_strncasecmp(vte.filename, "http://", 7))
+ return;
+
+ state = vcedit_new_state();
+
+ g_mutex_lock(vf_mutex);
+ if (init_files(state) < 0) {
+ fail(_("Failed to modify tag (open)"));
+ goto close;
+ }
+
+ comment = vcedit_comments(state);
+ comment_hash = hash_table_from_vorbis_comment(comment);
+
+ track_name = gtk_entry_get_text(GTK_ENTRY(title_entry));
+ performer = gtk_entry_get_text(GTK_ENTRY(performer_entry));
+ album_name = gtk_entry_get_text(GTK_ENTRY(album_entry));
+ track_number = gtk_entry_get_text(GTK_ENTRY(tracknumber_entry));
+ genre = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(genre_combo)->entry));
+ date = gtk_entry_get_text(GTK_ENTRY(date_entry));
+ user_comment = gtk_entry_get_text(GTK_ENTRY(user_comment_entry));
+#ifdef ALL_VORBIS_TAGS
+ location = gtk_entry_get_text(GTK_ENTRY(location_entry));
+ description = gtk_entry_get_text(GTK_ENTRY(description_entry));
+ version = gtk_entry_get_text(GTK_ENTRY(version_entry));
+ isrc = gtk_entry_get_text(GTK_ENTRY(isrc_entry));
+ organization = gtk_entry_get_text(GTK_ENTRY(organization_entry));
+ copyright = gtk_entry_get_text(GTK_ENTRY(copyright_entry));
+#endif
+ rg_track_gain = gtk_entry_get_text(GTK_ENTRY(rg_track_entry));
+ rg_album_gain = gtk_entry_get_text(GTK_ENTRY(rg_album_entry));
+ rg_track_peak = gtk_entry_get_text(GTK_ENTRY(rg_track_peak_entry));
+ rg_album_peak = gtk_entry_get_text(GTK_ENTRY(rg_album_peak_entry));
+
+ comment_hash_add_tag(comment_hash, "title", track_name);
+ comment_hash_add_tag(comment_hash, "artist", performer);
+ comment_hash_add_tag(comment_hash, "album", album_name);
+ comment_hash_add_tag(comment_hash, "tracknumber", track_number);
+ comment_hash_add_tag(comment_hash, "genre", genre);
+ comment_hash_add_tag(comment_hash, "date", date);
+ comment_hash_add_tag(comment_hash, "comment", user_comment);
+
+#ifdef ALL_VORBIS_TAGS
+ comment_hash_add_tag(comment_hash, "location", location);
+ comment_hash_add_tag(comment_hash, "description", description);
+ comment_hash_add_tag(comment_hash, "version", version);
+ comment_hash_add_tag(comment_hash, "isrc", isrc);
+ comment_hash_add_tag(comment_hash, "organization", organization);
+ comment_hash_add_tag(comment_hash, "copyright", copyright);
+#endif
+
+ comment_hash_add_tag(comment_hash, "replaygain_track_gain", rg_track_gain);
+ comment_hash_add_tag(comment_hash, "replaygain_album_gain", rg_album_gain);
+ comment_hash_add_tag(comment_hash, "replaygain_track_peak", rg_track_peak);
+ comment_hash_add_tag(comment_hash, "replaygain_album_peak", rg_album_peak);
+
+ hash_table_to_vorbis_comment(comment, comment_hash);
+ g_hash_table_destroy(comment_hash);
+
+ if (close_files(state) < 0)
+ fail(_("Failed to modify tag (close)"));
+ else {
+ gtk_widget_set_sensitive(save_button, FALSE);
+ gtk_widget_set_sensitive(remove_button, TRUE);
+ }
+
+
+ close:
+ vcedit_clear(state);
+ g_mutex_unlock(vf_mutex);
+}
+
+static void
+remove_cb(GtkWidget * w, gpointer data)
+{
+ vcedit_state *state;
+ vorbis_comment *comment;
+
+ if (!g_strncasecmp(vte.filename, "http://", 7))
+ return;
+
+ state = vcedit_new_state();
+
+ g_mutex_lock(vf_mutex);
+ if (init_files(state) < 0) {
+ fail(_("Failed to modify tag"));
+ goto close;
+ }
+
+ comment = vcedit_comments(state);
+
+ vorbis_comment_clear(comment);
+
+ if (close_files(state) < 0) {
+ fail(_("Failed to modify tag"));
+ }
+ else {
+ gtk_entry_set_text(GTK_ENTRY(title_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(album_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(performer_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(tracknumber_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(date_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(genre_combo), "");
+ gtk_entry_set_text(GTK_ENTRY(user_comment_entry), "");
+ }
+
+ close:
+ vcedit_clear(state);
+ g_mutex_unlock(vf_mutex);
+/* gtk_widget_destroy(window); */
+}
+
+static void
+rg_show_cb(GtkWidget * w, gpointer data)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rg_show_button))) {
+ gtk_widget_show(rg_frame);
+ }
+ else {
+ gtk_widget_hide(rg_frame);
+ }
+}
+
+static gint
+init_files(vcedit_state * state)
+{
+ if ((vte.in = vfs_fopen(vte.filename, "rb")) == NULL) {
+#ifdef DEBUG
+ g_message("fileinfo.c: couldn't open file %s", vte.filename);
+#endif
+ return -1;
+ }
+
+ if (vcedit_open(state, vte.in) < 0) {
+#ifdef DEBUG
+ g_message("fileinfo.c: couldn't open file for editing %s",
+ vte.filename);
+#endif
+ vfs_fclose(vte.in);
+ return -1;
+ }
+
+#ifdef DEBUG
+ g_message("fileinfo.c: file successfully opened for editing %s",
+ vte.filename);
+#endif
+
+ return 0;
+}
+
+static gint
+close_files(vcedit_state * state)
+{
+ gint retval = 0, ofh;
+ gchar *tmpfn;
+ VFSFile *out;
+
+ tmpfn = g_strdup_printf("%s.XXXXXX", vte.filename);
+
+ if ((ofh = mkstemp(tmpfn)) < 0) {
+ g_free(tmpfn);
+ vfs_fclose(vte.in);
+#ifdef DEBUG
+ g_critical("fileinfo.c: couldn't create temp file");
+#endif
+ return -1;
+ }
+ else {
+#ifdef DEBUG
+ g_message("fileinfo.c: created temp file %s", tmpfn);
+#endif
+ }
+
+ if ((out = vfs_fopen(tmpfn, "wb")) == NULL) {
+ close(ofh);
+ remove(tmpfn);
+ g_free(tmpfn);
+ vfs_fclose(vte.in);
+#ifdef DEBUG
+ g_critical("fileinfo.c: couldn't open temp file");
+#endif
+ return -1;
+ }
+ else {
+#ifdef DEBUG
+ g_message("fileinfo.c: opened temp file %s", tmpfn);
+#endif
+ }
+
+ if (vcedit_write(state, out) < 0) {
+#ifdef DEBUG
+ g_warning("vcedit_write: %s", state->lasterror);
+#endif
+ retval = -1;
+ }
+
+ vfs_fclose(vte.in);
+
+ if (vfs_fclose(out) != 0) {
+#ifdef DEBUG
+ g_critical("fileinfo.c: couldn't close out file");
+#endif
+ retval = -1;
+ }
+ else {
+#ifdef DEBUG
+ g_message("fileinfo.c: outfile closed");
+#endif
+ }
+
+ if (retval < 0 || rename(tmpfn, vte.filename) < 0) {
+ remove(tmpfn);
+ retval = -1;
+#ifdef DEBUG
+ g_critical("fileinfo.c: couldn't rename file");
+#endif
+ }
+ else {
+#ifdef DEBUG
+ g_message("fileinfo.c: file %s renamed successfully to %s", tmpfn,
+ vte.filename);
+#endif
+ }
+
+ g_free(tmpfn);
+ return retval;
+}
+
+
+static void
+label_set_text(GtkLabel * label, const gchar * format, ...)
+{
+ va_list args;
+ gchar *text;
+
+ va_start(args, format);
+ text = g_strdup_vprintf(format, args);
+ va_end(args);
+
+ gtk_label_set_text(label, text);
+ g_free(text);
+}
+
+void
+change_buttons(void)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(save_button), TRUE);
+}
+
+
+/***********************************************************************/
+
+void
+vorbis_file_info_box(gchar * filename)
+{
+ gchar *filename_utf8, *title;
+ const gchar *rg_track_gain, *rg_track_peak;
+ const gchar *rg_album_gain, *rg_album_peak;
+
+ gint time, minutes, seconds, bitrate, rate, channels, filesize, i;
+
+ OggVorbis_File vf;
+ vorbis_info *vi;
+ vorbis_comment *comment = NULL;
+
+ VFSFile *fh;
+
+ gboolean clear_vf = FALSE;
+
+ GtkWidget *pixmapwid;
+ GdkPixbuf *pixbuf;
+ PangoAttrList *attrs;
+ PangoAttribute *attr;
+
+ GtkWidget *boxx;
+ GtkWidget *img;
+ GtkWidget *test_table;
+
+ static GtkWidget *info_frame, *info_box, *bitrate_label, *rate_label;
+ static GtkWidget *bitrate_label_val, *rate_label_val;
+
+ static GtkWidget *channel_label, *length_label, *filesize_label;
+ static GtkWidget *channel_label_val, *length_label_val,
+ *filesize_label_val;
+
+ static GtkWidget *filename_entry, *tag_frame;
+
+ g_free(vte.filename);
+ vte.filename = g_strdup(filename);
+
+ if (!window) {
+ GtkWidget *hbox, *label, *filename_hbox, *vbox, *left_vbox;
+ GtkWidget *table, *bbox, *cancel_button;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(window),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &window);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ filename_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox), filename_hbox, FALSE, TRUE, 0);
+
+ pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)
+ gnome_mime_audio_ogg_xpm);
+ pixmapwid = gtk_image_new_from_pixbuf(pixbuf);
+ gtk_misc_set_alignment(GTK_MISC(pixmapwid), 0, 0);
+ gtk_box_pack_start(GTK_BOX(filename_hbox), pixmapwid, FALSE, FALSE,
+ 0);
+
+ attrs = pango_attr_list_new();
+
+ attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD);
+ attr->start_index = 0;
+ attr->end_index = -1;
+ pango_attr_list_insert(attrs, attr);
+
+ label = gtk_label_new(_("Name:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_box_pack_start(GTK_BOX(filename_hbox), label, FALSE, FALSE, 0);
+
+ filename_entry = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(filename_entry), FALSE);
+ gtk_box_pack_start(GTK_BOX(filename_hbox), filename_entry, TRUE,
+ TRUE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
+
+ left_vbox = gtk_table_new(4, 7, FALSE);
+ gtk_box_pack_start(GTK_BOX(hbox), left_vbox, FALSE, FALSE, 0);
+
+ tag_frame = gtk_frame_new(_(" Ogg Vorbis Tag "));
+ gtk_table_attach(GTK_TABLE(left_vbox), tag_frame, 2, 4, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 4);
+
+ table = gtk_table_new(16, 6, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+ gtk_container_add(GTK_CONTAINER(tag_frame), table);
+
+ label = gtk_label_new(_("Title:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ title_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), title_entry, 1, 4, 0, 1,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Artist:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ performer_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), performer_entry, 1, 4, 1, 2,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Album:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ album_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), album_entry, 1, 4, 2, 3,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Comment:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ user_comment_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), user_comment_entry, 1, 4, 3,
+ 4, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Date:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ date_entry = gtk_entry_new();
+ gtk_widget_set_size_request(date_entry, 60, -1);
+ gtk_table_attach(GTK_TABLE(table), date_entry, 1, 2, 4, 5,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Track number:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 2, 3, 4, 5,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ tracknumber_entry = gtk_entry_new_with_max_length(4);
+ gtk_widget_set_size_request(tracknumber_entry, 20, -1);
+ gtk_table_attach(GTK_TABLE(table), tracknumber_entry, 3, 4, 4,
+ 5, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Genre:"));
+ gtk_label_set_attributes(GTK_LABEL(label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ genre_combo = gtk_combo_new();
+ if (!genre_list) {
+ for (i = 0; i < G_N_ELEMENTS(vorbis_genres); i++)
+ genre_list = g_list_prepend(genre_list, _(vorbis_genres[i]));
+ genre_list = g_list_sort(genre_list, (GCompareFunc) g_strcasecmp);
+ }
+ gtk_combo_set_popdown_strings(GTK_COMBO(genre_combo), genre_list);
+ gtk_table_attach(GTK_TABLE(table), genre_combo, 1, 4, 5, 6,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+#ifdef ALL_VORBIS_TAGS
+ label = gtk_label_new(_("Description:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 6, 7,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ description_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), description_entry, 1, 4, 6,
+ 7, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Location:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 7, 8,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ location_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), location_entry, 1, 4, 7, 8,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Version:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 8, 9,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ version_entry = gtk_entry_new();
+ gtk_widget_set_size_request(version_entry, 60, -1);
+ gtk_table_attach(GTK_TABLE(table), version_entry, 1, 2, 8, 9,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("ISRC number:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 2, 3, 8, 9,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ isrc_entry = gtk_entry_new();
+ gtk_widget_set_size_request(isrc_entry, 20, -1);
+ gtk_table_attach(GTK_TABLE(table), isrc_entry, 3, 4, 8, 9,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Organization:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 9, 10,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ organization_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), organization_entry, 1, 4, 9,
+ 10, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ label = gtk_label_new(_("Copyright:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 10, 11,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ copyright_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), copyright_entry, 1, 4, 10,
+ 11, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+#endif
+ boxx = gtk_hbutton_box_new();
+ gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_SPREAD);
+
+ remove_button = gtk_button_new_from_stock(GTK_STOCK_DELETE);
+ g_signal_connect_swapped(G_OBJECT(remove_button),
+ "clicked", G_CALLBACK(remove_cb), NULL);
+ gtk_container_add(GTK_CONTAINER(boxx), remove_button);
+
+ save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE);
+ g_signal_connect(G_OBJECT(save_button), "clicked",
+ G_CALLBACK(save_cb), NULL);
+ gtk_container_add(GTK_CONTAINER(boxx), save_button);
+
+ gtk_table_attach(GTK_TABLE(table), boxx, 0, 5, 6, 7, GTK_FILL, 0,
+ 0, 8);
+
+ rg_show_button = gtk_toggle_button_new();
+ img = gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD,
+ GTK_ICON_SIZE_MENU);
+ gtk_container_add(GTK_CONTAINER(rg_show_button), img);
+ g_signal_connect(G_OBJECT(rg_show_button), "toggled",
+ G_CALLBACK(rg_show_cb), NULL);
+
+ gtk_table_attach(GTK_TABLE(left_vbox), rg_show_button, 4, 5, 0, 2,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 5, 5);
+
+ rg_frame = gtk_frame_new(_(" Ogg Vorbis ReplayGain "));
+ gtk_table_attach(GTK_TABLE(left_vbox), rg_frame, 5, 6, 0, 4,
+ GTK_FILL, GTK_FILL, 0, 4);
+ rg_table = gtk_table_new(16, 4, FALSE);
+ gtk_container_add(GTK_CONTAINER(rg_frame), GTK_WIDGET(rg_table));
+
+ rg_track_label = gtk_label_new(_("Track gain:"));
+ gtk_misc_set_alignment(GTK_MISC(rg_track_label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(rg_table), rg_track_label, 5, 6, 0, 1,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ rg_track_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(rg_table), rg_track_entry, 6, 7, 0,
+ 1, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ rg_track_peak_label = gtk_label_new(_("Track peak:"));
+ gtk_misc_set_alignment(GTK_MISC(rg_track_peak_label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(rg_table), rg_track_peak_label, 5, 6, 1,
+ 2, GTK_FILL, GTK_FILL, 5, 5);
+
+ rg_track_peak_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(rg_table), rg_track_peak_entry, 6, 7, 1,
+ 2, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+
+ rg_album_label = gtk_label_new(_("Album gain:"));
+ gtk_misc_set_alignment(GTK_MISC(rg_album_label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(rg_table), rg_album_label, 5, 6, 2, 3,
+ GTK_FILL, GTK_FILL, 5, 5);
+
+ rg_album_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(rg_table), rg_album_entry, 6, 7, 2,
+ 3, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ rg_album_peak_label = gtk_label_new(_("Album peak:"));
+ gtk_misc_set_alignment(GTK_MISC(rg_album_peak_label), 1, 0.5);
+ gtk_table_attach(GTK_TABLE(rg_table), rg_album_peak_label, 5, 6, 3,
+ 4, GTK_FILL, GTK_FILL, 5, 5);
+
+ rg_album_peak_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(rg_table), rg_album_peak_entry, 6, 7, 3,
+ 4, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_table_attach(GTK_TABLE(left_vbox), bbox, 0, 4, 1, 2, GTK_FILL,
+ 0, 0, 8);
+
+ cancel_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ g_signal_connect_swapped(G_OBJECT(cancel_button),
+ "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ G_OBJECT(window));
+ GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel_button, TRUE, TRUE, 0);
+ gtk_widget_grab_default(cancel_button);
+
+
+ gtk_table_set_col_spacing(GTK_TABLE(left_vbox), 1, 10);
+
+
+ info_frame = gtk_frame_new(_(" Ogg Vorbis Info "));
+ gtk_table_attach(GTK_TABLE(left_vbox), info_frame, 0, 2, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 4);
+
+ info_box = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(info_frame), info_box);
+ gtk_container_set_border_width(GTK_CONTAINER(info_box), 10);
+ gtk_box_set_spacing(GTK_BOX(info_box), 0);
+
+ /* FIXME: Obvious... */
+ test_table = gtk_table_new(2, 10, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(test_table), 0);
+ gtk_container_add(GTK_CONTAINER(info_box), test_table);
+
+
+ bitrate_label = gtk_label_new(_("Bit rate:"));
+ gtk_label_set_attributes(GTK_LABEL(bitrate_label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(bitrate_label), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(bitrate_label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach(GTK_TABLE(test_table), bitrate_label, 0, 1, 0, 1,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ bitrate_label_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(bitrate_label_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(bitrate_label_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), bitrate_label_val, 1, 2, 0,
+ 1, GTK_FILL, GTK_FILL, 10, 2);
+
+ rate_label = gtk_label_new(_("Sample rate:"));
+ gtk_label_set_attributes(GTK_LABEL(rate_label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(rate_label), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(rate_label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach(GTK_TABLE(test_table), rate_label, 0, 1, 1, 2,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ rate_label_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(rate_label_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(rate_label_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), rate_label_val, 1, 2, 1, 2,
+ GTK_FILL, GTK_FILL, 10, 2);
+
+ channel_label = gtk_label_new(_("Channels:"));
+ gtk_label_set_attributes(GTK_LABEL(channel_label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(channel_label), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(channel_label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach(GTK_TABLE(test_table), channel_label, 0, 1, 2, 3,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ channel_label_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(channel_label_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(channel_label_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), channel_label_val, 1, 2, 2,
+ 3, GTK_FILL, GTK_FILL, 10, 2);
+
+ length_label = gtk_label_new(_("Length:"));
+ gtk_label_set_attributes(GTK_LABEL(length_label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(length_label), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(length_label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach(GTK_TABLE(test_table), length_label, 0, 1, 3, 4,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ length_label_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(length_label_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(length_label_val), GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), length_label_val, 1, 2, 3,
+ 4, GTK_FILL, GTK_FILL, 10, 2);
+
+ filesize_label = gtk_label_new(_("File size:"));
+ gtk_label_set_attributes(GTK_LABEL(filesize_label), attrs);
+ gtk_misc_set_alignment(GTK_MISC(filesize_label), 1, 0.5);
+ gtk_label_set_justify(GTK_LABEL(filesize_label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach(GTK_TABLE(test_table), filesize_label, 0, 1, 4, 5,
+ GTK_FILL, GTK_FILL, 5, 2);
+
+ filesize_label_val = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(filesize_label_val), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(filesize_label_val),
+ GTK_JUSTIFY_LEFT);
+ gtk_table_attach(GTK_TABLE(test_table), filesize_label_val, 1, 2,
+ 4, 5, GTK_FILL, GTK_FILL, 10, 2);
+
+ pango_attr_list_unref(attrs);
+ }
+ else
+ gtk_window_present(GTK_WINDOW(window));
+
+ if (!g_strncasecmp(vte.filename, "http://", 7))
+ gtk_widget_set_sensitive(tag_frame, FALSE);
+ else
+ gtk_widget_set_sensitive(tag_frame, TRUE);
+
+ gtk_label_set_text(GTK_LABEL(bitrate_label), _("Bit rate:"));
+ gtk_label_set_text(GTK_LABEL(bitrate_label_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(rate_label), _("Sample rate:"));
+ gtk_label_set_text(GTK_LABEL(rate_label_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(channel_label), _("Channels:"));
+ gtk_label_set_text(GTK_LABEL(channel_label_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(length_label), _("Length:"));
+ gtk_label_set_text(GTK_LABEL(length_label_val), _("N/A"));
+
+ gtk_label_set_text(GTK_LABEL(filesize_label), _("File size:"));
+ gtk_label_set_text(GTK_LABEL(filesize_label_val), _("N/A"));
+
+ if ((fh = vfs_fopen(vte.filename, "r")) != NULL) {
+ g_mutex_lock(vf_mutex);
+
+ if (ov_open_callbacks(fh, &vf, NULL, 0, vorbis_callbacks) == 0) {
+ comment = ov_comment(&vf, -1);
+ if ((vi = ov_info(&vf, 0)) != NULL) {
+ bitrate = vi->bitrate_nominal / 1000;
+ rate = vi->rate;
+ channels = vi->channels;
+ clear_vf = TRUE;
+ gtk_widget_set_sensitive(GTK_WIDGET(save_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(remove_button), TRUE);
+ }
+ else {
+ bitrate = 0;
+ rate = 0;
+ channels = 0;
+ gtk_widget_set_sensitive(GTK_WIDGET(save_button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(remove_button), FALSE);
+ }
+
+ time = ov_time_total(&vf, -1);
+ minutes = time / 60;
+ seconds = time % 60;
+ vfs_fseek(fh, 0, SEEK_END);
+ filesize = vfs_ftell(fh);
+
+ label_set_text(GTK_LABEL(bitrate_label_val),
+ _("%d KBit/s (nominal)"), bitrate);
+ label_set_text(GTK_LABEL(rate_label_val), _("%d Hz"), rate);
+ label_set_text(GTK_LABEL(channel_label_val), _("%d"), channels);
+ label_set_text(GTK_LABEL(length_label_val),
+ _("%d:%.2d"), minutes, seconds);
+ label_set_text(GTK_LABEL(filesize_label_val),
+ _("%d Bytes"), filesize);
+
+ }
+ else
+ vfs_fclose(fh);
+ }
+
+ rg_track_gain = get_comment(comment, "replaygain_track_gain");
+ if (*rg_track_gain == '\0')
+ rg_track_gain = get_comment(comment, "rg_radio"); /* Old */
+
+ rg_album_gain = get_comment(comment, "replaygain_album_gain");
+ if (*rg_album_gain == '\0')
+ rg_album_gain = get_comment(comment, "rg_audiophile"); /* Old */
+
+ rg_track_peak = get_comment(comment, "replaygain_track_peak");
+ if (*rg_track_peak == '\0')
+ rg_track_peak = get_comment(comment, "rg_peak"); /* Old */
+
+ rg_album_peak = get_comment(comment, "replaygain_album_peak"); /* Old had no album peak */
+
+ /* Fill it all in .. */
+ gtk_entry_set_text(GTK_ENTRY(title_entry),
+ get_comment(comment, "title"));
+ gtk_entry_set_text(GTK_ENTRY(performer_entry),
+ get_comment(comment, "artist"));
+ gtk_entry_set_text(GTK_ENTRY(album_entry),
+ get_comment(comment, "album"));
+ gtk_entry_set_text(GTK_ENTRY(user_comment_entry),
+ get_comment(comment, "comment"));
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(genre_combo)->entry),
+ get_comment(comment, "genre"));
+ gtk_entry_set_text(GTK_ENTRY(tracknumber_entry),
+ get_comment(comment, "tracknumber"));
+ gtk_entry_set_text(GTK_ENTRY(date_entry),
+ get_comment(comment, "date"));
+#ifdef ALL_VORBIS_TAGS
+ gtk_entry_set_text(GTK_ENTRY(version_entry),
+ get_comment(comment, "version"));
+ gtk_entry_set_text(GTK_ENTRY(description_entry),
+ get_comment(comment, "description"));
+ gtk_entry_set_text(GTK_ENTRY(organization_entry),
+ get_comment(comment, "organization"));
+ gtk_entry_set_text(GTK_ENTRY(copyright_entry),
+ get_comment(comment, "copyright"));
+ gtk_entry_set_text(GTK_ENTRY(isrc_entry),
+ get_comment(comment, "isrc"));
+ gtk_entry_set_text(GTK_ENTRY(location_entry),
+ get_comment(comment, "location"));
+#endif
+
+ filename_utf8 = filename_to_utf8(vte.filename);
+
+ title = g_strdup_printf(_("%s - BMP"), g_basename(filename_utf8));
+ gtk_window_set_title(GTK_WINDOW(window), title);
+ g_free(title);
+
+ gtk_entry_set_text(GTK_ENTRY(filename_entry), filename_utf8);
+ gtk_editable_set_position(GTK_EDITABLE(filename_entry), -1);
+
+ g_free(filename_utf8);
+
+ gtk_entry_set_text(GTK_ENTRY(rg_track_entry), rg_track_gain);
+ gtk_entry_set_text(GTK_ENTRY(rg_album_entry), rg_album_gain);
+ gtk_entry_set_text(GTK_ENTRY(rg_track_peak_entry), rg_track_peak);
+ gtk_editable_set_position(GTK_EDITABLE(rg_track_peak_entry), -1);
+ gtk_entry_set_text(GTK_ENTRY(rg_album_peak_entry), rg_album_peak);
+ gtk_editable_set_position(GTK_EDITABLE(rg_album_peak_entry), -1);
+
+ if (*rg_track_gain == '\0' && *rg_album_gain == '\0' &&
+ *rg_track_peak == '\0' && *rg_album_peak == '\0') {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_show_button),
+ FALSE);
+ }
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rg_show_button),
+ TRUE);
+
+ /* ov_clear closes the file */
+ if (clear_vf) ov_clear(&vf);
+ g_mutex_unlock(vf_mutex);
+
+
+ gtk_widget_set_sensitive(tag_frame, vfs_is_writeable(vte.filename));
+
+ g_signal_connect_swapped(title_entry, "changed", change_buttons,
+ save_button);
+ g_signal_connect_swapped(performer_entry, "changed", change_buttons,
+ save_button);
+ g_signal_connect_swapped(album_entry, "changed", change_buttons,
+ save_button);
+ g_signal_connect_swapped(date_entry, "changed", change_buttons,
+ save_button);
+ g_signal_connect_swapped(user_comment_entry, "changed", change_buttons,
+ save_button);
+ g_signal_connect_swapped(tracknumber_entry, "changed", change_buttons,
+ save_button);
+ g_signal_connect_swapped(GTK_COMBO(genre_combo)->entry, "changed",
+ G_CALLBACK(change_buttons), save_button);
+
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_widget_show_all(window);
+ gtk_widget_hide(rg_frame);
+
+ gtk_widget_set_sensitive(save_button, FALSE);
+ gtk_widget_set_sensitive(remove_button, FALSE);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,624 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+
+#include <unistd.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+
+#include "vorbis.h"
+#include "http.h"
+#include "libbeep/util.h"
+#include "beep/plugin.h"
+
+
+#define min(x,y) ((x)<(y)?(x):(y))
+#define min3(x,y,z) (min(x,y)<(z)?min(x,y):(z))
+#define min4(x,y,z,w) (min3(x,y,z)<(w)?min3(x,y,z):(w))
+
+static gchar *ice_name = NULL;
+
+static gboolean prebuffering, going, eof = FALSE;
+static gint sock, rd_index, wr_index, buffer_length, prebuffer_length;
+static guint64 buffer_read = 0;
+static gchar *buffer;
+static GThread *thread;
+static GtkWidget *error_dialog = NULL;
+
+extern vorbis_config_t vorbis_cfg;
+extern InputPlugin vorbis_ip;
+extern int vorbis_playing;
+
+static VFSFile *output_file = NULL;
+
+#define BASE64_LENGTH(len) (4 * (((len) + 2) / 3))
+
+/* Encode the string S of length LENGTH to base64 format and place it
+ to STORE. STORE will be 0-terminated, and must point to a writable
+ buffer of at least 1+BASE64_LENGTH(length) bytes. */
+static void
+base64_encode(const gchar * s, gchar * store, gint length)
+{
+ /* Conversion table. */
+ static gchar tbl[64] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+ '4', '5', '6', '7', '8', '9', '+', '/'
+ };
+ gint i;
+ guchar *p = (guchar *) store;
+
+ /* Transform the 3x8 bits to 4x6 bits, as required by base64. */
+ for (i = 0; i < length; i += 3) {
+ *p++ = tbl[s[0] >> 2];
+ *p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)];
+ *p++ = tbl[((s[1] & 0xf) << 2) + (s[2] >> 6)];
+ *p++ = tbl[s[2] & 0x3f];
+ s += 3;
+ }
+ /* Pad the result if necessary... */
+ if (i == length + 1)
+ *(p - 1) = '=';
+ else if (i == length + 2)
+ *(p - 1) = *(p - 2) = '=';
+ /* ...and zero-terminate it. */
+ *p = '\0';
+}
+
+/* Create the authentication header contents for the `Basic' scheme.
+ This is done by encoding the string `USER:PASS' in base64 and
+ prepending `HEADER: Basic ' to it. */
+static gchar *
+basic_authentication_encode(const gchar * user,
+ const gchar * passwd, const gchar * header)
+{
+ gchar *t1, *t2, *res;
+ gint len1 = strlen(user) + 1 + strlen(passwd);
+ gint len2 = BASE64_LENGTH(len1);
+
+ t1 = g_strdup_printf("%s:%s", user, passwd);
+ t2 = g_malloc0(len2 + 1);
+ base64_encode(t1, t2, len1);
+ res = g_strdup_printf("%s: Basic %s\r\n", header, t2);
+ g_free(t2);
+ g_free(t1);
+
+ return res;
+}
+
+static void
+parse_url(const gchar * url, gchar ** user, gchar ** pass,
+ gchar ** host, int *port, gchar ** filename)
+{
+ gchar *h, *p, *pt, *f, *temp, *ptr;
+
+ temp = g_strdup(url);
+ ptr = temp;
+
+ if (!strncasecmp("http://", ptr, 7))
+ ptr += 7;
+ h = strchr(ptr, '@');
+ f = strchr(ptr, '/');
+ if (h != NULL && (!f || h < f)) {
+ *h = '\0';
+ p = strchr(ptr, ':');
+ if (p != NULL && p < h) {
+ *p = '\0';
+ p++;
+ *pass = g_strdup(p);
+ }
+ else
+ *pass = NULL;
+ *user = g_strdup(ptr);
+ h++;
+ ptr = h;
+ }
+ else {
+ *user = NULL;
+ *pass = NULL;
+ h = ptr;
+ }
+ pt = strchr(ptr, ':');
+ if (pt != NULL && (f == NULL || pt < f)) {
+ *pt = '\0';
+ *port = atoi(pt + 1);
+ }
+ else {
+ if (f)
+ *f = '\0';
+ *port = 80;
+ }
+ *host = g_strdup(h);
+
+ if (f)
+ *filename = g_strdup(f + 1);
+ else
+ *filename = NULL;
+ g_free(temp);
+}
+
+void
+vorbis_http_close(void)
+{
+ going = FALSE;
+
+ g_thread_join(thread);
+ g_free(ice_name);
+ ice_name = NULL;
+}
+
+
+static gint
+http_used(void)
+{
+ if (wr_index >= rd_index)
+ return wr_index - rd_index;
+ return buffer_length - (rd_index - wr_index);
+}
+
+static gint
+http_free(void)
+{
+ if (rd_index > wr_index)
+ return (rd_index - wr_index) - 1;
+ return (buffer_length - (wr_index - rd_index)) - 1;
+}
+
+static void
+http_wait_for_data(gint bytes)
+{
+ while ((prebuffering || http_used() < bytes) && !eof && going
+ && vorbis_playing)
+ xmms_usleep(10000);
+}
+
+static void
+show_error_message(gchar * error)
+{
+ if (!error_dialog) {
+ GDK_THREADS_ENTER();
+ error_dialog = xmms_show_message(_("Error"), error, _("Ok"), FALSE,
+ NULL, NULL);
+ g_signal_connect(G_OBJECT(error_dialog),
+ "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &error_dialog);
+ GDK_THREADS_LEAVE();
+ }
+}
+
+int
+vorbis_http_read(gpointer data, gint length)
+{
+ gint len, cnt, off = 0;
+
+ http_wait_for_data(length);
+
+ if (!going && !vorbis_playing)
+ return 0;
+ len = min(http_used(), length);
+
+ while (len && http_used()) {
+ cnt = min3(len, buffer_length - rd_index, http_used());
+ if (output_file)
+ vfs_fwrite(buffer + rd_index, 1, cnt, output_file);
+
+ memcpy((gchar *) data + off, buffer + rd_index, cnt);
+ rd_index = (rd_index + cnt) % buffer_length;
+ buffer_read += cnt;
+ len -= cnt;
+ off += cnt;
+ }
+ return off;
+}
+
+static gboolean
+http_check_for_data(void)
+{
+
+ fd_set set;
+ struct timeval tv;
+ gint ret;
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 20000;
+ FD_ZERO(&set);
+ FD_SET(sock, &set);
+ ret = select(sock + 1, &set, NULL, NULL, &tv);
+ if (ret > 0)
+ return TRUE;
+ return FALSE;
+}
+
+gint
+vorbis_http_read_line(gchar * buf, gint size)
+{
+ gint i = 0;
+
+ while (going && i < size - 1) {
+ if (http_check_for_data()) {
+ if (read(sock, buf + i, 1) <= 0)
+ return -1;
+ if (buf[i] == '\n')
+ break;
+ if (buf[i] != '\r')
+ i++;
+ }
+ }
+ if (!going)
+ return -1;
+ buf[i] = '\0';
+ return i;
+}
+
+static gpointer
+http_buffer_loop(gpointer arg)
+{
+ gchar line[1024], *user, *pass, *host, *filename,
+ *status, *url, *temp, *file;
+ gchar *chost;
+ gint cnt, written, error, err_len, port, cport;
+ gboolean redirect;
+ fd_set set;
+ struct hostent *hp;
+ struct sockaddr_in address;
+ struct timeval tv;
+
+ url = (gchar *) arg;
+ do {
+ redirect = FALSE;
+
+ g_strstrip(url);
+
+ parse_url(url, &user, &pass, &host, &port, &filename);
+
+ if ((!filename || !*filename) && url[strlen(url) - 1] != '/')
+ temp = g_strconcat(url, "/", NULL);
+ else
+ temp = g_strdup(url);
+ g_free(url);
+ url = temp;
+
+ chost = vorbis_cfg.use_proxy ? vorbis_cfg.proxy_host : host;
+ cport = vorbis_cfg.use_proxy ? vorbis_cfg.proxy_port : port;
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ fcntl(sock, F_SETFL, O_NONBLOCK);
+ address.sin_family = AF_INET;
+
+ status = g_strdup_printf(_("LOOKING UP %s"), chost);
+ vorbis_ip.set_info_text(status);
+ g_free(status);
+
+ if (!(hp = gethostbyname(chost))) {
+ status = g_strdup_printf(_("Couldn't look up host %s"), chost);
+ show_error_message(status);
+ g_free(status);
+
+ vorbis_ip.set_info_text(NULL);
+ eof = TRUE;
+ }
+
+ if (!eof) {
+ memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list),
+ sizeof(address.sin_addr.s_addr));
+ address.sin_port = g_htons(cport);
+
+ status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport);
+ vorbis_ip.set_info_text(status);
+ g_free(status);
+ if (connect
+ (sock, (struct sockaddr *) &address,
+ sizeof(struct sockaddr_in)) == -1) {
+ if (errno != EINPROGRESS) {
+ status =
+ g_strdup_printf(_("Couldn't connect to host %s"),
+ chost);
+ show_error_message(status);
+ g_free(status);
+
+ vorbis_ip.set_info_text(NULL);
+ eof = TRUE;
+ }
+ }
+ while (going) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 10000;
+ FD_ZERO(&set);
+ FD_SET(sock, &set);
+ if (select(sock + 1, NULL, &set, NULL, &tv) > 0) {
+ err_len = sizeof(error);
+ getsockopt(sock, SOL_SOCKET, SO_ERROR, &error, &err_len);
+ if (error) {
+ status =
+ g_strdup_printf(_
+ ("Couldn't connect to host %s"),
+ chost);
+ show_error_message(status);
+ g_free(status);
+
+ vorbis_ip.set_info_text(NULL);
+ eof = TRUE;
+
+ }
+ break;
+ }
+ }
+ if (!eof) {
+ gchar *auth = NULL, *proxy_auth = NULL;
+
+ if (user && pass)
+ auth =
+ basic_authentication_encode(user, pass,
+ "Authorization");
+
+ if (vorbis_cfg.use_proxy) {
+ file = g_strdup(url);
+ if (vorbis_cfg.proxy_use_auth && vorbis_cfg.proxy_user
+ && vorbis_cfg.proxy_pass) {
+ proxy_auth =
+ basic_authentication_encode(vorbis_cfg.
+ proxy_user,
+ vorbis_cfg.
+ proxy_pass,
+ "Proxy-Authorization");
+ }
+ }
+ else
+ file = g_strconcat("/", filename, NULL);
+ temp = g_strdup_printf("GET %s HTTP/1.0\r\n"
+ "Host: %s\r\n"
+ "User-Agent: %s/%s\r\n"
+ "%s%s\r\n",
+ file, host, PACKAGE, VERSION,
+ proxy_auth ? proxy_auth : "",
+ auth ? auth : "");
+ g_free(file);
+ if (proxy_auth)
+ g_free(proxy_auth);
+ if (auth)
+ g_free(auth);
+ write(sock, temp, strlen(temp));
+ g_free(temp);
+ vorbis_ip.set_info_text(_("CONNECTED: WAITING FOR REPLY"));
+ while (going && !eof) {
+ if (http_check_for_data()) {
+ if (vorbis_http_read_line(line, 1024)) {
+ status = strchr(line, ' ');
+ if (status) {
+ if (status[1] == '2')
+ break;
+ else if (status[1] == '3'
+ && status[2] == '0'
+ && status[3] == '2') {
+ while (going) {
+ if (http_check_for_data()) {
+ if ((cnt =
+ vorbis_http_read_line
+ (line, 1024)) != -1) {
+ if (!cnt)
+ break;
+ if (!strncmp
+ (line, "Location:", 9)) {
+ g_free(url);
+ url = g_strdup(line + 10);
+ }
+ }
+ else {
+ eof = TRUE;
+ vorbis_ip.set_info_text(NULL);
+ break;
+ }
+ }
+ }
+ redirect = TRUE;
+ break;
+ }
+ else {
+ status =
+ g_strdup_printf(_
+ ("Couldn't connect to host %s\nServer reported: %s"),
+ chost, status);
+ show_error_message(status);
+ g_free(status);
+ break;
+ }
+ }
+ }
+ else {
+ eof = TRUE;
+ vorbis_ip.set_info_text(NULL);
+ }
+ }
+ }
+
+ while (going && !redirect) {
+ if (http_check_for_data()) {
+ if ((cnt = vorbis_http_read_line(line, 1024)) != -1) {
+ if (!cnt)
+ break;
+ if (!strncmp(line, "ice-name:", 9))
+ ice_name = g_strdup(line + 9);
+
+ }
+ else {
+ eof = TRUE;
+ vorbis_ip.set_info_text(NULL);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (redirect) {
+ if (output_file) {
+ vfs_fclose(output_file);
+ output_file = NULL;
+ }
+ close(sock);
+ g_free(user);
+ g_free(pass);
+ g_free(host);
+ g_free(filename);
+ }
+ } while (redirect);
+
+ if (vorbis_cfg.save_http_stream) {
+ gchar *output_name;
+ file = vorbis_http_get_title(url);
+ output_name = file;
+ if (!strncasecmp(output_name, "http://", 7))
+ output_name += 7;
+ temp = strrchr(output_name, '.');
+ if (temp && !strcasecmp(temp, ".ogg"))
+ *temp = '\0';
+
+ while ((temp = strchr(output_name, '/')))
+ *temp = '_';
+ output_name =
+ g_strdup_printf("%s/%s.ogg", vorbis_cfg.save_http_path,
+ output_name);
+
+ g_free(file);
+
+ output_file = vfs_fopen(output_name, "wb");
+ g_free(output_name);
+ }
+
+ while (going) {
+
+ if (!http_used() && !vorbis_ip.output->buffer_playing())
+ prebuffering = TRUE;
+ if (http_free() > 0 && !eof) {
+ if (http_check_for_data()) {
+ cnt = min(http_free(), buffer_length - wr_index);
+ if (cnt > 1024)
+ cnt = 1024;
+ written = read(sock, buffer + wr_index, cnt);
+ if (written <= 0) {
+ eof = TRUE;
+ if (prebuffering) {
+ prebuffering = FALSE;
+
+ vorbis_ip.set_info_text(NULL);
+ }
+
+ }
+ else
+ wr_index = (wr_index + written) % buffer_length;
+ }
+
+ if (prebuffering) {
+ if (http_used() > prebuffer_length) {
+ prebuffering = FALSE;
+ vorbis_ip.set_info_text(NULL);
+ }
+ else {
+ status =
+ g_strdup_printf(_("PRE-BUFFERING: %dKB/%dKB"),
+ http_used() / 1024,
+ prebuffer_length / 1024);
+ vorbis_ip.set_info_text(status);
+ g_free(status);
+ }
+
+ }
+ }
+ else
+ xmms_usleep(10000);
+
+ }
+ if (output_file) {
+ vfs_fclose(output_file);
+ output_file = NULL;
+ }
+ close(sock);
+
+
+ g_free(user);
+ g_free(pass);
+ g_free(host);
+ g_free(filename);
+ g_free(buffer);
+ g_free(url);
+
+ return NULL;
+}
+
+gint
+vorbis_http_open(const gchar * _url)
+{
+ gchar *url;
+
+ url = g_strdup(_url);
+
+ rd_index = 0;
+ wr_index = 0;
+ buffer_length = vorbis_cfg.http_buffer_size * 1024;
+ prebuffer_length = (buffer_length * vorbis_cfg.http_prebuffer) / 100;
+ buffer_read = 0;
+ prebuffering = TRUE;
+ going = TRUE;
+ eof = FALSE;
+ buffer = g_malloc(buffer_length);
+
+ thread = g_thread_create(http_buffer_loop, url, TRUE, NULL);
+
+ return 0;
+}
+
+gchar *
+vorbis_http_get_title(const gchar * url)
+{
+ gchar *url_basename;
+
+ if (ice_name)
+ return g_strdup(ice_name);
+
+ url_basename = g_path_get_basename(url);
+
+ if (strlen(url_basename) > 0)
+ return url_basename;
+
+ g_free(url_basename);
+
+ return g_strdup(url);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/http.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,10 @@
+#ifndef __HTTP_H__
+#define __HTTP_H__
+
+gint vorbis_http_open(const gchar * url);
+gint vorbis_http_read(gpointer data, gint length);
+void vorbis_http_close(void);
+gchar *vorbis_http_get_title(const gchar * url);
+gint vorbis_http_get_ice_bitrate(void);
+
+#endif /* __HTTP_H__ */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/ogg.xpm
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/ogg.xpm 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/ogg.xpm 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,576 @@
+/* XPM */
+static char * gnome_mime_audio_ogg_xpm[] = {
+"48 52 521 2",
+" c None",
+". c #000000",
+"+ c #232323",
+"@ c #1F1F1F",
+"# c #DADADA",
+"$ c #FFFFFF",
+"% c #F6F6F6",
+"& c #CFCFCF",
+"* c #707070",
+"= c #FEFEFE",
+"- c #FBFBFB",
+"; c #EDEDED",
+"> c #C0C0C0",
+", c #F7F7F7",
+"' c #D7D7D7",
+") c #F1F1F1",
+"! c #B7B7B7",
+"~ c #E2E2E2",
+"{ c #D2D2D2",
+"] c #AEAEAE",
+"^ c #070707",
+"/ c #ABABAB",
+"( c #FDFDFD",
+"_ c #FCFCFC",
+": c #B8B8B8",
+"< c #FAFAFA",
+"[ c #DCDCDC",
+"} c #A4A4A3",
+"| c #0E0E0E",
+"1 c #B1B1B1",
+"2 c #BEBEBE",
+"3 c #F5F5F5",
+"4 c #E5E5E5",
+"5 c #C3C3C3",
+"6 c #6F6F6F",
+"7 c #2A2A2A",
+"8 c #2C2C2C",
+"9 c #2E2E2E",
+"0 c #5B5B5B",
+"a c #F9F9F9",
+"b c #F5F5F4",
+"c c #B5B5B5",
+"d c #CBCBCB",
+"e c #A5A5A5",
+"f c #A9A9A9",
+"g c #CDCDCD",
+"h c #E9E9E9",
+"i c #525253",
+"j c #FBFCFD",
+"k c #F3F6F9",
+"l c #B7CADC",
+"m c #90A5B9",
+"n c #7E92A5",
+"o c #7E90A3",
+"p c #667684",
+"q c #657583",
+"r c #53606D",
+"s c #292A2A",
+"t c #FAFAF9",
+"u c #F4F4F4",
+"v c #ACACAC",
+"w c #ECECEC",
+"x c #C2C2C2",
+"y c #C9C9C8",
+"z c #A8A8A8",
+"A c #D5D5D5",
+"B c #BCBCBC",
+"C c #BDBDBD",
+"D c #F0F0F0",
+"E c #90969B",
+"F c #181818",
+"G c #212121",
+"H c #363636",
+"I c #292929",
+"J c #293036",
+"K c #4D5964",
+"L c #444445",
+"M c #FCFCFB",
+"N c #F4F4F3",
+"O c #515151",
+"P c #474747",
+"Q c #464645",
+"R c #464646",
+"S c #5D5D5C",
+"T c #E1E1E1",
+"U c #D1D1D1",
+"V c #959BA2",
+"W c #282828",
+"X c #858585",
+"Y c #595959",
+"Z c #2D2D2D",
+"` c #555F68",
+" . c #F8F8F8",
+".. c #F2F2F2",
+"+. c #F3F3F3",
+"@. c #AAAAAA",
+"#. c #A0A09F",
+"$. c #8A8A8A",
+"%. c #7A7A7A",
+"&. c #6C6C6C",
+"*. c #454545",
+"=. c #B0B0B0",
+"-. c #939393",
+";. c #F7F9FB",
+">. c #1B1C1C",
+",. c #333333",
+"'. c #7F7F7F",
+"). c #BABABA",
+"!. c #636363",
+"~. c #5A6976",
+"{. c #202020",
+"]. c #EFEFEF",
+"^. c #F8F8F7",
+"/. c #E7E7E7",
+"(. c #C6C6C5",
+"_. c #BABAB9",
+":. c #6E6E6E",
+"<. c #A5BACE",
+"[. c #C1C1C1",
+"}. c #373737",
+"|. c #718498",
+"1. c #F7F7F6",
+"2. c #F6F6F5",
+"3. c #EDEDEB",
+"4. c #D3D3D3",
+"5. c #989898",
+"6. c #6D6D6D",
+"7. c #94A9C0",
+"8. c #353535",
+"9. c #8195A8",
+"0. c #505050",
+"a. c #DADAD9",
+"b. c #DDDDDC",
+"c. c #F1F1F0",
+"d. c #EDEDEC",
+"e. c #E3E3E3",
+"f. c #C9C9C9",
+"g. c #979797",
+"h. c #9B9B9B",
+"i. c #FDFDFC",
+"j. c #9C9EA0",
+"k. c #A5B4C2",
+"l. c #94A6B9",
+"m. c #5A5D5F",
+"n. c #C4D1DE",
+"o. c #A5B5C3",
+"p. c #8291A2",
+"q. c #1A1D21",
+"r. c #DEDEDE",
+"s. c #F2F2F1",
+"t. c #DDDDDD",
+"u. c #F3F3F2",
+"v. c #A1A1A1",
+"w. c #676869",
+"x. c #FBFCFC",
+"y. c #CFD7DF",
+"z. c #B2BFCC",
+"A. c #C6C6C6",
+"B. c #D9D9D9",
+"C. c #BBBBBB",
+"D. c #808589",
+"E. c #F5F7FA",
+"F. c #F3F5F8",
+"G. c #AFBBC6",
+"H. c #8F9DAB",
+"I. c #4B535C",
+"J. c #E0E0DF",
+"K. c #E0E0E0",
+"L. c #808283",
+"M. c #FAFBFC",
+"N. c #FBFBFC",
+"O. c #9C9C9C",
+"P. c #888888",
+"Q. c #EAEAEA",
+"R. c #8D9399",
+"S. c #F6F7FA",
+"T. c #F7F8FA",
+"U. c #D1DAE3",
+"V. c #B6C3CE",
+"W. c #494F55",
+"X. c #E6E6E5",
+"Y. c #EFEFEE",
+"Z. c #DEDEDD",
+"`. c #DBDBDA",
+" + c #E7E7E6",
+".+ c #AFAFAF",
+"++ c #656769",
+"@+ c #DAE1E8",
+"#+ c #DEE4E9",
+"$+ c #F5F7F8",
+"%+ c #EBEBEB",
+"&+ c #262626",
+"*+ c #929292",
+"=+ c #999999",
+"-+ c #828282",
+";+ c #82898F",
+">+ c #C2CCD5",
+",+ c #F3F5F7",
+"'+ c #B7C1CB",
+")+ c #404548",
+"!+ c #E4E4E3",
+"~+ c #F2F2F0",
+"{+ c #E4E4E4",
+"]+ c #E6E6E6",
+"^+ c #ADADAD",
+"/+ c #FBFBFA",
+"(+ c #54585C",
+"_+ c #C2CEDA",
+":+ c #C4CCD5",
+"<+ c #C4CBD2",
+"[+ c #DCAF00",
+"}+ c #FFDC00",
+"|+ c #878787",
+"1+ c #6E747B",
+"2+ c #99A5AF",
+"3+ c #9DA9B4",
+"4+ c #98A4AF",
+"5+ c #88939E",
+"6+ c #232426",
+"7+ c #E2E2E1",
+"8+ c #ECECEB",
+"9+ c #F0F0EF",
+"0+ c #DCDCDB",
+"a+ c #EFEFED",
+"b+ c #B2B2B2",
+"c+ c #D8D8D8",
+"d+ c #60666D",
+"e+ c #A6B2BD",
+"f+ c #A3ADB5",
+"g+ c #FFF793",
+"h+ c #FFF148",
+"i+ c #FFE957",
+"j+ c #EFE3A3",
+"k+ c #482D00",
+"l+ c #26282B",
+"m+ c #626F7B",
+"n+ c #616C78",
+"o+ c #4F5A63",
+"p+ c #1C2022",
+"q+ c #CFCFCE",
+"r+ c #DFDFDF",
+"s+ c #EAEAE9",
+"t+ c #EEEEED",
+"u+ c #EEEEEC",
+"v+ c #E9E9E8",
+"w+ c #5F6871",
+"x+ c #666D75",
+"y+ c #151616",
+"z+ c #995A00",
+"A+ c #FFF461",
+"B+ c #FFF1C1",
+"C+ c #FFF1B5",
+"D+ c #FFE600",
+"E+ c #E1B500",
+"F+ c #593800",
+"G+ c #30383F",
+"H+ c #CBC7C0",
+"I+ c #0B0D0E",
+"J+ c #B9B9B9",
+"K+ c #CCCCCB",
+"L+ c #DEDEDC",
+"M+ c #EEEEEE",
+"N+ c #DADAD8",
+"O+ c #E8E8E8",
+"P+ c #A6A6A5",
+"Q+ c #EBC200",
+"R+ c #FFEB84",
+"S+ c #FFE71C",
+"T+ c #AF6800",
+"U+ c #C99300",
+"V+ c #610000",
+"W+ c #E3E1DC",
+"X+ c #ADADAC",
+"Y+ c #E3E3E2",
+"Z+ c #D7D7D6",
+"`+ c #D3D3D2",
+" @ c #F9F9F8",
+".@ c #D0D0D0",
+"+@ c #DBDBDB",
+"@@ c #D4D4D3",
+"#@ c #C4C4C4",
+"$@ c #C8C8C8",
+"%@ c #DBC975",
+"&@ c #D8AA00",
+"*@ c #D9AB00",
+"=@ c #B57300",
+"-@ c #C08500",
+";@ c #E3B800",
+">@ c #2D0000",
+",@ c #E7E4E1",
+"'@ c #AFAFAE",
+")@ c #C2C2C1",
+"!@ c #D2D2D0",
+"~@ c #E5E5E4",
+"{@ c #E0E0DE",
+"]@ c #D2D2D1",
+"^@ c #D6D6D5",
+"/@ c #E8E8E7",
+"(@ c #A7A7A7",
+"_@ c #E9D677",
+":@ c #CC9A00",
+"<@ c #DFB300",
+"[@ c #E7BE00",
+"}@ c #EDD700",
+"|@ c #EEE3AD",
+"1@ c #666666",
+"2@ c #8D8D8D",
+"3@ c #E6E4E0",
+"4@ c #BAB5AB",
+"5@ c #76736D",
+"6@ c #CDCDCC",
+"7@ c #CECECC",
+"8@ c #D1D1D0",
+"9@ c #EBEBEA",
+"0@ c #B6B6B5",
+"a@ c #3F3F3F",
+"b@ c #818181",
+"c@ c #E4E3E3",
+"d@ c #B2B2B1",
+"e@ c #C5C5C3",
+"f@ c #D5D5D4",
+"g@ c #EAEAE8",
+"h@ c #D4D4D4",
+"i@ c #757575",
+"j@ c #676767",
+"k@ c #CACACA",
+"l@ c #DBD8D3",
+"m@ c #CDC9C2",
+"n@ c #454544",
+"o@ c #BABAB8",
+"p@ c #CBCBC9",
+"q@ c #D8D8D7",
+"r@ c #E1E1E0",
+"s@ c #E9E9E7",
+"t@ c #969696",
+"u@ c #646464",
+"v@ c #7D7C79",
+"w@ c #F7F6F6",
+"x@ c #79776F",
+"y@ c #252525",
+"z@ c #B3B3B2",
+"A@ c #C5C5C5",
+"B@ c #C7C7C7",
+"C@ c #2F2F2F",
+"D@ c #AFACA6",
+"E@ c #161615",
+"F@ c #A5A5A4",
+"G@ c #B7B7B6",
+"H@ c #E6E6E4",
+"I@ c #E8E8E6",
+"J@ c #B0B0AF",
+"K@ c #B4B4B3",
+"L@ c #BFBFBE",
+"M@ c #656564",
+"N@ c #898989",
+"O@ c #8E8E8E",
+"P@ c #191919",
+"Q@ c #E4E2DF",
+"R@ c #87847C",
+"S@ c #3A3A3A",
+"T@ c #B1B1B0",
+"U@ c #C3C3C2",
+"V@ c #E7E7E5",
+"W@ c #CECECD",
+"X@ c #D9D9D8",
+"Y@ c #B6B6B6",
+"Z@ c #F3F3F0",
+"`@ c #ABABAA",
+" # c #BFBFBF",
+".# c #DDDDDB",
+"+# c #BCBCBB",
+"@# c #C8C8C7",
+"## c #B3B3B3",
+"$# c #EFEDEB",
+"%# c #706E67",
+"&# c #242424",
+"*# c #A8A8A6",
+"=# c #E5E5E3",
+"-# c #B9B9B8",
+";# c #B3B3B1",
+"># c #6B6B6B",
+",# c #F5F4F3",
+"'# c #999998",
+")# c #CCCCCA",
+"!# c #D9D9D7",
+"~# c #DFDFDE",
+"{# c #151515",
+"]# c #9F9F9F",
+"^# c #7D7A73",
+"/# c #A3A3A2",
+"(# c #B8B8B6",
+"_# c #CACAC8",
+":# c #E3E3E1",
+"<# c #414141",
+"[# c #E1E0DF",
+"}# c #F0EFED",
+"|# c #9A9791",
+"1# c #1B1B1A",
+"2# c #A1A1A0",
+"3# c #C6C6C4",
+"4# c #D4D4D2",
+"5# c #E2E2E0",
+"6# c #E4E4E2",
+"7# c #EBEBE9",
+"8# c #565656",
+"9# c #959595",
+"0# c #FCF8E8",
+"a# c #F9F3DB",
+"b# c #1C0000",
+"c# c #F7EFC6",
+"d# c #A49F8F",
+"e# c #F2F1F0",
+"f# c #E5E3E0",
+"g# c #AFAFAD",
+"h# c #C1C1C0",
+"i# c #D1D1CF",
+"j# c #DBDBD9",
+"k# c #D9D2BB",
+"l# c #FFEA66",
+"m# c #D8B400",
+"n# c #B4B4B4",
+"o# c #BAB8B4",
+"p# c #6E6B62",
+"q# c #CCC9C2",
+"r# c #FAF3D8",
+"s# c #FFED92",
+"t# c #FBD700",
+"u# c #F7D300",
+"v# c #D7B300",
+"w# c #616161",
+"x# c #565248",
+"y# c #23211D",
+"z# c #ECECEA",
+"A# c #D4CDA8",
+"B# c #FFE400",
+"C# c #F2CF00",
+"D# c #EECB00",
+"E# c #D7B400",
+"F# c #7B7870",
+"G# c #D5D4D1",
+"H# c #D4D3D1",
+"I# c #7A776F",
+"J# c #827F78",
+"K# c #DBDAD8",
+"L# c #E1E1DF",
+"M# c #DFDFDD",
+"N# c #A7A5A0",
+"O# c #7C7C7C",
+"P# c #DED086",
+"Q# c #EAC700",
+"R# c #C9A700",
+"S# c #D9D9D6",
+"T# c #8D8A84",
+"U# c #5C584F",
+"V# c #8E8B85",
+"W# c #D8D7D5",
+"X# c #DDDCDA",
+"Y# c #908E87",
+"Z# c #605C53",
+"`# c #6B685F",
+" $ c #CBCAC7",
+".$ c #E7DDAA",
+"+$ c #FBE100",
+"@$ c #DCB900",
+"#$ c #947300",
+"$$ c #666259",
+"%$ c #67635A",
+"&$ c #69665D",
+"*$ c #141414",
+"=$ c #A99500",
+"-$ c #DCB800",
+";$ c #D3B000",
+">$ c #CFAC00",
+",$ c #AF8A00",
+"'$ c #836300",
+")$ c #333332",
+"!$ c #575349",
+"~$ c #57544A",
+"{$ c #8D8D8C",
+"]$ c #50504F",
+"^$ c #7C7C7B",
+"/$ c #787877",
+"($ c #7B7B79",
+"_$ c #6D6D6C",
+":$ c #5C5C5B",
+"<$ c #656158",
+"[$ c #59564C",
+"}$ c #C4C4C2",
+"|$ c #A9A9A8",
+"1$ c #A7A7A6",
+"2$ c #A7A7A5",
+"3$ c #AAAAA9",
+"4$ c #AEAEAC",
+"5$ c #D9D8D6",
+"6$ c #8D8A83",
+"7$ c #8E8C85",
+"8$ c #6D6A61",
+"9$ c #C7C7C6",
+"0$ c #C1C1BF",
+"a$ c #BCBCBA",
+"b$ c #BBBBBA",
+"c$ c #BDBDBC",
+"d$ c #7B7770",
+"e$ c #D5D4D2",
+"f$ c #EDECEB",
+"g$ c #7C7971",
+"h$ c #D7D6D3",
+"i$ c #F3F2F2",
+"j$ c #FDFCFC",
+"k$ c #BFBDBA",
+"l$ c #CBCBCA",
+"m$ c #CDCDCB",
+"n$ c #CFCFCD",
+"o$ c #D0D0CE",
+"p$ c #D8D8D6",
+"q$ c #A2A2A1",
+"r$ c #A1A19F",
+"s$ c #A0A09E",
+"t$ c #A3A3A1",
+"u$ c #9A9A9A",
+"v$ c #8C8C8C",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ",
+". # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % & * . ",
+". $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ = = = = = = = = = = = = - % ; > . ",
+". $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ = = = = = = = = = = = = = = , ' $ ) ! . ",
+". $ $ $ $ $ $ $ ~ $ $ $ $ $ $ $ $ $ $ = = = = = = = = = = = = = = = = , { $ $ ; ] ^ ",
+". $ $ $ $ $ $ $ / $ $ $ $ $ $ $ $ = = = = ( ( _ _ _ _ _ ( ( = = = ( ( % : < ( $ [ } | ",
+". $ $ $ $ $ $ $ 1 2 $ $ $ $ $ = 3 4 5 6 . . . + 7 8 9 8 0 a < _ ( ( ( b c < a _ $ d e . ",
+". $ $ $ $ $ $ $ 1 f 2 g $ = = , h i j k l m n n o p q r r s , t _ _ _ u v w 5 d : x y z . ",
+". $ $ $ $ $ $ $ 1 A B C C = = D i j E . . . . F G 9 H I J K L u _ _ M N / O P Q R R S f . ",
+". $ $ $ $ $ $ $ 1 = = T C = = U j V . W . . . . . . X Y Z J ` 0 u .a ..+.> @.#.$.%.&.*.. ",
+". $ $ $ $ $ $ = =.= = = T = = -.;.>.Z . . . . ,.'.).'.. !.. ~.{.].b ^.a - , , /.(.y _.%.. ",
+". $ $ $ $ = = = =.= = ( ( ( ( :.<.. . . . . . . . : [.. . }.|.9 /.D % % ^.1.2.3 3 3 3.f . ",
+". $ $ = 4./ 5./ f ( ( ( ( a % 6.7.. . . . . . . . . Z . . 8.9.0.a.b.c.u , 3 3 b d.+.+.1 . ",
+". $ = = z e.f.g.h.( i._ < .j.k.l.. . . . . . . . . . . m.n.o.p.q.r.; s.b b u N t.u.u.c . ",
+". $ ( ( z v g.g.v._ _ _ - w.x.y.z.. . A.B.$.. . C.f.. . D.E.F.G.H.I./.D +.N u.u.r.J.s.c . ",
+". $ ( i.{ f g.f K._ M - % L.M.N.y.. O.; ; ' P.r.h Q.x . R.S.T.U.V.W.X.Y.s.u.....Z.`. +.+. ",
+". $ _ _ _ _ M - - - - - ^.++ at +#+$+. %+2 &+*+=+A.. -++.. ;+>+,+,+'+)+!+; D s.~+c.b.{+]+^+. ",
+". $ M M - - - - /+/+< < 3 (+_+:+<+. t./ . [+}+-.. |+... 1+2+3+4+5+6+7+8+9+~+D D 0+Y.a+b+. ",
+". $ - - - /+/+< < < < t ^.c+d+e+f+. 8 [+g+h+i+}+}+j+k+. l+m+n+o+p+q+r+s+a+9+9+Y.a.t+u+c . ",
+". $ /+< < < < < 1.J.Q.a ) % v+w+x+y+z+A+B+C+D+}+}+}+E+F+. G+H+I+J+K+L+ +d.; M+t+N+d.d.c . ",
+". $ < < t t a a +.f.{ b.Z.O+) {+P+. . [+Q+R+S+}+[+T+U+V+. . W+G X+y B.Y+7+Z+`+Z+Z+w 8+c . ",
+". $ t a a a a @. at r., O++@@@c+#@$@. . %@&@*@T+=@-@;@>@. =+. ,@{.'@)@`+J.!@~@{@]@`+8+8+c . ",
+". $ a @ @ @ . .f.^@b./@1.u T : (@. v.M+_@:@<@[@}@|@1 at . 2 at u 3 at 4@5@).6@`.7 at 0+8@]@4.9 at 9@c . ",
+". $ . . . .1./@6@% /.[ `.7+@@0 at Y a at U ) ) O+# M+w h r+b at . . I c at 4@d at e@@@Z+!@q+f at Y+s+g@c . ",
+". $ ^.1.1.1.% h at A b b N s.r.B i at . j at 4.D { O+{ O+k at B.x #@. . b l at m@n at o@p at q@r@ +v+v+v+s at c . ",
+". $ % % % 2.2.6 at X.+.+...Y.b.t@. u at c+3 , .g %++.].{+4.' X . . v at w@x at y@)@!@0+Y+ +s at s@s at c . ",
+". $ 2.2.y z@! A at t+u.u.c.8+f . . f.{+, < ./., 3 ) M+T [ B at . C at w@D at E@F at G@f.q at r@H@ +/@I at c . ",
+". $ 3 u J@& K at L@t+..c.t+v+M at . N@) 3 .- - a t.3 ) M+%+/.{+O at . P at Q@R at S@T at U@4.t.!+V at I@I at c . ",
+". $ N N W at C.C.X@s.c.Z+C Y at . . A ) 3 , < a r+w 3 ) M+%+/.e..+I Z at R@. g.`@ #8 at .#7+X. +H at c . ",
+". $ ..s.s.s.s.c.c.D +#@###. . k at D +.3 , , B.3 +.D ; Q.]+e.. at . N@$#%#&#*#+#W@`.7+=#H@~@c . ",
+". $ s.s.s.c.9+9+9+Y.@@-#;#. . X M+) +.3 3 B.+.) M+%+O+4 T [.>#,#R at . '#e _.)#!#~#Y+~@~@c . ",
+". $ ) c.9+9+9+9+Y.d.g at Y+_.. . . : ' 4 ) ) [ D ].w h ]+e.K.O@{#]#Q@^#&#/#(#_#^@Z.:#=#=#c . ",
+". $ 9+9+].Y.Y.Y.u+s+~@8 at . . . . . . <#[.M+K.].%+h /.{+[#. . I }#|#1#y at 2#z at 3#4#.#5#6#6#c . ",
+". $ Y.Y.Y.Y.a+d.7#!+^+8#9#0#a#. . . . . k at e.{+O+]+{+~ b#c#d#. . e#f#4@{.g#h#i#j#{@5#6#c . ",
+". $ Y.Y.t+t+u+s+X.J.. . k#l#}+m#. . . . n#/.c+o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#o#p#",
+". $ t+t+3.8+9 at s@Y+. q#r#s#}+t#u#v#. w#x e.e.r.o#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#y#",
+". $ 3.8+z#9 at s+/@r at 7 A#B#}+t#u#C#D#E#. U K.K.r+o#x#F#G#9@( z#H#I#x#J#K#L#_ M#N#x#J#K#L#_ M#N#x#y#",
+". $ z#9 at 9@9 at g@X.~#O#. P#t#u#C#D#Q#R#. g. #g 2 o#x#S#$ T#U#V#$ W#x#X#$ Y#Z#`# $x#X#$ Y#Z#`# $x#y#",
+". $ 7#7#s+s+v+X.~#. .$+$u#C#D#Q#@$#$. . . . . o#x#, $ $$x#%$$ w at x#^.$ &$x#x#x#x#^.$ &$x#x#x#x#y#",
+". $ s+s+s+g at s@~@~#*$=$-$E#;$>$,$'$. )$. . . . o#x#$ $ !$x#~$$ = x#$ $ x#$ $ $ x#$ $ x#$ $ $ x#y#",
+". $ g at v+v+v+/@~@{@{$. . . . . . . ]$^$/$($_$:$o#x#, $ <$x#%$$ w at x#, $ [$x#$ $ x#, $ [$x#$ $ x#y#",
+". $ v+v+v+I@ +~@r@`.i#}$-#.+|$1$2$1$3$4$J at 1 d at o#x#5$$ 6$U#7$$ W#x#S#$ 8$x#$ $ x#S#$ 8$x#$ $ x#y#",
+". $ s@ + + + +H@:#L+Z+q+9$0$a$_._.b$c$0$U@}$e at o#x#d$e$f$= d.G#I#x#g$h$i$j$z#k$x#g$h$i$j$z#k$x#y#",
+". $ +V at V@V at X.X.!+r at .#!#`+q+K+l$l$m$n$o$!@`+`+o#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#x#y#",
+". $ V at X.X.X.H@H@=#6#J.b.`.N+!#p$p$!#N+j#`.j#j#p#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#",
+". $ X.H at H@H at H@~@!+6#:#5#L#{@{@M#M#{@{@{@{@{@L#{@P+q$q$2#2#2#r$s$s$r$r$2#q$t$t$t$t$t$t$2 at . ",
+". # H at H@H@=#6#6#6#6#6#6#6#6#6#6#Y+:#:#:#:#:#:#:#:#5#5#5#5#L#L#L#L#L#L#L#L#L#L#L#L#L#L#u$. ",
+". x c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c u$v$. ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" ",
+" ",
+" "};
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,472 @@
+/* This program is licensed under the GNU Library General Public License, version 2,
+ * a copy of which is included with this program (LICENCE.LGPL).
+ *
+ * (c) 2000-2001 Michael Smith <msmith at labyrinth.net.au>
+ *
+ *
+ * Comment editing backend, suitable for use by nice frontend interfaces.
+ *
+ */
+#include "config.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+#include <vorbis/codec.h>
+
+#include "vcedit.h"
+#include <libbeep/vfs.h>
+
+#define CHUNKSIZE 4096
+
+vcedit_state *
+vcedit_new_state(void)
+{
+ return g_new0(vcedit_state, 1);
+}
+
+char *
+vcedit_error(vcedit_state * state)
+{
+ return state->lasterror;
+}
+
+vorbis_comment *
+vcedit_comments(vcedit_state * state)
+{
+ return state->vc;
+}
+
+static void
+vcedit_clear_internals(vcedit_state * state)
+{
+ if (state->vc) {
+ vorbis_comment_clear(state->vc);
+ g_free(state->vc);
+ state->vc = NULL;
+ }
+ if (state->os) {
+ ogg_stream_clear(state->os);
+ g_free(state->os);
+ state->os = NULL;
+ }
+ if (state->oy) {
+ ogg_sync_clear(state->oy);
+ g_free(state->oy);
+ state->oy = NULL;
+ }
+ if (state->vendor) {
+ g_free(state->vendor);
+ state->vendor = NULL;
+ }
+}
+
+void
+vcedit_clear(vcedit_state * state)
+{
+ if (state) {
+ vcedit_clear_internals(state);
+ g_free(state);
+ }
+}
+
+/* Next two functions pulled straight from libvorbis, apart from one change
+ * - we don't want to overwrite the vendor string.
+ */
+static void
+_v_writestring(oggpack_buffer * o, char *s, int len)
+{
+ while (len--) {
+ oggpack_write(o, *s++, 8);
+ }
+}
+
+static int
+_commentheader_out(vorbis_comment * vc, char *vendor, ogg_packet * op)
+{
+ oggpack_buffer opb;
+
+ oggpack_writeinit(&opb);
+
+ /* preamble */
+ oggpack_write(&opb, 0x03, 8);
+ _v_writestring(&opb, "vorbis", 6);
+
+ /* vendor */
+ oggpack_write(&opb, strlen(vendor), 32);
+ _v_writestring(&opb, vendor, strlen(vendor));
+
+ /* comments */
+ oggpack_write(&opb, vc->comments, 32);
+ if (vc->comments) {
+ int i;
+ for (i = 0; i < vc->comments; i++) {
+ if (vc->user_comments[i]) {
+ oggpack_write(&opb, vc->comment_lengths[i], 32);
+ _v_writestring(&opb, vc->user_comments[i],
+ vc->comment_lengths[i]);
+ }
+ else {
+ oggpack_write(&opb, 0, 32);
+ }
+ }
+ }
+ oggpack_write(&opb, 1, 1);
+
+ op->packet = _ogg_malloc(oggpack_bytes(&opb));
+ memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
+
+ op->bytes = oggpack_bytes(&opb);
+ op->b_o_s = 0;
+ op->e_o_s = 0;
+ op->granulepos = 0;
+
+ return 0;
+}
+
+static int
+_blocksize(vcedit_state * s, ogg_packet * p)
+{
+ int this = vorbis_packet_blocksize(&s->vi, p);
+ int ret = (this + s->prevW) / 4;
+
+ if (!s->prevW) {
+ s->prevW = this;
+ return 0;
+ }
+
+ s->prevW = this;
+ return ret;
+}
+
+static int
+_fetch_next_packet(vcedit_state * s, ogg_packet * p, ogg_page * page)
+{
+ int result;
+ char *buffer;
+ int bytes;
+
+ result = ogg_stream_packetout(s->os, p);
+
+ if (result > 0)
+ return 1;
+ else {
+ if (s->eosin)
+ return 0;
+ while (ogg_sync_pageout(s->oy, page) <= 0) {
+ buffer = ogg_sync_buffer(s->oy, CHUNKSIZE);
+ bytes = s->read(buffer, 1, CHUNKSIZE, s->in);
+ ogg_sync_wrote(s->oy, bytes);
+ if (bytes == 0)
+ return 0;
+ }
+ if (ogg_page_eos(page))
+ s->eosin = 1;
+ else if (ogg_page_serialno(page) != s->serial) {
+ s->eosin = 1;
+ s->extrapage = 1;
+ return 0;
+ }
+
+ ogg_stream_pagein(s->os, page);
+ return _fetch_next_packet(s, p, page);
+ }
+}
+
+
+int
+vcedit_open(vcedit_state * state, VFSFile * in)
+{
+ return vcedit_open_callbacks(state, (void *) in,
+ (vcedit_read_func) vfs_fread,
+ (vcedit_write_func) vfs_fwrite);
+}
+
+int
+vcedit_open_callbacks(vcedit_state * state, void *in,
+ vcedit_read_func read_func,
+ vcedit_write_func write_func)
+{
+ char *buffer;
+ int bytes, i;
+ ogg_packet *header;
+ ogg_packet header_main;
+ ogg_packet header_comments;
+ ogg_packet header_codebooks;
+ ogg_page og;
+
+ state->in = in;
+ state->read = read_func;
+ state->write = write_func;
+
+ state->oy = g_new(ogg_sync_state, 1);
+ ogg_sync_init(state->oy);
+
+ buffer = ogg_sync_buffer(state->oy, CHUNKSIZE);
+
+ bytes = state->read(buffer, 1, CHUNKSIZE, state->in);
+
+ ogg_sync_wrote(state->oy, bytes);
+
+ if (ogg_sync_pageout(state->oy, &og) != 1) {
+ if (bytes < CHUNKSIZE)
+ state->lasterror = "Input truncated or empty.";
+ else
+ state->lasterror = "Input is not an Ogg bitstream.";
+ goto err;
+ }
+
+ state->serial = ogg_page_serialno(&og);
+
+ state->os = g_new(ogg_stream_state, 1);
+ ogg_stream_init(state->os, state->serial);
+
+ vorbis_info_init(&state->vi);
+
+ state->vc = g_new(vorbis_comment, 1);
+ vorbis_comment_init(state->vc);
+
+ if (ogg_stream_pagein(state->os, &og) < 0) {
+ state->lasterror = "Error reading first page of Ogg bitstream.";
+ goto err;
+ }
+
+ if (ogg_stream_packetout(state->os, &header_main) != 1) {
+ state->lasterror = "Error reading initial header packet.";
+ goto err;
+ }
+
+ if (vorbis_synthesis_headerin(&state->vi, state->vc, &header_main) < 0) {
+ state->lasterror = "Ogg bitstream does not contain vorbis data.";
+ goto err;
+ }
+
+ state->mainlen = header_main.bytes;
+ state->mainbuf = g_malloc(state->mainlen);
+ memcpy(state->mainbuf, header_main.packet, header_main.bytes);
+
+ i = 0;
+ header = &header_comments;
+ while (i < 2) {
+ while (i < 2) {
+ int result = ogg_sync_pageout(state->oy, &og);
+ if (result == 0)
+ break; /* Too little data so far */
+ else if (result == 1) {
+ ogg_stream_pagein(state->os, &og);
+ while (i < 2) {
+ result = ogg_stream_packetout(state->os, header);
+ if (result == 0)
+ break;
+ if (result == -1) {
+ state->lasterror = "Corrupt secondary header.";
+ goto err;
+ }
+ vorbis_synthesis_headerin(&state->vi, state->vc, header);
+ if (i == 1) {
+ state->booklen = header->bytes;
+ state->bookbuf = g_malloc(state->booklen);
+ memcpy(state->bookbuf, header->packet, header->bytes);
+ }
+ i++;
+ header = &header_codebooks;
+ }
+ }
+ }
+
+ buffer = ogg_sync_buffer(state->oy, CHUNKSIZE);
+ bytes = state->read(buffer, 1, CHUNKSIZE, state->in);
+ if (bytes == 0 && i < 2) {
+ state->lasterror = "EOF before end of vorbis headers.";
+ goto err;
+ }
+ ogg_sync_wrote(state->oy, bytes);
+ }
+
+ /* Copy the vendor tag */
+ state->vendor = g_malloc(strlen(state->vc->vendor) + 1);
+ strcpy(state->vendor, state->vc->vendor);
+
+ /* Headers are done! */
+ return 0;
+
+ err:
+ vcedit_clear_internals(state);
+ return -1;
+}
+
+#if 0
+static void
+dump_state(vcedit_state * state)
+{
+}
+#endif
+
+int
+vcedit_write(vcedit_state * state, void *out)
+{
+
+ ogg_stream_state streamout;
+ ogg_packet header_main;
+ ogg_packet header_comments;
+ ogg_packet header_codebooks;
+
+ ogg_page ogout, ogin;
+ ogg_packet op;
+ ogg_int64_t granpos = 0;
+ int result;
+ char *buffer;
+ int bytes;
+ int needflush = 0, needout = 0;
+
+ state->eosin = 0;
+ state->extrapage = 0;
+
+ header_main.bytes = state->mainlen;
+ header_main.packet = state->mainbuf;
+ header_main.b_o_s = 1;
+ header_main.e_o_s = 0;
+ header_main.granulepos = 0;
+
+ header_codebooks.bytes = state->booklen;
+ header_codebooks.packet = state->bookbuf;
+ header_codebooks.b_o_s = 0;
+ header_codebooks.e_o_s = 0;
+ header_codebooks.granulepos = 0;
+
+ ogg_stream_init(&streamout, state->serial);
+
+ _commentheader_out(state->vc, state->vendor, &header_comments);
+
+ ogg_stream_packetin(&streamout, &header_main);
+ ogg_stream_packetin(&streamout, &header_comments);
+ ogg_stream_packetin(&streamout, &header_codebooks);
+
+ while ((result = ogg_stream_flush(&streamout, &ogout))) {
+ if (state->write(ogout.header, 1, ogout.header_len, out) !=
+ (size_t) ogout.header_len)
+ goto cleanup;
+ if (state->write(ogout.body, 1, ogout.body_len, out) !=
+ (size_t) ogout.body_len)
+ goto cleanup;
+ }
+
+ while (_fetch_next_packet(state, &op, &ogin)) {
+ int size;
+ size = _blocksize(state, &op);
+ granpos += size;
+
+ if (needflush) {
+ if (ogg_stream_flush(&streamout, &ogout)) {
+ if (state->write(ogout.header, 1, ogout.header_len,
+ out) != (size_t) ogout.header_len)
+ goto cleanup;
+ if (state->write(ogout.body, 1, ogout.body_len,
+ out) != (size_t) ogout.body_len)
+ goto cleanup;
+ }
+ }
+ else if (needout) {
+ if (ogg_stream_pageout(&streamout, &ogout)) {
+ if (state->write(ogout.header, 1, ogout.header_len,
+ out) != (size_t) ogout.header_len)
+ goto cleanup;
+ if (state->write(ogout.body, 1, ogout.body_len,
+ out) != (size_t) ogout.body_len)
+ goto cleanup;
+ }
+ }
+
+ needflush = needout = 0;
+
+ if (op.granulepos == -1) {
+ op.granulepos = granpos;
+ ogg_stream_packetin(&streamout, &op);
+ }
+ else { /* granulepos is set, validly. Use it, and force a flush to
+ account for shortened blocks (vcut) when appropriate */
+ if (granpos > op.granulepos) {
+ granpos = op.granulepos;
+ ogg_stream_packetin(&streamout, &op);
+ needflush = 1;
+ }
+ else {
+ ogg_stream_packetin(&streamout, &op);
+ needout = 1;
+ }
+ }
+ }
+
+ streamout.e_o_s = 1;
+ while (ogg_stream_flush(&streamout, &ogout)) {
+ if (state->write(ogout.header, 1, ogout.header_len,
+ out) != (size_t) ogout.header_len)
+ goto cleanup;
+ if (state->write(ogout.body, 1, ogout.body_len,
+ out) != (size_t) ogout.body_len)
+ goto cleanup;
+ }
+
+ /* FIXME: freeing this here probably leaks memory */
+ /* Done with this, now */
+ vorbis_info_clear(&state->vi);
+
+ if (state->extrapage) {
+ if (state->write(ogin.header, 1, ogin.header_len,
+ out) != (size_t) ogin.header_len)
+ goto cleanup;
+ if (state->write(ogin.body, 1, ogin.body_len, out) !=
+ (size_t) ogin.body_len)
+ goto cleanup;
+ }
+
+ state->eosin = 0; /* clear it, because not all paths to here do */
+ while (!state->eosin) { /* We reached eos, not eof */
+ /* We copy the rest of the stream (other logical streams)
+ * through, a page at a time. */
+ while (1) {
+ result = ogg_sync_pageout(state->oy, &ogout);
+ if (result == 0)
+ break;
+ if (result < 0)
+ state->lasterror = "Corrupt or missing data, continuing...";
+ else {
+ /* Don't bother going through the rest, we can just
+ * write the page out now */
+ if (state->write(ogout.header, 1, ogout.header_len,
+ out) != (size_t) ogout.header_len)
+ goto cleanup;
+ if (state->write(ogout.body, 1, ogout.body_len, out) !=
+ (size_t) ogout.body_len)
+ goto cleanup;
+ }
+ }
+ buffer = ogg_sync_buffer(state->oy, CHUNKSIZE);
+ bytes = state->read(buffer, 1, CHUNKSIZE, state->in);
+ ogg_sync_wrote(state->oy, bytes);
+ if (bytes == 0) {
+ state->eosin = 1;
+ break;
+ }
+ }
+
+
+ cleanup:
+ ogg_stream_clear(&streamout);
+ ogg_packet_clear(&header_comments);
+
+ g_free(state->mainbuf);
+ g_free(state->bookbuf);
+
+ vcedit_clear_internals(state);
+ if (!state->eosin) {
+ state->lasterror =
+ "Error writing stream to output. "
+ "Output stream may be corrupted or truncated.";
+ return -1;
+ }
+
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vcedit.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,63 @@
+/* This program is licensed under the GNU Library General Public License, version 2,
+ * a copy of which is included with this program (with filename LICENSE.LGPL).
+ *
+ * (c) 2000-2001 Michael Smith <msmith at labyrinth.net.au>
+ *
+ * VCEdit header.
+ *
+ */
+
+#ifndef __VCEDIT_H
+#define __VCEDIT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <ogg/ogg.h>
+#include <vorbis/codec.h>
+#include <libbeep/vfs.h>
+
+typedef size_t (*vcedit_read_func)(void *, size_t, size_t, void *);
+typedef size_t (*vcedit_write_func)(const void *, size_t, size_t, void *);
+
+typedef struct {
+ ogg_sync_state *oy;
+ ogg_stream_state *os;
+
+ vorbis_comment *vc;
+ vorbis_info vi;
+
+ vcedit_read_func read;
+ vcedit_write_func write;
+
+ void *in;
+ long serial;
+ unsigned char *mainbuf;
+ unsigned char *bookbuf;
+ int mainlen;
+ int booklen;
+ char *lasterror;
+ char *vendor;
+ int prevW;
+ int extrapage;
+ int eosin;
+} vcedit_state;
+
+extern vcedit_state *vcedit_new_state(void);
+extern void vcedit_clear(vcedit_state *state);
+extern vorbis_comment *vcedit_comments(vcedit_state *state);
+extern int vcedit_open(vcedit_state *state, VFSFile *in);
+extern int vcedit_open_callbacks(vcedit_state *state, void *in,
+ vcedit_read_func read_func,
+ vcedit_write_func write_func);
+extern int vcedit_write(vcedit_state *state, void *out);
+extern char *vcedit_error(vcedit_state *state);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __VCEDIT_H */
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,922 @@
+/*
+ * Copyright (C) Tony Arcieri <bascule at inferno.tusculum.edu>
+ * Copyright (C) 2001-2002 Haavard Kvaalen <havardk at xmms.org>
+ *
+ * ReplayGain processing Copyright (C) 2002 Gian-Carlo Pascutto <gcp at sjeng.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
+ * 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+
+/*
+ * 2002-01-11 ReplayGain processing added by Gian-Carlo Pascutto <gcp at sjeng.org>
+ */
+
+/*
+ * Note that this uses vorbisfile, which is not (currently)
+ * thread-safe.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include <fcntl.h>
+
+#include <ogg/ogg.h>
+#include <vorbis/codec.h>
+#include <vorbis/vorbisfile.h>
+
+#include "beep/plugin.h"
+#include "beep/output.h"
+#include "libbeep/util.h"
+#include "libbeep/configdb.h"
+#include "libbeep/titlestring.h"
+#include "beep/mainwin.h"
+
+#include "vorbis.h"
+#include "http.h"
+
+extern vorbis_config_t vorbis_cfg;
+
+static int vorbis_check_file(char *filename);
+static void vorbis_play(char *filename);
+static void vorbis_stop(void);
+static void vorbis_pause(short p);
+static void vorbis_seek(int time);
+static int vorbis_time(void);
+static void vorbis_get_song_info(char *filename, char **title, int *length);
+static gchar *vorbis_generate_title(OggVorbis_File * vorbisfile,
+ const gchar * fn);
+static void vorbis_aboutbox(void);
+static void vorbis_init(void);
+static void vorbis_cleanup(void);
+static long vorbis_process_replaygain(float **pcm, int samples, int ch,
+ char *pcmout, float rg_scale);
+static gboolean vorbis_update_replaygain(float *scale);
+
+static size_t ovcb_read(void *ptr, size_t size, size_t nmemb,
+ void *datasource);
+static int ovcb_seek(void *datasource, int64_t offset, int whence);
+static int ovcb_close(void *datasource);
+static long ovcb_tell(void *datasource);
+
+ov_callbacks vorbis_callbacks = {
+ ovcb_read,
+ ovcb_seek,
+ ovcb_close,
+ ovcb_tell
+};
+
+InputPlugin vorbis_ip = {
+ NULL,
+ NULL,
+ NULL, /* description */
+ vorbis_init, /* init */
+ vorbis_aboutbox, /* aboutbox */
+ vorbis_configure, /* configure */
+ vorbis_check_file, /* is_our_file */
+ NULL,
+ vorbis_play,
+ vorbis_stop,
+ vorbis_pause,
+ vorbis_seek,
+ NULL, /* set eq */
+ vorbis_time,
+ NULL,
+ NULL,
+ vorbis_cleanup,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ vorbis_get_song_info,
+ vorbis_file_info_box, /* file info box, tag editing */
+ NULL,
+};
+
+static OggVorbis_File vf;
+
+static GThread *thread;
+int vorbis_playing = 0;
+static int vorbis_eos = 0;
+static int vorbis_is_streaming = 0;
+static int vorbis_bytes_streamed = 0;
+static volatile int seekneeded = -1;
+static int samplerate, channels;
+GMutex *vf_mutex;
+static gboolean output_error;
+
+InputPlugin *
+get_iplugin_info(void)
+{
+ vorbis_ip.description = g_strdup_printf(_("Ogg Vorbis Audio Plugin"));
+ return &vorbis_ip;
+}
+
+static int
+vorbis_check_file(char *filename)
+{
+ VFSFile *stream;
+ OggVorbis_File vfile; /* avoid thread interaction */
+ char *ext;
+ gint result;
+
+ /* is this our http resource? */
+ if (strncasecmp(filename, "http://", 7) == 0) {
+ ext = strrchr(filename, '.');
+ if (ext) {
+ if (!strncasecmp(ext, ".ogg", 4)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ if (!(stream = vfs_fopen(filename, "r"))) {
+ return FALSE;
+ }
+ /*
+ * The open function performs full stream detection and machine
+ * initialization. If it returns zero, the stream *is* Vorbis and
+ * we're fully ready to decode.
+ */
+
+ /* libvorbisfile isn't thread safe... */
+ memset(&vfile, 0, sizeof(vfile));
+ g_mutex_lock(vf_mutex);
+
+ result = ov_test_callbacks(stream, &vfile, NULL, 0, vorbis_callbacks);
+
+ switch (result) {
+ case OV_EREAD:
+#ifdef DEBUG
+ g_message("** vorbis.c: Media read error: %s", filename);
+#endif
+ g_mutex_unlock(vf_mutex);
+ vfs_fclose(stream);
+ return FALSE;
+ break;
+ case OV_ENOTVORBIS:
+#ifdef DEBUG
+ g_message("** vorbis.c: Not Vorbis data: %s", filename);
+#endif
+ g_mutex_unlock(vf_mutex);
+ vfs_fclose(stream);
+ return FALSE;
+ break;
+ case OV_EVERSION:
+#ifdef DEBUG
+ g_message("** vorbis.c: Version mismatch: %s", filename);
+#endif
+ g_mutex_unlock(vf_mutex);
+ vfs_fclose(stream);
+ return FALSE;
+ break;
+ case OV_EBADHEADER:
+#ifdef DEBUG
+ g_message("** vorbis.c: Invalid Vorbis bistream header: %s",
+ filename);
+#endif
+ g_mutex_unlock(vf_mutex);
+ vfs_fclose(stream);
+ return FALSE;
+ break;
+ case OV_EFAULT:
+#ifdef DEBUG
+ g_message("** vorbis.c: Internal logic fault while reading %s",
+ filename);
+#endif
+ g_mutex_unlock(vf_mutex);
+ vfs_fclose(stream);
+ return FALSE;
+ break;
+ case 0:
+ break;
+ default:
+ break;
+ }
+
+
+ ov_clear(&vfile); /* once the ov_open succeeds, the stream belongs to
+ vorbisfile.a. ov_clear will fclose it */
+ g_mutex_unlock(vf_mutex);
+ return TRUE;
+}
+
+static void
+vorbis_jump_to_time(long time)
+{
+ g_mutex_lock(vf_mutex);
+
+ /*
+ * We need to guard against seeking to the end, or things
+ * don't work right. Instead, just seek to one second prior
+ * to this
+ */
+ if (time == ov_time_total(&vf, -1))
+ time--;
+
+ vorbis_ip.output->flush(time * 1000);
+ ov_time_seek(&vf, time);
+
+ g_mutex_unlock(vf_mutex);
+}
+
+static void
+do_seek(void)
+{
+ if (seekneeded != -1 && !vorbis_is_streaming) {
+ vorbis_jump_to_time(seekneeded);
+ seekneeded = -1;
+ vorbis_eos = FALSE;
+ }
+}
+
+static int
+vorbis_process_data(int last_section, gboolean use_rg, float rg_scale)
+{
+ char pcmout[4096];
+ int bytes;
+ float **pcm;
+
+ /*
+ * A vorbis physical bitstream may consist of many logical
+ * sections (information for each of which may be fetched from
+ * the vf structure). This value is filled in by ov_read to
+ * alert us what section we're currently decoding in case we
+ * need to change playback settings at a section boundary
+ */
+ int current_section;
+
+ g_mutex_lock(vf_mutex);
+ if (use_rg) {
+ bytes =
+ ov_read_float(&vf, &pcm, sizeof(pcmout) / 2 / channels,
+ ¤t_section);
+ if (bytes > 0)
+ bytes = vorbis_process_replaygain(pcm, bytes, channels,
+ pcmout, rg_scale);
+ }
+ else {
+ bytes =
+ ov_read(&vf, pcmout, sizeof(pcmout),
+ (int) (G_BYTE_ORDER == G_BIG_ENDIAN),
+ 2, 1, ¤t_section);
+ }
+
+ switch (bytes) {
+ case 0:
+ /* EOF */
+ g_mutex_unlock(vf_mutex);
+ vorbis_ip.output->buffer_free();
+ vorbis_ip.output->buffer_free();
+ vorbis_eos = TRUE;
+ return last_section;
+
+ case OV_HOLE:
+ case OV_EBADLINK:
+ /*
+ * error in the stream. Not a problem, just
+ * reporting it in case we (the app) cares.
+ * In this case, we don't.
+ */
+ g_mutex_unlock(vf_mutex);
+ return last_section;
+ }
+
+ if (current_section != last_section) {
+ /*
+ * The info struct is different in each section. vf
+ * holds them all for the given bitstream. This
+ * requests the current one
+ */
+ vorbis_info *vi = ov_info(&vf, -1);
+
+ if (vi->channels > 2) {
+ vorbis_eos = TRUE;
+ g_mutex_unlock(vf_mutex);
+ return current_section;
+ }
+
+
+ if (vi->rate != samplerate || vi->channels != channels) {
+ samplerate = vi->rate;
+ channels = vi->channels;
+ vorbis_ip.output->buffer_free();
+ vorbis_ip.output->buffer_free();
+ vorbis_ip.output->close_audio();
+ if (!vorbis_ip.output->
+ open_audio(FMT_S16_NE, vi->rate, vi->channels)) {
+ output_error = TRUE;
+ vorbis_eos = TRUE;
+ g_mutex_unlock(vf_mutex);
+ return current_section;
+ }
+ vorbis_ip.output->flush(ov_time_tell(&vf) * 1000);
+ }
+ }
+
+ g_mutex_unlock(vf_mutex);
+
+ if (!vorbis_playing)
+ return current_section;
+
+ if (seekneeded != -1)
+ do_seek();
+
+ produce_audio(vorbis_ip.output->written_time(),
+ FMT_S16_NE, channels, bytes, pcmout, &vorbis_playing);
+
+ return current_section;
+}
+
+static gpointer
+vorbis_play_loop(gpointer arg)
+{
+ char *filename = (char *) arg;
+ gchar *title = NULL;
+ double time;
+ long timercount = 0;
+ vorbis_info *vi;
+
+ int last_section = -1;
+
+ VFSFile *stream = NULL;
+ void *datasource = NULL;
+
+ gboolean use_rg;
+ float rg_scale = 1.0;
+
+ memset(&vf, 0, sizeof(vf));
+
+ if (strncasecmp("http://", filename, 7) != 0) {
+ /* file is a real file */
+ if ((stream = vfs_fopen(filename, "r")) == NULL) {
+ vorbis_eos = TRUE;
+ goto play_cleanup;
+ }
+ datasource = (void *) stream;
+ }
+ else {
+ /* file is a stream */
+ vorbis_is_streaming = 1;
+ vorbis_http_open(filename);
+ datasource = "NULL";
+ }
+
+ /*
+ * The open function performs full stream detection and
+ * machine initialization. None of the rest of ov_xx() works
+ * without it
+ */
+
+ g_mutex_lock(vf_mutex);
+ if (ov_open_callbacks(datasource, &vf, NULL, 0, vorbis_callbacks) < 0) {
+ vorbis_callbacks.close_func(datasource);
+ g_mutex_unlock(vf_mutex);
+ vorbis_eos = TRUE;
+ goto play_cleanup;
+ }
+ vi = ov_info(&vf, -1);
+
+ if (vorbis_is_streaming)
+ time = -1;
+ else
+ time = ov_time_total(&vf, -1) * 1000;
+
+ if (vi->channels > 2) {
+ vorbis_eos = TRUE;
+ g_mutex_unlock(vf_mutex);
+ goto play_cleanup;
+ }
+
+ samplerate = vi->rate;
+ channels = vi->channels;
+
+ title = vorbis_generate_title(&vf, filename);
+ use_rg = vorbis_update_replaygain(&rg_scale);
+
+ vorbis_ip.set_info(title, time, ov_bitrate(&vf, -1), samplerate,
+ channels);
+ if (!vorbis_ip.output->open_audio(FMT_S16_NE, vi->rate, vi->channels)) {
+ output_error = TRUE;
+ g_mutex_unlock(vf_mutex);
+ goto play_cleanup;
+ }
+ g_mutex_unlock(vf_mutex);
+
+ seekneeded = -1;
+
+ /*
+ * Note that chaining changes things here; A vorbis file may
+ * be a mix of different channels, bitrates and sample rates.
+ * You can fetch the information for any section of the file
+ * using the ov_ interface.
+ */
+
+ while (vorbis_playing) {
+ int current_section;
+
+ if (seekneeded != -1)
+ do_seek();
+
+ if (vorbis_eos) {
+ xmms_usleep(20000);
+ continue;
+ }
+
+ current_section = vorbis_process_data(last_section, use_rg, rg_scale);
+
+ if (current_section != last_section) {
+ /*
+ * set total play time, bitrate, rate, and channels of
+ * current section
+ */
+ if (title)
+ g_free(title);
+ g_mutex_lock(vf_mutex);
+ title = vorbis_generate_title(&vf, filename);
+ use_rg = vorbis_update_replaygain(&rg_scale);
+
+ if (vorbis_is_streaming)
+ time = -1;
+ else
+ time = ov_time_total(&vf, -1) * 1000;
+
+ vorbis_ip.set_info(title, time,
+ ov_bitrate(&vf, current_section),
+ samplerate, channels);
+ g_mutex_unlock(vf_mutex);
+ timercount = vorbis_ip.output->output_time();
+
+ last_section = current_section;
+ }
+
+ if (!(vi->bitrate_upper == vi->bitrate_lower == vi->bitrate_nominal)
+ && (vorbis_ip.output->output_time() > timercount + 1000
+ || vorbis_ip.output->output_time() < timercount)) {
+ /*
+ * simple hack to avoid updating too
+ * often
+ */
+ long br;
+
+ g_mutex_lock(vf_mutex);
+ br = ov_bitrate_instant(&vf);
+ g_mutex_unlock(vf_mutex);
+ if (br > 0)
+ vorbis_ip.set_info(title, time, br, samplerate, channels);
+ timercount = vorbis_ip.output->output_time();
+ }
+ }
+ if (!output_error)
+ vorbis_ip.output->close_audio();
+ /* fall through intentional */
+
+ play_cleanup:
+ g_free(title);
+ g_free(filename);
+
+ /*
+ * ov_clear closes the stream if its open. Safe to call on an
+ * uninitialized structure as long as we've zeroed it
+ */
+ g_mutex_lock(vf_mutex);
+ ov_clear(&vf);
+ g_mutex_unlock(vf_mutex);
+ vorbis_is_streaming = 0;
+ return NULL;
+}
+
+static void
+vorbis_play(char *filename)
+{
+ vorbis_playing = 1;
+ vorbis_bytes_streamed = 0;
+ vorbis_eos = 0;
+ output_error = FALSE;
+
+ thread = g_thread_create(vorbis_play_loop, g_strdup(filename), TRUE,
+ NULL);
+}
+
+static void
+vorbis_stop(void)
+{
+ if (vorbis_playing) {
+ vorbis_playing = 0;
+ g_thread_join(thread);
+ }
+}
+
+static void
+vorbis_pause(short p)
+{
+ vorbis_ip.output->pause(p);
+}
+
+static int
+vorbis_time(void)
+{
+ if (output_error)
+ return -2;
+ if (vorbis_eos && !vorbis_ip.output->buffer_playing())
+ return -1;
+ return vorbis_ip.output->output_time();
+}
+
+static void
+vorbis_seek(int time)
+{
+ if (vorbis_is_streaming)
+ return;
+
+ seekneeded = time;
+
+ while (seekneeded != -1)
+ xmms_usleep(20000);
+}
+
+static void
+vorbis_get_song_info(char *filename, char **title, int *length)
+{
+ VFSFile *stream;
+ OggVorbis_File vf; /* avoid thread interaction */
+
+ if (strncasecmp(filename, "http://", 7)) {
+ if ((stream = vfs_fopen(filename, "r")) == NULL)
+ return;
+
+ /*
+ * The open function performs full stream detection and
+ * machine initialization. If it returns zero, the stream
+ * *is* Vorbis and we're fully ready to decode.
+ */
+ g_mutex_lock(vf_mutex);
+ if (ov_open_callbacks(stream, &vf, NULL, 0, vorbis_callbacks) < 0) {
+ g_mutex_unlock(vf_mutex);
+ vfs_fclose(stream);
+ return;
+ }
+
+ /* Retrieve the length */
+ *length = ov_time_total(&vf, -1) * 1000;
+
+ *title = NULL;
+ *title = vorbis_generate_title(&vf, filename);
+
+ /*
+ * once the ov_open succeeds, the stream belongs to
+ * vorbisfile.a. ov_clear will fclose it
+ */
+ ov_clear(&vf);
+ g_mutex_unlock(vf_mutex);
+ }
+ else {
+ /* streaming song info */
+ *length = -1;
+ *title = (char *) vorbis_http_get_title(filename);
+ }
+}
+
+static const gchar *
+get_extension(const gchar * filename)
+{
+ const gchar *ext;
+ if ((ext = strrchr(filename, '.')))
+ ++ext;
+ return ext;
+}
+
+/* Make sure you've locked vf_mutex */
+static gboolean
+vorbis_update_replaygain(float *scale)
+{
+ vorbis_comment *comment;
+ char *rg_gain = NULL, *rg_peak_str = NULL;
+ float rg_peak;
+
+ if (!vorbis_cfg.use_replaygain && !vorbis_cfg.use_anticlip)
+ return FALSE;
+ if ((comment = ov_comment(&vf, -1)) == NULL)
+ return FALSE;
+
+ *scale = 1.0;
+
+ if (vorbis_cfg.use_replaygain) {
+ if (vorbis_cfg.replaygain_mode == REPLAYGAIN_MODE_ALBUM) {
+ rg_gain =
+ vorbis_comment_query(comment, "replaygain_album_gain", 0);
+ if (!rg_gain)
+ rg_gain = vorbis_comment_query(comment, "rg_audiophile", 0); /* Old */
+ }
+
+ if (!rg_gain)
+ rg_gain =
+ vorbis_comment_query(comment, "replaygain_track_gain", 0);
+ if (!rg_gain)
+ rg_gain = vorbis_comment_query(comment, "rg_radio", 0); /* Old */
+
+ /* FIXME: Make sure this string is the correct format first? */
+ if (rg_gain)
+ *scale = pow(10., atof(rg_gain) / 20);
+ }
+
+ if (vorbis_cfg.use_anticlip) {
+ if (vorbis_cfg.replaygain_mode == REPLAYGAIN_MODE_ALBUM)
+ rg_peak_str =
+ vorbis_comment_query(comment, "replaygain_album_peak", 0);
+
+ if (!rg_peak_str)
+ rg_peak_str =
+ vorbis_comment_query(comment, "replaygain_track_peak", 0);
+ if (!rg_peak_str)
+ rg_peak_str = vorbis_comment_query(comment, "rg_peak", 0); /* Old */
+
+ if (rg_peak_str)
+ rg_peak = atof(rg_peak_str);
+ else
+ rg_peak = 1;
+
+ if (*scale * rg_peak > 1.0)
+ *scale = 1.0 / rg_peak;
+ }
+
+ if (*scale != 1.0 || vorbis_cfg.use_booster) {
+ /* safety */
+ if (*scale > 15.0)
+ *scale = 15.0;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+# define GET_BYTE1(val) ((val) >> 8)
+# define GET_BYTE2(val) ((val) & 0xff)
+#else
+# define GET_BYTE1(val) ((val) & 0xff)
+# define GET_BYTE2(val) ((val) >> 8)
+#endif
+
+static long
+vorbis_process_replaygain(float **pcm, int samples, int ch,
+ char *pcmout, float rg_scale)
+{
+ int i, j;
+ /* ReplayGain processing */
+ for (i = 0; i < samples; i++)
+ for (j = 0; j < ch; j++) {
+ float sample = pcm[j][i] * rg_scale;
+ int value;
+
+ if (vorbis_cfg.use_booster) {
+ sample *= 2;
+
+ /* hard 6dB limiting */
+ if (sample < -0.5)
+ sample = tanh((sample + 0.5) / 0.5) * 0.5 - 0.5;
+ else if (sample > 0.5)
+ sample = tanh((sample - 0.5) / 0.5) * 0.5 + 0.5;
+ }
+
+ value = sample * 32767;
+ if (value > 32767)
+ value = 32767;
+ else if (value < -32767)
+ value = -32767;
+
+ *pcmout++ = GET_BYTE1(value);
+ *pcmout++ = GET_BYTE2(value);
+ }
+
+ return 2 * ch * samples;
+}
+
+
+static gchar *
+vorbis_generate_title(OggVorbis_File * vorbisfile, const gchar * filename)
+{
+ /* Caller should hold vf_mutex */
+ gchar *displaytitle = NULL;
+ vorbis_comment *comment;
+ TitleInput *input;
+
+ input = bmp_title_input_new();
+
+ input->file_name = g_path_get_basename(filename);
+ input->file_ext = get_extension(filename);
+ input->file_path = g_path_get_dirname(filename);
+
+ if ((comment = ov_comment(vorbisfile, -1))) {
+ input->track_name =
+ g_strdup(vorbis_comment_query(comment, "title", 0));
+ openmoko_update_ogg_title(input->track_name);
+ input->performer =
+ g_strdup(vorbis_comment_query(comment, "artist", 0));
+ openmoko_update_ogg_artist(input->performer);
+ input->album_name =
+ g_strdup(vorbis_comment_query(comment, "album", 0));
+
+ if (vorbis_comment_query(comment, "tracknumber", 0))
+ input->track_number =
+ atoi(vorbis_comment_query(comment, "tracknumber", 0));
+
+ input->date = g_strdup(vorbis_comment_query(comment, "date", 0));
+ input->genre = g_strdup(vorbis_comment_query(comment, "genre", 0));
+ input->comment =
+ g_strdup(vorbis_comment_query(comment, "comment", 0));
+ }
+
+ if (!(displaytitle = xmms_get_titlestring(vorbis_cfg.tag_override ?
+ vorbis_cfg.tag_format :
+ xmms_get_gentitle_format(),
+ input))) {
+ if (!vorbis_is_streaming)
+ displaytitle = g_strdup(input->file_name);
+ else
+ displaytitle = vorbis_http_get_title(filename);
+ }
+
+ g_free(input->file_name);
+ g_free(input->file_path);
+ g_free(input->track_name);
+ g_free(input->performer);
+ g_free(input->album_name);
+ g_free(input->date);
+ g_free(input->genre);
+ g_free(input->comment);
+ g_free(input);
+
+ return displaytitle;
+}
+
+static void
+vorbis_aboutbox()
+{
+ static GtkWidget *about_window;
+
+ if (about_window)
+ gdk_window_raise(about_window->window);
+
+ about_window = xmms_show_message(_("About Ogg Vorbis Audio Plugin"),
+ /*
+ * I18N: UTF-8 Translation: "Haavard Kvaalen" ->
+ * "H\303\245vard Kv\303\245len"
+ */
+ _
+ ("Ogg Vorbis Plugin by the Xiph.org Foundation\n\n"
+ "Original code by\n"
+ "Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+ "Contributions from\n"
+ "Chris Montgomery <monty at xiph.org>\n"
+ "Peter Alm <peter at xmms.org>\n"
+ "Michael Smith <msmith at labyrinth.edu.au>\n"
+ "Jack Moffitt <jack at icecast.org>\n"
+ "Jorn Baayen <jorn at nl.linux.org>\n"
+ "Haavard Kvaalen <havardk at xmms.org>\n"
+ "Gian-Carlo Pascutto <gcp at sjeng.org>\n\n"
+ "Visit the Xiph.org Foundation at http://www.xiph.org/\n"),
+ _("Ok"), FALSE, NULL, NULL);
+ g_signal_connect(G_OBJECT(about_window), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &about_window);
+}
+
+
+static void
+vorbis_init(void)
+{
+ ConfigDb *db;
+
+ memset(&vorbis_cfg, 0, sizeof(vorbis_config_t));
+ vorbis_cfg.http_buffer_size = 128;
+ vorbis_cfg.http_prebuffer = 25;
+ vorbis_cfg.proxy_port = 8080;
+ vorbis_cfg.proxy_use_auth = FALSE;
+ vorbis_cfg.proxy_user = NULL;
+ vorbis_cfg.proxy_pass = NULL;
+ vorbis_cfg.tag_override = FALSE;
+ vorbis_cfg.tag_format = NULL;
+ vorbis_cfg.use_anticlip = FALSE;
+ vorbis_cfg.use_replaygain = FALSE;
+ vorbis_cfg.replaygain_mode = REPLAYGAIN_MODE_TRACK;
+ vorbis_cfg.use_booster = FALSE;
+
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_get_int(db, "vorbis", "http_buffer_size",
+ &vorbis_cfg.http_buffer_size);
+ bmp_cfg_db_get_int(db, "vorbis", "http_prebuffer",
+ &vorbis_cfg.http_prebuffer);
+ bmp_cfg_db_get_bool(db, "vorbis", "save_http_stream",
+ &vorbis_cfg.save_http_stream);
+ if (!bmp_cfg_db_get_string(db, "vorbis", "save_http_path",
+ &vorbis_cfg.save_http_path))
+ vorbis_cfg.save_http_path = g_strdup(g_get_home_dir());
+
+ bmp_cfg_db_get_bool(db, "vorbis", "use_proxy", &vorbis_cfg.use_proxy);
+ if (!bmp_cfg_db_get_string
+ (db, "vorbis", "proxy_host", &vorbis_cfg.proxy_host))
+ vorbis_cfg.proxy_host = g_strdup("localhost");
+ bmp_cfg_db_get_int(db, "vorbis", "proxy_port", &vorbis_cfg.proxy_port);
+ bmp_cfg_db_get_bool(db, "vorbis", "proxy_use_auth",
+ &vorbis_cfg.proxy_use_auth);
+ bmp_cfg_db_get_string(db, "vorbis", "proxy_user", &vorbis_cfg.proxy_user);
+ bmp_cfg_db_get_string(db, "vorbis", "proxy_pass", &vorbis_cfg.proxy_pass);
+ bmp_cfg_db_get_bool(db, "vorbis", "tag_override",
+ &vorbis_cfg.tag_override);
+ if (!bmp_cfg_db_get_string(db, "vorbis", "tag_format",
+ &vorbis_cfg.tag_format))
+ vorbis_cfg.tag_format = g_strdup("%p - %t");
+ bmp_cfg_db_get_bool(db, "vorbis", "use_anticlip",
+ &vorbis_cfg.use_anticlip);
+ bmp_cfg_db_get_bool(db, "vorbis", "use_replaygain",
+ &vorbis_cfg.use_replaygain);
+ bmp_cfg_db_get_int(db, "vorbis", "replaygain_mode",
+ &vorbis_cfg.replaygain_mode);
+ bmp_cfg_db_get_bool(db, "vorbis", "use_booster", &vorbis_cfg.use_booster);
+ bmp_cfg_db_close(db);
+
+ vf_mutex = g_mutex_new();
+}
+
+static void
+vorbis_cleanup(void)
+{
+ g_mutex_free(vf_mutex);
+}
+
+static size_t
+ovcb_read(void *ptr, size_t size, size_t nmemb, void *datasource)
+{
+ size_t tmp;
+
+
+ if (vorbis_is_streaming) {
+ /* this is a stream */
+ tmp = vorbis_http_read(ptr, size * nmemb);
+ vorbis_bytes_streamed += tmp;
+ return tmp;
+ }
+
+ return vfs_fread(ptr, size, nmemb, (VFSFile *) datasource);
+}
+
+static int
+ovcb_seek(void *datasource, int64_t offset, int whence)
+{
+ if (vorbis_is_streaming) {
+ /* this is a stream */
+ /* streams aren't seekable */
+ return -1;
+ }
+
+ return vfs_fseek((VFSFile *) datasource, offset, whence);
+}
+
+static int
+ovcb_close(void *datasource)
+{
+ if (vorbis_is_streaming) {
+ /* this is a stream */
+ vorbis_http_close();
+ return 0;
+ }
+
+ return vfs_fclose((VFSFile *) datasource);
+}
+
+static long
+ovcb_tell(void *datasource)
+{
+ if (vorbis_is_streaming) {
+ /* this is a stream */
+ /* return bytes read */
+ return vorbis_bytes_streamed;
+ }
+
+ return vfs_ftell((VFSFile *) datasource);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/vorbis/vorbis.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,41 @@
+#ifndef __VORBIS_H__
+#define __VORBIS_H__
+
+#include <vorbis/vorbisfile.h>
+
+#include "libbeep/vfs.h"
+
+extern ov_callbacks vorbis_callbacks;
+
+void vorbis_configure(void);
+
+void vorbis_file_info_box(char *filename);
+
+char *convert_to_utf8(const char *string);
+char *convert_from_utf8(const char *string);
+
+typedef struct {
+ gint http_buffer_size;
+ gint http_prebuffer;
+ gboolean use_proxy;
+ gchar *proxy_host;
+ gint proxy_port;
+ gboolean proxy_use_auth;
+ gchar *proxy_user, *proxy_pass;
+ gboolean save_http_stream;
+ gchar *save_http_path;
+ gboolean tag_override;
+ gchar *tag_format;
+ gboolean use_anticlip;
+ gboolean use_replaygain;
+ gint replaygain_mode;
+ gboolean use_booster;
+} vorbis_config_t;
+
+enum {
+ REPLAYGAIN_MODE_TRACK,
+ REPLAYGAIN_MODE_ALBUM,
+ REPLAYGAIN_MODE_LAST
+};
+
+#endif /* __VORBIS_H__ */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,11 @@
+lib_LTLIBRARIES = libwav.la
+
+libdir = $(plugindir)/$(INPUT_PLUGIN_DIR)
+
+libwav_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+
+libwav_la_SOURCES = \
+wav.c \
+wav.h
+
+INCLUDES = $(GTK_CFLAGS) -I$(top_builddir)/intl -I$(top_srcdir)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,563 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "wav.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+#include <libbeep/util.h>
+#include <libbeep/titlestring.h>
+#include "beep/output.h"
+
+
+InputPlugin wav_ip = {
+ NULL,
+ NULL,
+ NULL, /* Description */
+ wav_init,
+ NULL,
+ NULL,
+ is_our_file,
+ NULL,
+ play_file,
+ stop,
+ wav_pause,
+ seek,
+ NULL,
+ get_time,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ get_song_info,
+ NULL, /* file_info_box */
+ NULL
+};
+
+WaveFile *wav_file = NULL;
+static GThread *decode_thread;
+static gboolean audio_error = FALSE;
+
+InputPlugin *
+get_iplugin_info(void)
+{
+ wav_ip.description = g_strdup_printf(_("WAV Audio Plugin"));
+ return &wav_ip;
+}
+
+static void
+wav_init(void)
+{
+ /* empty */
+}
+
+/* needed for is_our_file() */
+static gint
+read_n_bytes(VFSFile * file, guint8 * buf, gint n)
+{
+ if (vfs_fread(buf, 1, n, file) != n) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static guint32
+convert_to_header(guint8 * buf)
+{
+
+ return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
+}
+
+static guint32
+convert_to_long(guint8 * buf)
+{
+
+ return (buf[3] << 24) + (buf[2] << 16) + (buf[1] << 8) + buf[0];
+}
+
+static guint16
+read_wav_id(gchar * filename)
+{
+ VFSFile *file;
+ guint16 wavid;
+ guint8 buf[4];
+ guint32 head;
+ glong seek;
+
+ if (!(file = vfs_fopen(filename, "rb"))) { /* Could not open file */
+ return 0;
+ }
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ head = convert_to_header(buf);
+ if (head == ('R' << 24) + ('I' << 16) + ('F' << 8) + 'F') { /* Found a riff -- maybe WAVE */
+ if (vfs_fseek(file, 4, SEEK_CUR) != 0) { /* some error occured */
+ vfs_fclose(file);
+ return 0;
+ }
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ head = convert_to_header(buf);
+ if (head == ('W' << 24) + ('A' << 16) + ('V' << 8) + 'E') { /* Found a WAVE */
+ seek = 0;
+ do { /* we'll be looking for the fmt-chunk which comes before the data-chunk */
+ /* A chunk consists of an header identifier (4 bytes), the length of the chunk
+ (4 bytes), and the chunkdata itself, padded to be an even number of bytes.
+ We'll skip all chunks until we find the "data"-one which could contain
+ mpeg-data */
+ if (seek != 0) {
+ if (vfs_fseek(file, seek, SEEK_CUR) != 0) { /* some error occured */
+ vfs_fclose(file);
+ return 0;
+ }
+ }
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ head = convert_to_header(buf);
+ if (!(read_n_bytes(file, buf, 4))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ seek = convert_to_long(buf);
+ seek = seek + (seek % 2); /* Has to be even (padding) */
+ if (seek >= 2
+ && head == ('f' << 24) + ('m' << 16) + ('t' << 8) + ' ') {
+ if (!(read_n_bytes(file, buf, 2))) {
+ vfs_fclose(file);
+ return 0;
+ }
+ wavid = buf[0] + 256 * buf[1];
+ seek -= 2;
+ /* we could go on looking for other things, but all we wanted was the wavid */
+ vfs_fclose(file);
+ return wavid;
+ }
+ }
+ while (head != ('d' << 24) + ('a' << 16) + ('t' << 8) + 'a');
+ /* it's RIFF WAVE */
+ }
+ /* it's RIFF */
+ }
+ /* it's not even RIFF */
+ vfs_fclose(file);
+ return 0;
+}
+
+static const gchar *
+get_extension(const gchar * filename)
+{
+ const gchar *ext = strrchr(filename, '.');
+ return ext ? ext + 1 : NULL;
+}
+
+static gboolean
+is_our_file(gchar * filename)
+{
+ gchar *ext;
+
+ ext = strrchr(filename, '.');
+ if (ext)
+ if (!strcasecmp(ext, ".wav"))
+ if (read_wav_id(filename) == WAVE_FORMAT_PCM)
+ return TRUE;
+ return FALSE;
+}
+
+
+static gchar *
+get_title(const gchar * filename)
+{
+ TitleInput *input;
+ gchar *title;
+
+ input = bmp_title_input_new();
+
+ input->file_name = g_path_get_basename(filename);
+ input->file_ext = get_extension(filename);
+ input->file_path = g_path_get_dirname(filename);
+
+ if (!(title = xmms_get_titlestring(xmms_get_gentitle_format(), input)))
+ title = g_strdup(input->file_name);
+
+ g_free(input->file_path);
+ g_free(input->file_name);
+ g_free(input);
+
+ return title;
+}
+
+static gint
+read_le_long(VFSFile * file, glong * ret)
+{
+ guchar buf[4];
+
+ if (vfs_fread(buf, 1, 4, file) != 4)
+ return 0;
+
+ *ret = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+ return TRUE;
+}
+
+#define read_le_ulong(file,ret) read_le_long(file,(long*)ret)
+
+static int
+read_le_short(VFSFile * file, gshort * ret)
+{
+ guchar buf[2];
+
+ if (vfs_fread(buf, 1, 2, file) != 2)
+ return 0;
+
+ *ret = (buf[1] << 8) | buf[0];
+ return TRUE;
+}
+
+static gpointer
+play_loop(gpointer arg)
+{
+ gchar data[2048 * 2];
+ gint bytes, blk_size, rate;
+ gint actual_read;
+
+ blk_size = 512 * (wav_file->bits_per_sample / 8) * wav_file->channels;
+ rate =
+ wav_file->samples_per_sec * wav_file->channels *
+ (wav_file->bits_per_sample / 8);
+ while (wav_file->going) {
+ if (!wav_file->eof) {
+ bytes = blk_size;
+ if (wav_file->length - wav_file->position < bytes)
+ bytes = wav_file->length - wav_file->position;
+ if (bytes > 0) {
+ actual_read = vfs_fread(data, 1, bytes, wav_file->file);
+
+ if (actual_read == 0) {
+ wav_file->eof = 1;
+ wav_ip.output->buffer_free();
+ wav_ip.output->buffer_free();
+ }
+ else {
+ if (wav_file->seek_to == -1)
+ produce_audio(wav_ip.output->written_time(),
+ (wav_file->bits_per_sample ==
+ 16) ? FMT_S16_LE : FMT_U8,
+ wav_file->channels, bytes, data,
+ &wav_file->going);
+ wav_file->position += actual_read;
+ }
+ }
+ else {
+ wav_file->eof = TRUE;
+ wav_ip.output->buffer_free();
+ wav_ip.output->buffer_free();
+ xmms_usleep(10000);
+ }
+ }
+ else
+ xmms_usleep(10000);
+ if (wav_file->seek_to != -1) {
+ wav_file->position = wav_file->seek_to * rate;
+ vfs_fseek(wav_file->file,
+ wav_file->position + wav_file->data_offset, SEEK_SET);
+ wav_ip.output->flush(wav_file->seek_to * 1000);
+ wav_file->seek_to = -1;
+ }
+
+ }
+ vfs_fclose(wav_file->file);
+
+ g_thread_exit(NULL);
+ return NULL;
+}
+
+static void
+play_file(gchar * filename)
+{
+ gchar magic[4], *name;
+ gulong len;
+ gint rate;
+
+ audio_error = FALSE;
+
+ wav_file = g_new0(WaveFile, 1);
+ if ((wav_file->file = vfs_fopen(filename, "rb"))) {
+ vfs_fread(magic, 1, 4, wav_file->file);
+ if (strncmp(magic, "RIFF", 4)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ read_le_ulong(wav_file->file, &len);
+ vfs_fread(magic, 1, 4, wav_file->file);
+ if (strncmp(magic, "WAVE", 4)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ for (;;) {
+ vfs_fread(magic, 1, 4, wav_file->file);
+ if (!read_le_ulong(wav_file->file, &len)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ if (!strncmp("fmt ", magic, 4))
+ break;
+ vfs_fseek(wav_file->file, len, SEEK_CUR);
+ }
+ if (len < 16) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ read_le_short(wav_file->file, &wav_file->format_tag);
+ switch (wav_file->format_tag) {
+ case WAVE_FORMAT_UNKNOWN:
+ case WAVE_FORMAT_ALAW:
+ case WAVE_FORMAT_MULAW:
+ case WAVE_FORMAT_ADPCM:
+ case WAVE_FORMAT_OKI_ADPCM:
+ case WAVE_FORMAT_DIGISTD:
+ case WAVE_FORMAT_DIGIFIX:
+ case IBM_FORMAT_MULAW:
+ case IBM_FORMAT_ALAW:
+ case IBM_FORMAT_ADPCM:
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ read_le_short(wav_file->file, &wav_file->channels);
+ read_le_long(wav_file->file, &wav_file->samples_per_sec);
+ read_le_long(wav_file->file, &wav_file->avg_bytes_per_sec);
+ read_le_short(wav_file->file, &wav_file->block_align);
+ read_le_short(wav_file->file, &wav_file->bits_per_sample);
+ if (wav_file->bits_per_sample != 8 && wav_file->bits_per_sample != 16) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ len -= 16;
+ if (len)
+ vfs_fseek(wav_file->file, len, SEEK_CUR);
+
+ for (;;) {
+ vfs_fread(magic, 4, 1, wav_file->file);
+
+ if (!read_le_ulong(wav_file->file, &len)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ if (!strncmp("data", magic, 4))
+ break;
+ vfs_fseek(wav_file->file, len, SEEK_CUR);
+ }
+ wav_file->data_offset = vfs_ftell(wav_file->file);
+ wav_file->length = len;
+
+ wav_file->position = 0;
+ wav_file->going = 1;
+
+ if (wav_ip.output->
+ open_audio((wav_file->bits_per_sample ==
+ 16) ? FMT_S16_LE : FMT_U8,
+ wav_file->samples_per_sec, wav_file->channels) == 0) {
+ audio_error = TRUE;
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ name = get_title(filename);
+ rate =
+ wav_file->samples_per_sec * wav_file->channels *
+ (wav_file->bits_per_sample / 8);
+ wav_ip.set_info(name, 1000 * (wav_file->length / rate), 8 * rate,
+ wav_file->samples_per_sec, wav_file->channels);
+ g_free(name);
+ wav_file->seek_to = -1;
+ decode_thread = g_thread_create(play_loop, NULL, TRUE, NULL);
+ }
+}
+
+static void
+stop(void)
+{
+ if (wav_file && wav_file->going) {
+ wav_file->going = 0;
+ g_thread_join(decode_thread);
+ wav_ip.output->close_audio();
+ g_free(wav_file);
+ wav_file = NULL;
+ }
+}
+
+static void
+wav_pause(gshort p)
+{
+ wav_ip.output->pause(p);
+}
+
+static void
+seek(gint time)
+{
+ wav_file->seek_to = time;
+
+ wav_file->eof = FALSE;
+
+ while (wav_file->seek_to != -1)
+ xmms_usleep(10000);
+}
+
+static int
+get_time(void)
+{
+ if (audio_error)
+ return -2;
+ if (!wav_file)
+ return -1;
+ if (!wav_file->going
+ || (wav_file->eof && !wav_ip.output->buffer_playing()))
+ return -1;
+ else {
+ return wav_ip.output->output_time();
+ }
+}
+
+static void
+get_song_info(gchar * filename, gchar ** title, gint * length)
+{
+ gchar magic[4];
+ gulong len;
+ gint rate;
+ WaveFile *wav_file;
+
+ wav_file = g_malloc(sizeof(WaveFile));
+ memset(wav_file, 0, sizeof(WaveFile));
+ if (!(wav_file->file = vfs_fopen(filename, "rb")))
+ return;
+
+ vfs_fread(magic, 1, 4, wav_file->file);
+ if (strncmp(magic, "RIFF", 4)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ read_le_ulong(wav_file->file, &len);
+ vfs_fread(magic, 1, 4, wav_file->file);
+ if (strncmp(magic, "WAVE", 4)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ for (;;) {
+ vfs_fread(magic, 1, 4, wav_file->file);
+ if (!read_le_ulong(wav_file->file, &len)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ if (!strncmp("fmt ", magic, 4))
+ break;
+ vfs_fseek(wav_file->file, len, SEEK_CUR);
+ }
+ if (len < 16) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ read_le_short(wav_file->file, &wav_file->format_tag);
+ switch (wav_file->format_tag) {
+ case WAVE_FORMAT_UNKNOWN:
+ case WAVE_FORMAT_ALAW:
+ case WAVE_FORMAT_MULAW:
+ case WAVE_FORMAT_ADPCM:
+ case WAVE_FORMAT_OKI_ADPCM:
+ case WAVE_FORMAT_DIGISTD:
+ case WAVE_FORMAT_DIGIFIX:
+ case IBM_FORMAT_MULAW:
+ case IBM_FORMAT_ALAW:
+ case IBM_FORMAT_ADPCM:
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ read_le_short(wav_file->file, &wav_file->channels);
+ read_le_long(wav_file->file, &wav_file->samples_per_sec);
+ read_le_long(wav_file->file, &wav_file->avg_bytes_per_sec);
+ read_le_short(wav_file->file, &wav_file->block_align);
+ read_le_short(wav_file->file, &wav_file->bits_per_sample);
+ if (wav_file->bits_per_sample != 8 && wav_file->bits_per_sample != 16) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ len -= 16;
+ if (len)
+ vfs_fseek(wav_file->file, len, SEEK_CUR);
+
+ for (;;) {
+ vfs_fread(magic, 4, 1, wav_file->file);
+
+ if (!read_le_ulong(wav_file->file, &len)) {
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+ return;
+ }
+ if (!strncmp("data", magic, 4))
+ break;
+ vfs_fseek(wav_file->file, len, SEEK_CUR);
+ }
+ rate =
+ wav_file->samples_per_sec * wav_file->channels *
+ (wav_file->bits_per_sample / 8);
+ (*length) = 1000 * (len / rate);
+ (*title) = get_title(filename);
+
+ vfs_fclose(wav_file->file);
+ g_free(wav_file);
+ wav_file = NULL;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Input/wav/wav.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,64 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef WAV_H
+#define WAV_H
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include <sys/types.h>
+
+#include <libbeep/vfs.h>
+#include "beep/plugin.h"
+
+#define WAVE_FORMAT_UNKNOWN (0x0000)
+#define WAVE_FORMAT_PCM (0x0001)
+#define WAVE_FORMAT_ADPCM (0x0002)
+#define WAVE_FORMAT_ALAW (0x0006)
+#define WAVE_FORMAT_MULAW (0x0007)
+#define WAVE_FORMAT_OKI_ADPCM (0x0010)
+#define WAVE_FORMAT_DIGISTD (0x0015)
+#define WAVE_FORMAT_DIGIFIX (0x0016)
+#define IBM_FORMAT_MULAW (0x0101)
+#define IBM_FORMAT_ALAW (0x0102)
+#define IBM_FORMAT_ADPCM (0x0103)
+
+extern InputPlugin wav_ip;
+
+typedef struct {
+ VFSFile *file;
+ short format_tag, channels, block_align, bits_per_sample, eof;
+ long samples_per_sec, avg_bytes_per_sec;
+ unsigned long position, length;
+ int seek_to, data_offset, going;
+ pid_t pid;
+} WaveFile;
+
+static void wav_init(void);
+static int is_our_file(char *filename);
+static void play_file(char *filename);
+static void stop(void);
+static void seek(int time);
+static void wav_pause(short p);
+static int get_time(void);
+static void get_song_info(char *filename, char **title, int *length);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,14 @@
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = intl libbeep beep Output Input Visualization po images
+
+man_MANS = beep-media-player.1
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = bmp.pc
+
+EXTRA_DIST = \
+ FAQ \
+ bmp.spec \
+ $(pkgconfig_DATA) \
+ $(wildcard m4/*.m4)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/NEWS
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/NEWS 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/NEWS 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,97 @@
+BMP 0.9.7.1
+
+Enhancements
+* New (free) ClearSky skin by Will Reinhart
+* New desktop icon
+* New GConf schema
+* New multi-thread mode for ALSA plugin
+* Support for customizable accelerators
+* Queue support in Jump to Track
+* Partial support for new XMMS 1.2.11 remote control functions
+* New translations (Finnish, Georgian, Hindi, Ukrainian, Traditional Chinese)
+ and updates
+
+Miscellaneous
+* Log file renamed to 'log'
+* Minor GUI tweaks
+
+Bugfixes
+* Fixed some ALSA playback issues
+* Fixed crashes when output plugin returning sound volume for only 1 channel
+* Fixed crashes when input plugins do not set title when getting song info
+* Fixed infinite recursion in logger
+* Fixed bogus values returned by xmms_remote_get_info()
+* Fixed general/visualization plugin About dialogs not opening correctly
+* Fixed centering of playlist in Playlist Editor
+* Fixed incorrect length of 1st track read from .m3u files
+* Fixed gcc4 compilation errors
+* Fixed 64-bit issues setting/getting ESD volume
+* Fixed MimeType value in desktop file
+* Fixed text clipping of non-ASCII titles in Playlist Editor
+
+Thank you and see you soon in BMPx!
+
+
+BMP 0.9.7
+
+Enhancements
+* Multiple encoding support for trying ID3 title conversion
+* GUI refinement tweaks
+* New logo and icons
+* New command line option to bring BMP to desktop foreground (--activate).
+* New compile-time option select XMMS equalization (--with-xmms-eq).
+* New translations (Brazilian Portuguese, Breton, Czech, Greek, Hungarian,
+ Macedonian, Romanian, Slovak)
+* Running beep-media-player --version now prints built-in optional components
+
+Bugfixes
+* Fixed removal of dead playlist entries
+* Fixed dependency information in pkg-config file (bmp.pc)
+* Fixed and disambiguated playlist editor accelerators
+* Hacked around playlist editor shade bug (now always unshades on launch)
+* Many others (see Bugzilla and ChangeLog)
+
+
+BMP 0.9.7 rc2
+
+Bugfixes
+* Include build.list into distribution
+
+
+BMP 0.9.7 rc1
+
+Enhancements
+* Revised GUI according to GNOME HIG
+* New window icons
+* New About and Preferences dialog
+* New file/folder selector using GTK+ 2.4's file chooser
+* Skin cursor support
+* New equalizer using IIR filtering in time domain
+* ID3v2 editing support using id3lib
+* ID3 character encoding to assume may now be overrided
+* New title formatting tag for conditional fields eg. %{n:text%}
+* Experimental GConf and GNOME VFS support
+* New translations (Dutch, German, Italian, Japanese, Korean, Lithuanian,
+ Polish, Russian, Simplified Chinese, Spanish, Swedish, Welsh)
+* Merged configure scripts for shorter build time
+
+Miscellaneous
+* Removed EasyMove and DoubleSize
+* Removed real-time priority support
+* Removed AM_PATH_BMP m4 macro in favour of PKG_CHECK_MODULES
+* Removed beep-config in favour of 'pkg-config bmp'
+
+Bugfixes
+* Memory leaks
+* i18n and l10n
+* Many others (see Bugzilla and ChangeLog)
+
+
+BMP 0.9.6.1
+(someone please write this)
+
+
+BMP 0.9.6
+* Port to GTK2
+* Rewrote skin functions
+(to be continued)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,2 @@
+ALL_PLUGINS = OSS esd alsa
+SUBDIRS = $(OUTPUT_PLUGINS)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,32 @@
+osssources = OSS.c OSS.h \
+mixer.c \
+about.c \
+configure.c \
+audio.c \
+init.c \
+convert.c \
+soundcard.h
+
+if HAVE_OSS
+
+ossltlibs = libOSS.la
+ossbuildsources = $(osssources)
+
+
+else
+
+ossltlibs =
+ossbuildsources =
+
+endif
+
+EXTRA_DIST = $(osssources)
+
+lib_LTLIBRARIES = $(ossltlibs)
+
+libdir = $(plugindir)/$(OUTPUT_PLUGIN_DIR)
+
+libOSS_la_LDFLAGS = @PLUGIN_LDFLAGS@
+libOSS_la_LIBADD = @GTK_LIBS@
+libOSS_la_SOURCES= $(ossbuildsources)
+INCLUDES = $(GTK_CFLAGS) -I$(top_builddir)/intl -I$(top_srcdir)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,52 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "OSS.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+OutputPlugin oss_op = {
+ NULL,
+ NULL,
+ NULL, /* Description */
+ oss_init,
+ oss_about,
+ oss_configure,
+ oss_get_volume,
+ oss_set_volume,
+ oss_open,
+ oss_write,
+ oss_close,
+ oss_flush,
+ oss_pause,
+ oss_free,
+ oss_playing,
+ oss_get_output_time,
+ oss_get_written_time,
+};
+
+OutputPlugin *
+get_oplugin_info(void)
+{
+ oss_op.description = g_strdup_printf(_("OSS Output Plugin"));
+ return &oss_op;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/OSS.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,73 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef OSS_H
+#define OSS_H
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "soundcard.h"
+#include "beep/plugin.h"
+
+#define IS_BIG_ENDIAN (G_BYTE_ORDER == G_BIG_ENDIAN)
+
+extern OutputPlugin op;
+
+typedef struct {
+ gint audio_device;
+ gint mixer_device;
+ gint buffer_size;
+ gint prebuffer;
+ gboolean use_master;
+ gboolean use_alt_audio_device, use_alt_mixer_device;
+ gchar *alt_audio_device, *alt_mixer_device;
+} OSSConfig;
+
+extern OSSConfig oss_cfg;
+
+void oss_init(void);
+void oss_about(void);
+void oss_configure(void);
+
+void oss_get_volume(int *l, int *r);
+void oss_set_volume(int l, int r);
+
+int oss_playing(void);
+int oss_free(void);
+void oss_write(void *ptr, int length);
+void oss_close(void);
+void oss_flush(int time);
+void oss_pause(short p);
+int oss_open(AFormat fmt, int rate, int nch);
+int oss_get_output_time(void);
+int oss_get_written_time(void);
+void oss_set_audio_params(void);
+
+void oss_free_convert_buffer(void);
+int (*oss_get_convert_func(int output, int input)) (void **, int);
+int (*oss_get_stereo_convert_func(int output, int input)) (void **, int,
+ int);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/about.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/about.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/about.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,57 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "OSS.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libbeep/util.h>
+
+
+void
+oss_about(void)
+{
+ static GtkWidget *dialog;
+
+ if (dialog != NULL)
+ return;
+
+ dialog = xmms_show_message(_("About OSS Driver"),
+ _("XMMS OSS Driver\n\n "
+ "This program is free software; you can redistribute it and/or modify\n"
+ "it under the terms of the GNU General Public License as published by\n"
+ "the Free Software Foundation; either version 2 of the License, or\n"
+ "(at your option) any later version.\n"
+ "\n"
+ "This program is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+ "GNU General Public License for more details.\n"
+ "\n"
+ "You should have received a copy of the GNU General Public License\n"
+ "along with this program; if not, write to the Free Software\n"
+ "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+ "USA."), _("Ok"), FALSE, NULL, NULL);
+ g_signal_connect(G_OBJECT(dialog), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &dialog);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/audio.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/audio.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/audio.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,716 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <libbeep/util.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+
+#include "OSS.h"
+
+
+#define NFRAGS 32
+
+static gint fd = 0;
+static char *buffer;
+static gboolean going, prebuffer, paused, unpause, do_pause, remove_prebuffer;
+static gint device_buffer_used, buffer_size, prebuffer_size, blk_size;
+static gint rd_index = 0, wr_index = 0;
+static gint output_time_offset = 0;
+static guint64 written = 0, output_bytes = 0;
+static gint flush;
+static gint fragsize, device_buffer_size;
+static gchar *device_name;
+static GThread *buffer_thread;
+static gboolean realtime, select_works;
+
+static int (*oss_convert_func) (void **data, int length);
+static int (*oss_stereo_convert_func) (void **data, int length, int fmt);
+
+struct format_info {
+ union {
+ AFormat xmms;
+ int oss;
+ } format;
+ int frequency;
+ int channels;
+ int bps;
+};
+
+
+/*
+ * The format of the data from the input plugin
+ * This will never change during a song.
+ */
+struct format_info input;
+
+/*
+ * The format we get from the effect plugin.
+ * This will be different from input if the effect plugin does
+ * some kind of format conversion.
+ */
+struct format_info effect;
+
+/*
+ * The format of the data we actually send to the soundcard.
+ * This might be different from effect if we need to resample or do
+ * some other format conversion.
+ */
+struct format_info output;
+
+
+static void
+oss_calc_device_buffer_used(void)
+{
+ audio_buf_info buf_info;
+ if (paused)
+ device_buffer_used = 0;
+ else if (!ioctl(fd, SNDCTL_DSP_GETOSPACE, &buf_info))
+ device_buffer_used =
+ (buf_info.fragstotal * buf_info.fragsize) - buf_info.bytes;
+}
+
+
+static gint oss_downsample(gpointer ob, guint length, guint speed,
+ guint espeed);
+
+static int
+oss_calc_bitrate(int oss_fmt, int rate, int channels)
+{
+ int bitrate = rate * channels;
+
+ if (oss_fmt == AFMT_U16_BE || oss_fmt == AFMT_U16_LE ||
+ oss_fmt == AFMT_S16_BE || oss_fmt == AFMT_S16_LE)
+ bitrate *= 2;
+
+ return bitrate;
+}
+
+static int
+oss_get_format(AFormat fmt)
+{
+ int format = 0;
+
+ switch (fmt) {
+ case FMT_U8:
+ format = AFMT_U8;
+ break;
+ case FMT_S8:
+ format = AFMT_S8;
+ break;
+ case FMT_U16_LE:
+ format = AFMT_U16_LE;
+ break;
+ case FMT_U16_BE:
+ format = AFMT_U16_BE;
+ break;
+ case FMT_U16_NE:
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ format = AFMT_U16_BE;
+#else
+ format = AFMT_U16_LE;
+#endif
+ break;
+ case FMT_S16_LE:
+ format = AFMT_S16_LE;
+ break;
+ case FMT_S16_BE:
+ format = AFMT_S16_BE;
+ break;
+ case FMT_S16_NE:
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ format = AFMT_S16_BE;
+#else
+ format = AFMT_S16_LE;
+#endif
+ break;
+ }
+
+ return format;
+}
+
+static void
+oss_setup_format(AFormat fmt, int rate, int nch)
+{
+ effect.format.xmms = fmt;
+ effect.frequency = rate;
+ effect.channels = nch;
+ effect.bps = oss_calc_bitrate(oss_get_format(fmt), rate, nch);
+
+ output.format.oss = oss_get_format(fmt);
+ output.frequency = rate;
+ output.channels = nch;
+
+
+ fragsize = 0;
+ while ((1L << fragsize) < effect.bps / 25)
+ fragsize++;
+ fragsize--;
+
+ device_buffer_size = ((1L << fragsize) * (NFRAGS + 1));
+
+ oss_set_audio_params();
+
+ output.bps = oss_calc_bitrate(output.format.oss, output.frequency,
+ output.channels);
+}
+
+
+gint
+oss_get_written_time(void)
+{
+ if (!going)
+ return 0;
+ return (written * 1000) / effect.bps;
+}
+
+gint
+oss_get_output_time(void)
+{
+ guint64 bytes;
+
+ if (!fd || !going)
+ return 0;
+
+ if (realtime)
+ oss_calc_device_buffer_used();
+ bytes = output_bytes < device_buffer_used ?
+ 0 : output_bytes - device_buffer_used;
+
+ return output_time_offset + ((bytes * 1000) / output.bps);
+}
+
+static int
+oss_used(void)
+{
+ if (realtime)
+ return 0;
+ else {
+ if (wr_index >= rd_index)
+ return wr_index - rd_index;
+ return buffer_size - (rd_index - wr_index);
+ }
+}
+
+gint
+oss_playing(void)
+{
+ if (!going)
+ return 0;
+ if (realtime)
+ oss_calc_device_buffer_used();
+ if (!oss_used() && (device_buffer_used - (3 * blk_size)) <= 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+gint
+oss_free(void)
+{
+ if (!realtime) {
+ if (remove_prebuffer && prebuffer) {
+ prebuffer = FALSE;
+ remove_prebuffer = FALSE;
+ }
+ if (prebuffer)
+ remove_prebuffer = TRUE;
+
+ if (rd_index > wr_index)
+ return (rd_index - wr_index) - device_buffer_size - 1;
+ return (buffer_size - (wr_index - rd_index)) - device_buffer_size - 1;
+ }
+ else if (paused)
+ return 0;
+ else
+ return 1000000;
+}
+
+static inline ssize_t
+write_all(int fd, const void *buf, size_t count)
+{
+ ssize_t done = 0;
+ do {
+ ssize_t n = write(fd, buf, count - done);
+ if (n == -1) {
+ if (errno == EINTR)
+ continue;
+ else
+ break;
+ }
+ done += n;
+ } while (count > done);
+
+ return done;
+}
+
+static void
+oss_write_audio(gpointer data, int length)
+{
+
+ audio_buf_info abuf_info;
+ AFormat new_format;
+ int new_frequency, new_channels;
+ EffectPlugin *ep;
+
+ new_format = input.format.xmms;
+ new_frequency = input.frequency;
+ new_channels = input.channels;
+
+
+ ep = get_current_effect_plugin();
+ if (effects_enabled() && ep && ep->query_format) {
+ ep->query_format(&new_format, &new_frequency, &new_channels);
+ }
+
+ if (new_format != effect.format.xmms ||
+ new_frequency != effect.frequency ||
+ new_channels != effect.channels) {
+ output_time_offset += (output_bytes * 1000) / output.bps;
+ output_bytes = 0;
+ close(fd);
+ fd = open(device_name, O_WRONLY);
+ oss_setup_format(new_format, new_frequency, new_channels);
+ }
+ if (effects_enabled() && ep && ep->mod_samples)
+ length = ep->mod_samples(&data, length,
+ input.format.xmms,
+ input.frequency, input.channels);
+ if (realtime && !ioctl(fd, SNDCTL_DSP_GETOSPACE, &abuf_info)) {
+ while (abuf_info.bytes < length) {
+ xmms_usleep(10000);
+ if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &abuf_info))
+ break;
+ }
+ }
+
+ if (oss_convert_func != NULL)
+ length = oss_convert_func(&data, length);
+
+ if (oss_stereo_convert_func != NULL)
+ length = oss_stereo_convert_func(&data, length, output.format.oss);
+
+ if (effect.frequency == output.frequency)
+ output_bytes += write_all(fd, data, length);
+ else
+ output_bytes += oss_downsample(data, length,
+ effect.frequency, output.frequency);
+}
+
+static void
+swap_endian(guint16 * data, int length)
+{
+ int i;
+ for (i = 0; i < length; i += 2, data++)
+ *data = GUINT16_SWAP_LE_BE(*data);
+}
+
+#define NOT_NATIVE_ENDIAN ((IS_BIG_ENDIAN && \
+ (output.format.oss == AFMT_S16_LE || \
+ output.format.oss == AFMT_U16_LE)) || \
+ (!IS_BIG_ENDIAN && \
+ (output.format.oss == AFMT_S16_BE || \
+ output.format.oss == AFMT_U16_BE)))
+
+
+#define RESAMPLE_STEREO(sample_type) \
+do { \
+ const gint shift = sizeof (sample_type); \
+ gint i, in_samples, out_samples, x, delta; \
+ sample_type *inptr = (sample_type *)ob, *outptr; \
+ guint nlen = (((length >> shift) * espeed) / speed); \
+ if (nlen == 0) \
+ break; \
+ nlen <<= shift; \
+ if (NOT_NATIVE_ENDIAN) \
+ swap_endian(ob, length); \
+ if(nlen > nbuffer_size) \
+ { \
+ nbuffer = g_realloc(nbuffer, nlen); \
+ nbuffer_size = nlen; \
+ } \
+ outptr = (sample_type *)nbuffer; \
+ in_samples = length >> shift; \
+ out_samples = nlen >> shift; \
+ delta = (in_samples << 12) / out_samples; \
+ for (x = 0, i = 0; i < out_samples; i++) \
+ { \
+ gint x1, frac; \
+ x1 = (x >> 12) << 12; \
+ frac = x - x1; \
+ *outptr++ = \
+ (sample_type) \
+ ((inptr[(x1 >> 12) << 1] * \
+ ((1<<12) - frac) + \
+ inptr[((x1 >> 12) + 1) << 1] * \
+ frac) >> 12); \
+ *outptr++ = \
+ (sample_type) \
+ ((inptr[((x1 >> 12) << 1) + 1] * \
+ ((1<<12) - frac) + \
+ inptr[(((x1 >> 12) + 1) << 1) + 1] * \
+ frac) >> 12); \
+ x += delta; \
+ } \
+ if (NOT_NATIVE_ENDIAN) \
+ swap_endian(nbuffer, nlen); \
+ w = write_all(fd, nbuffer, nlen); \
+} while (0)
+
+
+#define RESAMPLE_MONO(sample_type) \
+do { \
+ const gint shift = sizeof (sample_type) - 1; \
+ gint i, x, delta, in_samples, out_samples; \
+ sample_type *inptr = (sample_type *)ob, *outptr; \
+ guint nlen = (((length >> shift) * espeed) / speed); \
+ if (nlen == 0) \
+ break; \
+ nlen <<= shift; \
+ if (NOT_NATIVE_ENDIAN) \
+ swap_endian(ob, length); \
+ if(nlen > nbuffer_size) \
+ { \
+ nbuffer = g_realloc(nbuffer, nlen); \
+ nbuffer_size = nlen; \
+ } \
+ outptr = (sample_type *)nbuffer; \
+ in_samples = length >> shift; \
+ out_samples = nlen >> shift; \
+ delta = ((length >> shift) << 12) / out_samples; \
+ for (x = 0, i = 0; i < out_samples; i++) \
+ { \
+ gint x1, frac; \
+ x1 = (x >> 12) << 12; \
+ frac = x - x1; \
+ *outptr++ = \
+ (sample_type) \
+ ((inptr[x1 >> 12] * ((1<<12) - frac) + \
+ inptr[(x1 >> 12) + 1] * frac) >> 12); \
+ x += delta; \
+ } \
+ if (NOT_NATIVE_ENDIAN) \
+ swap_endian(nbuffer, nlen); \
+ w = write_all(fd, nbuffer, nlen); \
+} while (0)
+
+
+static gint
+oss_downsample(gpointer ob, guint length, guint speed, guint espeed)
+{
+ guint w = 0;
+ static gpointer nbuffer = NULL;
+ static gint nbuffer_size = 0;
+
+ switch (output.format.oss) {
+ case AFMT_S16_BE:
+ case AFMT_S16_LE:
+ if (output.channels == 2)
+ RESAMPLE_STEREO(gint16);
+ else
+ RESAMPLE_MONO(gint16);
+ break;
+ case AFMT_U16_BE:
+ case AFMT_U16_LE:
+ if (output.channels == 2)
+ RESAMPLE_STEREO(guint16);
+ else
+ RESAMPLE_MONO(guint16);
+ break;
+ case AFMT_S8:
+ if (output.channels == 2)
+ RESAMPLE_STEREO(gint8);
+ else
+ RESAMPLE_MONO(gint8);
+ break;
+ case AFMT_U8:
+ if (output.channels == 2)
+ RESAMPLE_STEREO(guint8);
+ else
+ RESAMPLE_MONO(guint8);
+ break;
+ }
+ return w;
+}
+
+void
+oss_write(gpointer ptr, int length)
+{
+ int cnt, off = 0;
+
+ if (!realtime) {
+ remove_prebuffer = FALSE;
+
+ written += length;
+ while (length > 0) {
+ cnt = MIN(length, buffer_size - wr_index);
+ memcpy(buffer + wr_index, (char *) ptr + off, cnt);
+ wr_index = (wr_index + cnt) % buffer_size;
+ length -= cnt;
+ off += cnt;
+ }
+ }
+ else {
+ if (paused)
+ return;
+ oss_write_audio(ptr, length);
+ written += length;
+ }
+}
+
+void
+oss_close(void)
+{
+ if (!going)
+ return;
+ going = 0;
+ if (!realtime)
+ g_thread_join(buffer_thread);
+ else {
+ ioctl(fd, SNDCTL_DSP_RESET, 0);
+ close(fd);
+ }
+ g_free(device_name);
+ oss_free_convert_buffer();
+ wr_index = 0;
+ rd_index = 0;
+}
+
+void
+oss_flush(gint time)
+{
+ if (!realtime) {
+ flush = time;
+ while (flush != -1)
+ xmms_usleep(10000);
+ }
+ else {
+ ioctl(fd, SNDCTL_DSP_RESET, 0);
+ close(fd);
+ fd = open(device_name, O_WRONLY);
+ oss_set_audio_params();
+ output_time_offset = time;
+ written = ((guint64) time * input.bps) / 1000;
+ output_bytes = 0;
+ }
+}
+
+void
+oss_pause(short p)
+{
+ if (!realtime) {
+ if (p == TRUE)
+ do_pause = TRUE;
+ else
+ unpause = TRUE;
+ }
+ else
+ paused = p;
+
+}
+
+gpointer
+oss_loop(gpointer arg)
+{
+ gint length, cnt;
+ fd_set set;
+ struct timeval tv;
+
+ while (going) {
+ if (oss_used() > prebuffer_size)
+ prebuffer = FALSE;
+ if (oss_used() > 0 && !paused && !prebuffer) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 10000;
+ FD_ZERO(&set);
+ FD_SET(fd, &set);
+ if (!select_works || (select(fd + 1, NULL, &set, NULL, &tv) > 0)) {
+ length = MIN(blk_size, oss_used());
+ while (length > 0) {
+ cnt = MIN(length, buffer_size - rd_index);
+ oss_write_audio(buffer + rd_index, cnt);
+ rd_index = (rd_index + cnt) % buffer_size;
+ length -= cnt;
+ }
+ if (!oss_used())
+ ioctl(fd, SNDCTL_DSP_POST, 0);
+ }
+ }
+ else
+ xmms_usleep(10000);
+ oss_calc_device_buffer_used();
+ if (do_pause && !paused) {
+ do_pause = FALSE;
+ paused = TRUE;
+ /*
+ * We lose some data here that is sent to the
+ * soundcard, but not yet played. I don't
+ * think this is worth fixing.
+ */
+ ioctl(fd, SNDCTL_DSP_RESET, 0);
+ }
+ else if (unpause && paused) {
+ unpause = FALSE;
+ close(fd);
+ fd = open(device_name, O_WRONLY);
+ oss_set_audio_params();
+ paused = FALSE;
+ }
+
+ if (flush != -1) {
+ /*
+ * This close and open is a work around of a
+ * bug that exists in some drivers which cause
+ * the driver to get fucked up by a reset
+ */
+
+ ioctl(fd, SNDCTL_DSP_RESET, 0);
+ close(fd);
+ fd = open(device_name, O_WRONLY);
+ oss_set_audio_params();
+ output_time_offset = flush;
+ written = ((guint64) flush * input.bps) / 1000;
+ rd_index = wr_index = output_bytes = 0;
+ flush = -1;
+ prebuffer = TRUE;
+ }
+
+ }
+
+ ioctl(fd, SNDCTL_DSP_RESET, 0);
+ close(fd);
+ g_free(buffer);
+ return NULL;
+}
+
+void
+oss_set_audio_params(void)
+{
+ int frag, stereo, ret;
+ struct timeval tv;
+ fd_set set;
+
+ ioctl(fd, SNDCTL_DSP_RESET, 0);
+ frag = (NFRAGS << 16) | fragsize;
+ ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frag);
+ /*
+ * Set the stream format. This ioctl() might fail, but should
+ * return a format that works if it does.
+ */
+ ioctl(fd, SNDCTL_DSP_SETFMT, &output.format.oss);
+ if (ioctl(fd, SNDCTL_DSP_SETFMT, &output.format.oss) == -1)
+ g_warning("SNDCTL_DSP_SETFMT ioctl failed: %s", strerror(errno));
+
+ stereo = output.channels - 1;
+ ioctl(fd, SNDCTL_DSP_STEREO, &stereo);
+ output.channels = stereo + 1;
+
+ oss_stereo_convert_func = oss_get_stereo_convert_func(output.channels,
+ effect.channels);
+
+ if (ioctl(fd, SNDCTL_DSP_SPEED, &output.frequency) == -1)
+ g_warning("SNDCTL_DSP_SPEED ioctl failed: %s", strerror(errno));
+
+ if (ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &blk_size) == -1)
+ blk_size = 1L << fragsize;
+
+ oss_convert_func =
+ oss_get_convert_func(output.format.oss,
+ oss_get_format(effect.format.xmms));
+
+ /*
+ * Stupid hack to find out if the driver support selects, some
+ * drivers won't work properly without a select and some won't
+ * work with a select :/
+ */
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 50000;
+ FD_ZERO(&set);
+ FD_SET(fd, &set);
+ ret = select(fd + 1, NULL, &set, NULL, &tv);
+ if (ret > 0)
+ select_works = TRUE;
+ else
+ select_works = FALSE;
+}
+
+gint
+oss_open(AFormat fmt, gint rate, gint nch)
+{
+
+ if (oss_cfg.use_alt_audio_device && oss_cfg.alt_audio_device)
+ device_name = g_strdup(oss_cfg.alt_audio_device);
+ else {
+ if (oss_cfg.audio_device > 0)
+ device_name =
+ g_strdup_printf("%s%d", DEV_DSP, oss_cfg.audio_device);
+ else
+ device_name = g_strdup(DEV_DSP);
+ }
+
+ fd = open(device_name, O_WRONLY);
+
+ if (fd == -1) {
+ g_warning("oss_open(): Failed to open audio device (%s): %s",
+ device_name, strerror(errno));
+ g_free(device_name);
+ return 0;
+ }
+
+ input.format.xmms = fmt;
+ input.frequency = rate;
+ input.channels = nch;
+ input.bps = oss_calc_bitrate(oss_get_format(fmt), rate, nch);
+
+ oss_setup_format(fmt, rate, nch);
+
+ realtime = xmms_check_realtime_priority();
+
+ if (!realtime) {
+ buffer_size = (oss_cfg.buffer_size * input.bps) / 1000;
+ if (buffer_size < 8192)
+ buffer_size = 8192;
+ prebuffer_size = (buffer_size * oss_cfg.prebuffer) / 100;
+ if (buffer_size - prebuffer_size < 4096)
+ prebuffer_size = buffer_size - 4096;
+
+ buffer_size += device_buffer_size;
+ buffer = g_malloc0(buffer_size);
+ }
+ flush = -1;
+ prebuffer = TRUE;
+ wr_index = rd_index = output_time_offset = written = output_bytes = 0;
+ paused = FALSE;
+ do_pause = FALSE;
+ unpause = FALSE;
+ remove_prebuffer = FALSE;
+
+ going = 1;
+ if (!realtime)
+ buffer_thread = g_thread_create(oss_loop, NULL, TRUE, NULL);
+ return 1;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/configure.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/configure.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/configure.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,375 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "OSS.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libbeep/configdb.h>
+
+
+static GtkWidget *configure_win = NULL;
+static GtkWidget *mixer_usemaster_check, *buffer_size_spin, *buffer_pre_spin;
+static GtkWidget *adevice_use_alt_check, *audio_alt_device_entry;
+static GtkWidget *mdevice_use_alt_check, *mixer_alt_device_entry;
+static gint audio_device, mixer_device;
+
+static void
+configure_win_ok_cb(GtkWidget * w, gpointer data)
+{
+ ConfigDb *db;
+
+ oss_cfg.audio_device = audio_device;
+ oss_cfg.mixer_device = mixer_device;
+ oss_cfg.buffer_size =
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_size_spin));
+ oss_cfg.prebuffer =
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_pre_spin));
+ oss_cfg.use_master =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (mixer_usemaster_check));
+ oss_cfg.use_alt_audio_device =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (adevice_use_alt_check));
+ oss_cfg.use_alt_mixer_device =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
+ (mdevice_use_alt_check));
+ g_free(oss_cfg.alt_audio_device);
+ oss_cfg.alt_audio_device =
+ gtk_editable_get_chars(GTK_EDITABLE(audio_alt_device_entry), 0, -1);
+ g_strstrip(oss_cfg.alt_audio_device);
+ g_free(oss_cfg.alt_mixer_device);
+ oss_cfg.alt_mixer_device =
+ gtk_editable_get_chars(GTK_EDITABLE(mixer_alt_device_entry), 0, -1);
+ g_strstrip(oss_cfg.alt_mixer_device);
+
+ if (oss_cfg.use_alt_audio_device)
+ /* do a minimum of sanity checking */
+ if (oss_cfg.alt_audio_device[0] != '/')
+ oss_cfg.use_alt_audio_device = FALSE;
+ if (oss_cfg.use_alt_mixer_device)
+ if (oss_cfg.alt_mixer_device[0] != '/')
+ oss_cfg.use_alt_mixer_device = FALSE;
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_set_int(db, "OSS", "audio_device", oss_cfg.audio_device);
+ bmp_cfg_db_set_int(db, "OSS", "mixer_device", oss_cfg.mixer_device);
+ bmp_cfg_db_set_int(db, "OSS", "buffer_size", oss_cfg.buffer_size);
+ bmp_cfg_db_set_int(db, "OSS", "prebuffer", oss_cfg.prebuffer);
+ bmp_cfg_db_set_bool(db, "OSS", "use_master", oss_cfg.use_master);
+ bmp_cfg_db_set_bool(db, "OSS", "use_alt_audio_device",
+ oss_cfg.use_alt_audio_device);
+ bmp_cfg_db_set_string(db, "OSS", "alt_audio_device",
+ oss_cfg.alt_audio_device);
+ bmp_cfg_db_set_bool(db, "OSS", "use_alt_mixer_device",
+ oss_cfg.use_alt_mixer_device);
+ bmp_cfg_db_set_string(db, "OSS", "alt_mixer_device",
+ oss_cfg.alt_mixer_device);
+ bmp_cfg_db_close(db);
+}
+
+static void
+configure_win_audio_dev_cb(GtkWidget * widget, gint device)
+{
+ audio_device = device;
+}
+
+static void
+configure_win_mixer_dev_cb(GtkWidget * widget, gint device)
+{
+ mixer_device = device;
+}
+
+static void
+audio_device_toggled(GtkToggleButton * widget, gpointer data)
+{
+ gboolean use_alt_audio_device = gtk_toggle_button_get_active(widget);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), !use_alt_audio_device);
+ gtk_widget_set_sensitive(audio_alt_device_entry, use_alt_audio_device);
+}
+
+static void
+mixer_device_toggled(GtkToggleButton * widget, gpointer data)
+{
+ gboolean use_alt_device = gtk_toggle_button_get_active(widget);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), !use_alt_device);
+ gtk_widget_set_sensitive(mixer_alt_device_entry, use_alt_device);
+}
+
+static void
+scan_devices(gchar * type, GtkWidget * option_menu, GtkSignalFunc sigfunc)
+{
+ GtkWidget *menu, *item;
+ FILE *file;
+ gchar buffer[256], *temp, *tmp2;
+ gboolean found = FALSE;
+ gint index = 0;
+
+ menu = gtk_menu_new();
+
+ if ((file = fopen("/dev/sndstat", "r"))) {
+ while (fgets(buffer, 255, file)) {
+ if (found && buffer[0] == '\n')
+ break;
+ if (buffer[strlen(buffer) - 1] == '\n')
+ buffer[strlen(buffer) - 1] = '\0';
+ if (found) {
+ if (index == 0) {
+ tmp2 = strchr(buffer, ':');
+ if (tmp2) {
+ tmp2++;
+ while (*tmp2 == ' ')
+ tmp2++;
+ }
+ else
+ tmp2 = buffer;
+ temp = g_strdup_printf(_("Default (%s)"), tmp2);
+ item = gtk_menu_item_new_with_label(temp);
+ g_free(temp);
+ }
+ else
+ item = gtk_menu_item_new_with_label(buffer);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(sigfunc), (gpointer) index++);
+ gtk_widget_show(item);
+ gtk_menu_append(GTK_MENU(menu), item);
+ }
+ if (!strcasecmp(buffer, type))
+ found = 1;
+
+ }
+ fclose(file);
+ }
+ else {
+ item = gtk_menu_item_new_with_label(_("Default"));
+ g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(sigfunc),
+ (gpointer) 0);
+ gtk_widget_show(item);
+ gtk_menu_append(GTK_MENU(menu), item);
+ }
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu);
+}
+
+void
+oss_configure(void)
+{
+ GtkWidget *vbox, *notebook;
+ GtkWidget *dev_vbox, *adevice_frame, *adevice_box, *adevice;
+ GtkWidget *mdevice_frame, *mdevice_box, *mdevice;
+ GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
+ GtkWidget *buffer_size_box, *buffer_size_label;
+ GtkObject *buffer_size_adj, *buffer_pre_adj;
+ GtkWidget *buffer_pre_box, *buffer_pre_label;
+ GtkWidget *audio_alt_box, *mixer_alt_box;
+ GtkWidget *bbox, *ok, *cancel;
+ GtkWidget *mixer_table, *mixer_frame;
+
+ if (configure_win) {
+ gtk_window_present(GTK_WINDOW(configure_win));
+ return;
+ }
+
+ configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ g_signal_connect(G_OBJECT(configure_win), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &configure_win);
+ gtk_window_set_title(GTK_WINDOW(configure_win),
+ _("OSS Driver configuration"));
+ gtk_window_set_type_hint(GTK_WINDOW(configure_win),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(configure_win), FALSE);
+ gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_CENTER);
+ gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(configure_win), vbox);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ dev_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(dev_vbox), 5);
+
+ adevice_frame = gtk_frame_new(_("Audio device:"));
+ gtk_box_pack_start(GTK_BOX(dev_vbox), adevice_frame, FALSE, FALSE, 0);
+
+ adevice_box = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(adevice_box), 5);
+ gtk_container_add(GTK_CONTAINER(adevice_frame), adevice_box);
+
+ adevice = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(adevice_box), adevice, TRUE, TRUE, 0);
+#if defined(HAVE_NEWPCM)
+ scan_devices("Installed devices:", adevice,
+ GTK_SIGNAL_FUNC(configure_win_audio_dev_cb));
+#else
+ scan_devices("Audio devices:", adevice,
+ GTK_SIGNAL_FUNC(configure_win_audio_dev_cb));
+#endif
+ audio_device = oss_cfg.audio_device;
+ gtk_option_menu_set_history(GTK_OPTION_MENU(adevice),
+ oss_cfg.audio_device);
+ audio_alt_box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start_defaults(GTK_BOX(adevice_box), audio_alt_box);
+ adevice_use_alt_check =
+ gtk_check_button_new_with_label(_("Use alternate device:"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(adevice_use_alt_check),
+ oss_cfg.use_alt_audio_device);
+ g_signal_connect(G_OBJECT(adevice_use_alt_check), "toggled",
+ G_CALLBACK(audio_device_toggled), adevice);
+ gtk_box_pack_start(GTK_BOX(audio_alt_box), adevice_use_alt_check,
+ FALSE, FALSE, 0);
+ audio_alt_device_entry = gtk_entry_new();
+ if (oss_cfg.alt_audio_device != NULL)
+ gtk_entry_set_text(GTK_ENTRY(audio_alt_device_entry),
+ oss_cfg.alt_audio_device);
+ else
+ gtk_entry_set_text(GTK_ENTRY(audio_alt_device_entry), DEV_DSP);
+ gtk_box_pack_start_defaults(GTK_BOX(audio_alt_box),
+ audio_alt_device_entry);
+
+ if (oss_cfg.use_alt_audio_device)
+ gtk_widget_set_sensitive(adevice, FALSE);
+ else
+ gtk_widget_set_sensitive(audio_alt_device_entry, FALSE);
+
+ mdevice_frame = gtk_frame_new(_("Mixer device:"));
+ gtk_box_pack_start(GTK_BOX(dev_vbox), mdevice_frame, FALSE, FALSE, 0);
+
+ mdevice_box = gtk_vbox_new(FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(mdevice_box), 5);
+ gtk_container_add(GTK_CONTAINER(mdevice_frame), mdevice_box);
+
+ mdevice = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(mdevice_box), mdevice, TRUE, TRUE, 0);
+#if defined(HAVE_NEWPCM)
+ scan_devices("Installed devices:", mdevice, configure_win_mixer_dev_cb);
+#else
+ scan_devices("Mixers:", mdevice, G_CALLBACK(configure_win_mixer_dev_cb));
+#endif
+ mixer_device = oss_cfg.mixer_device;
+ gtk_option_menu_set_history(GTK_OPTION_MENU(mdevice),
+ oss_cfg.mixer_device);
+ mixer_alt_box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start_defaults(GTK_BOX(mdevice_box), mixer_alt_box);
+ mdevice_use_alt_check =
+ gtk_check_button_new_with_label(_("Use alternate device:"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mdevice_use_alt_check),
+ oss_cfg.use_alt_mixer_device);
+ g_signal_connect(G_OBJECT(mdevice_use_alt_check), "toggled",
+ G_CALLBACK(mixer_device_toggled), mdevice);
+ gtk_box_pack_start(GTK_BOX(mixer_alt_box), mdevice_use_alt_check,
+ FALSE, FALSE, 0);
+ mixer_alt_device_entry = gtk_entry_new();
+ if (oss_cfg.alt_mixer_device != NULL)
+ gtk_entry_set_text(GTK_ENTRY(mixer_alt_device_entry),
+ oss_cfg.alt_mixer_device);
+ else
+ gtk_entry_set_text(GTK_ENTRY(mixer_alt_device_entry), DEV_MIXER);
+ gtk_box_pack_start_defaults(GTK_BOX(mixer_alt_box),
+ mixer_alt_device_entry);
+
+ if (oss_cfg.use_alt_mixer_device)
+ gtk_widget_set_sensitive(mdevice, FALSE);
+ else
+ gtk_widget_set_sensitive(mixer_alt_device_entry, FALSE);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dev_vbox,
+ gtk_label_new(_("Devices")));
+
+ buffer_frame = gtk_frame_new(_("Buffering:"));
+ gtk_container_set_border_width(GTK_CONTAINER(buffer_frame), 5);
+
+ buffer_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(buffer_frame), buffer_vbox);
+
+ buffer_table = gtk_table_new(2, 1, TRUE);
+ gtk_container_set_border_width(GTK_CONTAINER(buffer_table), 5);
+ gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
+
+ buffer_size_box = gtk_hbox_new(FALSE, 5);
+ gtk_table_attach_defaults(GTK_TABLE(buffer_table), buffer_size_box, 0,
+ 1, 0, 1);
+ buffer_size_label = gtk_label_new(_("Buffer size (ms):"));
+ gtk_box_pack_start(GTK_BOX(buffer_size_box), buffer_size_label, FALSE,
+ FALSE, 0);
+ buffer_size_adj =
+ gtk_adjustment_new(oss_cfg.buffer_size, 200, 10000, 100, 100, 100);
+ buffer_size_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(buffer_size_adj), 8, 0);
+ gtk_widget_set_usize(buffer_size_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(buffer_size_box), buffer_size_spin, FALSE,
+ FALSE, 0);
+
+ buffer_pre_box = gtk_hbox_new(FALSE, 5);
+ gtk_table_attach_defaults(GTK_TABLE(buffer_table), buffer_pre_box, 1,
+ 2, 0, 1);
+ buffer_pre_label = gtk_label_new(_("Pre-buffer (percent):"));
+ gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_label, FALSE,
+ FALSE, 0);
+ buffer_pre_adj = gtk_adjustment_new(oss_cfg.prebuffer, 0, 90, 1, 1, 1);
+ buffer_pre_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(buffer_pre_adj), 1, 0);
+ gtk_widget_set_usize(buffer_pre_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_spin, FALSE,
+ FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame,
+ gtk_label_new(_("Buffering")));
+ mixer_frame = gtk_frame_new(_("Mixer Settings:"));
+ gtk_container_set_border_width(GTK_CONTAINER(mixer_frame), 5);
+ mixer_table = gtk_table_new(3, 2, TRUE);
+ gtk_container_add(GTK_CONTAINER(mixer_frame), mixer_table);
+ gtk_container_set_border_width(GTK_CONTAINER(mixer_table), 5);
+ mixer_usemaster_check =
+ gtk_check_button_new_with_label(_("Volume controls Master not PCM"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mixer_usemaster_check),
+ oss_cfg.use_master);
+ gtk_table_attach_defaults(GTK_TABLE(mixer_table),
+ mixer_usemaster_check, 0, 1, 0, 1);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), mixer_frame,
+ gtk_label_new(_("Mixer")));
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(configure_win));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_APPLY);
+ g_signal_connect(G_OBJECT(ok), "clicked",
+ G_CALLBACK(configure_win_ok_cb), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ gtk_widget_grab_default(ok);
+
+ gtk_widget_show_all(configure_win);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/convert.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/convert.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/convert.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,446 @@
+/*
+ * Copyright (C) 2001 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "OSS.h"
+
+struct buffer {
+ void *buffer;
+ int size;
+} format_buffer, stereo_buffer;
+
+
+static void *
+oss_get_convert_buffer(struct buffer *buffer, size_t size)
+{
+ if (size > 0 && size <= buffer->size)
+ return buffer->buffer;
+
+ buffer->size = size;
+ buffer->buffer = g_realloc(buffer->buffer, size);
+ return buffer->buffer;
+}
+
+void
+oss_free_convert_buffer(void)
+{
+ oss_get_convert_buffer(&format_buffer, 0);
+ oss_get_convert_buffer(&stereo_buffer, 0);
+}
+
+
+static int
+convert_swap_endian(void **data, int length)
+{
+ guint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr = GUINT16_SWAP_LE_BE(*ptr);
+
+ return i;
+}
+
+static int
+convert_swap_sign_and_endian_to_native(void **data, int length)
+{
+ guint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr = GUINT16_SWAP_LE_BE(*ptr) ^ 1 << 15;
+
+ return i;
+}
+
+static int
+convert_swap_sign_and_endian_to_alien(void **data, int length)
+{
+ guint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr = GUINT16_SWAP_LE_BE(*ptr ^ 1 << 15);
+
+ return i;
+}
+
+static int
+convert_swap_sign16(void **data, int length)
+{
+ gint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr ^= 1 << 15;
+
+ return i;
+}
+
+static int
+convert_swap_sign8(void **data, int length)
+{
+ gint8 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i++)
+ *ptr++ ^= 1 << 7;
+
+ return i;
+}
+
+static int
+convert_to_8_native_endian(void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = *input++ >> 8;
+
+ return i;
+}
+
+static int
+convert_to_8_native_endian_swap_sign(void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = (*input++ >> 8) ^ (1 << 7);
+
+ return i;
+}
+
+
+static int
+convert_to_8_alien_endian(void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = *input++ & 0xff;
+
+ return i;
+}
+
+static int
+convert_to_8_alien_endian_swap_sign(void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = (*input++ & 0xff) ^ (1 << 7);
+
+ return i;
+}
+
+static int
+convert_to_16_native_endian(void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = oss_get_convert_buffer(&format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = *input++ << 8;
+
+ return i * 2;
+}
+
+static int
+convert_to_16_native_endian_swap_sign(void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = oss_get_convert_buffer(&format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = (*input++ << 8) ^ (1 << 15);
+
+ return i * 2;
+}
+
+
+static int
+convert_to_16_alien_endian(void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = oss_get_convert_buffer(&format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = *input++;
+
+ return i * 2;
+}
+
+static int
+convert_to_16_alien_endian_swap_sign(void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = oss_get_convert_buffer(&format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = *input++ ^ (1 << 7);
+
+ return i * 2;
+}
+
+int (*oss_get_convert_func(int output, int input)) (void **, int) {
+ if (output == input)
+ return NULL;
+
+ if ((output == AFMT_U16_BE && input == AFMT_U16_LE) ||
+ (output == AFMT_U16_LE && input == AFMT_U16_BE) ||
+ (output == AFMT_S16_BE && input == AFMT_S16_LE) ||
+ (output == AFMT_S16_LE && input == AFMT_S16_BE))
+ return convert_swap_endian;
+
+ if ((output == AFMT_U16_BE && input == AFMT_S16_BE) ||
+ (output == AFMT_U16_LE && input == AFMT_S16_LE) ||
+ (output == AFMT_S16_BE && input == AFMT_U16_BE) ||
+ (output == AFMT_S16_LE && input == AFMT_U16_LE))
+ return convert_swap_sign16;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_BE && input == AFMT_S16_LE) ||
+ (output == AFMT_S16_BE && input == AFMT_U16_LE))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_LE && input == AFMT_S16_BE) ||
+ (output == AFMT_S16_LE && input == AFMT_U16_BE))))
+ return convert_swap_sign_and_endian_to_native;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_BE && input == AFMT_S16_LE) ||
+ (output == AFMT_S16_BE && input == AFMT_U16_LE))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_LE && input == AFMT_S16_BE) ||
+ (output == AFMT_S16_LE && input == AFMT_U16_BE))))
+ return convert_swap_sign_and_endian_to_alien;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_U16_BE) ||
+ (output == AFMT_S8 && input == AFMT_S16_BE))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_U16_LE) ||
+ (output == AFMT_S8 && input == AFMT_S16_LE))))
+ return convert_to_8_native_endian;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_S16_BE) ||
+ (output == AFMT_S8 && input == AFMT_U16_BE))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_S16_LE) ||
+ (output == AFMT_S8 && input == AFMT_U16_LE))))
+ return convert_to_8_native_endian_swap_sign;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_U16_BE) ||
+ (output == AFMT_S8 && input == AFMT_S16_BE))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_U16_LE) ||
+ (output == AFMT_S8 && input == AFMT_S16_LE))))
+ return convert_to_8_alien_endian;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_S16_BE) ||
+ (output == AFMT_S8 && input == AFMT_U16_BE))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == AFMT_U8 && input == AFMT_S16_LE) ||
+ (output == AFMT_S8 && input == AFMT_U16_LE))))
+ return convert_to_8_alien_endian_swap_sign;
+
+ if ((output == AFMT_U8 && input == AFMT_S8) ||
+ (output == AFMT_S8 && input == AFMT_U8))
+ return convert_swap_sign8;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_BE && input == AFMT_U8) ||
+ (output == AFMT_S16_BE && input == AFMT_S8))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_LE && input == AFMT_U8) ||
+ (output == AFMT_S16_LE && input == AFMT_S8))))
+ return convert_to_16_native_endian;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_BE && input == AFMT_S8) ||
+ (output == AFMT_S16_BE && input == AFMT_U8))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_LE && input == AFMT_S8) ||
+ (output == AFMT_S16_LE && input == AFMT_U8))))
+ return convert_to_16_native_endian_swap_sign;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_BE && input == AFMT_U8) ||
+ (output == AFMT_S16_BE && input == AFMT_S8))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_LE && input == AFMT_U8) ||
+ (output == AFMT_S16_LE && input == AFMT_S8))))
+ return convert_to_16_alien_endian;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_BE && input == AFMT_S8) ||
+ (output == AFMT_S16_BE && input == AFMT_U8))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == AFMT_U16_LE && input == AFMT_S8) ||
+ (output == AFMT_S16_LE && input == AFMT_U8))))
+ return convert_to_16_alien_endian_swap_sign;
+
+ g_warning("Translation needed, but not available.\n"
+ "Input: %d; Output %d.", input, output);
+ return NULL;
+}
+
+static int
+convert_mono_to_stereo(void **data, int length, int fmt)
+{
+ int i;
+ void *outbuf = oss_get_convert_buffer(&stereo_buffer, length * 2);
+
+ if (fmt == AFMT_U8 || fmt == AFMT_S8) {
+ guint8 *output = outbuf, *input = *data;
+ for (i = 0; i < length; i++) {
+ *output++ = *input;
+ *output++ = *input;
+ input++;
+ }
+ }
+ else {
+ guint16 *output = outbuf, *input = *data;
+ for (i = 0; i < length / 2; i++) {
+ *output++ = *input;
+ *output++ = *input;
+ input++;
+ }
+ }
+ *data = outbuf;
+
+ return length * 2;
+}
+
+static int
+convert_stereo_to_mono(void **data, int length, int fmt)
+{
+ int i;
+
+ switch (fmt) {
+ case AFMT_U8:
+ {
+ guint8 *output = *data, *input = *data;
+ for (i = 0; i < length / 2; i++) {
+ guint16 tmp;
+ tmp = *input++;
+ tmp += *input++;
+ *output++ = tmp / 2;
+ }
+ }
+ break;
+ case AFMT_S8:
+ {
+ gint8 *output = *data, *input = *data;
+ for (i = 0; i < length / 2; i++) {
+ gint16 tmp;
+ tmp = *input++;
+ tmp += *input++;
+ *output++ = tmp / 2;
+ }
+ }
+ break;
+ case AFMT_U16_LE:
+ {
+ guint16 *output = *data, *input = *data;
+ for (i = 0; i < length / 4; i++) {
+ guint32 tmp;
+ guint16 stmp;
+ tmp = GUINT16_FROM_LE(*input);
+ input++;
+ tmp += GUINT16_FROM_LE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GUINT16_TO_LE(stmp);
+ }
+ }
+ break;
+ case AFMT_U16_BE:
+ {
+ guint16 *output = *data, *input = *data;
+ for (i = 0; i < length / 4; i++) {
+ guint32 tmp;
+ guint16 stmp;
+ tmp = GUINT16_FROM_BE(*input);
+ input++;
+ tmp += GUINT16_FROM_BE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GUINT16_TO_BE(stmp);
+ }
+ }
+ break;
+ case AFMT_S16_LE:
+ {
+ gint16 *output = *data, *input = *data;
+ for (i = 0; i < length / 4; i++) {
+ gint32 tmp;
+ gint16 stmp;
+ tmp = GINT16_FROM_LE(*input);
+ input++;
+ tmp += GINT16_FROM_LE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GINT16_TO_LE(stmp);
+ }
+ }
+ break;
+ case AFMT_S16_BE:
+ {
+ gint16 *output = *data, *input = *data;
+ for (i = 0; i < length / 4; i++) {
+ gint32 tmp;
+ gint16 stmp;
+ tmp = GINT16_FROM_BE(*input);
+ input++;
+ tmp += GINT16_FROM_BE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GINT16_TO_BE(stmp);
+ }
+ }
+ break;
+ default:
+ g_error("unknown format");
+ }
+
+ return length / 2;
+}
+
+int (*oss_get_stereo_convert_func(int output, int input)) (void **, int, int) {
+ if (output == input)
+ return NULL;
+
+ if (input == 1 && output == 2)
+ return convert_mono_to_stereo;
+ if (input == 2 && output == 1)
+ return convert_stereo_to_mono;
+
+ g_warning("Input has %d channels, soundcard uses %d channels\n"
+ "No conversion is available", input, output);
+ return NULL;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/init.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/init.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/init.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,61 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <libbeep/configdb.h>
+#include "OSS.h"
+
+
+OSSConfig oss_cfg;
+
+void
+oss_init(void)
+{
+ ConfigDb *db;
+
+ memset(&oss_cfg, 0, sizeof(OSSConfig));
+
+ oss_cfg.audio_device = 0;
+ oss_cfg.mixer_device = 0;
+ oss_cfg.buffer_size = 3000;
+ oss_cfg.prebuffer = 25;
+ oss_cfg.use_alt_audio_device = FALSE;
+ oss_cfg.alt_audio_device = NULL;
+ oss_cfg.use_master = 0;
+
+ if ((db = bmp_cfg_db_open())) {
+ bmp_cfg_db_get_int(db, "OSS", "audio_device", &oss_cfg.audio_device);
+ bmp_cfg_db_get_int(db, "OSS", "mixer_device", &oss_cfg.mixer_device);
+ bmp_cfg_db_get_int(db, "OSS", "buffer_size", &oss_cfg.buffer_size);
+ bmp_cfg_db_get_int(db, "OSS", "prebuffer", &oss_cfg.prebuffer);
+ bmp_cfg_db_get_bool(db, "OSS", "use_master", &oss_cfg.use_master);
+ bmp_cfg_db_get_bool(db, "OSS", "use_alt_audio_device",
+ &oss_cfg.use_alt_audio_device);
+ bmp_cfg_db_get_string(db, "OSS", "alt_audio_device",
+ &oss_cfg.alt_audio_device);
+ bmp_cfg_db_get_bool(db, "OSS", "use_alt_mixer_device",
+ &oss_cfg.use_alt_mixer_device);
+ bmp_cfg_db_get_string(db, "OSS", "alt_mixer_device",
+ &oss_cfg.alt_mixer_device);
+ bmp_cfg_db_close(db);
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/mixer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/mixer.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/mixer.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,110 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+
+#include "OSS.h"
+
+
+static char *
+get_mixer_device(void)
+{
+ char *name;
+
+ if (oss_cfg.use_alt_mixer_device && oss_cfg.alt_mixer_device)
+ name = g_strdup(oss_cfg.alt_mixer_device);
+ else if (oss_cfg.mixer_device > 0)
+ name = g_strdup_printf("%s%d", DEV_MIXER, oss_cfg.mixer_device);
+ else
+ name = g_strdup(DEV_MIXER);
+
+ return name;
+}
+
+void
+oss_get_volume(int *l, int *r)
+{
+ int fd, v, devs;
+ long cmd;
+ gchar *devname;
+
+ devname = get_mixer_device();
+ fd = open(devname, O_RDONLY);
+ g_free(devname);
+
+ /*
+ * We dont show any errors if this fails, as this is called
+ * rather often
+ */
+ if (fd != -1) {
+ ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
+ if ((devs & SOUND_MASK_PCM) && (oss_cfg.use_master == 0))
+ cmd = SOUND_MIXER_READ_PCM;
+ else if ((devs & SOUND_MASK_VOLUME) && (oss_cfg.use_master == 1))
+ cmd = SOUND_MIXER_READ_VOLUME;
+ else {
+ close(fd);
+ return;
+ }
+ ioctl(fd, cmd, &v);
+ *r = (v & 0xFF00) >> 8;
+ *l = (v & 0x00FF);
+ close(fd);
+ }
+}
+
+void
+oss_set_volume(int l, int r)
+{
+ int fd, v, devs;
+ long cmd;
+ gchar *devname;
+
+ devname = get_mixer_device();
+ fd = open(devname, O_RDONLY);
+
+ if (fd != -1) {
+ ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
+ if ((devs & SOUND_MASK_PCM) && (oss_cfg.use_master == 0))
+ cmd = SOUND_MIXER_WRITE_PCM;
+ else if ((devs & SOUND_MASK_VOLUME) && (oss_cfg.use_master == 1))
+ cmd = SOUND_MIXER_WRITE_VOLUME;
+ else {
+ close(fd);
+ return;
+ }
+ v = (r << 8) | l;
+ ioctl(fd, cmd, &v);
+ close(fd);
+ }
+ else
+ g_warning("oss_set_volume(): Failed to open mixer device (%s): %s",
+ devname, strerror(errno));
+ g_free(devname);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/soundcard.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/soundcard.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/OSS/soundcard.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1695 @@
+#ifndef SOUNDCARD_H
+#define SOUNDCARD_H
+/*
+ * Copyright by Hannu Savolainen 1993-2000
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. 2.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * IMPORTANT NOTICE!
+ *
+ * This header file contains many obsolete definitions (for compatibility
+ * purposes). Please check the OSS Programmer's guide for descriptions
+ * of the supported API details (http://www.opensound.com/pguide).
+ */
+
+#if defined(__cplusplus)
+#define EXTERNC extern "C"
+#else
+#define EXTERNC extern
+#endif /* EXTERN_C_WRAPPERS */
+
+/*
+ * OSS interface version. With versions earlier than 3.6 this value is
+ * an integer with value less than 361. In versions 3.6 and later
+ * it's a six digit hexadecimal value. For example value
+ * of 0x030600 represents OSS version 3.6.0.
+ * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of
+ * the currently active driver.
+ */
+#define SOUND_VERSION 0x030960
+#define OPEN_SOUND_SYSTEM
+
+#if defined(__hpux) && !defined(_HPUX_SOURCE)
+# error "-D_HPUX_SOURCE must be used when compiling OSS applications"
+#endif
+
+#ifdef __hpux
+#include <sys/ioctl.h>
+#endif
+
+#ifdef linux
+/* In Linux we need to be prepared for cross compiling */
+#include <linux/ioctl.h>
+#else
+# ifdef __FreeBSD__
+# include <sys/ioccom.h>
+# else
+# include <sys/ioctl.h>
+# endif
+#endif
+
+/*
+ * Supported card ID numbers (OBSOLETE. NOT USED ANY MORE)
+ */
+
+#define SNDCARD_ADLIB 1
+#define SNDCARD_SB 2
+#define SNDCARD_PAS 3
+#define SNDCARD_GUS 4
+#define SNDCARD_MPU401 5
+#define SNDCARD_SB16 6
+#define SNDCARD_SB16MIDI 7
+#define SNDCARD_UART6850 8
+#define SNDCARD_GUS16 9
+#define SNDCARD_MSS 10
+#define SNDCARD_PSS 11
+#define SNDCARD_SSCAPE 12
+#define SNDCARD_PSS_MPU 13
+#define SNDCARD_PSS_MSS 14
+#define SNDCARD_SSCAPE_MSS 15
+#define SNDCARD_TRXPRO 16
+#define SNDCARD_TRXPRO_SB 17
+#define SNDCARD_TRXPRO_MPU 18
+#define SNDCARD_MAD16 19
+#define SNDCARD_MAD16_MPU 20
+#define SNDCARD_CS4232 21
+#define SNDCARD_CS4232_MPU 22
+#define SNDCARD_MAUI 23
+#define SNDCARD_PSEUDO_MSS 24
+#define SNDCARD_GUSPNP 25
+#define SNDCARD_UART401 26
+/* Sound card numbers 27 to N are reserved. Don't add more numbers here */
+
+/***********************************
+ * IOCTL Commands for /dev/sequencer
+ */
+
+#ifndef __SIOWR
+#if defined(__hpux) || (defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__INCioctlh) && !defined(__Lynx__))))
+/* Use already defined ioctl defines if they exist (except with Sun and some others) */
+#define SIOCPARM_MASK IOCPARM_MASK
+#define SIOC_VOID IOC_VOID
+#define SIOC_OUT IOC_OUT
+#define SIOC_IN IOC_IN
+#define SIOC_INOUT IOC_INOUT
+#define __SIOC_SIZE _IOC_SIZE
+#define __SIOC_DIR _IOC_DIR
+#define __SIOC_NONE _IOC_NONE
+#define __SIOC_READ _IOC_READ
+#define __SIOC_WRITE _IOC_WRITE
+#define __SIO _IO
+#define __SIOR _IOR
+#define __SIOW _IOW
+#define __SIOWR _IOWR
+#else
+
+/* Ioctl's have the command encoded in the lower word,
+ * and the size of any in or out parameters in the upper
+ * word. The high 2 bits of the upper word are used
+ * to encode the in/out status of the parameter; for now
+ * we restrict parameters to at most 8191 bytes.
+ */
+/* #define SIOCTYPE (0xff<<8) */
+#define SIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */
+#define SIOC_VOID 0x00000000 /* no parameters */
+#define SIOC_OUT 0x20000000 /* copy out parameters */
+#define SIOC_IN 0x40000000 /* copy in parameters */
+#define SIOC_INOUT (SIOC_IN|SIOC_OUT)
+/* the 0x20000000 is so we can distinguish new ioctl's from old */
+#define __SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
+#define __SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define __SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define __SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define __SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
+#define __SIOC_DIR(x) (x & 0xf0000000)
+#define __SIOC_NONE SIOC_VOID
+#define __SIOC_READ SIOC_OUT
+#define __SIOC_WRITE SIOC_IN
+# endif /* _IOWR */
+#endif /* !__SIOWR */
+
+#define SNDCTL_SEQ_RESET __SIO ('Q', 0)
+#define SNDCTL_SEQ_SYNC __SIO ('Q', 1)
+#define SNDCTL_SYNTH_INFO __SIOWR('Q', 2, struct synth_info)
+#define SNDCTL_SEQ_CTRLRATE __SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
+#define SNDCTL_SEQ_GETOUTCOUNT __SIOR ('Q', 4, int)
+#define SNDCTL_SEQ_GETINCOUNT __SIOR ('Q', 5, int)
+#define SNDCTL_SEQ_PERCMODE __SIOW ('Q', 6, int)
+#define SNDCTL_FM_LOAD_INSTR __SIOW ('Q', 7, struct sbi_instrument) /* Obsolete. Don't use!!!!!! */
+#define SNDCTL_SEQ_TESTMIDI __SIOW ('Q', 8, int)
+#define SNDCTL_SEQ_RESETSAMPLES __SIOW ('Q', 9, int)
+#define SNDCTL_SEQ_NRSYNTHS __SIOR ('Q',10, int)
+#define SNDCTL_SEQ_NRMIDIS __SIOR ('Q',11, int)
+#define SNDCTL_MIDI_INFO __SIOWR('Q',12, struct midi_info)
+#define SNDCTL_SEQ_THRESHOLD __SIOW ('Q',13, int)
+#define SNDCTL_SYNTH_MEMAVL __SIOWR('Q',14, int) /* in=dev#, out=memsize */
+#define SNDCTL_FM_4OP_ENABLE __SIOW ('Q',15, int) /* in=dev# */
+#define SNDCTL_SEQ_PANIC __SIO ('Q',17)
+#define SNDCTL_SEQ_OUTOFBAND __SIOW ('Q',18, struct seq_event_rec)
+#define SNDCTL_SEQ_GETTIME __SIOR ('Q',19, int)
+#define SNDCTL_SYNTH_ID __SIOWR('Q',20, struct synth_info)
+#define SNDCTL_SYNTH_CONTROL __SIOWR('Q',21, struct synth_control)
+#define SNDCTL_SYNTH_REMOVESAMPLE __SIOWR('Q',22, struct remove_sample) /* Reserved for future use */
+#define SNDCTL_SEQ_TIMING_ENABLE __SIO ('Q', 23) /* Enable incoming MIDI timing messages */
+#define SNDCTL_SEQ_ACTSENSE_ENABLE __SIO ('Q', 24) /* Enable incoming active sensing messages */
+#define SNDCTL_SEQ_RT_ENABLE __SIO ('Q', 25) /* Enable other incoming realtime messages */
+
+typedef struct synth_control {
+ int devno; /* Synthesizer # */
+ char data[4000]; /* Device spesific command/data record */
+} synth_control;
+
+typedef struct remove_sample {
+ int devno; /* Synthesizer # */
+ int bankno; /* MIDI bank # (0=General MIDI) */
+ int instrno; /* MIDI instrument number */
+} remove_sample;
+
+typedef struct seq_event_rec {
+ unsigned char arr[8];
+} seq_event_rec;
+
+#define SNDCTL_TMR_TIMEBASE __SIOWR('T', 1, int)
+#define SNDCTL_TMR_START __SIO ('T', 2)
+#define SNDCTL_TMR_STOP __SIO ('T', 3)
+#define SNDCTL_TMR_CONTINUE __SIO ('T', 4)
+#define SNDCTL_TMR_TEMPO __SIOWR('T', 5, int)
+#define SNDCTL_TMR_SOURCE __SIOWR('T', 6, int)
+# define TMR_INTERNAL 0x00000001
+# define TMR_EXTERNAL 0x00000002
+# define TMR_MODE_MIDI 0x00000010
+# define TMR_MODE_FSK 0x00000020
+# define TMR_MODE_CLS 0x00000040
+# define TMR_MODE_SMPTE 0x00000080
+#define SNDCTL_TMR_METRONOME __SIOW ('T', 7, int)
+#define SNDCTL_TMR_SELECT __SIOW ('T', 8, int)
+
+/*
+ * Some big endian/little endian handling macros (native endian and opposite
+ * endian formats)
+ */
+
+#if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__hppa) || defined(PPC) || defined(__powerpc__) && !defined(i386) && !defined(__i386) && !defined(__i386__)
+/* Big endian machines */
+# define _PATCHKEY(id) (0xfd00|id)
+# define AFMT_S16_NE AFMT_S16_BE
+# define AFMT_U16_NE AFMT_U16_BE
+# define AFMT_S32_NE AFMT_S32_BE
+# define AFMT_S24_NE AFMT_S24_BE
+# define AFMT_S16_OE AFMT_S16_LE
+# define AFMT_S32_OE AFMT_S32_LE
+# define AFMT_S24_OE AFMT_S24_LE
+#else
+# define _PATCHKEY(id) ((id<<8)|0xfd)
+# define AFMT_S16_NE AFMT_S16_LE
+# define AFMT_U16_NE AFMT_U16_LE
+# define AFMT_S32_NE AFMT_S32_LE
+# define AFMT_S24_NE AFMT_S24_LE
+# define AFMT_S16_OE AFMT_S16_BE
+# define AFMT_S32_OE AFMT_S32_BE
+# define AFMT_S24_OE AFMT_S24_BE
+#endif
+
+/*
+ * Sample loading mechanism for internal synthesizers (/dev/sequencer)
+ * The following patch_info structure has been designed to support
+ * Gravis UltraSound. It tries to be universal format for uploading
+ * sample based patches but is probably too limited.
+ */
+
+struct patch_info {
+ unsigned short key; /* Use WAVE_PATCH here */
+#define WAVE_PATCH _PATCHKEY(0x04)
+#define GUS_PATCH WAVE_PATCH
+#define WAVEFRONT_PATCH _PATCHKEY(0x06)
+
+ short device_no; /* Synthesizer number */
+ short instr_no; /* Midi pgm# */
+
+ unsigned int mode;
+/*
+ * The least significant byte has the same format than the GUS .PAT
+ * files
+ */
+#define WAVE_16_BITS 0x01 /* bit 0 = 8 or 16 bit wave data. */
+#define WAVE_UNSIGNED 0x02 /* bit 1 = Signed - Unsigned data. */
+#define WAVE_LOOPING 0x04 /* bit 2 = looping enabled-1. */
+#define WAVE_BIDIR_LOOP 0x08 /* bit 3 = Set is bidirectional looping. */
+#define WAVE_LOOP_BACK 0x10 /* bit 4 = Set is looping backward. */
+#define WAVE_SUSTAIN_ON 0x20 /* bit 5 = Turn sustaining on. (Env. pts. 3) */
+#define WAVE_ENVELOPES 0x40 /* bit 6 = Enable envelopes - 1 */
+#define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */
+ /* (use the env_rate/env_offs fields). */
+/* Linux specific bits */
+#define WAVE_VIBRATO 0x00010000 /* The vibrato info is valid */
+#define WAVE_TREMOLO 0x00020000 /* The tremolo info is valid */
+#define WAVE_SCALE 0x00040000 /* The scaling info is valid */
+#define WAVE_FRACTIONS 0x00080000 /* Fraction information is valid */
+/* Reserved bits */
+#define WAVE_ROM 0x40000000 /* For future use */
+#define WAVE_MULAW 0x20000000 /* For future use */
+/* Other bits must be zeroed */
+
+ int len; /* Size of the wave data in bytes */
+ int loop_start, loop_end; /* Byte offsets from the beginning */
+
+/*
+ * The base_freq and base_note fields are used when computing the
+ * playback speed for a note. The base_note defines the tone frequency
+ * which is heard if the sample is played using the base_freq as the
+ * playback speed.
+ *
+ * The low_note and high_note fields define the minimum and maximum note
+ * frequencies for which this sample is valid. It is possible to define
+ * more than one samples for an instrument number at the same time. The
+ * low_note and high_note fields are used to select the most suitable one.
+ *
+ * The fields base_note, high_note and low_note should contain
+ * the note frequency multiplied by 1000. For example value for the
+ * middle A is 440*1000.
+ */
+
+ unsigned int base_freq;
+ unsigned int base_note;
+ unsigned int high_note;
+ unsigned int low_note;
+ int panning; /* -128=left, 127=right */
+ int detuning;
+
+/* New fields introduced in version 1.99.5 */
+
+ /* Envelope. Enabled by mode bit WAVE_ENVELOPES */
+ unsigned char env_rate[6]; /* GUS HW ramping rate */
+ unsigned char env_offset[6]; /* 255 == 100% */
+
+ /*
+ * The tremolo, vibrato and scale info are not supported yet.
+ * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or
+ * WAVE_SCALE
+ */
+
+ unsigned char tremolo_sweep;
+ unsigned char tremolo_rate;
+ unsigned char tremolo_depth;
+
+ unsigned char vibrato_sweep;
+ unsigned char vibrato_rate;
+ unsigned char vibrato_depth;
+
+ int scale_frequency;
+ unsigned int scale_factor; /* from 0 to 2048 or 0 to 2 */
+
+ int volume;
+ int fractions;
+ int reserved1;
+ int spare[2];
+ char data[1]; /* The waveform data starts here */
+};
+
+struct sysex_info {
+ short key; /* Use SYSEX_PATCH or MAUI_PATCH here */
+#define SYSEX_PATCH _PATCHKEY(0x05)
+#define MAUI_PATCH _PATCHKEY(0x06)
+ short device_no; /* Synthesizer number */
+ int len; /* Size of the sysex data in bytes */
+ unsigned char data[1]; /* Sysex data starts here */
+};
+
+/*
+ * /dev/sequencer input events.
+ *
+ * The data written to the /dev/sequencer is a stream of events. Events
+ * are records of 4 or 8 bytes. The first byte defines the size.
+ * Any number of events can be written with a write call. There
+ * is a set of macros for sending these events. Use these macros if you
+ * want to maximize portability of your program.
+ *
+ * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events.
+ * (All input events are currently 4 bytes long. Be prepared to support
+ * 8 byte events also. If you receive any event having first byte >= 128,
+ * it's a 8 byte event.
+ *
+ * The events are documented at the end of this file.
+ *
+ * Normal events (4 bytes)
+ * There is also a 8 byte version of most of the 4 byte events. The
+ * 8 byte one is recommended.
+ *
+ * NOTE! All 4 byte events are now obsolete. Applications should not write
+ * them. However 4 byte events are still used as inputs from
+ * /dev/sequencer (/dev/music uses only 8 byte ones).
+ */
+#define SEQ_NOTEOFF 0
+#define SEQ_FMNOTEOFF SEQ_NOTEOFF /* Just old name */
+#define SEQ_NOTEON 1
+#define SEQ_FMNOTEON SEQ_NOTEON
+#define SEQ_WAIT TMR_WAIT_ABS
+#define SEQ_PGMCHANGE 3
+#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
+#define SEQ_SYNCTIMER TMR_START
+#define SEQ_MIDIPUTC 5
+#define SEQ_DRUMON 6 /*** OBSOLETE ***/
+#define SEQ_DRUMOFF 7 /*** OBSOLETE ***/
+#define SEQ_ECHO TMR_ECHO /* For synching programs with output */
+#define SEQ_AFTERTOUCH 9
+#define SEQ_CONTROLLER 10
+
+/*******************************************
+ * Midi controller numbers
+ *******************************************
+ * Controllers 0 to 31 (0x00 to 0x1f) and
+ * 32 to 63 (0x20 to 0x3f) are continuous
+ * controllers.
+ * In the MIDI 1.0 these controllers are sent using
+ * two messages. Controller numbers 0 to 31 are used
+ * to send the MSB and the controller numbers 32 to 63
+ * are for the LSB. Note that just 7 bits are used in MIDI bytes.
+ */
+
+#define CTL_BANK_SELECT 0x00
+#define CTL_MODWHEEL 0x01
+#define CTL_BREATH 0x02
+/* undefined 0x03 */
+#define CTL_FOOT 0x04
+#define CTL_PORTAMENTO_TIME 0x05
+#define CTL_DATA_ENTRY 0x06
+#define CTL_MAIN_VOLUME 0x07
+#define CTL_BALANCE 0x08
+/* undefined 0x09 */
+#define CTL_PAN 0x0a
+#define CTL_EXPRESSION 0x0b
+/* undefined 0x0c */
+/* undefined 0x0d */
+/* undefined 0x0e */
+/* undefined 0x0f */
+#define CTL_GENERAL_PURPOSE1 0x10
+#define CTL_GENERAL_PURPOSE2 0x11
+#define CTL_GENERAL_PURPOSE3 0x12
+#define CTL_GENERAL_PURPOSE4 0x13
+/* undefined 0x14 - 0x1f */
+
+/* undefined 0x20 */
+/* The controller numbers 0x21 to 0x3f are reserved for the */
+/* least significant bytes of the controllers 0x00 to 0x1f. */
+/* These controllers are not recognised by the driver. */
+
+/* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */
+/* 0=OFF and 127=ON (intermediate values are possible) */
+#define CTL_DAMPER_PEDAL 0x40
+#define CTL_SUSTAIN 0x40 /* Alias */
+#define CTL_HOLD 0x40 /* Alias */
+#define CTL_PORTAMENTO 0x41
+#define CTL_SOSTENUTO 0x42
+#define CTL_SOFT_PEDAL 0x43
+/* undefined 0x44 */
+#define CTL_HOLD2 0x45
+/* undefined 0x46 - 0x4f */
+
+#define CTL_GENERAL_PURPOSE5 0x50
+#define CTL_GENERAL_PURPOSE6 0x51
+#define CTL_GENERAL_PURPOSE7 0x52
+#define CTL_GENERAL_PURPOSE8 0x53
+/* undefined 0x54 - 0x5a */
+#define CTL_EXT_EFF_DEPTH 0x5b
+#define CTL_TREMOLO_DEPTH 0x5c
+#define CTL_CHORUS_DEPTH 0x5d
+#define CTL_DETUNE_DEPTH 0x5e
+#define CTL_CELESTE_DEPTH 0x5e /* Alias for the above one */
+#define CTL_PHASER_DEPTH 0x5f
+#define CTL_DATA_INCREMENT 0x60
+#define CTL_DATA_DECREMENT 0x61
+#define CTL_NONREG_PARM_NUM_LSB 0x62
+#define CTL_NONREG_PARM_NUM_MSB 0x63
+#define CTL_REGIST_PARM_NUM_LSB 0x64
+#define CTL_REGIST_PARM_NUM_MSB 0x65
+/* undefined 0x66 - 0x78 */
+/* reserved 0x79 - 0x7f */
+
+/* Pseudo controllers (not midi compatible) */
+#define CTRL_PITCH_BENDER 255
+#define CTRL_PITCH_BENDER_RANGE 254
+#define CTRL_EXPRESSION 253 /* Obsolete */
+#define CTRL_MAIN_VOLUME 252 /* Obsolete */
+#define SEQ_BALANCE 11
+#define SEQ_VOLMODE 12
+
+/*
+ * Volume mode defines how volumes are used
+ */
+
+#define VOL_METHOD_ADAGIO 1
+#define VOL_METHOD_LINEAR 2
+
+/*
+ * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as
+ * input events.
+ */
+
+/*
+ * Event codes 0xf0 to 0xfc are reserved for future extensions.
+ */
+
+#define SEQ_FULLSIZE 0xfd /* Long events */
+/*
+ * SEQ_FULLSIZE events are used for loading patches/samples to the
+ * synthesizer devices. These events are passed directly to the driver
+ * of the associated synthesizer device. There is no limit to the size
+ * of the extended events. These events are not queued but executed
+ * immediately when the write() is called (execution can take several
+ * seconds of time).
+ *
+ * When a SEQ_FULLSIZE message is written to the device, it must
+ * be written using exactly one write() call. Other events cannot
+ * be mixed to the same write.
+ *
+ * For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the
+ * /dev/sequencer. Don't write other data together with the instrument structure
+ * Set the key field of the structure to FM_PATCH. The device field is used to
+ * route the patch to the corresponding device.
+ *
+ * For wave table use struct patch_info. Initialize the key field
+ * to WAVE_PATCH.
+ */
+#define SEQ_PRIVATE 0xfe /* Low level HW dependent events (8 bytes) */
+#define SEQ_EXTENDED 0xff /* Extended events (8 bytes) OBSOLETE */
+
+/*
+ * Record for FM patches
+ */
+
+typedef unsigned char sbi_instr_data[32];
+
+struct sbi_instrument {
+ unsigned short key; /* FM_PATCH or OPL3_PATCH */
+#define FM_PATCH _PATCHKEY(0x01)
+#define OPL3_PATCH _PATCHKEY(0x03)
+ short device; /* Synth# (0-4) */
+ int channel; /* Program# to be initialized */
+ sbi_instr_data operators; /* Register settings for operator cells (.SBI format) */
+};
+
+struct synth_info { /* Read only */
+ char name[30];
+ int device; /* 0-N. INITIALIZE BEFORE CALLING */
+ int synth_type;
+#define SYNTH_TYPE_FM 0
+#define SYNTH_TYPE_SAMPLE 1
+#define SYNTH_TYPE_MIDI 2 /* Midi interface */
+
+ int synth_subtype;
+#define FM_TYPE_ADLIB 0x00
+#define FM_TYPE_OPL3 0x01
+#define MIDI_TYPE_MPU401 0x401
+
+#define SAMPLE_TYPE_BASIC 0x10
+#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
+#define SAMPLE_TYPE_WAVEFRONT 0x11
+
+ int perc_mode; /* No longer supported */
+ int nr_voices;
+ int nr_drums; /* Obsolete field */
+ int instr_bank_size;
+ unsigned int capabilities;
+#define SYNTH_CAP_PERCMODE 0x00000001 /* No longer used */
+#define SYNTH_CAP_OPL3 0x00000002 /* Set if OPL3 supported */
+#define SYNTH_CAP_INPUT 0x00000004 /* Input (MIDI) device */
+ int dummies[19]; /* Reserve space */
+};
+
+struct sound_timer_info {
+ char name[32];
+ int caps;
+};
+
+#define MIDI_CAP_MPU401 1 /* MPU-401 intelligent mode */
+
+struct midi_info {
+ char name[30];
+ int device; /* 0-N. INITIALIZE BEFORE CALLING */
+ unsigned int capabilities; /* To be defined later */
+ int dev_type;
+ int dummies[18]; /* Reserve space */
+};
+
+/********************************************
+ * ioctl commands for the /dev/midi##
+ */
+typedef struct {
+ unsigned char cmd;
+ char nr_args, nr_returns;
+ unsigned char data[30];
+} mpu_command_rec;
+
+#define SNDCTL_MIDI_PRETIME __SIOWR('m', 0, int)
+#define SNDCTL_MIDI_MPUMODE __SIOWR('m', 1, int)
+#define SNDCTL_MIDI_MPUCMD __SIOWR('m', 2, mpu_command_rec)
+
+/********************************************
+ * IOCTL commands for /dev/dsp and /dev/audio
+ */
+
+#define SNDCTL_DSP_RESET __SIO ('P', 0)
+#define SNDCTL_DSP_SYNC __SIO ('P', 1)
+#define SNDCTL_DSP_SPEED __SIOWR('P', 2, int)
+#define SNDCTL_DSP_STEREO __SIOWR('P', 3, int)
+#define SNDCTL_DSP_GETBLKSIZE __SIOWR('P', 4, int)
+#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
+#define SNDCTL_DSP_CHANNELS __SIOWR('P', 6, int)
+#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
+#define SOUND_PCM_WRITE_FILTER __SIOWR('P', 7, int)
+#define SNDCTL_DSP_POST __SIO ('P', 8)
+#define SNDCTL_DSP_SUBDIVIDE __SIOWR('P', 9, int)
+#define SNDCTL_DSP_SETFRAGMENT __SIOWR('P',10, int)
+
+/* Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
+#define SNDCTL_DSP_GETFMTS __SIOR ('P',11, int) /* Returns a mask */
+#define SNDCTL_DSP_SETFMT __SIOWR('P',5, int) /* Selects ONE fmt */
+# define AFMT_QUERY 0x00000000 /* Return current fmt */
+# define AFMT_MU_LAW 0x00000001
+# define AFMT_A_LAW 0x00000002
+# define AFMT_IMA_ADPCM 0x00000004
+# define AFMT_U8 0x00000008
+# define AFMT_S16_LE 0x00000010 /* Little endian signed 16 */
+# define AFMT_S16_BE 0x00000020 /* Big endian signed 16 */
+# define AFMT_S8 0x00000040
+# define AFMT_U16_LE 0x00000080 /* Little endian U16 */
+# define AFMT_U16_BE 0x00000100 /* Big endian U16 */
+# define AFMT_MPEG 0x00000200 /* MPEG (2) audio */
+
+/* AC3 _compressed_ bitstreams (See Programmer's Guide for details). */
+# define AFMT_AC3 0x00000400
+/* Ogg Vorbis _compressed_ bit streams */
+# define AFMT_VORBIS 0x00000800
+
+/* 32 bit formats (MSB aligned) formats */
+# define AFMT_S32_LE 0x00001000
+# define AFMT_S32_BE 0x00002000
+
+/* Reserved for _native_ endian double precision IEEE floating point */
+# define AFMT_FLOAT 0x00004000
+
+/* 24 bit formats (LSB aligned in 32 bit word) formats */
+# define AFMT_S24_LE 0x00008000
+# define AFMT_S24_BE 0x00010000
+
+/*
+ * S/PDIF raw format. In this format the S/PDIF frames (including all
+ * control and user bits) are included in the data stream. Each sample
+ * is stored in a 32 bit frame (see IEC-958 for more info). This format
+ * is supported by very few devices and it's only usable for purposes
+ * where full access to the control/user bits is required (real time control).
+ */
+# define AFMT_SPDIF_RAW 0x00020000
+
+/*
+ * Buffer status queries.
+ */
+typedef struct audio_buf_info {
+ int fragments; /* # of available fragments (partially usend ones not counted) */
+ int fragstotal; /* Total # of fragments allocated */
+ int fragsize; /* Size of a fragment in bytes */
+
+ int bytes; /* Available space in bytes (includes partially used fragments) */
+ /* Note! 'bytes' could be more than fragments*fragsize */
+} audio_buf_info;
+
+#define SNDCTL_DSP_GETOSPACE __SIOR ('P',12, audio_buf_info)
+#define SNDCTL_DSP_GETISPACE __SIOR ('P',13, audio_buf_info)
+#define SNDCTL_DSP_NONBLOCK __SIO ('P',14) /* Obsolete. Not supported */
+#define SNDCTL_DSP_GETCAPS __SIOR ('P',15, int)
+# define DSP_CAP_REVISION 0x000000ff /* Bits for revision level (0 to 255) */
+# define DSP_CAP_DUPLEX 0x00000100 /* Full duplex record/playback */
+# define DSP_CAP_REALTIME 0x00000200 /* Not in use */
+# define DSP_CAP_BATCH 0x00000400 /* Device has some kind of */
+ /* internal buffers which may */
+ /* cause some delays and */
+ /* decrease precision of timing */
+# define DSP_CAP_COPROC 0x00000800 /* Has a coprocessor */
+ /* Sometimes it's a DSP */
+ /* but usually not */
+# define DSP_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */
+# define DSP_CAP_MMAP 0x00002000 /* Supports mmap() */
+# define DSP_CAP_MULTI 0x00004000 /* Supports multiple open */
+# define DSP_CAP_BIND 0x00008000 /* Supports binding to front/rear/center/lfe */
+# define DSP_CAP_INPUT 0x00010000 /* Supports recording */
+# define DSP_CAP_OUTPUT 0x00020000 /* Supports playback */
+#define DSP_CAP_VIRTUAL 0x00040000 /* Virtuial device */
+/* 0x00040000 and 0x00080000 reserved for future use */
+
+/* Analog/digital control capabilities */
+# define DSP_CAP_ANALOGOUT 0x00100000
+# define DSP_CAP_ANALOGIN 0x00200000
+# define DSP_CAP_DIGITALOUT 0x00400000
+# define DSP_CAP_DIGITALIN 0x00800000
+# define DSP_CAP_ADMASK 0x00f00000
+/*
+ * NOTE! (capabilities & DSP_CAP_ADMASK)==0 means just that the
+ * digital/analog interface control features are not supported by the
+ * device/driver. However the device still supports analog, digital or
+ * both inputs/outputs (depending on the device). See the OSS Programmer's
+ * Guide for full details.
+ */
+# define DSP_CAP_SHADOW 0x01000000 /* "Shadow" device */
+
+
+/*
+ * Preferred channel usage. These bits can be used to
+ * give recommendations to the application. Used by few drivers.
+ * For example if ((caps & DSP_CH_MASK) == DSP_CH_MONO) means that
+ * the device works best in mono mode. However it doesn't necessarily mean
+ * that the device cannot be used in stereo. These bits should only be used
+ * special applications such as multi track hard disk recorders to find out
+ * the initial setup. However the user should be able to override this
+ * selection.
+ *
+ * To find out which modes are actually supported the application should
+ * try to select them using SNDCTL_DSP_CHANNELS.
+ */
+# define DSP_CH_MASK 0x06000000 /* Mask */
+# define DSP_CH_ANY 0x00000000 /* No preferred mode */
+# define DSP_CH_MONO 0x02000000
+# define DSP_CH_STEREO 0x04000000
+# define DSP_CH_MULTI 0x06000000 /* More than two channels */
+
+# define DSP_CAP_SLAVE 0x08000000 /* "Slave" device */
+
+#define SNDCTL_DSP_GETTRIGGER __SIOR ('P',16, int)
+#define SNDCTL_DSP_SETTRIGGER __SIOW ('P',16, int)
+# define PCM_ENABLE_INPUT 0x00000001
+# define PCM_ENABLE_OUTPUT 0x00000002
+
+typedef struct count_info {
+ int bytes; /* Total # of bytes processed */
+ int blocks; /* # of fragment transitions since last time */
+ int ptr; /* Current DMA pointer value */
+} count_info;
+
+#define SNDCTL_DSP_GETIPTR __SIOR ('P',17, count_info)
+#define SNDCTL_DSP_GETOPTR __SIOR ('P',18, count_info)
+
+typedef struct buffmem_desc {
+ unsigned *buffer;
+ int size;
+} buffmem_desc;
+#define SNDCTL_DSP_MAPINBUF __SIOR ('P', 19, buffmem_desc)
+#define SNDCTL_DSP_MAPOUTBUF __SIOR ('P', 20, buffmem_desc)
+#define SNDCTL_DSP_SETSYNCRO __SIO ('P', 21)
+#define SNDCTL_DSP_SETDUPLEX __SIO ('P', 22)
+
+/*
+ * Application's profile defines the way how playback underrun situations should be handled.
+ *
+ * APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
+ * playback buffer whenever an underrun occurs. This consumes some time
+ * prevents looping the existing buffer.
+ * APF_CPUINTENS is intended to be set by CPU intensive applications which
+ * are likely to run out of time occasionally. In this mode the buffer cleanup is
+ * disabled which saves CPU time but also let's the previous buffer content to
+ * be played during the "pause" after the underrun.
+ */
+#define SNDCTL_DSP_PROFILE __SIOW ('P', 23, int)
+#define APF_NORMAL 0 /* Normal applications */
+#define APF_NETWORK 1 /* Underruns probably caused by an "external" delay */
+#define APF_CPUINTENS 2 /* Underruns probably caused by "overheating" the CPU */
+
+#define SNDCTL_DSP_GETODELAY __SIOR ('P', 23, int)
+#define SNDCTL_DSP_GETOUTVOL __SIOR ('P', 24, int)
+#define SNDCTL_DSP_SETOUTVOL __SIOWR('P', 24, int)
+
+typedef struct audio_errinfo {
+ int play_underruns;
+ int rec_overruns;
+ unsigned int play_ptradjust;
+ unsigned int rec_ptradjust;
+ int play_errorcount;
+ int rec_errorcount;
+ int play_lasterror;
+ int rec_lasterror;
+ long play_errorparm;
+ long rec_errorparm;
+ int filler[16];
+} audio_errinfo;
+
+#define SNDCTL_DSP_GETERROR __SIOR ('P', 25, audio_errinfo)
+
+typedef struct oss_digital_control {
+ unsigned int caps;
+#define DIG_CBITIN_NONE 0x00000000
+#define DIG_CBITIN_LIMITED 0x00000001
+#define DIG_CBITIN_DATA 0x00000002
+#define DIG_CBITIN_BYTE0 0x00000004
+#define DIG_CBITIN_FULL 0x00000008
+#define DIG_CBITIN_MASK 0x0000000f
+#define DIG_CBITOUT_NONE 0x00000000
+#define DIG_CBITOUT_LIMITED 0x00000010
+#define DIG_CBITOUT_BYTE0 0x00000020
+#define DIG_CBITOUT_FULL 0x00000040
+#define DIG_CBITOUT_DATA 0x00000080
+#define DIG_CBITOUT_MASK 0x000000f0
+#define DIG_UBITIN 0x00000100
+#define DIG_UBITOUT 0x00000200
+#define DIG_VBITOUT 0x00000400
+#define DIG_OUTRATE 0x00000800
+#define DIG_INRATE 0x00001000
+#define DIG_INBITS 0x00002000
+#define DIG_OUTBITS 0x00004000
+#define DIG_EXACT 0x00010000
+#define DIG_PRO 0x00020000
+#define DIG_CONSUMER 0x00040000
+#define DIG_PASSTHROUGH 0x00080000
+#define DIG_OUTSEL 0x00100000
+
+ unsigned int valid;
+#define VAL_CBITIN 0x00000001
+#define VAL_UBITIN 0x00000002
+#define VAL_CBITOUT 0x00000004
+#define VAL_UBITOUT 0x00000008
+#define VAL_ISTATUS 0x00000010
+#define VAL_IRATE 0x00000020
+#define VAL_ORATE 0x00000040
+#define VAL_INBITS 0x00000080
+#define VAL_OUTBITS 0x00000100
+#define VAL_REQUEST 0x00000200
+#define VAL_OUTSEL 0x00000400
+
+#define VAL_OUTMASK (VAL_CBITOUT|VAL_UBITOUT|VAL_ORATE|VAL_OUTBITS|VAL_OUTSEL)
+
+ unsigned int request, param;
+#define SPD_RQ_PASSTHROUGH 1
+
+ unsigned char cbitin[24];
+ unsigned char ubitin[24];
+ unsigned char cbitout[24];
+ unsigned char ubitout[24];
+
+ unsigned int outsel;
+#define OUTSEL_DIGITAL 1
+#define OUTSEL_ANALOG 2
+#define OUTSEL_BOTH (OUTSEL_DIGITAL|OUTSEL_ANALOG)
+
+ int in_data; /* Audio/data if autodetectable by the receiver */
+#define IND_UNKNOWN 0
+#define IND_AUDIO 1
+#define IND_DATA 2
+
+ int in_locked; /* Receiver locked */
+#define LOCK_NOT_INDICATED 0
+#define LOCK_UNLOCKED 1
+#define LOCK_LOCKED 2
+
+ int in_quality; /* Input signal quality */
+#define IN_QUAL_NOT_INDICATED 0
+#define IN_QUAL_POOR 1
+#define IN_QUAL_GOOD 2
+
+ int in_vbit, out_vbit; /* V bits */
+#define VBIT_NOT_INDICATED 0
+#define VBIT_OFF 1
+#define VBIT_ON 2
+
+ unsigned int in_errors; /* Various input errro conditions */
+#define INERR_CRC 0x0001
+#define INERR_QCODE_CRC 0x0002
+#define INERR_PARITY 0x0004
+#define INERR_BIPHASE 0x0008
+
+ int srate_in, srate_out;
+ int bits_in, bits_out;
+
+ int filler[32];
+} oss_digital_control;
+
+#define SNDCTL_DSP_READCTL __SIOWR('P', 26, oss_digital_control)
+#define SNDCTL_DSP_WRITECTL __SIOWR('P', 27, oss_digital_control)
+
+typedef struct oss_syncgroup {
+ int id;
+ int mode;
+} oss_syncgroup;
+
+#define SNDCTL_DSP_SYNCGROUP __SIOWR('P', 28, oss_syncgroup)
+#define SNDCTL_DSP_SYNCSTART __SIOW ('P', 29, int)
+
+/*
+ * "cooked" mode enables software based conversions for sample rate, sample
+ * format (bits) and number of channels (mono/stereo). These conversions are
+ * required with some devices that support only one sample rate or just stereo
+ * to let the applications to use other formats. The cooked mode is enabled by
+ * default. However it's necessary to disable this mode when mmap() is used or
+ * when very deterministic timing is required. SNDCTL_DSP_COOKEDMODE is an
+ * optional call introduced in OSS 3.9.6f. It's _error return must be ignored_
+ * since normally this call will return erno=EINVAL.
+ *
+ * SNDCTL_DSP_COOKEDMODE must be called immediately after open before doing
+ * anything else. Otherwise the call will not have any effect.
+ */
+#define SNDCTL_DSP_COOKEDMODE __SIOW ('P', 30, int)
+
+#define SNDCTL_DSP_GETCHANNELMASK __SIOWR('P', 64, int)
+#define SNDCTL_DSP_BIND_CHANNEL __SIOWR('P', 65, int)
+# define DSP_BIND_QUERY 0x00000000
+# define DSP_BIND_FRONT 0x00000001
+# define DSP_BIND_SURR 0x00000002
+# define DSP_BIND_CENTER_LFE 0x00000004
+# define DSP_BIND_HANDSET 0x00000008
+# define DSP_BIND_MIC 0x00000010
+# define DSP_BIND_MODEM1 0x00000020
+# define DSP_BIND_MODEM2 0x00000040
+# define DSP_BIND_I2S 0x00000080
+# define DSP_BIND_SPDIF 0x00000100
+
+/*
+ * SOUND_PCM_* calls are obsolete. Use the SNDCTL_DSP_ ones instead.
+ */
+
+#define SOUND_PCM_READ_RATE __SIOR ('P', 2, int)
+#define SOUND_PCM_READ_CHANNELS __SIOR ('P', 6, int)
+#define SOUND_PCM_READ_BITS __SIOR ('P', 5, int)
+#define SOUND_PCM_READ_FILTER __SIOR ('P', 7, int)
+
+/* Some alias names (obsolete) */
+#define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
+#define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
+#define SOUND_PCM_POST SNDCTL_DSP_POST
+#define SOUND_PCM_RESET SNDCTL_DSP_RESET
+#define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
+#define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
+#define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
+#define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
+#define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
+#define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
+#define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
+#define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
+#define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
+#define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
+#define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
+#define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
+#define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
+#define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
+#define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
+#define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
+
+/*********************************************
+ * IOCTL commands for /dev/mixer
+ */
+
+/*
+ * Mixer devices
+ *
+ * There can be up to 20 different analog mixer channels. The
+ * SOUND_MIXER_NRDEVICES gives the currently supported maximum.
+ * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells
+ * the devices supported by the particular mixer.
+ */
+
+#define SOUND_MIXER_NRDEVICES 28
+#define SOUND_MIXER_VOLUME 0
+#define SOUND_MIXER_BASS 1
+#define SOUND_MIXER_TREBLE 2
+#define SOUND_MIXER_SYNTH 3
+#define SOUND_MIXER_PCM 4
+#define SOUND_MIXER_SPEAKER 5
+#define SOUND_MIXER_LINE 6
+#define SOUND_MIXER_MIC 7
+#define SOUND_MIXER_CD 8
+#define SOUND_MIXER_IMIX 9 /* Recording monitor */
+#define SOUND_MIXER_ALTPCM 10
+#define SOUND_MIXER_RECLEV 11 /* Recording level */
+#define SOUND_MIXER_IGAIN 12 /* Input gain */
+#define SOUND_MIXER_OGAIN 13 /* Output gain */
+/*
+ * The AD1848 codec and compatibles have three line level inputs
+ * (line, aux1 and aux2). Since each card manufacturer have assigned
+ * different meanings to these inputs, it's inpractical to assign
+ * specific meanings (line, cd, synth etc.) to them.
+ */
+#define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */
+#define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */
+#define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */
+#define SOUND_MIXER_DIGITAL1 17 /* Digital (input) 1 */
+#define SOUND_MIXER_DIGITAL2 18 /* Digital (input) 2 */
+#define SOUND_MIXER_DIGITAL3 19 /* Digital (input) 3 */
+#define SOUND_MIXER_PHONEIN 20 /* Phone input */
+#define SOUND_MIXER_PHONEOUT 21 /* Phone output */
+#define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */
+#define SOUND_MIXER_RADIO 23 /* Radio in */
+#define SOUND_MIXER_MONITOR 24 /* Monitor (usually mic) volume */
+#define SOUND_MIXER_DEPTH 25 /* 3D "depth"/"space" parameter */
+#define SOUND_MIXER_CENTER 26 /* 3D "center" parameter */
+#define SOUND_MIXER_MIDI 27 /* Alternative for "synth" */
+
+/* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
+/* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
+#define SOUND_ONOFF_MIN 28
+#define SOUND_ONOFF_MAX 30
+
+/* Note! Number 31 cannot be used since the sign bit is reserved */
+#define SOUND_MIXER_NONE 31
+
+/*
+ * The following unsupported macros are no longer functional.
+ * Use SOUND_MIXER_PRIVATE# macros in future.
+ */
+#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
+#define SOUND_MIXER_MUTE SOUND_MIXER_NONE
+#define SOUND_MIXER_LOUD SOUND_MIXER_NONE
+
+
+#define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \
+ "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \
+ "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \
+ "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor", \
+ "Depth", "Center", "MIDI"}
+
+#define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
+ "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
+ "line1", "line2", "line3", "dig1", "dig2", "dig3", \
+ "phin", "phout", "video", "radio", "monitor", \
+ "depth", "center", "midi"}
+
+/* Device bitmask identifiers */
+
+#define SOUND_MIXER_RECSRC 0xff /* Arg contains a bit for each recording source */
+#define SOUND_MIXER_DEVMASK 0xfe /* Arg contains a bit for each supported device */
+#define SOUND_MIXER_RECMASK 0xfd /* Arg contains a bit for each supported recording source */
+#define SOUND_MIXER_CAPS 0xfc
+# define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only one recording source at a time */
+#define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */
+
+/* OSS/Free ONLY */
+#define SOUND_MIXER_OUTSRC 0xfa /* Arg contains a bit for each input source to output */
+#define SOUND_MIXER_OUTMASK 0xf9 /* Arg contains a bit for each supported input source to output */
+/* OSS/Free ONLY */
+
+/* Device mask bits */
+
+#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
+#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
+#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
+#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
+#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
+#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
+#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
+#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
+#define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
+#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
+#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
+#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
+#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
+#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
+#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
+#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
+#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
+#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
+#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
+#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
+#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
+#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
+#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
+#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
+#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
+#define SOUND_MASK_DEPTH (1 << SOUND_MIXER_DEPTH)
+#define SOUND_MASK_CENTER (1 << SOUND_MIXER_CENTER)
+#define SOUND_MASK_MIDI (1 << SOUND_MIXER_MIDI)
+
+/* Obsolete macros */
+#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
+#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
+#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
+
+#define MIXER_READ(dev) __SIOR('M', dev, int)
+#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
+#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
+#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
+#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
+#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
+#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
+#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
+#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
+#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
+#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
+
+#define MIXER_WRITE(dev) __SIOWR('M', dev, int)
+#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
+#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
+#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
+#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
+#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
+#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
+
+typedef struct mixer_info {
+ char id[16];
+ char name[32];
+ int modify_counter;
+ int fillers[10];
+} mixer_info;
+
+typedef struct _old_mixer_info { /* Obsolete */
+ char id[16];
+ char name[32];
+} _old_mixer_info;
+
+#define SOUND_MIXER_INFO __SIOR ('M', 101, mixer_info)
+#define SOUND_OLD_MIXER_INFO __SIOR ('M', 101, _old_mixer_info)
+
+/*
+ * A mechanism for accessing "proprietary" mixer features. This method
+ * permits passing 128 bytes of arbitrary data between a mixer application
+ * and the mixer driver. Interpretation of the record is defined by
+ * the particular mixer driver.
+ */
+typedef unsigned char mixer_record[128];
+
+#define SOUND_MIXER_ACCESS __SIOWR('M', 102, mixer_record)
+
+/*
+ * Two ioctls for special souncard function (OSS/Free only)
+ */
+#define SOUND_MIXER_AGC _SIOWR('M', 103, int)
+#define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
+/*
+ * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
+ * These features can be used when accessing device specific features.
+ */
+#define SOUND_MIXER_PRIVATE1 __SIOWR('M', 111, int)
+#define SOUND_MIXER_PRIVATE2 __SIOWR('M', 112, int)
+#define SOUND_MIXER_PRIVATE3 __SIOWR('M', 113, int)
+#define SOUND_MIXER_PRIVATE4 __SIOWR('M', 114, int)
+#define SOUND_MIXER_PRIVATE5 __SIOWR('M', 115, int)
+
+
+/*
+ * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
+ * for querying current mixer settings from the driver and for loading
+ * default volume settings _prior_ activating the mixer (loading
+ * doesn't affect current state of the mixer hardware). These calls
+ * are for internal use only.
+ */
+
+typedef struct mixer_vol_table {
+ int num; /* Index to volume table */
+ char name[32];
+ int levels[32];
+} mixer_vol_table;
+
+#define SOUND_MIXER_GETLEVELS __SIOWR('M', 116, mixer_vol_table)
+#define SOUND_MIXER_SETLEVELS __SIOWR('M', 117, mixer_vol_table)
+
+/*
+ * An ioctl for identifying the driver version. It will return value
+ * of the SOUND_VERSION macro used when compiling the driver.
+ * This call was introduced in OSS version 3.6 and it will not work
+ * with earlier versions (returns EINVAL).
+ */
+#define OSS_GETVERSION __SIOR ('M', 118, int)
+/*
+ * Calls to set/get the recording gain for the currently active
+ * recording source. These calls automatically map to the right control.
+ * Note that these calls are not supported by all drivers. In this case
+ * the call will return -1 with errno set to EINVAL
+ *
+ * The _MONGAIN work in similar way but set/get the monitoring gain for
+ * the currently selected recording source.
+ */
+#define SOUND_MIXER_READ_RECGAIN __SIOR ('M', 119, int)
+#define SOUND_MIXER_WRITE_RECGAIN __SIOWR('M', 119, int)
+#define SOUND_MIXER_READ_MONGAIN __SIOR ('M', 120, int)
+#define SOUND_MIXER_WRITE_MONGAIN __SIOWR('M', 120, int)
+
+/*************************************************
+ * Extended mixer interface (OSS 4.0 and later) *
+ *************************************************/
+#define SYSINFO_FILL_SIZE 256
+
+typedef struct oss_sysinfo {
+ char product[32]; /* For example OSS/Free, OSS/Linux or OSS/Solaris */
+ char version[32]; /* For example 4.0a */
+ int versionnum; /* See OSS_GETVERSION */
+ char options[128]; /* Reserved */
+
+ int numaudios; /* # of audio/dsp devices */
+ int openedaudio[8]; /* Bit mask telling which audio devices are busy */
+
+ int numsynths; /* # of availavle synth devices */
+ int nummidis; /* # of available MIDI ports */
+ int numtimers; /* # of available timer devices */
+ int nummixers; /* # of mixer devices */
+
+ int filler[SYSINFO_FILL_SIZE]; /* For future expansion (set to -1) */
+} oss_sysinfo;
+
+typedef struct oss_mixext {
+ int dev; /* Mixer device number */
+ int ctrl; /* Controller number */
+ int type; /* Entry type */
+# define MIXT_DEVROOT 0 /* Device root entry */
+# define MIXT_GROUP 1 /* Controller group */
+# define MIXT_ONOFF 2 /* OFF (0) or ON (1) */
+# define MIXT_ENUM 3 /* Enumerated (0 to maxvalue) */
+# define MIXT_MONOSLIDER 4 /* Mono slider (0 to 100) */
+# define MIXT_STEREOSLIDER 5 /* Stereo slider (dual 0 to 100) */
+# define MIXT_MESSAGE 6 /* (Readable) textual message */
+# define MIXT_MONOVU 7 /* VU meter value (mono) */
+# define MIXT_STEREOVU 8 /* VU meter value (stereo) */
+# define MIXT_MONOPEAK 9 /* VU meter peak value (mono) */
+# define MIXT_STEREOPEAK 10 /* VU meter peak value (stereo) */
+# define MIXT_RADIOGROUP 11 /* Radio button group */
+# define MIXT_MARKER 12 /* Separator between normal and extension entries */
+# define MIXT_VALUE 13 /* Decimal value entry */
+# define MIXT_HEXVALUE 14 /* Hexadecimal value entry */
+# define MIXT_MONODB 15 /* Mono atten. slider (0 to -144) */
+# define MIXT_STEREODB 16 /* Stereo atten. slider (dual 0 to -144) */
+# define MIXT_SLIDER 17 /* Slider (mono) with full integer range */
+# define MIXT_3D 18
+
+
+ /* Possible value range (minvalue to maxvalue) */
+ /* Note that maxvalue may also be smaller than minvalue */
+ int maxvalue;
+ int minvalue;
+
+ int flags;
+# define MIXF_READABLE 0x00000001 /* Has readable value */
+# define MIXF_WRITEABLE 0x00000002 /* Has writeable value */
+ char id[16]; /* Mnemonic ID (for linking with user space info) */
+ int parent; /* Entry# of parent (group) node (-1 if root) */
+
+ int dummy; /* Internal use */
+
+ int timestamp;
+
+ char data[64]; /* Misc data (entry type dependent) */
+ unsigned int enum_mask; /* Mask of allowed enum values */
+ int control_no; /* SOUND_MIXER_VOLUME..SOUND_MIXER_MIDI */
+ /* (-1 means not indicated) */
+ int desc; /* Descriptive code. For future use. */
+ int filler[16];
+} oss_mixext;
+
+typedef struct oss_mixext_root {
+ char id[16];
+ char name[48];
+} oss_mixext_root;
+
+typedef struct oss_mixer_value {
+ int dev;
+ int ctrl;
+ int value;
+ int flags; /* Reserved for future use. Initialize to 0 */
+ int timestamp; /* Must be set to oss_mixext.timestamp */
+ int filler[8]; /* Reserved for future use. Initialize to 0 */
+} oss_mixer_value;
+
+#define OPEN_READ PCM_ENABLE_INPUT
+#define OPEN_WRITE PCM_ENABLE_OUTPUT
+#define OPEN_READWRITE (OPEN_READ|OPEN_WRITE)
+
+typedef struct oss_audioinfo {
+ int dev; /* Audio device number */
+ char name[64];
+ int busy; /* 0, OPEN_READ, OPEN_WRITE or OPEN_READWRITE */
+ int pid;
+ int caps; /* DSP_CAP_INPUT, DSP_CAP_OUTPUT */
+ int iformats, oformats;
+ int magic; /* Reserved for internal use */
+ char cmd[64]; /* Command using the device */
+ int card_number;
+ int port_number;
+ int mixer_dev;
+ int real_device; /* This is the right /dev/dsp# device to open */
+ int enabled; /* 1=enabled, 0=device not ready at this moment */
+ int filler[251];
+} oss_audioinfo;
+
+#define OSS_SYSINFO __SIOR ('X', 1, oss_sysinfo)
+
+#define SNDCTL_MIX_NRMIX __SIOR ('X', 2, int)
+#define SNDCTL_MIX_NREXT __SIOWR('X', 3, int)
+#define SNDCTL_MIX_EXTINFO __SIOWR('X', 4, oss_mixext)
+#define SNDCTL_MIX_READ __SIOWR('X', 5, oss_mixer_value)
+#define SNDCTL_MIX_WRITE __SIOWR('X', 6, oss_mixer_value)
+
+#define SNDCTL_AUDIOINFO __SIOWR('X', 7, oss_audioinfo)
+
+/* ioctl codes 'X', 200-255 are reserved for internal use */
+
+
+/*
+ * Level 2 event types for /dev/sequencer
+ */
+
+/*
+ * The 4 most significant bits of byte 0 specify the class of
+ * the event:
+ *
+ * 0x8X = system level events,
+ * 0x9X = device/port specific events, event[1] = device/port,
+ * The last 4 bits give the subtype:
+ * 0x02 = Channel event (event[3] = chn).
+ * 0x01 = note event (event[4] = note).
+ * (0x01 is not used alone but always with bit 0x02).
+ * event[2] = MIDI message code (0x80=note off etc.)
+ *
+ */
+
+#define EV_SEQ_LOCAL 0x80
+#define EV_TIMING 0x81
+#define EV_CHN_COMMON 0x92
+#define EV_CHN_VOICE 0x93
+#define EV_SYSEX 0x94
+#define EV_SYSTEM 0x95 /* MIDI system and real time messages (input only) */
+/*
+ * Event types 200 to 220 are reserved for application use.
+ * These numbers will not be used by the driver.
+ */
+
+/*
+ * Events for event type EV_CHN_VOICE
+ */
+
+#define MIDI_NOTEOFF 0x80
+#define MIDI_NOTEON 0x90
+#define MIDI_KEY_PRESSURE 0xA0
+
+/*
+ * Events for event type EV_CHN_COMMON
+ */
+
+#define MIDI_CTL_CHANGE 0xB0
+#define MIDI_PGM_CHANGE 0xC0
+#define MIDI_CHN_PRESSURE 0xD0
+#define MIDI_PITCH_BEND 0xE0
+
+#define MIDI_SYSTEM_PREFIX 0xF0
+
+/*
+ * Timer event types
+ */
+#define TMR_WAIT_REL 1 /* Time relative to the prev time */
+#define TMR_WAIT_ABS 2 /* Absolute time since TMR_START */
+#define TMR_STOP 3
+#define TMR_START 4
+#define TMR_CONTINUE 5
+#define TMR_TEMPO 6
+#define TMR_ECHO 8
+#define TMR_CLOCK 9 /* MIDI clock */
+#define TMR_SPP 10 /* Song position pointer */
+#define TMR_TIMESIG 11 /* Time signature */
+
+/*
+ * Local event types
+ */
+#define LOCL_STARTAUDIO 1
+#define LOCL_STARTAUDIO2 2
+#define LOCL_STARTAUDIO3 3
+#define LOCL_STARTAUDIO4 4
+
+#if (!defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL)) || defined(USE_SEQ_MACROS)
+/*
+ * Some convenience macros to simplify programming of the
+ * /dev/sequencer interface
+ *
+ * These macros define the API which should be used when possible.
+ */
+#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
+
+void seqbuf_dump(void); /* This function must be provided by programs */
+
+EXTERNC int OSS_init(int seqfd, int buflen);
+EXTERNC void OSS_seqbuf_dump(int fd, unsigned char *buf, int buflen);
+EXTERNC void OSS_seq_advbuf(int len, int fd, unsigned char *buf,
+ int buflen);
+EXTERNC void OSS_seq_needbuf(int len, int fd, unsigned char *buf,
+ int buflen);
+EXTERNC void OSS_patch_caching(int dev, int chn, int patch, int fd,
+ unsigned char *buf, int buflen);
+EXTERNC void OSS_drum_caching(int dev, int chn, int patch, int fd,
+ unsigned char *buf, int buflen);
+EXTERNC void OSS_write_patch(int fd, unsigned char *buf, int len);
+EXTERNC int OSS_write_patch2(int fd, unsigned char *buf, int len);
+
+#define SEQ_PM_DEFINES int __foo_bar___
+#ifdef OSSLIB
+# define SEQ_USE_EXTBUF() \
+ EXTERNC unsigned char *_seqbuf; \
+ EXTERNC int _seqbuflen;EXTERNC int _seqbufptr
+# define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
+# define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
+# define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
+# define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
+
+# define SEQ_LOAD_GMINSTR(dev, instr) \
+ OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
+# define SEQ_LOAD_GMDRUM(dev, drum) \
+ OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
+#else /* !OSSLIB */
+
+# define SEQ_LOAD_GMINSTR(dev, instr)
+# define SEQ_LOAD_GMDRUM(dev, drum)
+
+# define SEQ_USE_EXTBUF() \
+ EXTERNC unsigned char _seqbuf[]; \
+ EXTERNC int _seqbuflen;EXTERNC int _seqbufptr
+
+#ifndef USE_SIMPLE_MACROS
+/* Sample seqbuf_dump() implementation:
+ *
+ * SEQ_DEFINEBUF (2048); -- Defines a buffer for 2048 bytes
+ *
+ * int seqfd; -- The file descriptor for /dev/sequencer.
+ *
+ * void
+ * seqbuf_dump ()
+ * {
+ * if (_seqbufptr)
+ * if (write (seqfd, _seqbuf, _seqbufptr) == -1)
+ * {
+ * perror ("write /dev/sequencer");
+ * exit (-1);
+ * }
+ * _seqbufptr = 0;
+ * }
+ */
+
+#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
+#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
+#define _SEQ_ADVBUF(len) _seqbufptr += len
+#define SEQ_DUMPBUF seqbuf_dump
+#else
+/*
+ * This variation of the sequencer macros is used just to format one event
+ * using fixed buffer.
+ *
+ * The program using the macro library must define the following macros before
+ * using this library.
+ *
+ * #define _seqbuf name of the buffer (unsigned char[])
+ * #define _SEQ_ADVBUF(len) If the applic needs to know the exact
+ * size of the event, this macro can be used.
+ * Otherwise this must be defined as empty.
+ * #define _seqbufptr Define the name of index variable or 0 if
+ * not required.
+ */
+#define _SEQ_NEEDBUF(len) /* empty */
+#endif
+#endif /* !OSSLIB */
+
+#define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+ _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
+ _seqbuf[_seqbufptr+2] = (dev);\
+ _seqbuf[_seqbufptr+3] = (mode);\
+ _seqbuf[_seqbufptr+4] = 0;\
+ _seqbuf[_seqbufptr+5] = 0;\
+ _seqbuf[_seqbufptr+6] = 0;\
+ _seqbuf[_seqbufptr+7] = 0;\
+ _SEQ_ADVBUF(8);}
+
+/*
+ * Midi voice messages
+ */
+
+#define _CHN_VOICE(dev, event, chn, note, parm) \
+ {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
+ _seqbuf[_seqbufptr+1] = (dev);\
+ _seqbuf[_seqbufptr+2] = (event);\
+ _seqbuf[_seqbufptr+3] = (chn);\
+ _seqbuf[_seqbufptr+4] = (note);\
+ _seqbuf[_seqbufptr+5] = (parm);\
+ _seqbuf[_seqbufptr+6] = (0);\
+ _seqbuf[_seqbufptr+7] = 0;\
+ _SEQ_ADVBUF(8);}
+
+#define SEQ_START_NOTE(dev, chn, note, vol) \
+ _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
+
+#define SEQ_STOP_NOTE(dev, chn, note, vol) \
+ _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
+
+#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
+ _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
+
+/*
+ * Midi channel messages
+ */
+
+#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
+ {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
+ _seqbuf[_seqbufptr+1] = (dev);\
+ _seqbuf[_seqbufptr+2] = (event);\
+ _seqbuf[_seqbufptr+3] = (chn);\
+ _seqbuf[_seqbufptr+4] = (p1);\
+ _seqbuf[_seqbufptr+5] = (p2);\
+ *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
+ _SEQ_ADVBUF(8);}
+/*
+ * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits
+ * sending any MIDI bytes but it's absolutely not possible. Trying to do
+ * so _will_ cause problems with MPU401 intelligent mode).
+ *
+ * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be
+ * sent by calling SEQ_SYSEX() several times (there must be no other events
+ * between them). First sysex fragment must have 0xf0 in the first byte
+ * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte
+ * between these sysex start and end markers cannot be larger than 0x7f. Also
+ * lengths of each fragments (except the last one) must be 6.
+ *
+ * Breaking the above rules may work with some MIDI ports but is likely to
+ * cause fatal problems with some other devices (such as MPU401).
+ */
+#define SEQ_SYSEX(dev, buf, len) \
+ {int ii, ll=(len); \
+ unsigned char *bufp=buf;\
+ if (ll>6)ll=6;\
+ _SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = EV_SYSEX;\
+ _seqbuf[_seqbufptr+1] = (dev);\
+ for(ii=0;ii<ll;ii++)\
+ _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
+ for(ii=ll;ii<6;ii++)\
+ _seqbuf[_seqbufptr+ii+2] = 0xff;\
+ _SEQ_ADVBUF(8);}
+
+#define SEQ_CHN_PRESSURE(dev, chn, pressure) \
+ _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
+
+#define SEQ_SET_PATCH SEQ_PGM_CHANGE
+#ifdef OSSLIB
+# define SEQ_PGM_CHANGE(dev, chn, patch) \
+ {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); \
+ _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);}
+#else
+# define SEQ_PGM_CHANGE(dev, chn, patch) \
+ _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
+#endif
+
+#define SEQ_CONTROL(dev, chn, controller, value) \
+ _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
+
+#define SEQ_BENDER(dev, chn, value) \
+ _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
+
+
+#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+ _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
+ _seqbuf[_seqbufptr+2] = (dev);\
+ _seqbuf[_seqbufptr+3] = (voice);\
+ _seqbuf[_seqbufptr+4] = (controller);\
+ _seqbuf[_seqbufptr+5] = ((value)&0xff);\
+ _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
+ _seqbuf[_seqbufptr+7] = 0;\
+ _SEQ_ADVBUF(8);}
+/*
+ * The following 5 macros are incorrectly implemented and obsolete.
+ * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead.
+ */
+#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
+#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
+#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
+#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
+#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
+
+/*
+ * Timing and syncronization macros
+ */
+
+#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr+0] = EV_TIMING; \
+ _seqbuf[_seqbufptr+1] = (ev); \
+ _seqbuf[_seqbufptr+2] = 0;\
+ _seqbuf[_seqbufptr+3] = 0;\
+ *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+ _SEQ_ADVBUF(8);}
+
+#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
+#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
+#define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
+#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
+#define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
+#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
+#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
+#define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
+#define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
+
+/*
+ * Local control events
+ */
+
+#define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
+ _seqbuf[_seqbufptr+1] = (ev); \
+ _seqbuf[_seqbufptr+2] = 0;\
+ _seqbuf[_seqbufptr+3] = 0;\
+ *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+ _SEQ_ADVBUF(8);}
+
+#define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
+#define SEQ_PLAYAUDIO2(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO2, devmask)
+#define SEQ_PLAYAUDIO3(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO3, devmask)
+#define SEQ_PLAYAUDIO4(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO4, devmask)
+/*
+ * Events for the level 1 interface only
+ */
+
+#define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\
+ _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
+ _seqbuf[_seqbufptr+1] = (byte);\
+ _seqbuf[_seqbufptr+2] = (device);\
+ _seqbuf[_seqbufptr+3] = 0;\
+ _SEQ_ADVBUF(4);}
+
+/*
+ * Patch loading.
+ */
+#ifdef OSSLIB
+# define SEQ_WRPATCH(patchx, len) \
+ OSS_write_patch(seqfd, (char*)(patchx), len)
+# define SEQ_WRPATCH2(patchx, len) \
+ OSS_write_patch2(seqfd, (char*)(patchx), len)
+#else
+# define SEQ_WRPATCH(patchx, len) \
+ {if (_seqbufptr) SEQ_DUMPBUF();\
+ if (write(seqfd, (char*)(patchx), len)==-1) \
+ perror("Write patch: /dev/sequencer");}
+# define SEQ_WRPATCH2(patchx, len) \
+ (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
+#endif
+
+#endif
+
+
+#ifdef OSSLIB
+extern int osslib_open(const char *path, int flags, int dummy);
+extern void ossclose(int fd);
+extern int osslib_write(int fd, const void *buf, int count);
+extern int osslib_read(int fd, void *buf, int count);
+extern int osslib_ioctl(int fd, unsigned int request, void *arg);
+#else
+# define osslib_open open
+# define osslib_close close
+# define osslib_write write
+# define osslib_read read
+# define osslib_ioctl ioctl
+#endif
+
+/*
+ * ioctl calls to be used in communication with coprocessors and
+ * DSP chips. ******** OBSOLETE CALLS - OSS/Free only **********
+ */
+
+typedef struct copr_buffer {
+ int command; /* Set to 0 if not used */
+ int flags;
+#define CPF_NONE 0x0000
+#define CPF_FIRST 0x0001 /* First block */
+#define CPF_LAST 0x0002 /* Last block */
+ int len;
+ int offs; /* If required by the device (0 if not used) */
+
+ unsigned char data[4000]; /* NOTE! 4000 is not 4k */
+} copr_buffer;
+
+typedef struct copr_debug_buf {
+ int command; /* Used internally. Set to 0 */
+ int parm1;
+ int parm2;
+ int flags;
+ int len; /* Length of data in bytes */
+} copr_debug_buf;
+
+typedef struct copr_msg {
+ int len;
+ unsigned char data[4000];
+} copr_msg;
+
+#define SNDCTL_COPR_RESET __SIO ('C', 0) /* OBSOLETE */
+#define SNDCTL_COPR_LOAD __SIOWR('C', 1, copr_buffer) /* OBSOLETE */
+#define SNDCTL_COPR_RDATA __SIOWR('C', 2, copr_debug_buf) /* OBSOLETE */
+#define SNDCTL_COPR_RCODE __SIOWR('C', 3, copr_debug_buf) /* OBSOLETE */
+#define SNDCTL_COPR_WDATA __SIOW ('C', 4, copr_debug_buf) /* OBSOLETE */
+#define SNDCTL_COPR_WCODE __SIOW ('C', 5, copr_debug_buf) /* OBSOLETE */
+#define SNDCTL_COPR_RUN __SIOWR('C', 6, copr_debug_buf) /* OBSOLETE */
+#define SNDCTL_COPR_HALT __SIOWR('C', 7, copr_debug_buf) /* OBSOLETE */
+#define SNDCTL_COPR_SENDMSG __SIOWR('C', 8, copr_msg) /* OBSOLETE */
+#define SNDCTL_COPR_RCVMSG __SIOR ('C', 9, copr_msg) /* OBSOLETE */
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,29 @@
+alsasources = \
+alsa.c alsa.h \
+about.c \
+audio.c \
+configure.c \
+init.c
+
+if HAVE_ALSA
+
+alsaltlibs = libALSA.la
+alsabuildsources = $(alsasources)
+
+else
+
+alsaltlibs =
+alsabuildsources =
+
+endif
+
+EXTRA_DIST = $(alsasources)
+
+lib_LTLIBRARIES = $(alsaltlibs)
+
+libdir = $(plugindir)/$(OUTPUT_PLUGIN_DIR)
+
+libALSA_la_LDFLAGS = @PLUGIN_LDFLAGS@
+libALSA_la_LIBADD = @GTK_LIBS@ @ALSA_LIBS@
+libALSA_la_SOURCES= $(alsabuildsources)
+INCLUDES = $(GTK_CFLAGS) $(ALSA_CFLAGS) -I$(top_builddir)/intl -I$(top_srcdir)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/about.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/about.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/about.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,56 @@
+/* XMMS - ALSA output plugin
+ * Copyright (C) 2001-2003 Matthieu Sozeau <mattam at altern.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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "alsa.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libbeep/util.h>
+
+
+void
+alsa_about(void)
+{
+ static GtkWidget *dialog;
+
+ if (dialog != NULL)
+ return;
+
+ dialog = xmms_show_message(_("About ALSA Driver"),
+ _("XMMS ALSA Driver\n\n "
+ "This program is free software; you can redistribute it and/or modify\n"
+ "it under the terms of the GNU General Public License as published by\n"
+ "the Free Software Foundation; either version 2 of the License, or\n"
+ "(at your option) any later version.\n"
+ "\n"
+ "This program is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+ "GNU General Public License for more details.\n"
+ "\n"
+ "You should have received a copy of the GNU General Public License\n"
+ "along with this program; if not, write to the Free Software\n"
+ "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+ "USA.\n"
+ "Author: Matthieu Sozeau (mattam at altern.org)"),
+ _("Ok"), FALSE, NULL, NULL);
+ g_signal_connect(dialog, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &dialog);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,48 @@
+/* XMMS - ALSA output plugin
+ * Copyright (C) 2001 Matthieu Sozeau
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "alsa.h"
+#include <glib/gi18n.h>
+
+OutputPlugin alsa_op = {
+ NULL,
+ NULL,
+ NULL,
+ alsa_init,
+ alsa_about,
+ alsa_configure,
+ alsa_get_volume,
+ alsa_set_volume,
+ alsa_open,
+ alsa_write,
+ alsa_close,
+ alsa_flush,
+ alsa_pause,
+ alsa_free,
+ alsa_playing,
+ alsa_get_output_time,
+ alsa_get_written_time,
+};
+
+OutputPlugin *
+get_oplugin_info(void)
+{
+ alsa_op.description =
+ g_strdup_printf(_("ALSA %s output plugin"), VERSION);
+ return &alsa_op;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/alsa.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,83 @@
+/* XMMS - ALSA output plugin
+ * Copyright (C) 2001-2003 Matthieu Sozeau
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2004 Håvard Kvålen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef ALSA_H
+#define ALSA_H
+
+#include "config.h"
+
+#include <libbeep/util.h>
+#include <beep/plugin.h>
+
+#define ALSA_PCM_NEW_HW_PARAMS_API
+#define ALSA_PCM_NEW_SW_PARAMS_API
+#include <alsa/asoundlib.h>
+#include <alsa/pcm_plugin.h>
+
+#include <gtk/gtk.h>
+
+#ifdef WORDS_BIGENDIAN
+# define IS_BIG_ENDIAN TRUE
+#else
+# define IS_BIG_ENDIAN FALSE
+#endif
+
+extern OutputPlugin op;
+
+struct alsa_config
+{
+ char *pcm_device;
+ int mixer_card;
+ char *mixer_device;
+ int buffer_time;
+ int period_time;
+ int thread_buffer_time;
+ gboolean debug;
+ gboolean multi_thread;
+ gboolean mmap;
+ struct
+ {
+ int left, right;
+ } vol;
+ gboolean soft_volume;
+};
+
+extern struct alsa_config alsa_cfg;
+
+void alsa_init(void);
+void alsa_about(void);
+void alsa_configure(void);
+int alsa_get_mixer(snd_mixer_t **mixer, int card);
+void alsa_save_config(void);
+
+void alsa_get_volume(int *l, int *r);
+void alsa_set_volume(int l, int r);
+
+int alsa_playing(void);
+int alsa_free(void);
+void alsa_write(void *ptr, int length);
+void alsa_close(void);
+void alsa_flush(int time);
+void alsa_pause(short p);
+int alsa_open(AFormat fmt, int rate, int nch);
+int alsa_get_output_time(void);
+int alsa_get_written_time(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/audio.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/audio.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/audio.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1211 @@
+/* XMMS - ALSA output plugin
+ * Copyright (C) 2001-2003 Matthieu Sozeau <mattam at altern.org>
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2004 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * CHANGES
+ *
+ * 2005.01.05 Takashi Iwai <tiwai at suse.de>
+ * Impelemented the multi-threaded mode with an audio-thread.
+ * Many fixes and cleanups.
+ */
+
+#include "alsa.h"
+#include <ctype.h>
+#include <glib.h>
+#include <libbeep/xconvert.h>
+
+static snd_pcm_t *alsa_pcm = NULL;
+
+static snd_output_t *logs = NULL;
+
+static guint64 alsa_total_written = 0; /* input bytes */
+static guint64 alsa_hw_written = 0; /* output bytes */
+static gint output_time_offset = 0;
+
+/* device buffer/period sizes in bytes */
+static int hw_buffer_size, hw_period_size; /* in output bytes */
+static int hw_buffer_size_in, hw_period_size_in; /* in input bytes */
+
+/* Set/Get volume */
+static snd_mixer_elem_t *pcm_element = NULL;
+static snd_mixer_t *mixer = NULL;
+
+static gboolean mmap, going = FALSE, paused, multi_thread, mixer_start = TRUE;;
+
+static gboolean alsa_can_pause;
+
+static guint mixer_timeout;
+
+/* for audio thread */
+static GThread *audio_thread; /* audio loop thread */
+static int thread_buffer_size; /* size of intermediate buffer in bytes */
+static char *thread_buffer; /* audio intermediate buffer */
+static int rd_index, wr_index; /* current read/write position in int-buffer */
+static gboolean pause_request; /* pause status currently requested */
+static gint flush_request; /* flush status (time) currently requested */
+
+struct snd_format {
+ unsigned int rate;
+ unsigned int channels;
+ snd_pcm_format_t format;
+ AFormat xmms_format;
+ int sample_bits;
+ int bps;
+};
+
+static struct snd_format *inputf = NULL;
+static struct snd_format *effectf = NULL;
+static struct snd_format *outputf = NULL;
+
+static int alsa_setup(struct snd_format *f);
+static void alsa_mmap_audio(char *data, int length);
+static void alsa_write_audio(char *data, int length);
+
+static struct snd_format *snd_format_from_xmms(AFormat fmt, int rate,
+ int channels);
+
+static struct xmms_convert_buffers *convertb;
+
+static convert_func_t alsa_convert_func;
+static convert_channel_func_t alsa_stereo_convert_func;
+static convert_freq_func_t alsa_frequency_convert_func;
+
+static const struct {
+ AFormat xmms;
+ snd_pcm_format_t alsa;
+} format_table[] = {
+ {FMT_S16_LE, SND_PCM_FORMAT_S16_LE},
+ {FMT_S16_BE, SND_PCM_FORMAT_S16_BE},
+ {FMT_S16_NE, SND_PCM_FORMAT_S16},
+ {FMT_U16_LE, SND_PCM_FORMAT_U16_LE},
+ {FMT_U16_BE, SND_PCM_FORMAT_U16_BE},
+ {FMT_U16_NE, SND_PCM_FORMAT_U16},
+ {FMT_U8, SND_PCM_FORMAT_U8},
+ {FMT_S8, SND_PCM_FORMAT_S8},
+};
+
+
+static void
+debug(char *str, ...)
+ G_GNUC_PRINTF(1, 2);
+
+ static void debug(char *str, ...)
+{
+ va_list args;
+
+ if (alsa_cfg.debug) {
+ va_start(args, str);
+ g_logv(NULL, G_LOG_LEVEL_MESSAGE, str, args);
+ va_end(args);
+ }
+}
+
+/*
+ * mixer stuff
+ */
+static void
+parse_mixer_name(char *str, char **name, int *index)
+{
+ char *end;
+
+ while (isspace(*str))
+ str++;
+
+ if ((end = strchr(str, ',')) != NULL) {
+ *name = g_strndup(str, end - str);
+ end++;
+ *index = atoi(end);
+ }
+ else {
+ *name = g_strdup(str);
+ *index = 0;
+ }
+}
+
+int
+alsa_get_mixer(snd_mixer_t ** mixer, int card)
+{
+ char *dev;
+ int err;
+
+ debug("alsa_get_mixer");
+
+ dev = g_strdup_printf("hw:%i", card);
+
+ if ((err = snd_mixer_open(mixer, 0)) < 0) {
+ g_warning("alsa_get_mixer(): Failed to open empty mixer: %s",
+ snd_strerror(-err));
+ mixer = NULL;
+ return -1;
+ }
+ if ((err = snd_mixer_attach(*mixer, dev)) < 0) {
+ g_warning("alsa_get_mixer(): Attaching to mixer %s failed: %s",
+ dev, snd_strerror(-err));
+ return -1;
+ }
+ if ((err = snd_mixer_selem_register(*mixer, NULL, NULL)) < 0) {
+ g_warning("alsa_get_mixer(): Failed to register mixer: %s",
+ snd_strerror(-err));
+ return -1;
+ }
+ if ((err = snd_mixer_load(*mixer)) < 0) {
+ g_warning("alsa_get_mixer(): Failed to load mixer: %s",
+ snd_strerror(-err));
+ return -1;
+ }
+
+ g_free(dev);
+
+ return (*mixer != NULL);
+}
+
+
+static snd_mixer_elem_t* alsa_get_mixer_elem(snd_mixer_t *mixer, char *name, int index)
+{
+ snd_mixer_selem_id_t *selem_id;
+ snd_mixer_elem_t *elem;
+ snd_mixer_selem_id_alloca(&selem_id);
+
+ if (index != -1)
+ snd_mixer_selem_id_set_index(selem_id, index);
+ if (name != NULL)
+ snd_mixer_selem_id_set_name(selem_id, name);
+
+ elem = snd_mixer_find_selem(mixer, selem_id);
+
+ return elem;
+}
+
+static int
+alsa_setup_mixer(void)
+{
+ char *name;
+ long int a, b;
+ long alsa_min_vol, alsa_max_vol;
+ int err, index;
+
+ debug("alsa_setup_mixer");
+
+ if ((err = alsa_get_mixer(&mixer, alsa_cfg.mixer_card)) < 0)
+ return err;
+
+ parse_mixer_name(alsa_cfg.mixer_device, &name, &index);
+
+ pcm_element = alsa_get_mixer_elem(mixer, name, index);
+
+ g_free(name);
+
+ if (!pcm_element) {
+ g_warning("alsa_setup_mixer(): Failed to find mixer element: %s",
+ alsa_cfg.mixer_device);
+ return -1;
+ }
+
+ /*
+ * Work around a bug in alsa-lib up to 1.0.0rc2 where the
+ * new range don't take effect until the volume is changed.
+ * This hack should be removed once we depend on Alsa 1.0.0.
+ */
+ snd_mixer_selem_get_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_LEFT, &a);
+ snd_mixer_selem_get_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_RIGHT, &b);
+
+ snd_mixer_selem_get_playback_volume_range(pcm_element,
+ &alsa_min_vol, &alsa_max_vol);
+ snd_mixer_selem_set_playback_volume_range(pcm_element, 0, 100);
+
+ if (alsa_max_vol == 0) {
+ pcm_element = NULL;
+ return -1;
+ }
+
+ if (!alsa_cfg.soft_volume)
+ alsa_set_volume(a * 100 / alsa_max_vol, b * 100 / alsa_max_vol);
+
+ debug("alsa_setup_mixer: end");
+
+ return 0;
+}
+
+static int
+alsa_mixer_timeout(void *data)
+{
+ if (mixer) {
+ snd_mixer_close(mixer);
+ mixer = NULL;
+ pcm_element = NULL;
+ }
+ mixer_timeout = 0;
+ mixer_start = TRUE;
+
+ g_message("alsa mixer timed out");
+ return FALSE;
+}
+
+
+static void alsa_cleanup_mixer(void)
+{
+ pcm_element = NULL;
+ if (mixer) {
+ snd_mixer_close(mixer);
+ mixer = NULL;
+ }
+}
+
+
+void
+alsa_get_volume(int *l, int *r)
+{
+ long ll = *l, lr = *r;
+
+ if (mixer_start) {
+ alsa_setup_mixer();
+ mixer_start = FALSE;
+ }
+
+ if (!pcm_element)
+ return;
+
+ snd_mixer_handle_events(mixer);
+
+ if (alsa_cfg.soft_volume) {
+ *l = alsa_cfg.vol.left;
+ *r = alsa_cfg.vol.right;
+ }
+ else {
+ snd_mixer_selem_get_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_LEFT, &ll);
+ snd_mixer_selem_get_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_RIGHT, &lr);
+ *l = ll;
+ *r = lr;
+ }
+ if (mixer_timeout)
+ gtk_timeout_remove(mixer_timeout);
+ mixer_timeout = gtk_timeout_add(5000, alsa_mixer_timeout, NULL);
+}
+
+
+void
+alsa_set_volume(int l, int r)
+{
+ if (!pcm_element)
+ return;
+
+ if (alsa_cfg.soft_volume) {
+ alsa_cfg.vol.left = l;
+ alsa_cfg.vol.right = r;
+ }
+ else {
+ snd_mixer_selem_set_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_LEFT, l);
+ snd_mixer_selem_set_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_RIGHT, r);
+ }
+}
+
+/*
+ * audio stuff
+ */
+
+int alsa_playing(void)
+{
+ if (!going || paused || alsa_pcm == NULL)
+ return FALSE;
+
+ return(snd_pcm_state(alsa_pcm) == SND_PCM_STATE_RUNNING);
+}
+
+
+/* handle generic errors */
+static int alsa_handle_error(int err)
+{
+ switch (err) {
+ case -EPIPE: /* XRUN */
+ if (alsa_cfg.debug) {
+ snd_pcm_status_t *alsa_status;
+ snd_pcm_status_alloca(&alsa_status);
+ if (snd_pcm_status(alsa_pcm, alsa_status) < 0)
+ g_warning("xrun_recover(): snd_pcm_status() failed");
+ else {
+ printf("Status:\n");
+ snd_pcm_status_dump(alsa_status, logs);
+ }
+ }
+ return snd_pcm_prepare(alsa_pcm);
+
+ case -ESTRPIPE: /* suspend */
+ while ((err = snd_pcm_resume(alsa_pcm)) == -EAGAIN)
+ sleep(1); /* wait until suspend flag is released */
+ if (err < 0) {
+ g_warning("suspend_recover(): snd_pcm_resume() failed.");
+ return snd_pcm_prepare(alsa_pcm);
+ }
+ break;
+ }
+
+ return err;
+}
+
+/* update and get the available space on h/w buffer (in frames) */
+static snd_pcm_sframes_t alsa_get_avail(void)
+{
+ snd_pcm_sframes_t ret;
+
+ if (alsa_pcm == NULL)
+ return 0;
+
+ while ((ret = snd_pcm_avail_update(alsa_pcm)) < 0) {
+ ret = alsa_handle_error(ret);
+ if (ret < 0) {
+ g_warning("alsa_get_avail(): snd_pcm_avail_update() failed: %s",
+ snd_strerror(-ret));
+ return 0;
+ }
+ }
+ return ret;
+}
+
+/* do pause operation */
+static void alsa_do_pause(gboolean p)
+{
+ if (paused == p)
+ return;
+
+ if (alsa_pcm) {
+ if (alsa_can_pause) {
+ snd_pcm_pause(alsa_pcm, p);
+ } else if (p) {
+ snd_pcm_drop(alsa_pcm);
+ snd_pcm_prepare(alsa_pcm);
+ }
+ }
+ paused = p;
+}
+
+void alsa_pause(short p)
+{
+ debug("alsa_pause");
+ if (multi_thread)
+ pause_request = p;
+ else
+ alsa_do_pause(p);
+}
+
+/* close PCM and release associated resources */
+static void alsa_close_pcm(void)
+{
+ if (alsa_pcm) {
+ int err;
+ snd_pcm_drop(alsa_pcm);
+ if ((err = snd_pcm_close(alsa_pcm)) < 0)
+ g_warning("alsa_pcm_close() failed: %s",
+ snd_strerror(-err));
+ alsa_pcm = NULL;
+ }
+}
+
+/* reopen ALSA PCM */
+static int alsa_reopen(struct snd_format *f)
+{
+ /* remember the current position */
+ output_time_offset += (alsa_hw_written * 1000) / outputf->bps;
+ alsa_hw_written = 0;
+
+ alsa_close_pcm();
+
+ return alsa_setup(f);
+}
+
+/* do flush (drop) operation */
+static void alsa_do_flush(int time)
+{
+ if (alsa_pcm) {
+ snd_pcm_drop(alsa_pcm);
+ snd_pcm_prepare(alsa_pcm);
+ }
+ /* correct the offset */
+ output_time_offset = time;
+ alsa_total_written = (guint64) time * inputf->bps / 1000;
+ rd_index = wr_index = alsa_hw_written = 0;
+}
+
+void alsa_flush(int time)
+{
+ if (multi_thread) {
+ flush_request = time;
+ while (flush_request != -1)
+ xmms_usleep(10000);
+ } else
+ alsa_do_flush(time);
+}
+
+void alsa_close(void)
+{
+ if (! going)
+ return;
+
+ debug("Closing device");
+
+ going = 0;
+
+ if (multi_thread)
+ g_thread_join(audio_thread);
+ else
+ alsa_close_pcm();
+
+ alsa_cleanup_mixer();
+
+ xmms_convert_buffers_destroy(convertb);
+ convertb = NULL;
+ g_free(inputf);
+ inputf = NULL;
+ g_free(effectf);
+ effectf = NULL;
+ g_free(outputf);
+ outputf = NULL;
+
+ alsa_save_config();
+
+ if (alsa_cfg.debug)
+ snd_output_close(logs);
+ debug("Device closed");
+}
+
+/* return the size of audio data filled in the audio thread buffer */
+static int get_thread_buffer_filled(void)
+{
+ if (wr_index >= rd_index)
+ return wr_index - rd_index;
+ return thread_buffer_size - (rd_index - wr_index);
+}
+
+/* get the free space on buffer */
+int alsa_free(void)
+{
+ int result = 0;
+ if (multi_thread)
+ result = thread_buffer_size - get_thread_buffer_filled() - 1;
+ else if (! paused && alsa_pcm)
+ result = snd_pcm_frames_to_bytes(alsa_pcm, alsa_get_avail());
+ return result;
+}
+
+
+int
+alsa_get_output_time(void)
+{
+ snd_pcm_sframes_t delay;
+ guint64 bytes = 0;
+
+ if (!going || alsa_pcm == NULL)
+ return 0;
+
+ if (!snd_pcm_delay(alsa_pcm, &delay)) {
+ bytes = snd_pcm_frames_to_bytes(alsa_pcm, delay);
+ if (alsa_hw_written < bytes)
+ bytes = 0;
+ else
+ bytes = alsa_hw_written - bytes;
+ }
+ return output_time_offset + (bytes * 1000) / outputf->bps;
+}
+
+int
+alsa_get_written_time(void)
+{
+ if (!going)
+ return 0;
+ return (alsa_total_written * 1000) / inputf->bps;
+}
+
+#define STEREO_ADJUST(type, type2, endian) \
+do { \
+ type *ptr = data; \
+ for (i = 0; i < length; i += 4) \
+ { \
+ *ptr = type2##_TO_##endian(type2##_FROM_## endian(*ptr) * \
+ alsa_cfg.vol.left / 100); \
+ ptr++; \
+ *ptr = type2##_TO_##endian(type2##_FROM_##endian(*ptr) * \
+ alsa_cfg.vol.right / 100); \
+ ptr++; \
+ } \
+} while (0)
+
+#define MONO_ADJUST(type, type2, endian) \
+do { \
+ type *ptr = data; \
+ for (i = 0; i < length; i += 4) \
+ { \
+ *ptr = type2##_TO_##endian(type2##_FROM_## endian(*ptr) * \
+ vol / 100); \
+ ptr++; \
+ } \
+} while (0)
+
+#define VOLUME_ADJUST(type, type2, endian) \
+do { \
+ if (channels == 2) \
+ STEREO_ADJUST(type, type2, endian); \
+ else \
+ MONO_ADJUST(type, type2, endian); \
+} while (0)
+
+#define STEREO_ADJUST8(type) \
+do { \
+ type *ptr = data; \
+ for (i = 0; i < length; i += 2) \
+ { \
+ *ptr = *ptr * alsa_cfg.vol.left / 100; \
+ ptr++; \
+ *ptr = *ptr * alsa_cfg.vol.right / 100; \
+ ptr++; \
+ } \
+} while (0)
+
+#define MONO_ADJUST8(type) \
+do { \
+ type *ptr = data; \
+ for (i = 0; i < length; i += 4) \
+ { \
+ *ptr = *ptr * vol / 100; \
+ ptr++; \
+ } \
+} while (0)
+
+#define VOLUME_ADJUST8(type) \
+do { \
+ if (channels == 2) \
+ STEREO_ADJUST8(type); \
+ else \
+ MONO_ADJUST8(type); \
+} while (0)
+
+
+static void
+volume_adjust(void *data, int length, AFormat fmt, int channels)
+{
+ int i, vol;
+
+ if ((alsa_cfg.vol.left == 100 && alsa_cfg.vol.right == 100) ||
+ (channels == 1 &&
+ (alsa_cfg.vol.left == 100 || alsa_cfg.vol.right == 100)))
+ return;
+
+ vol = MAX(alsa_cfg.vol.left, alsa_cfg.vol.right);
+
+ switch (fmt) {
+ case FMT_S16_LE:
+ VOLUME_ADJUST(gint16, GINT16, LE);
+ break;
+ case FMT_U16_LE:
+ VOLUME_ADJUST(guint16, GUINT16, LE);
+ break;
+ case FMT_S16_BE:
+ VOLUME_ADJUST(gint16, GINT16, BE);
+ break;
+ case FMT_U16_BE:
+ VOLUME_ADJUST(guint16, GUINT16, BE);
+ break;
+ case FMT_S8:
+ VOLUME_ADJUST8(gint8);
+ break;
+ case FMT_U8:
+ VOLUME_ADJUST8(guint8);
+ break;
+ default:
+ g_warning("volume_adjust(): unhandled format: %d", fmt);
+ break;
+ }
+}
+
+
+/* transfer data to audio h/w; length is given in bytes
+ *
+ * data can be modified via effect plugin, rate conversion or
+ * software volume before passed to audio h/w
+ */
+static void alsa_do_write(gpointer data, int length)
+{
+ EffectPlugin *ep = NULL;
+ int new_freq;
+ int new_chn;
+ AFormat f;
+
+ if (paused)
+ return;
+
+ new_freq = inputf->rate;
+ new_chn = inputf->channels;
+ f = inputf->xmms_format;
+
+ if (effects_enabled() && (ep = get_current_effect_plugin()) &&
+ ep->query_format)
+ ep->query_format(&f, &new_freq, &new_chn);
+
+ if (f != effectf->xmms_format || new_freq != effectf->rate ||
+ new_chn != effectf->channels) {
+ debug("Changing audio format for effect plugin");
+ g_free(effectf);
+ effectf = snd_format_from_xmms(f, new_freq, new_chn);
+ if (alsa_reopen(effectf) < 0) {
+ /* fatal error... */
+ alsa_close();
+ return;
+ }
+ }
+
+ if (ep) {
+ length = ep->mod_samples(&data, length,
+ inputf->xmms_format,
+ inputf->rate, inputf->channels);
+ }
+
+ if (alsa_convert_func != NULL)
+ length = alsa_convert_func(convertb, &data, length);
+ if (alsa_stereo_convert_func != NULL)
+ length = alsa_stereo_convert_func(convertb, &data, length);
+ if (alsa_frequency_convert_func != NULL)
+ length = alsa_frequency_convert_func(convertb, &data, length,
+ effectf->rate, outputf->rate);
+
+ if (alsa_cfg.soft_volume)
+ volume_adjust(data, length, outputf->xmms_format, outputf->channels);
+
+ if (mmap)
+ alsa_mmap_audio(data, length);
+ else
+ alsa_write_audio(data, length);
+}
+
+/* write callback */
+void alsa_write(gpointer data, int length)
+{
+ if (multi_thread) {
+ int cnt;
+ char *src = (char *)data;
+
+ alsa_total_written += length;
+ while (length > 0) {
+ int wr;
+ cnt = MIN(length, thread_buffer_size - wr_index);
+ memcpy(thread_buffer + wr_index, src, cnt);
+ wr = (wr_index + cnt) % thread_buffer_size;
+ wr_index = wr;
+ length -= cnt;
+ src += cnt;
+ }
+ } else {
+ alsa_do_write(data, length);
+ alsa_total_written += length;
+ }
+}
+
+/* transfer data to audio h/w via normal write */
+static void alsa_write_audio(char *data, int length)
+{
+ snd_pcm_sframes_t written_frames;
+
+ while (length > 0) {
+ int frames = snd_pcm_bytes_to_frames(alsa_pcm, length);
+ written_frames = snd_pcm_writei(alsa_pcm, data, frames);
+
+ if (written_frames > 0) {
+ int written = snd_pcm_frames_to_bytes(alsa_pcm,
+ written_frames);
+ length -= written;
+ data += written;
+ alsa_hw_written += written;
+ }
+ else {
+ int err = alsa_handle_error((int)written_frames);
+ if (err < 0) {
+ g_warning("alsa_write_audio(): write error: %s",
+ snd_strerror(-err));
+ break;
+ }
+ }
+ }
+}
+
+/* transfer data to audio h/w via mmap
+ *
+ * basically, it makes sense only in the single thread mode.
+ * also, don't expect too much efficiency over mmap...
+ */
+static void
+alsa_mmap_audio(char *data, int length)
+{
+ int cnt, err;
+ snd_pcm_uframes_t offset, frames;
+ const snd_pcm_channel_area_t *chan_areas;
+ snd_pcm_channel_area_t src_area;
+ int ch, channels, sample_bits;
+
+ if (snd_pcm_state(alsa_pcm) == SND_PCM_STATE_XRUN)
+ alsa_handle_error(-EPIPE);
+
+ /* need to call this before snd_pcm_mmap_begin() */
+ alsa_get_avail();
+
+ channels = outputf->channels;
+ sample_bits = outputf->sample_bits;
+ while (length > 0) {
+ frames = snd_pcm_bytes_to_frames(alsa_pcm, length);
+ if ((err = snd_pcm_mmap_begin(alsa_pcm, &chan_areas, &offset, &frames) < 0)) {
+ g_warning("alsa_mmap_audio(): snd_pcm_mmap_begin() " "failed: %s",
+ snd_strerror(-err));
+ break;
+ }
+
+ cnt = snd_pcm_frames_to_bytes(alsa_pcm, frames);
+
+ src_area.addr = data;
+ src_area.first = 0;
+ src_area.step = channels * sample_bits;
+ for (ch = 0; ch < channels; ch++) {
+ snd_pcm_area_copy(&chan_areas[ch], offset,
+ &src_area, 0, frames, outputf->format);
+ src_area.first += sample_bits;
+ }
+
+ err = snd_pcm_mmap_commit(alsa_pcm, offset, frames);
+ if (err < 0) {
+ err = alsa_handle_error(err);
+ if (err < 0)
+ g_warning("alsa_mmap_audio(): snd_pcm_mmap_commit() "
+ "failed: %s", snd_strerror(-err));
+ }
+ else {
+ if (err != frames)
+ g_warning("alsa_mmap_audio(): snd_pcm_mmap_commit "
+ "returned %d, expected %d", err, (int)frames);
+ data += cnt;
+ length -= cnt;
+ alsa_hw_written += cnt;
+ }
+ }
+
+ /* PCM isn't started automatically in the case of mmap mode, so
+ * we need to trigger manually
+ */
+ if (snd_pcm_state(alsa_pcm) == SND_PCM_STATE_PREPARED) {
+ if (alsa_hw_written >= hw_period_size)
+ snd_pcm_start(alsa_pcm);
+ }
+}
+
+/* transfer audio data from thread buffer to h/w */
+static void alsa_write_out_thread_data(void)
+{
+ gint length, cnt, avail;
+ int err;
+
+ length = MIN(hw_period_size_in, get_thread_buffer_filled());
+ avail = snd_pcm_frames_to_bytes(alsa_pcm, alsa_get_avail());
+ length = MIN(length, avail);
+ while (length > 0) {
+ int rd;
+ cnt = MIN(length, thread_buffer_size - rd_index);
+ alsa_do_write(thread_buffer + rd_index, cnt);
+ rd = (rd_index + cnt) % thread_buffer_size;
+ rd_index = rd;
+ length -= cnt;
+
+ if (length > 0 && snd_pcm_state(alsa_pcm) == SND_PCM_STATE_PREPARED) {
+ if ((err = snd_pcm_start(alsa_pcm)) < 0)
+ g_warning("alsa_mmap_audio(): snd_pcm_start() "
+ "failed: %s", snd_strerror(-err));
+ }
+ }
+}
+
+/* audio thread loop */
+/* FIXME: proper lock? */
+static void *alsa_loop(void *arg)
+{
+ int npfds = snd_pcm_poll_descriptors_count(alsa_pcm);
+ struct pollfd *pfds;
+ unsigned short *revents;
+
+ if (npfds <= 0)
+ goto _error;
+ pfds = alloca(sizeof(*pfds) * npfds);
+ revents = alloca(sizeof(*revents) * npfds);
+ while (going && alsa_pcm) {
+ if (! paused && get_thread_buffer_filled() > hw_period_size_in) {
+ snd_pcm_poll_descriptors(alsa_pcm, pfds, npfds);
+ if (poll(pfds, npfds, 10) > 0) {
+ /* need to check revents. poll() with dmix returns
+ * a postive value even if no data is available
+ */
+ int i;
+ snd_pcm_poll_descriptors_revents(alsa_pcm, pfds, npfds, revents);
+ for (i = 0; i < npfds; i++)
+ if (revents[i] & POLLOUT) {
+ alsa_write_out_thread_data();
+ break;
+ }
+ }
+ } else
+ xmms_usleep(10000);
+
+ if (pause_request != paused)
+ alsa_do_pause(pause_request);
+
+ if (flush_request != -1) {
+ alsa_do_flush(flush_request);
+ flush_request = -1;
+ }
+ }
+
+ _error:
+ alsa_close_pcm();
+ g_free(thread_buffer);
+ thread_buffer = NULL;
+
+ g_thread_exit(NULL);
+
+ /* shut GCC up */
+ return NULL;
+}
+
+/* open callback */
+int
+alsa_open(AFormat fmt, int rate, int nch)
+{
+ debug("Opening device");
+ inputf = snd_format_from_xmms(fmt, rate, nch);
+ effectf = snd_format_from_xmms(fmt, rate, nch);
+
+ if (alsa_cfg.debug)
+ snd_output_stdio_attach(&logs, stdout, 0);
+
+ mmap = alsa_cfg.mmap;
+
+ if (alsa_setup(inputf) < 0) {
+ alsa_close();
+ return 0;
+ }
+
+ if (!mixer)
+ alsa_setup_mixer();
+
+ convertb = xmms_convert_buffers_new();
+
+ output_time_offset = 0;
+ alsa_total_written = alsa_hw_written = 0;
+ going = TRUE;
+ paused = FALSE;
+
+ multi_thread = alsa_cfg.multi_thread;
+ debug("ALSA: multi_thread = %d\n", multi_thread);
+
+ if (multi_thread) {
+ thread_buffer_size = (guint64)alsa_cfg.thread_buffer_time * inputf->bps / 1000;
+ if (thread_buffer_size < hw_buffer_size)
+ thread_buffer_size = hw_buffer_size * 2;
+ if (thread_buffer_size < 8192)
+ thread_buffer_size = 8192;
+ thread_buffer_size += hw_buffer_size;
+ thread_buffer_size -= thread_buffer_size % hw_period_size;
+ thread_buffer = g_malloc0(thread_buffer_size);
+ wr_index = rd_index = 0;
+ pause_request = FALSE;
+ flush_request = -1;
+
+ audio_thread = g_thread_create(alsa_loop, NULL, TRUE, NULL);
+ }
+
+ return 1;
+}
+
+static struct snd_format *
+snd_format_from_xmms(AFormat fmt, int rate, int channels)
+{
+ struct snd_format *f = g_malloc(sizeof(struct snd_format));
+ int i;
+
+ f->xmms_format = fmt;
+ f->format = SND_PCM_FORMAT_UNKNOWN;
+
+ for (i = 0; i < sizeof(format_table) / sizeof(format_table[0]); i++)
+ if (format_table[i].xmms == fmt) {
+ f->format = format_table[i].alsa;
+ break;
+ }
+
+ /* Get rid of _NE */
+ for (i = 0; i < sizeof(format_table) / sizeof(format_table[0]); i++)
+ if (format_table[i].alsa == f->format) {
+ f->xmms_format = format_table[i].xmms;
+ break;
+ }
+
+
+ f->rate = rate;
+ f->channels = channels;
+ f->sample_bits = snd_pcm_format_physical_width(f->format);
+ f->bps = (rate * f->sample_bits * channels) >> 3;
+
+ return f;
+}
+
+static int
+format_from_alsa(snd_pcm_format_t fmt)
+{
+ int i;
+ for (i = 0; i < sizeof(format_table) / sizeof(format_table[0]); i++)
+ if (format_table[i].alsa == fmt)
+ return format_table[i].xmms;
+ g_warning("Unsupported format: %s", snd_pcm_format_name(fmt));
+ return -1;
+}
+
+static int
+alsa_setup(struct snd_format *f)
+{
+ int err;
+ snd_pcm_hw_params_t *hwparams;
+ snd_pcm_sw_params_t *swparams;
+ int alsa_buffer_time;
+ unsigned int alsa_period_time;
+ snd_pcm_uframes_t alsa_buffer_size, alsa_period_size;
+
+ debug("alsa_setup");
+
+ alsa_convert_func = NULL;
+ alsa_stereo_convert_func = NULL;
+ alsa_frequency_convert_func = NULL;
+
+ g_free(outputf);
+ outputf = snd_format_from_xmms(f->xmms_format, f->rate, f->channels);
+
+ debug("Opening device: %s", alsa_cfg.pcm_device);
+ /* FIXME: Can snd_pcm_open() return EAGAIN? */
+ if ((err = snd_pcm_open(&alsa_pcm, alsa_cfg.pcm_device,
+ SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK)) < 0) {
+ g_warning("alsa_setup(): Failed to open pcm device (%s): %s",
+ alsa_cfg.pcm_device, snd_strerror(-err));
+ alsa_pcm = NULL;
+ g_free(outputf);
+ outputf = NULL;
+ return -1;
+ }
+
+ /* doesn't care about non-blocking */
+ /* snd_pcm_nonblock(alsa_pcm, 0); */
+
+ if (alsa_cfg.debug) {
+ snd_pcm_info_t *info;
+ int alsa_card, alsa_device, alsa_subdevice;
+
+ snd_pcm_info_alloca(&info);
+ snd_pcm_info(alsa_pcm, info);
+ alsa_card = snd_pcm_info_get_card(info);
+ alsa_device = snd_pcm_info_get_device(info);
+ alsa_subdevice = snd_pcm_info_get_subdevice(info);
+ printf("Card %i, Device %i, Subdevice %i\n",
+ alsa_card, alsa_device, alsa_subdevice);
+ }
+
+ snd_pcm_hw_params_alloca(&hwparams);
+
+ if ((err = snd_pcm_hw_params_any(alsa_pcm, hwparams)) < 0) {
+ g_warning("alsa_setup(): No configuration available for "
+ "playback: %s", snd_strerror(-err));
+ return -1;
+ }
+
+ if (mmap &&
+ (err = snd_pcm_hw_params_set_access(alsa_pcm, hwparams,
+ SND_PCM_ACCESS_MMAP_INTERLEAVED))
+ < 0) {
+ g_message("alsa_setup(): Cannot set mmap'ed mode: %s. "
+ "falling back to direct write", snd_strerror(-err));
+ mmap = 0;
+ }
+
+ if (!mmap &&
+ (err = snd_pcm_hw_params_set_access(alsa_pcm, hwparams,
+ SND_PCM_ACCESS_RW_INTERLEAVED)) <
+ 0) {
+ g_warning("alsa_setup(): Cannot set direct write mode: %s",
+ snd_strerror(-err));
+ return -1;
+ }
+
+ if ((err =
+ snd_pcm_hw_params_set_format(alsa_pcm, hwparams,
+ outputf->format)) < 0) {
+ /*
+ * Try if one of these format work (one of them should work
+ * on almost all soundcards)
+ */
+ snd_pcm_format_t formats[] = { SND_PCM_FORMAT_S16_LE,
+ SND_PCM_FORMAT_S16_BE,
+ SND_PCM_FORMAT_U8
+ };
+ int i;
+
+ for (i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) {
+ if (snd_pcm_hw_params_set_format(alsa_pcm, hwparams,
+ formats[i]) == 0) {
+ outputf->format = formats[i];
+ break;
+ }
+ }
+ if (outputf->format != f->format) {
+ outputf->xmms_format = format_from_alsa(outputf->format);
+ debug("Converting format from %d to %d",
+ f->xmms_format, outputf->xmms_format);
+ if (outputf->xmms_format < 0)
+ return -1;
+ alsa_convert_func =
+ xmms_convert_get_func(outputf->xmms_format,
+ f->xmms_format);
+ if (alsa_convert_func == NULL)
+ return -1;
+ }
+ else {
+ g_warning("alsa_setup(): Sample format not "
+ "available for playback: %s", snd_strerror(-err));
+ return -1;
+ }
+ }
+
+ snd_pcm_hw_params_set_channels_near(alsa_pcm, hwparams,
+ &outputf->channels);
+ if (outputf->channels != f->channels) {
+ debug("Converting channels from %d to %d",
+ f->channels, outputf->channels);
+ alsa_stereo_convert_func =
+ xmms_convert_get_channel_func(outputf->xmms_format,
+ outputf->channels,
+ f->channels);
+ if (alsa_stereo_convert_func == NULL)
+ return -1;
+ }
+
+ snd_pcm_hw_params_set_rate_near(alsa_pcm, hwparams, &outputf->rate, 0);
+ if (outputf->rate == 0) {
+ g_warning("alsa_setup(): No usable samplerate available.");
+ return -1;
+ }
+ if (outputf->rate != f->rate) {
+ debug("Converting samplerate from %d to %d",
+ f->rate, outputf->rate);
+ alsa_frequency_convert_func =
+ xmms_convert_get_frequency_func(outputf->xmms_format,
+ outputf->channels);
+ if (alsa_frequency_convert_func == NULL)
+ return -1;
+ }
+
+ outputf->sample_bits = snd_pcm_format_physical_width(outputf->format);
+ outputf->bps = (outputf->rate * outputf->sample_bits * outputf->channels) >> 3;
+
+ alsa_buffer_time = alsa_cfg.buffer_time * 1000;
+ if ((err = snd_pcm_hw_params_set_buffer_time_near(alsa_pcm, hwparams,
+ &alsa_buffer_time,
+ 0)) < 0) {
+ g_warning("alsa_setup(): Set buffer time failed: %s.",
+ snd_strerror(-err));
+ return -1;
+ }
+
+ alsa_period_time = alsa_cfg.period_time * 1000;
+ if ((err = snd_pcm_hw_params_set_period_time_near(alsa_pcm, hwparams,
+ &alsa_period_time,
+ 0)) < 0) {
+ g_warning("alsa_setup(): Set period time failed: %s.",
+ snd_strerror(-err));
+ return -1;
+ }
+
+ if (snd_pcm_hw_params(alsa_pcm, hwparams) < 0) {
+ if (alsa_cfg.debug)
+ snd_pcm_hw_params_dump(hwparams, logs);
+ g_warning("alsa_setup(): Unable to install hw params");
+ return -1;
+ }
+
+ if ((err =
+ snd_pcm_hw_params_get_buffer_size(hwparams,
+ &alsa_buffer_size)) < 0) {
+ g_warning("alsa_setup(): snd_pcm_hw_params_get_buffer_size() "
+ "failed: %s", snd_strerror(-err));
+ return -1;
+ }
+
+ if ((err =
+ snd_pcm_hw_params_get_period_size(hwparams, &alsa_period_size,
+ 0)) < 0) {
+ g_warning("alsa_setup(): snd_pcm_hw_params_get_period_size() "
+ "failed: %s", snd_strerror(-err));
+ return -1;
+ }
+
+ alsa_can_pause = snd_pcm_hw_params_can_pause(hwparams);
+
+ snd_pcm_sw_params_alloca(&swparams);
+ snd_pcm_sw_params_current(alsa_pcm, swparams);
+
+ /* This has effect for non-mmap only */
+ if ((err = snd_pcm_sw_params_set_start_threshold(alsa_pcm,
+ swparams,
+ alsa_buffer_size -
+ alsa_period_size) < 0))
+ g_warning("alsa_setup(): setting start " "threshold failed: %s",
+ snd_strerror(-err));
+ if (snd_pcm_sw_params(alsa_pcm, swparams) < 0) {
+ g_warning("alsa_setup(): Unable to install sw params");
+ return -1;
+ }
+
+ if (alsa_cfg.debug) {
+ snd_pcm_sw_params_dump(swparams, logs);
+ snd_pcm_dump(alsa_pcm, logs);
+ }
+
+ hw_buffer_size = snd_pcm_frames_to_bytes(alsa_pcm, alsa_buffer_size);
+ hw_period_size = snd_pcm_frames_to_bytes(alsa_pcm, alsa_period_size);
+ if (inputf->bps != outputf->bps) {
+ hw_buffer_size_in = ((guint64)hw_buffer_size * inputf->bps +
+ outputf->bps/2) / outputf->bps;
+ hw_period_size_in = ((guint64)hw_period_size * inputf->bps +
+ outputf->bps/2) / outputf->bps;
+ } else {
+ hw_buffer_size_in = hw_buffer_size;
+ hw_period_size_in = hw_period_size;
+ }
+
+ debug("Device setup: buffer time: %i, size: %i.", alsa_buffer_time,
+ hw_buffer_size);
+ debug("Device setup: period time: %i, size: %i.", alsa_period_time,
+ hw_period_size);
+ debug("bits per sample: %i; frame size: %i; Bps: %i",
+ snd_pcm_format_physical_width(outputf->format),
+ snd_pcm_frames_to_bytes(alsa_pcm, 1), outputf->bps);
+
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/configure.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/configure.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/configure.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,452 @@
+/* XMMS - ALSA output plugin
+ * Copyright (C) 2001-2003 Matthieu Sozeau <mattam at altern.org>
+ * Copyright (C) 2003-2004 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#include "alsa.h"
+#include <stdio.h>
+#include <libbeep/configdb.h>
+#include <glib/gi18n.h>
+
+
+static GtkWidget *configure_win = NULL;
+static GtkWidget *buffer_time_spin, *period_time_spin;
+static GtkWidget *mmap_button, *softvolume_toggle_button;
+
+static GtkWidget *thread_buffer_time_spin;
+static GtkWidget *mthread_button;
+
+
+static GtkWidget *devices_combo, *mixer_devices_combo;
+
+static int current_mixer_card;
+
+#define GET_SPIN_INT(spin) \
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin))
+#define GET_TOGGLE(tb) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tb))
+#define GET_CHARS(edit) gtk_editable_get_chars(GTK_EDITABLE(edit), 0, -1)
+
+static void
+configure_win_ok_cb(GtkWidget * w, gpointer data)
+{
+ g_free(alsa_cfg.pcm_device);
+ alsa_cfg.pcm_device = GET_CHARS(GTK_COMBO(devices_combo)->entry);
+ alsa_cfg.buffer_time = GET_SPIN_INT(buffer_time_spin);
+ alsa_cfg.period_time = GET_SPIN_INT(period_time_spin);
+ alsa_cfg.thread_buffer_time = GET_SPIN_INT(thread_buffer_time_spin);
+ alsa_cfg.multi_thread = GET_TOGGLE(mthread_button);
+ alsa_cfg.mmap = GET_TOGGLE(mmap_button);
+ alsa_cfg.soft_volume = GET_TOGGLE(softvolume_toggle_button);
+ alsa_cfg.mixer_card = current_mixer_card;
+ alsa_cfg.mixer_device = GET_CHARS(GTK_COMBO(mixer_devices_combo)->entry);
+
+ alsa_save_config();
+ gtk_widget_destroy(configure_win);
+}
+
+void
+alsa_save_config(void)
+{
+ //ConfigFile *cfgfile = xmms_cfg_open_default_file();
+ ConfigDb *cfgfile;
+
+ cfgfile = bmp_cfg_db_open();
+ bmp_cfg_db_set_int(cfgfile, "ALSA", "buffer_time", alsa_cfg.buffer_time);
+ bmp_cfg_db_set_int(cfgfile, "ALSA", "thread_buffer_time", alsa_cfg.thread_buffer_time);
+ bmp_cfg_db_set_int(cfgfile, "ALSA", "period_time", alsa_cfg.period_time);
+ bmp_cfg_db_set_bool(cfgfile, "ALSA", "multi_thread", alsa_cfg.multi_thread);
+ bmp_cfg_db_set_bool(cfgfile, "ALSA", "mmap", alsa_cfg.mmap);
+ bmp_cfg_db_set_string(cfgfile, "ALSA", "pcm_device", alsa_cfg.pcm_device);
+ bmp_cfg_db_set_int(cfgfile, "ALSA", "mixer_card", alsa_cfg.mixer_card);
+ bmp_cfg_db_set_string(cfgfile, "ALSA", "mixer_device",
+ alsa_cfg.mixer_device);
+ bmp_cfg_db_set_bool(cfgfile, "ALSA", "soft_volume", alsa_cfg.soft_volume);
+ bmp_cfg_db_set_int(cfgfile, "ALSA", "volume_left", alsa_cfg.vol.left);
+ bmp_cfg_db_set_int(cfgfile, "ALSA", "volume_right", alsa_cfg.vol.right);
+// bmp_cfg_db_set_default_file(cfgfile);
+// xmms_cfg_free(cfgfile);
+ bmp_cfg_db_close(cfgfile);
+}
+
+static int
+get_cards(GtkOptionMenu * omenu, GCallback cb, int active)
+{
+ GtkWidget *menu, *item;
+ int card = -1, err, set = 0, curr = -1;
+
+ menu = gtk_menu_new();
+ if ((err = snd_card_next(&card)) != 0)
+ g_warning("snd_next_card() failed: %s", snd_strerror(-err));
+
+ while (card > -1) {
+ char *label;
+
+ curr++;
+ if (card == active)
+ set = curr;
+ if ((err = snd_card_get_name(card, &label)) != 0) {
+ g_warning("snd_carg_get_name() failed: %s", snd_strerror(-err));
+ break;
+ }
+
+ item = gtk_menu_item_new_with_label(label);
+ g_signal_connect(item, "activate", G_CALLBACK(cb),
+ GINT_TO_POINTER(card));
+ gtk_widget_show(item);
+ gtk_menu_append(GTK_MENU(menu), item);
+ if ((err = snd_card_next(&card)) != 0) {
+ g_warning("snd_next_card() failed: %s", snd_strerror(-err));
+ break;
+ }
+ }
+
+ gtk_option_menu_set_menu(omenu, menu);
+ return set;
+}
+
+static int
+get_mixer_devices(GtkCombo * combo, int card)
+{
+ GList *items = NULL;
+ int err;
+ snd_mixer_t *mixer;
+ snd_mixer_elem_t *current;
+
+ if ((err = alsa_get_mixer(&mixer, card)) < 0)
+ return err;
+
+ current = snd_mixer_first_elem(mixer);
+
+ while (current) {
+ const char *sname = snd_mixer_selem_get_name(current);
+ if (snd_mixer_selem_is_active(current) &&
+ snd_mixer_selem_has_playback_volume(current))
+ items = g_list_append(items, g_strdup(sname));
+ current = snd_mixer_elem_next(current);
+ }
+
+ gtk_combo_set_popdown_strings(combo, items);
+
+ return 0;
+}
+
+static void
+get_devices_for_card(GtkCombo * combo, int card)
+{
+ GtkWidget *item;
+ int pcm_device = -1, err;
+ snd_pcm_info_t *pcm_info;
+ snd_ctl_t *ctl;
+ char dev[64], *card_name;
+
+ sprintf(dev, "hw:%i", card);
+
+ if ((err = snd_ctl_open(&ctl, dev, 0)) < 0) {
+ printf("snd_ctl_open() failed: %s", snd_strerror(-err));
+ return;
+ }
+
+ if ((err = snd_card_get_name(card, &card_name)) != 0) {
+ g_warning("snd_card_get_name() failed: %s", snd_strerror(-err));
+ card_name = _("Unknown soundcard");
+ }
+
+ snd_pcm_info_alloca(&pcm_info);
+
+ for (;;) {
+ char *device, *descr;
+ if ((err = snd_ctl_pcm_next_device(ctl, &pcm_device)) < 0) {
+ g_warning("snd_ctl_pcm_next_device() failed: %s",
+ snd_strerror(-err));
+ pcm_device = -1;
+ }
+ if (pcm_device < 0)
+ break;
+
+ snd_pcm_info_set_device(pcm_info, pcm_device);
+ snd_pcm_info_set_subdevice(pcm_info, 0);
+ snd_pcm_info_set_stream(pcm_info, SND_PCM_STREAM_PLAYBACK);
+
+ if ((err = snd_ctl_pcm_info(ctl, pcm_info)) < 0) {
+ if (err != -ENOENT)
+ g_warning("get_devices_for_card(): "
+ "snd_ctl_pcm_info() "
+ "failed (%d:%d): %s.", card,
+ pcm_device, snd_strerror(-err));
+ continue;
+ }
+
+ device = g_strdup_printf("hw:%d,%d", card, pcm_device);
+ descr = g_strconcat(card_name, ": ",
+ snd_pcm_info_get_name(pcm_info),
+ " (", device, ")", NULL);
+ item = gtk_list_item_new_with_label(descr);
+ gtk_widget_show(item);
+ g_free(descr);
+ gtk_combo_set_item_string(combo, GTK_ITEM(item), device);
+ g_free(device);
+ gtk_container_add(GTK_CONTAINER(combo->list), item);
+ }
+
+ snd_ctl_close(ctl);
+}
+
+
+
+static void
+get_devices(GtkCombo * combo)
+{
+ GtkWidget *item;
+ int card = -1;
+ int err = 0;
+ char *descr;
+
+ descr = g_strdup_printf(_("Default PCM device (%s)"), "default");
+ item = gtk_list_item_new_with_label(descr);
+ gtk_widget_show(item);
+ g_free(descr);
+ gtk_combo_set_item_string(combo, GTK_ITEM(item), "default");
+ gtk_container_add(GTK_CONTAINER(combo->list), item);
+
+ if ((err = snd_card_next(&card)) != 0) {
+ g_warning("snd_next_card() failed: %s", snd_strerror(-err));
+ return;
+ }
+
+ while (card > -1) {
+ get_devices_for_card(combo, card);
+ if ((err = snd_card_next(&card)) != 0) {
+ g_warning("snd_next_card() failed: %s", snd_strerror(-err));
+ break;
+ }
+ }
+}
+
+static void
+mixer_card_cb(GtkWidget * widget, gpointer card)
+{
+ if (current_mixer_card == GPOINTER_TO_INT(card))
+ return;
+ current_mixer_card = GPOINTER_TO_INT(card);
+ get_mixer_devices(GTK_COMBO(mixer_devices_combo), current_mixer_card);
+}
+
+static void
+softvolume_toggle_cb(GtkToggleButton * widget, gpointer data)
+{
+ gboolean softvolume = gtk_toggle_button_get_active(widget);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), !softvolume);
+ gtk_widget_set_sensitive(mixer_devices_combo, !softvolume);
+}
+
+void
+alsa_configure(void)
+{
+ GtkWidget *vbox, *notebook;
+ GtkWidget *dev_vbox, *adevice_frame, *adevice_box;
+ GtkWidget *mixer_frame, *mixer_box, *mixer_table, *mixer_card_om;
+ GtkWidget *mixer_card_label, *mixer_device_label;
+ GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
+ GtkWidget *buffer_time_label, *period_time_label;
+ GtkObject *buffer_time_adj, *period_time_adj;
+ GtkWidget *bbox, *ok, *cancel;
+ GtkWidget *thread_buffer_time_label;
+ GtkObject *thread_buffer_time_adj;
+
+ int mset;
+
+ if (configure_win) {
+ gtk_window_present(GTK_WINDOW(configure_win));
+ return;
+ }
+
+ configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ g_signal_connect(configure_win, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &configure_win);
+ gtk_window_set_title(GTK_WINDOW(configure_win),
+ _("ALSA Driver configuration"));
+ gtk_window_set_type_hint(GTK_WINDOW(configure_win),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(configure_win), FALSE);
+ gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(configure_win), vbox);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ dev_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(dev_vbox), 5);
+
+ adevice_frame = gtk_frame_new(_("Audio device:"));
+ gtk_box_pack_start(GTK_BOX(dev_vbox), adevice_frame, FALSE, FALSE, 0);
+
+ adevice_box = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(adevice_box), 5);
+ gtk_container_add(GTK_CONTAINER(adevice_frame), adevice_box);
+
+ devices_combo = gtk_combo_new();
+ gtk_box_pack_start(GTK_BOX(adevice_box), devices_combo, FALSE, FALSE, 0);
+ get_devices(GTK_COMBO(devices_combo));
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(devices_combo)->entry),
+ alsa_cfg.pcm_device);
+
+ mixer_frame = gtk_frame_new(_("Mixer:"));
+ gtk_box_pack_start(GTK_BOX(dev_vbox), mixer_frame, FALSE, FALSE, 0);
+
+ mixer_box = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(mixer_box), 5);
+ gtk_container_add(GTK_CONTAINER(mixer_frame), mixer_box);
+
+ softvolume_toggle_button =
+ gtk_check_button_new_with_label(_("Use software volume control"));
+
+ gtk_box_pack_start(GTK_BOX(mixer_box), softvolume_toggle_button,
+ FALSE, FALSE, 0);
+
+ mixer_table = gtk_table_new(2, 2, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(mixer_table), 5);
+ gtk_table_set_col_spacings(GTK_TABLE(mixer_table), 5);
+ gtk_box_pack_start(GTK_BOX(mixer_box), mixer_table, FALSE, FALSE, 0);
+
+ mixer_card_label = gtk_label_new(_("Mixer card:"));
+ gtk_label_set_justify(GTK_LABEL(mixer_card_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(mixer_card_label), 0, 0.5);
+ gtk_table_attach(GTK_TABLE(mixer_table), mixer_card_label,
+ 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
+
+ mixer_card_om = gtk_option_menu_new();
+ mset = get_cards(GTK_OPTION_MENU(mixer_card_om),
+ G_CALLBACK(mixer_card_cb), alsa_cfg.mixer_card);
+
+ gtk_table_attach(GTK_TABLE(mixer_table), mixer_card_om,
+ 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+
+ mixer_device_label = gtk_label_new(_("Mixer device:"));
+ gtk_label_set_justify(GTK_LABEL(mixer_device_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(mixer_device_label), 0, 0.5);
+ gtk_table_attach(GTK_TABLE(mixer_table), mixer_device_label,
+ 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
+ mixer_devices_combo = gtk_combo_new();
+ gtk_option_menu_set_history(GTK_OPTION_MENU(mixer_card_om), mset);
+ get_mixer_devices(GTK_COMBO(mixer_devices_combo), alsa_cfg.mixer_card);
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(mixer_devices_combo)->entry),
+ alsa_cfg.mixer_device);
+
+ gtk_table_attach(GTK_TABLE(mixer_table), mixer_devices_combo,
+ 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+
+ g_signal_connect(softvolume_toggle_button, "toggled",
+ G_CALLBACK(softvolume_toggle_cb), mixer_card_om);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(softvolume_toggle_button),
+ alsa_cfg.soft_volume);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dev_vbox,
+ gtk_label_new(_("Device settings")));
+
+ buffer_frame = gtk_frame_new(_("Advanced settings:"));
+ gtk_container_set_border_width(GTK_CONTAINER(buffer_frame), 5);
+
+ buffer_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(buffer_frame), buffer_vbox);
+
+ gtk_container_set_border_width(GTK_CONTAINER(buffer_vbox), 5);
+
+ buffer_table = gtk_table_new(2, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(buffer_table), 5);
+ gtk_table_set_col_spacings(GTK_TABLE(buffer_table), 5);
+ gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
+
+ buffer_time_label = gtk_label_new(_("Buffer time (ms):"));
+ gtk_label_set_justify(GTK_LABEL(buffer_time_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(buffer_time_label), 0, 0.5);
+ gtk_table_attach(GTK_TABLE(buffer_table), buffer_time_label,
+ 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
+
+ buffer_time_adj = gtk_adjustment_new(alsa_cfg.buffer_time,
+ 200, 1000000, 100, 100, 100);
+ buffer_time_spin = gtk_spin_button_new(GTK_ADJUSTMENT(buffer_time_adj),
+ 8, 0);
+ gtk_widget_set_usize(buffer_time_spin, 60, -1);
+ gtk_table_attach(GTK_TABLE(buffer_table), buffer_time_spin,
+ 1, 2, 0, 1, 0, 0, 0, 0);
+
+ period_time_label = gtk_label_new(_("Period time (ms):"));
+ gtk_label_set_justify(GTK_LABEL(period_time_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(period_time_label), 0, 0.5);
+ gtk_table_attach(GTK_TABLE(buffer_table), period_time_label,
+ 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
+ period_time_adj = gtk_adjustment_new(alsa_cfg.period_time,
+ 1, 500, 1, 100, 100);
+ period_time_spin = gtk_spin_button_new(GTK_ADJUSTMENT(period_time_adj),
+ 8, 0);
+
+ gtk_widget_set_usize(period_time_spin, 60, -1);
+ gtk_table_attach(GTK_TABLE(buffer_table), period_time_spin,
+ 1, 2, 1, 2, 0, 0, 0, 0);
+
+ thread_buffer_time_label = gtk_label_new(_("Thread buffer time (ms):"));
+ gtk_label_set_justify(GTK_LABEL(thread_buffer_time_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(thread_buffer_time_label), 0, 0.5);
+ gtk_table_attach(GTK_TABLE(buffer_table), thread_buffer_time_label,
+ 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
+ thread_buffer_time_adj = gtk_adjustment_new(alsa_cfg.thread_buffer_time,
+ 1000, 1000000, 100, 100, 100);
+ thread_buffer_time_spin = gtk_spin_button_new(GTK_ADJUSTMENT(thread_buffer_time_adj),
+ 8, 0);
+
+ gtk_widget_set_usize(thread_buffer_time_spin, 60, -1);
+ gtk_table_attach(GTK_TABLE(buffer_table), thread_buffer_time_spin,
+ 1, 2, 2, 3, 0, 0, 0, 0);
+
+ mthread_button = gtk_check_button_new_with_label(_("Multi-thread mode"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mthread_button),
+ alsa_cfg.multi_thread);
+ gtk_box_pack_start(GTK_BOX(buffer_vbox), mthread_button, FALSE, FALSE, 0);
+
+ mmap_button = gtk_check_button_new_with_label(_("Mmap mode"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmap_button),
+ alsa_cfg.mmap);
+ gtk_box_pack_start(GTK_BOX(buffer_vbox), mmap_button, FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame,
+ gtk_label_new(_("Advanced settings")));
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_OK);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+
+ g_signal_connect(ok, "clicked", G_CALLBACK(configure_win_ok_cb), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default(ok);
+
+ g_signal_connect_swapped(cancel, "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ configure_win);
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+
+
+
+ gtk_widget_show_all(configure_win);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/init.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/init.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/alsa/init.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,72 @@
+/* XMMS - ALSA output plugin
+ * Copyright (C) 2001-2003 Matthieu Sozeau <mattam at altern.org>
+ * Copyright (C) 2003-2004 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "libbeep/configdb.h"
+#include "alsa.h"
+#include <dlfcn.h>
+#include <ctype.h>
+#include <glib/gi18n.h>
+
+struct alsa_config alsa_cfg;
+
+void
+alsa_init(void)
+{
+ ConfigDb *configdb;
+
+ memset(&alsa_cfg, 0, sizeof(alsa_cfg));
+ alsa_cfg.buffer_time = 500;
+ alsa_cfg.period_time = 50;
+ alsa_cfg.thread_buffer_time = 3000;
+ alsa_cfg.debug = 0;
+ alsa_cfg.multi_thread = 1;
+ alsa_cfg.mmap = 0;
+ alsa_cfg.vol.left = 100;
+ alsa_cfg.vol.right = 100;
+
+ configdb = bmp_cfg_db_open();
+ if (!bmp_cfg_db_get_string(configdb, "ALSA", "pcm_device",
+ &alsa_cfg.pcm_device))
+ alsa_cfg.pcm_device = g_strdup("default");
+ if (!bmp_cfg_db_get_string(configdb, "ALSA", "mixer_device",
+ &alsa_cfg.mixer_device))
+ alsa_cfg.mixer_device = g_strdup("PCM");
+ bmp_cfg_db_get_int(configdb, "ALSA", "mixer_card", &alsa_cfg.mixer_card);
+ bmp_cfg_db_get_int(configdb, "ALSA", "buffer_time",
+ &alsa_cfg.buffer_time);
+ bmp_cfg_db_get_int(configdb, "ALSA", "thread_buffer_time",
+ &alsa_cfg.thread_buffer_time);
+ bmp_cfg_db_get_int(configdb, "ALSA", "period_time",
+ &alsa_cfg.period_time);
+ bmp_cfg_db_get_bool(configdb, "ALSA", "mmap", &alsa_cfg.mmap);
+ bmp_cfg_db_get_bool(configdb, "ALSA", "multi_thread", &alsa_cfg.multi_thread);
+ bmp_cfg_db_get_bool(configdb, "ALSA", "soft_volume",
+ &alsa_cfg.soft_volume);
+ bmp_cfg_db_get_int(configdb, "ALSA", "volume_left", &alsa_cfg.vol.left);
+ bmp_cfg_db_get_int(configdb, "ALSA", "volume_right", &alsa_cfg.vol.right);
+
+ bmp_cfg_db_get_bool(configdb, "ALSA", "debug", &alsa_cfg.debug);
+
+ bmp_cfg_db_close(configdb);
+
+ if (dlopen("libasound.so.2", RTLD_NOW | RTLD_GLOBAL) == NULL) {
+ g_message("Cannot load alsa library: %s", dlerror());
+ /* FIXME, this plugin wont work... */
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,27 @@
+if HAVE_ESD
+
+esdltlibs = libesdout.la
+esdsources = esd.c esdout.h \
+mixer.c \
+about.c \
+configure.c \
+audio.c \
+init.c
+
+else
+
+esdltlibs =
+esdsources =
+
+endif
+
+EXTRA_DIST = esd.c esdout.h mixer.c about.c configure.c audio.c init.c
+
+libdir = $(plugindir)/$(OUTPUT_PLUGIN_DIR)
+lib_LTLIBRARIES = $(esdltlibs)
+
+INCLUDES = $(GTK_CFLAGS) $(ESD_CFLAGS) -I$(top_builddir)/intl -I$(top_srcdir)
+libesdout_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+libesdout_la_LIBADD = $(GTK_LIBS) $(ESD_LIBS)
+
+libesdout_la_SOURCES= $(esdsources)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/about.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/about.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/about.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,52 @@
+/* xmms - esound output plugin
+ * Copyright (C) 1999 Galex Yen
+ * 3/9/99
+ *
+ * this program is free software
+ *
+ * Description:
+ * This program is an output plugin for xmms v0.9 or greater.
+ * The program uses the esound daemon to output audio in order
+ * to allow more than one program to play audio on the same
+ * device at the same time.
+ *
+ * Contains code Copyright (C) 1998-1999 Mikael Alm, Olle Hallnas,
+ * Thomas Nillson and 4Front Technologies
+ */
+
+#include "esdout.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libbeep/util.h>
+
+
+void
+esdout_about(void)
+{
+ static GtkWidget *dialog;
+
+ if (dialog != NULL)
+ return;
+
+ dialog = xmms_show_message(_("About ESounD Plugin"),
+ _("XMMS ESounD Plugin\n\n "
+ "This program is free software; you can redistribute it and/or modify\n"
+ "it under the terms of the GNU General Public License as published by\n"
+ "the Free Software Foundation; either version 2 of the License, or\n"
+ "(at your option) any later version.\n"
+ "\n"
+ "This program is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+ "GNU General Public License for more details.\n"
+ "\n"
+ "You should have received a copy of the GNU General Public License\n"
+ "along with this program; if not, write to the Free Software\n"
+ "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+ "USA."), _("Ok"), FALSE, NULL, NULL);
+ g_signal_connect(G_OBJECT(dialog), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &dialog);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/audio.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/audio.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/audio.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,479 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+#include <esd.h>
+
+#include <unistd.h>
+
+#include <libbeep/util.h>
+
+#include "esdout.h"
+
+
+static gint fd = 0;
+static gpointer buffer;
+static gboolean going = FALSE, paused = FALSE, prebuffer, remove_prebuffer;
+static gint buffer_size, prebuffer_size, blk_size = 4096;
+static gint rd_index = 0, wr_index = 0;
+static gint output_time_offset = 0;
+static guint64 written = 0, output_bytes = 0;
+static gint bps, ebps;
+static gint flush;
+static gint format, channels, frequency, latency;
+static esd_format_t esd_format;
+static gint input_bps, input_format, input_frequency, input_channels;
+static GThread *buffer_thread;
+static gboolean realtime = FALSE;
+static void *(*esd_translate) (void *, gint);
+
+static gint
+get_latency(void)
+{
+ int fd, amount = 0;
+
+#ifndef HAVE_ESD_GET_LATENCY
+ esd_server_info_t *info;
+#endif
+
+ fd = esd_open_sound(esd_cfg.hostname);
+
+ if (fd == -1)
+ return 0;
+
+#ifdef HAVE_ESD_GET_LATENCY
+ amount = esd_get_latency(fd);
+#else
+ info = esd_get_server_info(fd);
+ if (info) {
+ if (info->format & ESD_STEREO) {
+ if (info->format & ESD_BITS16)
+ amount = (44100 * (ESD_BUF_SIZE + 64)) / info->rate;
+ else
+ amount = (44100 * (ESD_BUF_SIZE + 128)) / info->rate;
+ }
+ else {
+ if (info->format & ESD_BITS16)
+ amount = (2 * 44100 * (ESD_BUF_SIZE + 128)) / info->rate;
+ else
+ amount = (2 * 44100 * (ESD_BUF_SIZE + 256)) / info->rate;
+ }
+ free(info);
+ }
+ amount += ESD_BUF_SIZE * 2;
+#endif
+ esd_close(fd);
+ return amount;
+}
+
+static void *
+esd_stou8(void *data, gint length)
+{
+ int len = length;
+ unsigned char *dat = (unsigned char *) data;
+ while (len-- > 0)
+ *dat++ ^= 0x80;
+ return data;
+}
+
+static void *
+esd_utos16sw(void *data, gint length)
+{
+ int len = length;
+ short *dat = data;
+ while (len > 0) {
+ *dat = GUINT16_SWAP_LE_BE(*dat) ^ 0x8000;
+ dat++;
+ len -= 2;
+ }
+ return data;
+}
+
+static void *
+esd_utos16(void *data, gint length)
+{
+ int len = length;
+ short *dat = data;
+ while (len > 0) {
+ *dat ^= 0x8000;
+ dat++;
+ len -= 2;
+ }
+ return data;
+}
+
+static void *
+esd_16sw(void *data, gint length)
+{
+ int len = length;
+ short *dat = data;
+ while (len > 0) {
+ *dat = GUINT16_SWAP_LE_BE(*dat);
+ dat++;
+ len -= 2;
+ }
+ return data;
+}
+
+static void
+esdout_setup_format(AFormat fmt, gint rate, gint nch)
+{
+ gboolean swap_sign = FALSE;
+ gboolean swap_16 = FALSE;
+
+ format = fmt;
+ frequency = rate;
+ channels = nch;
+ switch (fmt) {
+ case FMT_S8:
+ swap_sign = TRUE;
+ case FMT_U8:
+ esd_format = ESD_BITS8;
+ break;
+ case FMT_U16_LE:
+ case FMT_U16_BE:
+ case FMT_U16_NE:
+ swap_sign = TRUE;
+ case FMT_S16_LE:
+ case FMT_S16_BE:
+ case FMT_S16_NE:
+ esd_format = ESD_BITS16;
+ break;
+ }
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ if (fmt == FMT_U16_LE || fmt == FMT_S16_LE)
+#else
+ if (fmt == FMT_U16_BE || fmt == FMT_S16_BE)
+#endif
+ swap_16 = TRUE;
+
+ esd_translate = (void *(*)()) NULL;
+ if (esd_format == ESD_BITS8) {
+ if (swap_sign == TRUE)
+ esd_translate = esd_stou8;
+ }
+ else {
+ if (swap_sign == TRUE) {
+ if (swap_16 == TRUE)
+ esd_translate = esd_utos16sw;
+ else
+ esd_translate = esd_utos16;
+ }
+ else {
+ if (swap_16 == TRUE)
+ esd_translate = esd_16sw;
+ }
+ }
+
+ bps = rate * nch;
+ if (esd_format == ESD_BITS16)
+ bps *= 2;
+ if (nch == 1)
+ esd_format |= ESD_MONO;
+ else
+ esd_format |= ESD_STEREO;
+ esd_format |= ESD_STREAM | ESD_PLAY;
+
+ latency = ((get_latency() * frequency) / 44100) * channels;
+ if (format != FMT_U8 && format != FMT_S8)
+ latency *= 2;
+}
+
+
+gint
+esdout_get_written_time(void)
+{
+ if (!going)
+ return 0;
+ return (gint) ((written * 1000) / input_bps);
+}
+
+gint
+esdout_get_output_time(void)
+{
+ guint64 bytes;
+
+ if (!fd || !going)
+ return 0;
+
+ bytes = output_bytes;
+ if (!paused)
+ bytes -= (bytes < latency ? bytes : latency);
+
+ return output_time_offset + (gint) ((bytes * 1000) / ebps);
+}
+
+gint
+esdout_used(void)
+{
+ if (realtime)
+ return 0;
+ else {
+ if (wr_index >= rd_index)
+ return wr_index - rd_index;
+ return buffer_size - (rd_index - wr_index);
+ }
+}
+
+gint
+esdout_playing(void)
+{
+ if (!going)
+ return FALSE;
+ if (!esdout_used())
+ return FALSE;
+
+ return TRUE;
+}
+
+gint
+esdout_free(void)
+{
+ if (!realtime) {
+ if (remove_prebuffer && prebuffer) {
+ prebuffer = FALSE;
+ remove_prebuffer = FALSE;
+ }
+ if (prebuffer)
+ remove_prebuffer = TRUE;
+
+ if (rd_index > wr_index)
+ return (rd_index - wr_index) - 1;
+ return (buffer_size - (wr_index - rd_index)) - 1;
+ }
+ else {
+ if (paused)
+ return 0;
+ else
+ return 1000000;
+ }
+}
+
+static void
+esdout_write_audio(gpointer data, gint length)
+{
+ AFormat new_format;
+ gint new_frequency, new_channels;
+ EffectPlugin *ep;
+
+ new_format = input_format;
+ new_frequency = input_frequency;
+ new_channels = input_channels;
+
+ ep = get_current_effect_plugin();
+ if (effects_enabled() && ep && ep->query_format) {
+ ep->query_format(&new_format, &new_frequency, &new_channels);
+ }
+
+ if (new_format != format || new_frequency != frequency
+ || new_channels != channels) {
+ output_time_offset += (gint) ((output_bytes * 1000) / ebps);
+ output_bytes = 0;
+ esdout_setup_format(new_format, new_frequency, new_channels);
+ frequency = new_frequency;
+ channels = new_channels;
+ esd_close(fd);
+ esdout_set_audio_params();
+ }
+ if (effects_enabled() && ep && ep->mod_samples)
+ length =
+ ep->mod_samples(&data, length, input_format, input_frequency,
+ input_channels);
+ if (esd_translate)
+ output_bytes += write(fd, esd_translate(data, length), length);
+ else
+ output_bytes += write(fd, data, length);
+}
+
+
+void
+esdout_write(gpointer ptr, gint length)
+{
+ gint cnt, off = 0;
+
+ if (!realtime) {
+ remove_prebuffer = FALSE;
+
+ written += length;
+ while (length > 0) {
+ cnt = MIN(length, buffer_size - wr_index);
+ memcpy((gchar *) buffer + wr_index, (gchar *) ptr + off, cnt);
+ wr_index = (wr_index + cnt) % buffer_size;
+ length -= cnt;
+ off += cnt;
+
+ }
+ }
+ else {
+ if (paused)
+ return;
+ esdout_write_audio(ptr, length);
+ written += length;
+
+ }
+
+}
+
+void
+esdout_close(void)
+{
+ if (!going)
+ return;
+
+ going = 0;
+
+ if (!realtime)
+ g_thread_join(buffer_thread);
+ else
+ esd_close(fd);
+
+ wr_index = 0;
+ rd_index = 0;
+ g_free(esd_cfg.playername);
+ esd_cfg.playername = NULL;
+}
+
+void
+esdout_flush(gint time)
+{
+ if (!realtime) {
+ flush = time;
+ while (flush != -1)
+ g_usleep(10000);
+ }
+ else {
+ output_time_offset = time;
+ written = (guint64) (time / 10) * (guint64) (input_bps / 100);
+ output_bytes = 0;
+ }
+}
+
+void
+esdout_pause(short p)
+{
+ paused = p;
+}
+
+gpointer
+esdout_loop(gpointer arg)
+{
+ gint length, cnt;
+
+
+ while (going) {
+ if (esdout_used() > prebuffer_size)
+ prebuffer = FALSE;
+ if (esdout_used() > 0 && !paused && !prebuffer) {
+ length = MIN(blk_size, esdout_used());
+ while (length > 0) {
+ cnt = MIN(length, buffer_size - rd_index);
+ esdout_write_audio((gchar *) buffer + rd_index, cnt);
+ rd_index = (rd_index + cnt) % buffer_size;
+ length -= cnt;
+ }
+ }
+ else
+ g_usleep(10000);
+
+ if (flush != -1) {
+ output_time_offset = flush;
+ written = (guint64) (flush / 10) * (guint64) (input_bps / 100);
+ rd_index = wr_index = output_bytes = 0;
+ flush = -1;
+ prebuffer = TRUE;
+ }
+
+ }
+
+ esd_close(fd);
+ g_free(buffer);
+ return NULL;
+}
+
+void
+esdout_set_audio_params(void)
+{
+ fd = esd_play_stream(esd_format, frequency,
+ esd_cfg.hostname, esd_cfg.playername);
+ /* Set the stream's mixer */
+ if (fd != -1)
+ esdout_mixer_init();
+ ebps = frequency * channels;
+ if (format == FMT_U16_BE || format == FMT_U16_LE ||
+ format == FMT_S16_BE || format == FMT_S16_LE ||
+ format == FMT_S16_NE || format == FMT_U16_NE)
+ ebps *= 2;
+}
+
+gint
+esdout_open(AFormat fmt, gint rate, gint nch)
+{
+ esdout_setup_format(fmt, rate, nch);
+
+ input_format = format;
+ input_channels = channels;
+ input_frequency = frequency;
+ input_bps = bps;
+
+ realtime = xmms_check_realtime_priority();
+
+ if (!realtime) {
+ buffer_size = (esd_cfg.buffer_size * input_bps) / 1000;
+ if (buffer_size < 8192)
+ buffer_size = 8192;
+ prebuffer_size = (buffer_size * esd_cfg.prebuffer) / 100;
+ if (buffer_size - prebuffer_size < 4096)
+ prebuffer_size = buffer_size - 4096;
+
+ buffer = g_malloc0(buffer_size);
+ }
+ flush = -1;
+ prebuffer = 1;
+ wr_index = rd_index = output_time_offset = written = output_bytes = 0;
+ paused = FALSE;
+ remove_prebuffer = FALSE;
+
+ esd_cfg.playername = g_strdup_printf("xmms - plugin (%d)", getpid());
+
+ if (esd_cfg.hostname)
+ g_free(esd_cfg.hostname);
+ if (esd_cfg.use_remote)
+ esd_cfg.hostname =
+ g_strdup_printf("%s:%d", esd_cfg.server, esd_cfg.port);
+ else
+ esd_cfg.hostname = NULL;
+
+ esdout_set_audio_params();
+ if (fd == -1) {
+ g_free(esd_cfg.playername);
+ esd_cfg.playername = NULL;
+ g_free(buffer);
+ return 0;
+ }
+ going = 1;
+
+ if (!realtime)
+ buffer_thread = g_thread_create(esdout_loop, NULL, TRUE, NULL);
+ return 1;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/configure.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/configure.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/configure.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,232 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "esdout.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+
+#include <libbeep/configdb.h>
+
+
+static GtkWidget *configure_win;
+static GtkWidget *server_use_remote, *server_oss_mixer, *server_host_entry;
+static GtkWidget *server_port_entry, *buffer_size_spin, *buffer_pre_spin;
+
+
+static void
+configure_win_ok_cb(GtkWidget * w, gpointer data)
+{
+ ConfigDb *db;
+
+ esd_cfg.use_remote =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(server_use_remote));
+ esd_cfg.use_oss_mixer =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(server_oss_mixer));
+ if (esd_cfg.server)
+ g_free(esd_cfg.server);
+ esd_cfg.server =
+ g_strdup(gtk_entry_get_text(GTK_ENTRY(server_host_entry)));
+ esd_cfg.port = atoi(gtk_entry_get_text(GTK_ENTRY(server_port_entry)));
+ esd_cfg.buffer_size =
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_size_spin));
+ esd_cfg.prebuffer =
+ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_pre_spin));
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_set_bool(db, "ESD", "use_remote", esd_cfg.use_remote);
+ bmp_cfg_db_set_bool(db, "ESD", "use_oss_mixer", esd_cfg.use_oss_mixer);
+ bmp_cfg_db_set_string(db, "ESD", "remote_host", esd_cfg.server);
+ bmp_cfg_db_set_int(db, "ESD", "remote_port", esd_cfg.port);
+ bmp_cfg_db_set_int(db, "ESD", "buffer_size", esd_cfg.buffer_size);
+ bmp_cfg_db_set_int(db, "ESD", "prebuffer", esd_cfg.prebuffer);
+ bmp_cfg_db_close(db);
+
+}
+
+static void
+use_remote_cb(GtkWidget * w, gpointer data)
+{
+ gboolean use_remote;
+ GtkWidget *box = data;
+
+ use_remote =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(server_use_remote));
+
+ gtk_widget_set_sensitive(box, use_remote);
+}
+
+void
+esdout_configure(void)
+{
+ GtkWidget *vbox, *notebook;
+ GtkWidget *server_frame, *server_vbox, *server_hbox, *server_btn_hbox;
+ GtkWidget *server_host_label, *server_port_label;
+ GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
+ GtkWidget *buffer_size_box, *buffer_size_label;
+ GtkObject *buffer_size_adj, *buffer_pre_adj;
+ GtkWidget *buffer_pre_box, *buffer_pre_label;
+ GtkWidget *bbox, *ok, *cancel;
+ gchar *temp;
+
+ if (configure_win) {
+ gtk_window_present(GTK_WINDOW(configure_win));
+ return;
+ }
+
+ configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ g_signal_connect(G_OBJECT(configure_win), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &configure_win);
+ gtk_window_set_title(GTK_WINDOW(configure_win),
+ _("ESD Output Plugin configuration"));
+ gtk_window_set_type_hint(GTK_WINDOW(configure_win),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(configure_win), FALSE);
+ gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(configure_win), vbox);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ server_frame = gtk_frame_new(_("Host:"));
+ gtk_container_set_border_width(GTK_CONTAINER(server_frame), 5);
+
+ server_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(server_vbox), 5);
+ gtk_container_add(GTK_CONTAINER(server_frame), server_vbox);
+
+ server_btn_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(server_vbox),
+ server_btn_hbox, FALSE, FALSE, 0);
+
+ server_use_remote = gtk_check_button_new_with_label(_("Use remote host"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(server_use_remote),
+ esd_cfg.use_remote);
+ gtk_box_pack_start(GTK_BOX(server_btn_hbox), server_use_remote,
+ FALSE, FALSE, 0);
+
+ server_oss_mixer =
+ gtk_check_button_new_with_label(_("Volume controls OSS mixer"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(server_oss_mixer),
+ esd_cfg.use_oss_mixer);
+ gtk_box_pack_start(GTK_BOX(server_btn_hbox),
+ server_oss_mixer, TRUE, TRUE, 0);
+#if !defined(HAVE_SYS_SOUNDCARD_H) && !defined(HAVE_MACHINE_SOUNDCARD_H)
+ gtk_widget_set_sensitive(server_oss_mixer, FALSE);
+#endif
+ server_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_widget_set_sensitive(server_hbox, esd_cfg.use_remote);
+ gtk_box_pack_start(GTK_BOX(server_vbox), server_hbox, FALSE, FALSE, 0);
+
+ server_host_label = gtk_label_new(_("Host:"));
+ gtk_box_pack_start(GTK_BOX(server_hbox), server_host_label,
+ FALSE, FALSE, 0);
+
+ server_host_entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(server_host_entry), esd_cfg.server);
+ gtk_box_pack_start(GTK_BOX(server_hbox), server_host_entry,
+ TRUE, TRUE, 0);
+
+ server_port_label = gtk_label_new(_("Port:"));
+ gtk_box_pack_start(GTK_BOX(server_hbox), server_port_label,
+ FALSE, FALSE, 0);
+
+ server_port_entry = gtk_entry_new();
+ gtk_widget_set_usize(server_port_entry, 50, -1);
+ temp = g_strdup_printf("%d", esd_cfg.port);
+ gtk_entry_set_text(GTK_ENTRY(server_port_entry), temp);
+ g_free(temp);
+ gtk_box_pack_start(GTK_BOX(server_hbox), server_port_entry,
+ FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(server_use_remote), "clicked",
+ G_CALLBACK(use_remote_cb), server_hbox);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), server_frame,
+ gtk_label_new(_("Server")));
+
+ buffer_frame = gtk_frame_new(_("Buffering:"));
+ gtk_container_set_border_width(GTK_CONTAINER(buffer_frame), 5);
+
+ buffer_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(buffer_frame), buffer_vbox);
+
+ buffer_table = gtk_table_new(2, 1, TRUE);
+ gtk_container_set_border_width(GTK_CONTAINER(buffer_table), 5);
+ gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
+
+ buffer_size_box = gtk_hbox_new(FALSE, 5);
+ gtk_table_attach_defaults(GTK_TABLE(buffer_table),
+ buffer_size_box, 0, 1, 0, 1);
+ buffer_size_label = gtk_label_new(_("Buffer size (ms):"));
+ gtk_box_pack_start(GTK_BOX(buffer_size_box),
+ buffer_size_label, FALSE, FALSE, 0);
+ buffer_size_adj = gtk_adjustment_new(esd_cfg.buffer_size,
+ 200, 10000, 100, 100, 100);
+ buffer_size_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(buffer_size_adj), 8, 0);
+ gtk_widget_set_usize(buffer_size_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(buffer_size_box),
+ buffer_size_spin, FALSE, FALSE, 0);
+
+ buffer_pre_box = gtk_hbox_new(FALSE, 5);
+ gtk_table_attach_defaults(GTK_TABLE(buffer_table),
+ buffer_pre_box, 1, 2, 0, 1);
+ buffer_pre_label = gtk_label_new(_("Pre-buffer (percent):"));
+ gtk_box_pack_start(GTK_BOX(buffer_pre_box),
+ buffer_pre_label, FALSE, FALSE, 0);
+ buffer_pre_adj = gtk_adjustment_new(esd_cfg.prebuffer, 0, 90, 1, 1, 1);
+ buffer_pre_spin =
+ gtk_spin_button_new(GTK_ADJUSTMENT(buffer_pre_adj), 1, 0);
+ gtk_widget_set_usize(buffer_pre_spin, 60, -1);
+ gtk_box_pack_start(GTK_BOX(buffer_pre_box),
+ buffer_pre_spin, FALSE, FALSE, 0);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ buffer_frame, gtk_label_new(_("Buffering")));
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(configure_win));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_APPLY);
+ g_signal_connect(G_OBJECT(ok), "clicked",
+ G_CALLBACK(configure_win_ok_cb), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ gtk_widget_grab_default(ok);
+
+ gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_CENTER);
+ gtk_widget_show_all(configure_win);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esd.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esd.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esd.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,49 @@
+
+/* xmms - esound outputmkdir plugin
+ * Copyright (C) 1999 Galex Yen
+ *
+ * this program is free software
+ *
+ * Description:
+ * This program is an output plugin for xmms v0.9 or greater.
+ * The program uses the esound daemon to output audio in order
+ * to allow more than one program to play audio on the same
+ * device at the same time.
+ *
+ * Contains code Copyright (C) 1998-1999 Mikael Alm, Olle Hallnas,
+ * Thomas Nillson and 4Front Technologies
+ *
+ */
+
+#include "esdout.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+
+OutputPlugin esd_op = {
+ NULL,
+ NULL,
+ NULL, /* Description */
+ esdout_init,
+ esdout_about,
+ esdout_configure,
+ esdout_get_volume,
+ esdout_set_volume,
+ esdout_open,
+ esdout_write,
+ esdout_close,
+ esdout_flush,
+ esdout_pause,
+ esdout_free,
+ esdout_playing,
+ esdout_get_output_time,
+ esdout_get_written_time,
+};
+
+OutputPlugin *
+get_oplugin_info(void)
+{
+ esd_op.description = g_strdup_printf(_("eSound Output Plugin"));
+ return &esd_op;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esdout.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esdout.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/esdout.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,69 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef ESDOUT_H
+#define ESDOUT_H
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "beep/plugin.h"
+
+
+extern OutputPlugin op;
+
+typedef struct {
+ gboolean use_remote;
+ gboolean use_oss_mixer;
+ char *server;
+ char *hostname;
+ char *playername;
+ int port;
+ int buffer_size;
+ int prebuffer;
+} ESDConfig;
+
+extern ESDConfig esd_cfg;
+
+void esdout_init(void);
+void esdout_about(void);
+void esdout_configure(void);
+
+void esdout_get_volume(int *l, int *r);
+void esdout_fetch_volume(int *l, int *r);
+void esdout_set_volume(int l, int r);
+void esdout_mixer_init(void);
+
+int esdout_playing(void);
+int esdout_free(void);
+void esdout_write(void *ptr, int length);
+void esdout_close(void);
+void esdout_flush(int time);
+void esdout_pause(short p);
+int esdout_open(AFormat fmt, int rate, int nch);
+int esdout_get_output_time(void);
+int esdout_get_written_time(void);
+void esdout_set_audio_params(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/init.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/init.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/init.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,69 @@
+/* xmms - esound output plugin
+ * Copyright (C) 1999 Galex Yen
+ *
+ * this program is free software
+ *
+ * Description:
+ * This program is an output plugin for xmms v0.9 or greater.
+ * The program uses the esound daemon to output audio in order
+ * to allow more than one program to play audio on the same
+ * device at the same time.
+ *
+ * Contains code Copyright (C) 1998-1999 Mikael Alm, Olle Hallnas,
+ * Thomas Nillson and 4Front Technologies
+ *
+ */
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+#include <esd.h>
+
+#include <libbeep/configdb.h>
+
+#include "esdout.h"
+
+
+ESDConfig esd_cfg;
+esd_info_t *all_info;
+esd_player_info_t *player_info;
+
+
+void
+esdout_init(void)
+{
+ ConfigDb *db;
+ char *env;
+
+ memset(&esd_cfg, 0, sizeof(ESDConfig));
+ esd_cfg.port = ESD_DEFAULT_PORT;
+ esd_cfg.buffer_size = 3000;
+ esd_cfg.prebuffer = 25;
+
+ db = bmp_cfg_db_open();
+
+ if ((env = getenv("ESPEAKER")) != NULL) {
+ char *temp;
+ esd_cfg.use_remote = TRUE;
+ esd_cfg.server = g_strdup(env);
+ temp = strchr(esd_cfg.server, ':');
+ if (temp != NULL) {
+ *temp = '\0';
+ esd_cfg.port = atoi(temp + 1);
+ if (esd_cfg.port == 0)
+ esd_cfg.port = ESD_DEFAULT_PORT;
+ }
+ }
+ else {
+ bmp_cfg_db_get_bool(db, "ESD", "use_remote", &esd_cfg.use_remote);
+ bmp_cfg_db_get_string(db, "ESD", "remote_host", &esd_cfg.server);
+ bmp_cfg_db_get_int(db, "ESD", "remote_port", &esd_cfg.port);
+ }
+ bmp_cfg_db_get_bool(db, "ESD", "use_oss_mixer", &esd_cfg.use_oss_mixer);
+ bmp_cfg_db_get_int(db, "ESD", "buffer_size", &esd_cfg.buffer_size);
+ bmp_cfg_db_get_int(db, "ESD", "prebuffer", &esd_cfg.prebuffer);
+ bmp_cfg_db_close(db);
+
+ if (!esd_cfg.server)
+ esd_cfg.server = g_strdup("localhost");
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/mixer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/mixer.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Output/esd/mixer.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,216 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <esd.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+
+#include "esdout.h"
+
+#ifdef HAVE_OSS
+# include <Output/OSS/soundcard.h>
+# define OSS_AVAILABLE TRUE
+#else
+# define OSS_AVAILABLE FALSE
+#endif
+
+#include <libbeep/util.h>
+
+
+
+static void esdout_get_oss_volume(int *l, int *r);
+static void esdout_set_oss_volume(int l, int r);
+
+
+static int player = -1;
+static int lp = 100, rp = 100;
+
+/*
+ * Find the stream id, and set stream volume to 'persistent' value.
+ */
+void
+esdout_mixer_init(void)
+{
+ esdout_fetch_volume(NULL, NULL);
+ if (!(OSS_AVAILABLE && esd_cfg.use_oss_mixer && !esd_cfg.use_remote))
+ esdout_set_volume(lp, rp);
+}
+
+/*
+ * Grab the stream volume from the server. The problem here is that
+ * ESD does not have a built-in function for finding the player ID of
+ * a specific player - nor does it let us know what the player ID is
+ * when the player is created! So, we grab 'allinfo' and scan the
+ * returned player list for the string which we know is our player
+ * name (esd_cfg.playername) This function seems to take a long time
+ * to run... I'm not sure where to start optimizing, however...
+ */
+void
+esdout_fetch_volume(int *l, int *r)
+{
+ int fd;
+ esd_info_t *all_info = NULL;
+ esd_player_info_t *info;
+
+ fd = esd_open_sound(esd_cfg.hostname);
+ all_info = esd_get_all_info(fd);
+
+ /* scan linked list for our playername */
+ for (info = all_info->player_list; info != NULL; info = info->next)
+ if (!strcmp(esd_cfg.playername, info->name))
+ break;
+
+ if (info) {
+ player = info->source_id;
+ if (l && r) {
+ /*
+ * Sometimes we call with NULL
+ * args to fetch the player num
+ */
+ *l = (info->left_vol_scale * 100) / 256;
+ *r = (info->right_vol_scale * 100) / 256;
+ }
+ }
+ else
+ g_warning("xmms: Couldn't find our player "
+ "(was looking for %s) at the server", esd_cfg.playername);
+
+ if (all_info)
+ esd_free_all_info(all_info);
+ esd_close(fd);
+}
+
+void
+esdout_get_volume(int *l, int *r)
+{
+ if (OSS_AVAILABLE && esd_cfg.use_oss_mixer && !esd_cfg.use_remote) {
+ esdout_get_oss_volume(l, r);
+ lp = *l;
+ rp = *r;
+ }
+ else {
+ /*
+ * We assume that the volume hasn't changed from the
+ * 'persistant' value. Constantly polling takes too
+ * much time/resources. Commenting this section out
+ * will consistently check the ESD server to see if
+ * someone else changed our stream volume.
+ */
+ *l = lp;
+ *r = rp;
+/* esdout_fetch_volume(l, r); */
+ }
+}
+
+void
+esdout_set_volume(int l, int r)
+{
+ lp = l;
+ rp = r;
+
+ if (OSS_AVAILABLE && esd_cfg.use_oss_mixer && !esd_cfg.use_remote) {
+ esdout_set_oss_volume(l, r);
+ }
+ else if (player != -1 && esd_cfg.playername != NULL) {
+ int fd = esd_open_sound(esd_cfg.hostname);
+ if (fd >= 0) {
+ esd_set_stream_pan(fd, player, (l * 256) / 100, (r * 256) / 100);
+ esd_close(fd);
+ }
+ }
+}
+
+#ifdef HAVE_OSS
+
+static void
+esdout_get_oss_volume(int *l, int *r)
+{
+ int fd, v, devs;
+ long cmd;
+
+ if (esd_cfg.use_remote)
+ return;
+
+ fd = open(DEV_MIXER, O_RDONLY);
+ if (fd != -1) {
+ ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
+ if (devs & SOUND_MASK_PCM)
+ cmd = SOUND_MIXER_READ_PCM;
+ else if (devs & SOUND_MASK_VOLUME)
+ cmd = SOUND_MIXER_READ_VOLUME;
+ else {
+ close(fd);
+ return;
+ }
+ ioctl(fd, cmd, &v);
+ *r = (v & 0xFF00) >> 8;
+ *l = (v & 0x00FF);
+ close(fd);
+ }
+}
+
+static void
+esdout_set_oss_volume(int l, int r)
+{
+ int fd, v, devs;
+ long cmd;
+
+ if (esd_cfg.use_remote)
+ return;
+
+ fd = open(DEV_MIXER, O_RDONLY);
+
+ if (fd != -1) {
+ ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
+ if (devs & SOUND_MASK_PCM)
+ cmd = SOUND_MIXER_WRITE_PCM;
+ else if (devs & SOUND_MASK_VOLUME)
+ cmd = SOUND_MIXER_WRITE_VOLUME;
+ else {
+ close(fd);
+ return;
+ }
+ v = (r << 8) | l;
+ ioctl(fd, cmd, &v);
+ close(fd);
+ }
+}
+
+#else
+
+static void
+esdout_get_oss_volume(int *l, int *r)
+{
+}
+
+static void
+esdout_set_oss_volume(int l, int r)
+{
+}
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/README
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/README 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/README 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,920 @@
+BMP - Beep Media Player (c) GPL 2003-2004
+
+BMP Development Team (see AUTHORS)
+
+
+Based on:
+
+ XMMS - X Multimedia System (c)1997-2001
+
+ A Cross platform Multimedia Player
+
+ Peter Alm, Thomas Nilsson, Olle Hallnas, Håvard Kvålen
+
+
+NOTE: This document is hardly maintained. Please check the Users' Guide on
+the BMP website.
+
+
+TABLE OF CONTENTS
+*****************
+
+1. Disclaimer
+2. Installation
+ 2.1 Basic Installation
+ 2.2 Border less Installation
+ 2.3 Skin Installation
+3. Documentation
+ 3.1 Controlling BMP
+ 3.1.1 Key bindings
+ 3.2 Playlist Editor
+ 3.3 Equalizer
+ 3.4 Menu
+ 3.5 Preferences
+ 3.5.1 Audio I/O Plugins
+ 3.5.2 Effect/General Plugins
+ 3.5.3 Visualization Plugins
+ 3.5.4 Options
+ 3.5.5 Fonts
+ 3.5.6 Title
+ 3.6 Plugins
+ 3.6.1 Input plugins
+ 3.6.1.1 Cd Audio Player
+ 3.6.1.2 MPEG Layer 1/2/3 player
+ 3.6.1.3 Ogg Vorbis player
+ 3.6.1.4 WAV player
+ 3.6.2 Output plugins
+ 3.6.2.1 OSS Driver
+ 3.6.2.2 eSound Output
+ 3.6.2.3 BSD Sun Output
+ 3.6.3 Effect plugins
+ 3.6.4 General plugins
+ 3.6.5 Visualization plugins
+ 3.6.5.1 Blur scope
+4. Command Line Options
+5. Features
+ 5.1 Supported File formats
+ 5.2 Supported Features
+6. Obtaining BMP
+7. Misc
+ 7.1 Shoutcast support
+ 7.2 Tips and tricks
+8. Bugs
+9. Contact Email
+
+
+
+
+1. Disclaimer
+-------------
+
+We are not liable for any damage caused by the use of this program.
+
+BMP is NOT a port of WinAmp (http://www.winamp.com). BMP is a fork of
+XMMS (http://xmms.org) which borrowed the WinAmp GUI.
+
+
+2. Installation
+---------------
+
+BMP requires the following libraries and their development
+packages installed:
+
+ Glib 2.4
+ (http://www.gtk.org/download/)
+
+ GTK+ 2.4
+ (http://www.gtk.org/download/)
+
+ libglade >= 2.3.1
+ (http://ftp.gnome.org/pub/GNOME/sources/libglade/2.3/)
+
+The following packages are required for optional features:
+
+ Vorbis input plugin:
+ libvorbis >= 1.0
+ (http://www.xiph.org/ogg/vorbis/download.html)
+
+ ESD output plugin:
+ esound >= 0.2.3
+ (http://ftp.gnome.org/pub/GNOME/desktop/2.6/2.6.0/sources/)
+
+ ALSA output plugin:
+ alsa-lib >= 1.0
+ (http://www.alsa-project.org)
+
+ GNOME VFS support:
+ gnome-vfs >= 2.6.0
+ (http://ftp.gnome.org/pub/GNOME/desktop/2.6/2.6.0/sources/)
+
+ GConf support:
+ GConf >= 2.6.0
+ (http://ftp.gnome.org/pub/GNOME/desktop/2.6/2.6.0/sources/)
+
+If you compile BMP from a fresh CVS checkout, you will also need
+the following tools:
+
+ automake >= 1.7
+ autoconf >= 2.5
+
+Note that these tools and libraries are bundled with major Linux
+distributions. Use the packages provided with them where possible. If
+those packages are not sufficiently new, you may need to search
+third-party repositories for them.
+
+
+2.1 Basic Installation
+----------------------
+
+cd bmp-0.9.7
+./configure
+make
+make install
+
+This will put the binary in /usr/local/bin and plugins in
+/usr/local/lib/bmp/
+
+Note for packagers: The gnome-vfs option is VERY EXPERIMENTAL. We suggest you
+do not use it in your official distribution packages.
+
+
+2.2 Borderless Installation
+---------------------------
+
+As far as I know most WM's accepts GTK decoration hints so it will
+not have borders. But some WM's can't handle this so you have to
+set in manually.
+
+AfterStep 1.0 ~/.steprc
+Style "XMMS_Player" NoTitle, NoHandles
+Style "XMMS_Playlist" NoTitle, NoHandles
+Style "XMMS_Equalizer" NoTitle, NoHandles
+
+AfterStep 1.4 ~/GNUstep/Library/AfterStep/database
+Style "XMMS_Player" NoTitle, NoHandles
+Style "XMMS_Playlist" NoTitle, NoHandles
+Style "XMMS_Equalizer" NoTitle, NoHandles
+
+Fvwm's ~/.fvwm95rc
+Style "XMMS_Player" NoTitle
+Style "XMMS_Playlist" NoTitle
+Style "XMMS_Equalizer" NoTitle
+
+CTWM's ~/.ctwmrc
+NoTitle and NoBorder sections:
+NoTitle {
+ "xmms"
+}
+
+NoBorder {
+ "xmms"
+}
+
+2.3 Skin Installation
+---------------------
+
+BMP will create a directory called ~/.bmp/Skins/. You can unarchive
+the skins the same way as you do for WinAmp.
+
+However, you don't need to as BMP supports archived skins. BMP
+currently reads the following formats: zip, wsz, tar, tar.gz and
+tar.bz2
+
+Just copy the archive to one of the skin path's and BMP will take care
+of the rest.
+
+In order to support zipped skins you will need to have unzip. Unzip
+is bundled with most Linux distributions.
+
+BMP looks for skins in these directories (in listing order):
+
+<prefix>/share/bmp/Skins
+~/.bmp/Skins
+
+You can set the environment variable SKINSDIR to another location of
+your choice:
+
+For BASH:
+ export SKINSDIR=/path/to/Skins:/more/paths/to/other/locations/of/Skins
+
+For CSH:
+ setenv SKINSDIR /path/to/Skins:/more/paths/to/other/locations/of/Skins
+
+
+3. Documentation
+----------------
+
+This file or http://beepmp.sf.net
+
+
+3.1 Controlling BMP
+--------------------
+
+When you start up BMP, you will get a console very similar to that of
+WinAmp.
+
+- On the top is the window title bar. To the right you will see 3 buttons,
+ Left button will minimize BMP.
+ Middle button will make BMP only display the title bar.
+ Right button will end the BMP session.
+
+- The area in the upper left part displays the following:
+ - Play state: Paused, Stopped, or Playing
+ - Time elapsed in the current song or if you click on it, the reversed.
+ - Spectrum analyzer of the sound being played. Right mouse click will
+ bring up the Visualization menu. Left mouse button will change the
+ analyzer to an oscilloscope and/or none.
+
+- To the right of the Spectrum analyzer is the title of the file being played.
+ This also contains the length of the song being played, as well as its
+ position in the [unsorted] playlist. Right clicking in this window will bring
+ up a new menu with some more options that are self explaining.
+
+- In the left part of the Spectrum analyzer you'll have letters (at least if
+ you use the default skin) O A I D V. This is known as the
+ "clutterbar'. Left-clicking on these will open up menus or perform the
+ listed actions.
+ O : Options menu
+ A : Always on top
+ I : File info box
+ D : Double size mode
+ V : Visualization menu
+
+- Underneath the track title are the following static informational data:
+ - bit rate in KBps (usually 128 or 112)
+ - Sample Rate in KHz (usually 44)
+ - Stereo or Mono channel mixing
+
+- Underneath the informational data are a few controls you can play with:
+ - The first slider controls the volume
+ - The second slider controls the balance between speakers
+ - The button marked "EQ" loads up the graphic equalizer
+ - The button marked "PL" loads up the playlist editor
+ - The LARGE slide bar moves from left to right as the song plays. You can
+ drag this to jump to another location in the current file.
+
+- On the bottom of the console are the standard buttons you would see on a CD
+ player: Previous track, Play, Pause, Stop, Next track, eject, shuffle
+ and repeat.
+
+ - The eject button doesn't REALLY eject, of course. :) It opens up the
+ file requester. The File Requester builds a playlist for the current
+ BMP session. You can use it to load files, add files to the list, or
+ load all mp3s in a directory.
+
+ - The shuffle button randomizes the sequence of the playlist.
+
+ - The repeat button when enabled makes the playlist loop when it reaches the
+ end of the playlist.
+
+
+3.1.1 Key bindings
+------------------
+
+Global: (Main, Equalizer and Playlist window)
+
+ z = Previous song
+ x = Play
+ c = Pause
+ v = Stop
+ b = Next song
+ l = Play file (brings up the Load file(s) dialog)
+ j = Jump to file (in the existing playlist)
+ r = Toggle Repeat
+ s = Toggle Shuffle
+
+ Control + h = Play location (url)
+ Control + p = Preferences dialog
+ Control + r = Time remaining
+ Control + o = Always on top
+ Control + w = Winshade mode
+ Control + j = Jump to time
+ Control + z = Start of list
+ Control + n = No Playlist Advance
+ Control + 3 = File info dialog
+
+ Control + Alt + w = Toggle Equalizer winshade mode
+ Shift + Control + w = Toggle Playlist winshade mode
+
+ Alt + e = Toggle playlist window
+ Alt + g = Toggle equalizer window
+
+Main window:
+
+ Arrow key up = Volume up 2%
+ Arrow key down = Volume down 2%
+ Arrow key right = Skip 5 seconds forward in song
+ Arrow key left = Skip 5 seconds back in song
+
+Playlist window:
+
+ Arrow key up = up one step in playlist
+ Arrow key down = Down one step in playlist
+
+ Delete = Remove selected songs from playlist
+ Page Up = Move one page up
+ Page Down = Move one page down
+ Home = Go to the first song
+ End = Go to the last song
+ Enter = Play selected song
+ Insert = Add file dialog
+ Shift + Insert = Add directory dialog
+ Alt + Insert = Add url dialog
+
+Equalizer shade mode:
+
+ Arrow key up = Volume up 2%
+ Arrow key down = Volume down 2%
+ Arrow key right = Balance 4% to right
+ Arrow key left = Balance 4% to left
+
+
+3.2 Playlist editor
+-------------------
+
+To access the Playlist editor, select the button labeled "PL" on the right
+side of the BMP console.
+
+This will bring up the actual playlist window, here you'll find 5 buttons.
+All of these buttons can be held down to bring up an extra menu.
+From left to right:
+
+file + : will add a file to current playlist, held down mode you'll have
+ 2 extra options
+dir : will let you pick a directory (recursive)
+url : will let you add an url for streaming
+
+file - : will delete the highlighted file, held down mode you'll have 3
+ more options
+crop : delete all files except the highlighted in the list
+all : delete all files in the list
+misc : *** NOT FUNCTIONAL ***
+
+sel all : select all files in current playlist, held down mode you'll have
+ 2 extra options
+sel zero : select none
+inv sel : invert you selection
+
+misc opts : held down you'll have 2 extra options
+fileinfo : opens the file info dialog.
+sort : release button on this will bring up another menu with sort options
+
+load list : will let you pick a playlist to load, held down you'll have
+ 2 extra options
+save : will let you save your playlist
+new : will empty the playlist and let you create a new playlist
+
+If you want to select/deselect files in the filrequester/playlist editor use
+CTRL for files and SHIFT key for blocks of files. You can also browse the PL
+using the cursor keys and enter to select song. Pressing the delete button will
+remove the song from the playlist. If your mouse is equipped with a mouse
+wheel, you can use this to scroll up and down.
+
+3.3. Equalizer
+--------------
+
+To access the Equalizer, select the button labeled "EQ" on the right
+side of the BMP console.
+
+That will bring up the Equalizer window. It looks like an equalizer on a stereo
+and behaves like one as well. Press the button labeled ON to enable the use of
+the equalizer, once you turned it on you use it as a normal equalizer.
+
+EQ presets will be saved in ~/.bmp/config when you close BMP. You can also
+have your own presets for different song using the "Preset" button, BMP can
+also import/export from WinAmp's preset files.
+
+If 'Auto' is enabled, BMP will try to load equalizer presets like this:
+
+1: Look for a preset file in the directory of the file we are about to play.
+2: Look for a directory preset file in the same directory.
+3: Look for a preset saved with the "auto-load" feature.
+4: Finally, try to load the "default" preset.
+
+The 'preset' button will open up a menu with the following options:
+
+Load
+ Preset : Will open a window with all available presets.
+ Auto-load preset : Will open a window with all available auto-load
+ presets.
+ Default : Will load the default preset.
+ Zero : Will reset the equalizer to zero.
+ From file : Will load from a .preset file
+ From WinAMP EQF file : Will load from a WinAMP equalizer file. If you
+ choose a library file only the first entry will
+ be loaded.
+Import
+ WinAMP presets : Imports the presets contained in an WinAMP equalizer
+ library file (often named WINAMP.q1) and add all
+ the entries to the Preset window.
+Save
+ Preset : Let you name the current preset and save it.
+ Auto-load preset : Saves the current settings as a preset for the song
+ currently playing.
+ Default : Saves the default value for the equalizer.
+ From file : Saves the current settings in a preset file.
+ From WinAMP EQF file : Exports the current settings to a file readable by
+ WinAMP.
+Delete
+ Preset : Let you delete a preset from the list.
+ Auto-load preset : Let you delete a auto-load preset from the list.
+
+Configure Equalizer : Change the default names of directory based
+ preset files.
+
+3.4. Menu
+---------
+
+There are several menu hot spots on the BMP window. One place is at the left
+hand side of the visual window described in sections 3.1 If you click the right
+mouse button in the main window, the menus will also pop up (same as clicking
+the button on the top left corner).
+
+3.5. Preferences
+----------------
+
+Use the menu to open Options / Preferences or press CTRL-P to bring the
+preferences dialog up.
+
+3.5.1. Appearance
+-----------------
+
+Skins
+In the skinlist you can choose a skin. How to install skins is described above.
+Click on a skin in the list to change to it.
+
+Fonts
+You can set the font in the main window by setting the 'Player' font. You can
+change the playlist font by setting the 'Playlist' font.
+
+Miscellaneous
+Show track numbers in playlist - Enable/disable displaying of track numbers in
+ the playlist.
+Use custom cursors - Enable/disable custom cursors set by the skin.
+
+
+3.5.2. Mouse
+------------
+
+Mouse wheel
+Change how BMP handles scroll behaviours.
+
+3.5.3. Playlist
+---------------
+
+Filename
+Convert underscores to blanks - Converts '_' (underscores) to ' ' in the
+ playlist.
+Convert %20 to blanks - Converts '%20' to ' ' in the
+ playlist.
+
+Metadata
+Load metadata from playlists and files - Loads metadata from files and
+ playlists (e.g. ID3 tags).
+
+Playback
+Don't advance in playlist - Don't advance to the next song in the playlist when
+ the current song ends.
+Pause between songs - Set the time (in secons) to pause on songchange
+
+Song display
+Title format - Choose the format to display the song names in the playlist.
+Custom string - When the above option is set to 'Custom' insert a string of
+ substitutes here.
+
+3.5.6. Plugins
+--------------
+
+Enable/disable and configure plugins in this section.
+
+Choose a tab to list one of the types of plugins:
+ - Media (filetype/device support)
+ - General (general plugins)
+ - Visualization (visualization plugins)
+ - Effects (effect plugins)
+ - Output (output plugins)
+
+3.6 Plugins
+-----------
+Plugins is what makes BMP work, by moving most of the code out of BMP and
+into a plugin architecture it's possible to change almost everything in BMP.
+There are today 5 different types of plugins. Only a few plugins are
+distributed with BMP, you can find information on more of them at:
+
+ http://beepmp.sf.net
+
+
+3.6.1 Input plugins
+-------------------
+The input plugins is what you use to play mp3, mod, wav and even movies with.
+
+
+3.6.1.1 Cd Audio Player
+-----------------------
+Plays audio cd's on Linux, FreeBSD and Solaris. This plugin does not pass
+the sound through BMP, so no visualization can be made nor will the
+equalizer settings have any effect.
+
+Before I explain the usage we better have a look on the configuration
+first.
+
+In the device tab you should set Device to your cdrom unit. /dev/cdrom
+is generally a good choice on Linux systems. Set 'Directory' to where a
+directory which will be used by BMP to present the available cd tracks in.
+Using the normal mount point for the cdrom is recommended unless the
+cdrom is automounted if it contains a data track.
+
+ Example:
+ --------
+ Device: /dev/cdrom (which on my system is symlinked to /dev/hdc)
+ Directory: /mnt/cdrom
+
+The next setting is used to decide what volume is to be changed, it's either
+the OSS Mixer for CD Audio or the actual volume on the CDROM.
+
+In the CD Info tab you can choose if the plugin should try and get the
+track names from a Internet database server.
+
+You can either use the CDDB protocol or CD Index. CDDB defaults to a free
+version of CDDB, but it will work with the infamous cddb servers as well.
+
+Show network window will display some useful information if something goes
+wrong, but you'll have to close and re-open it to update the content of it.
+
+If a CDDB server is too slow for your taste, you can press 'Get server list'
+to receive a list of alternate servers.
+
+CD Index is another type of database, but works in a similar manner. If
+you don't have libxml installed when you compiled the plugin, this will be
+grayed out.
+
+In the "Track names" box you can decide on how the plugin presents the
+tracks to you. This is normally handled by the 'Title' (section 3.5.6) setting
+in the main preferences, but you can choose to override them here.
+
+Available variables are:
+
+ %p = Performer/Artist %t = Track name
+ %a = Album %n = Track number
+
+So "%n. %t / %p (%a)" would display something like:
+
+ 1. New Life / Depeche Mode (Speak & Spell)
+
+Now to add your CDROM tracks to the playlist. Insert an audio cd into the
+CDROM drive and press the Eject button. Go to the directory which you defined
+earlier ( /mnt/cdrom ) and you should see a list of tracks. They will be named
+Track XX.cda, select the tracks you want to play and press OK. If you had
+choosed an Internet database and the CD exists in it, BMP will now display
+the tracks you have chosen with their names according to the 'Name format'
+configuration.
+
+Now, that wasn't hard now was it?
+
+If you want BMP to identify as something else when speaking with servers, you
+can set the environmental variable "XMMS_CDDB_CLIENT_NAME", and BMP will use
+that instead.
+
+
+3.6.1.2 MPEG Layer 1/2/3 player
+-------------------------------
+The main reason why this player exists today is mp3 files, so what could be
+better than a plugin that plays them?.
+
+It's based off the mpg123 engine and handles MPEG Layer 1/2/3 files and
+VBR (variable bit rate) MP3 files.
+
+The first configuration tab is just like the MikMod one, and again, if you
+have an older soundcard and the music is going half speed, change the
+'Resolution' setting.
+
+If you have mp3 files named something else than .mp3, you might want to enable
+'Detect files by content' so BMP will know that they are supported. Although
+I'd recommend that you rename the files (or just beat the person who burned his
+high-school bands music with in proper file extensions into giving you a new
+cd) since this is rather slow.
+
+In the streaming tab you can choose a 'Buffer size' in kilobytes which BMP
+will keep while streaming. This ranges from 4 -> 4096kb (which should be
+sufficient for most people. The 'Pre-buffer' value is how much of the buffer
+BMP should fill before starting to play the stream. (0%-90%)
+
+I'll let Chad Armstrong describe the two following options.
+
+"As streaming becomes more popular, there is rising demand for better
+information about the current track being played. This 'Now Playing'
+information (also known as 'Title Streaming') allows for more information to be
+passed back to the listener. In the past, there was a method started by the
+Shoutcast group, which embedded this information in the stream itself. The mp3
+standard was never designed to allow for text information to be interleaved
+with audio data, and it is this design which can cause errors in playback. The
+Icecast Team has taken this data completely out of the mp3 data, and has
+provided it in a side channel (via UDP)."
+
+- Chad Armstrong (icemonk)
+
+You're better off having both these options enabled. :)
+
+In the 'Title' tab you can change the way BMP presents the mp3 files to the
+playlist.
+
+ID3 is data stored in the mp3 file and can include Artist, Album etc. If you
+uncheck 'Use ID3 tags' BMP will display the filename instead of the ID3
+information.
+
+ID3V2 allows for a lot of extra data to be stored in the mp3 file, and don't
+suffer from the limitations of ID3V1, BMP supports the same data that are
+available in ID3V1 but not the extra data. If a mp3 file contains both ID3V1
+and ID3V2 tags, you might see something different that the 'file info' editor
+displays. If this happens, you might want to turn on 'Disable ID3V2 tags'.
+
+'Override generic titles' is used if you do not want to use the generic titles
+defined in the preferences. See section 3.5.6.
+
+The 'ID3 format:' box allows you to alter in which order the information about
+the current song is displayed.
+
+Example: %p - %t (%a) [%y]
+will display something like "Laibach - Alle Gegen Alle (Nato) [1994]"
+
+available fields are:
+
+%p - Artist (ex: Laibach)
+%a - Album (ex: Nato)
+%f - File name (ex: laibach-allegegenalle)
+%F - File path (ex: /home/thomas/mp3)
+%e - File extension (ex: mp3)
+
+%t - Track name (ex: Alle Gegen Alle)
+%n - Track number (ex: 6)
+%y - Year (ex: 1994)
+%g - Genre (ex: Electronic)
+%c - Comment (ex: Cover of D.A.F)
+
+
+3.6.1.3 Ogg Vorbis Player
+-------------------------
+
+Plays OGG Vorbis encoded files, see http://www.xiph.org/ogg/vorbis/index.html
+for more information.
+
+
+3.6.1.4 WAV player
+-------------------
+This plugin plays as suggested, wave files. It supports 16bit and 8bit PCM wave
+files.
+
+
+3.6.2 Output plugins
+--------------------
+This type of plugins is what is used to send the audio data to your soundcard
+or alternative devices.
+
+
+3.6.2.1 OSS Driver
+------------------
+This plugin is probably what most of you will use if your system is equipped
+with the OpenSoundSystem (www.opensound.com) drivers or compatible.
+Compatible drivers are ALSA with their OSS emulation, and Linux kernel sound
+drivers.
+
+In the 'Devices' tab you can change the soundcard which BMP is going to use.
+If your driver have more than one dsp, you can change the one BMP uses by
+enabling 'Use alternate device' and changing the '/dev/dsp' to suit your needs.
+
+If you have changed your Audio Device to another soundcard (if you for some
+reason have two cards) don't forget to change the 'Mixer device' setting to the
+soundcard you want to use.
+
+In the 'Buffering' tab you can change how much data the OSS plugin will buffer.
+The 'Buffer size' ranges from 200 - 10000ms. If you want the plugin to wait for
+the buffer to be filled before it starts playing the music change the 'Pre-
+buffer' value, this ranges from 0% - 90% of the 'Buffer size' value.
+
+In the 'Mixer' tab you can change which volume setting BMP should change when
+you alter the volume from BMP. Enable 'Volume controls Master not PCM' if you
+want BMP to change the volume of all sounds instead of only PCM/wave sound.
+
+
+3.6.2.2 eSound Output
+---------------------
+The 'ESD' plugin will use the 'Enlightened Sound Daemon' to playback the audio.
+It's useful if you want to be able to have sound effects in your programs and
+still be able to listen to music with BMP.
+
+In the 'Server' tab of the configuration, you can tell the plugin where to send
+the audio data. Enable 'Use remote host' and enter the name/ip of the server
+and port to send to. This is probably only useful in a LAN environment, since
+the audio data is sent uncompressed to the remote ESD.
+
+The 'Buffering' tab works just like the 'OSS Driver' one.
+
+
+3.6.2.3 BSD Sun Output
+----------------------
+The 'Sun' output plugin will use the native audio(4) interface provided
+by OpenBSD and NetBSD for playback and mixing.
+
+The $AUDIODEVICE and $MIXERDEVICE environment variables will override the
+current configuration settings. Defaults are /dev/audio and /dev/mixer.
+
+In the 'Devices' tab you can change the audio, audioctl and mixer devices
+BMP is going to use. The audioctl device is used for ioctl(2) calls
+independent of audio data I/O.
+
+In the 'Buffering' tab you can change how much data the Sun plugin will
+buffer. The 'Buffer size' ranges from 200 - 10000ms. If you want the plugin
+to wait for the buffer to be filled before it starts playing the music,
+change the 'Pre-buffer' value, this ranges from 0% - 90% of the 'Buffer size'
+value.
+
+In the 'Mixer' tab you can select the volume device to be affected when you
+alter the volume from BMP. `BMP uses mixer exclusively' causes BMP to
+keep the mixer device open instead of re-opening it for each operation.
+
+There may also be some more options depending on what your audio mixer
+device supports (eg. loudness, spatial, surround, preamp).
+
+In the 'Status' tab you can see audio device information and real-time
+playback status.
+
+
+3.6.3 Effect plugins
+--------------------
+Effect plugins can alter the sound of the music you are listening to.
+
+
+3.6.4 General plugins
+---------------------
+Mostly used for controlling BMP and passing data to other programs.
+
+
+3.6.5 Visualization plugins
+---------------------------
+Eye candy plugins.
+
+
+3.6.5.1 Blur scope
+-------------------
+A simple blurring oscilloscope, in the configuration you can change the color
+with the standard GTK color dialog.
+
+
+4. Command Line Options
+-----------------------
+
+beep-media-player --help will produce:
+
+Usage: beep-media-player [options] [files] ...
+
+Options:
+--------
+
+-h, --help Display this text and exit.
+-n, --session Select BMP/XMMS session (Default: 0)
+-r, --rew Skip backwards in playlist
+-p, --play Start playing current playlist
+-u, --pause Pause current song
+-s, --stop Stop current song
+-t, --play-pause Pause if playing, play otherwise
+-f, --fwd Skip forward in playlist
+-e, --enqueue Don't clear the playlist
+-m, --show-main-window Show the main window
+-v, --version Print version number and exit.
+
+You can specify files on the command line, e.g:
+
+ beep-media-player file1.mp3 file2.mp3 file3.mp3
+ beep-media-player *.mp3
+ beep-media-player playlist.m3u (note: playlists must be named .m3u)
+
+If you do this while BMP is running the current playlist
+will be cleared and the files/playlist specified on the command
+line will be used instead.
+
+To keep the current playlist intact use the -e option.
+
+
+5. Features
+-----------
+
+5.1 Supported File formats
+-------------------------
+
+OGG Vorbis
+MP2 and MP3 streams
+WAV/AU samples
+
+Others:
+
+CD audio
+Shout/Icecast
+
+
+5.2 Supported Features
+----------------------
+
+Seeking in files
+Volume/Balance
+Shuffle play
+Repeat play
+Playlist editor
+Spectrum Analyzer
+One Line mode al'a WinShade in WinAmp
+Oscilloscope
+Timer Elapsed/Timer Remaining
+Plug-in system Output/Input/Effect/General/Visualization
+Equalizer
+Double Size option
+WinAmp 2.0 skin support (can use wsz files)
+GTK Requesters (with theme support)
+Streaming/Shoutcast(1.0/1.1)/Icecast support
+Auto remove borders if the WM has support for it
+Fast jump in playlist
+Scroll wheel support
+Saves HTTP streams to HD
+HTTP authentication
+Plays MPEG layer 1/2/3, WAV, Ogg Vorbis
+Compiles and works on other Unixes
+Proxy authentication support
+
+
+6. Obtaining BMP
+-------------------
+
+Currently, we only provide source tarballs at:
+
+ http://sourceforge.net/project/showfiles.php?group_id=95272
+
+The CVS snapshots listed are not regularly updated. We encourage you
+to download BMP straight from CVS:
+
+ cvs -z3 -d:pserver:anonymous at cvs.sf.net:/cvsroot/beepmp login
+ cvs -z3 -d:pserver:anonymous at cvs.sf.net:/cvsroot/beepmp co bmp
+
+
+
+FIXME: add links to user made packages
+
+
+6.1 Obtaining Skins
+-------------------
+
+You can find BMP/XMMS skins made by BMP/XMMS users at:
+
+ http://www.xmms.org/skins.html
+ http://themes.org/skins/xmms
+
+
+7. Misc
+-------
+
+7.1. Tips and Tricks
+-------------------
+
+If you have a windows partition with WinAmp installed, a good idea would be to
+set the SKINSDIR variable to that dir.
+
+BMP features some command line options like next/previous songs, those
+things can be binded to a key. I use AfterStep and the useless window keys
+for this. Here is an example from my .steprc:
+
+Key Meta_R A N Exec "bmp" beep-media-player -r
+Key Menu A N Exec "bmp" beep-media-player -f
+
+If you want all your mp3's in one playlist an easy way is:
+locate .mp3 > /path/to/playlistname
+
+(considering you have a fairly recent updatedb, don't blame us if locate don't
+find the file you downloaded 3 minutes ago)
+
+
+8. Bugs
+-------
+
+BMP is under heavy development and as such, has quite a number of
+bugs. Our bug tracker page is maintained at:
+
+ http://www.sosdg.org/~larne/bugs/
+
+It will continue to have bugs as we fix and introduce new ones through
+rewriting and enhancement. Help us along by reporting new bugs, and
+verifying existing ones.
+
+If you have a fix for any of the bugs, please let us know using the
+tracker or posting to our development mailing list at:
+
+ beepmp-devel at lists.sourceforge.net
+
+
+9. Contact Email's
+------------------
+
+Project Admins:
+
+ Milosz Derezynski email: mderezynski at users sourceforge net
+ Chong Kai Xiong email: descender at phreaker net
+
+You can more information about the BMP team from this page:
+
+ http://sourceforge.net/project/memberlist.php?group_id=95272
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,2 @@
+ALL_PLUGINS = blur_scope
+SUBDIRS = $(VISUALIZATION_PLUGINS)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,20 @@
+lib_LTLIBRARIES = libbscope.la
+
+libdir = $(plugindir)/$(VISUALIZATION_PLUGIN_DIR)
+
+libbscope_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+libbscope_la_LIBADD = $(GTK_LIBS)
+
+COMMON_SRC = blur_scope.c blur_scope.h config.c
+
+if USE_X86ASM
+
+EXTRA_SRC = blur_8.s
+
+endif
+
+EXTRA_DIST = blur_8.s
+
+libbscope_la_SOURCES = $(COMMON_SRC) $(EXTRA_SRC)
+
+INCLUDES = $(GTK_CFLAGS) $(ARCH_DEFINES) -I$(top_builddir)/intl -I$(top_srcdir)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_8.s
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_8.s 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_8.s 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,45 @@
+.globl bscope_blur_8
+ .type bscope_blur_8, at function
+bscope_blur_8:
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ movl 20(%ebp),%edi
+ movl %edi,%eax
+ addl 8(%ebp),%eax
+ leal 1(%eax),%esi
+ movl %edi,%ecx
+ imull 16(%ebp),%ecx
+ subl $1,%ecx
+ jc .L26
+ leal 2(%eax),%ebx
+ .align 4
+.L27:
+ movl %esi,%eax
+ subl %edi,%eax
+ movzbl (%eax),%edx
+ movzbl -2(%ebx),%eax
+ addl %eax,%edx
+ movzbl (%ebx),%eax
+ addl %eax,%edx
+ movzbl (%edi,%esi),%eax
+ addl %edx,%eax
+ sarl $2,%eax
+ cmpl $2,%eax
+ jbe .L28
+ addl $-2,%eax
+.L28:
+ movb %al,(%esi)
+ incl %ebx
+ incl %esi
+ subl $1,%ecx
+ jnc .L27
+.L26:
+ leal -12(%ebp),%esp
+ popl %ebx
+ popl %esi
+ popl %edi
+ leave
+ ret
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,327 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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
+ * w
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include "beep/plugin.h"
+#include "libbeep/util.h"
+#include "libbeep/configdb.h"
+#include "blur_scope.h"
+//#include "bscope_logo.xpm"
+
+static GtkWidget *window = NULL, *area;
+static GdkPixmap *bg_pixmap = NULL;
+static gboolean config_read = FALSE;
+
+static void bscope_init(void);
+static void bscope_cleanup(void);
+static void bscope_playback_stop(void);
+static void bscope_render_pcm(gint16 data[2][512]);
+
+BlurScopeConfig bscope_cfg;
+
+GtkItemFactory *blurscope_popup;
+
+enum { SCOPE_TOGGLE, SCOPE_CLOSE };
+
+void blurscope_callback(gpointer data, guint action, GtkWidget * widget);
+gboolean blurscope_popup_menu(GtkWidget * widget,
+ GdkEventButton * event, gpointer user_data);
+
+GtkItemFactoryEntry blurscope_menu_entries[] = {
+ {N_("/Toggle Decorations"), NULL, blurscope_callback, SCOPE_TOGGLE,
+ "<Item>"},
+ {N_("/-"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Close"), NULL, blurscope_callback, SCOPE_CLOSE, "<StockItem>",
+ GTK_STOCK_CLOSE},
+};
+
+static const int blurscope_menu_entries_num =
+ sizeof(blurscope_menu_entries) / sizeof(blurscope_menu_entries[0]);
+
+
+VisPlugin bscope_vp = {
+ NULL,
+ NULL,
+ 0, /* XMMS Session ID, filled in by XMMS */
+ NULL, /* description */
+ 1, /* Number of PCM channels wanted */
+ 0, /* Number of freq channels wanted */
+ bscope_init, /* init */
+ bscope_cleanup, /* cleanup */
+ NULL, /* about */
+ bscope_configure, /* configure */
+ NULL, /* disable_plugin */
+ NULL, /* playback_start */
+ bscope_playback_stop, /* playback_stop */
+ bscope_render_pcm, /* render_pcm */
+ NULL /* render_freq */
+};
+
+VisPlugin *
+get_vplugin_info(void)
+{
+ bscope_vp.description = g_strdup("Blur Scope");
+ return &bscope_vp;
+}
+
+#define WIDTH 256
+#define HEIGHT 128
+#define min(x,y) ((x)<(y)?(x):(y))
+#define BPL ((WIDTH + 2))
+
+static guchar rgb_buf[(WIDTH + 2) * (HEIGHT + 2)];
+static GdkRgbCmap *cmap = NULL;
+
+static void inline
+draw_pixel_8(guchar * buffer, gint x, gint y, guchar c)
+{
+ buffer[((y + 1) * BPL) + (x + 1)] = c;
+}
+
+
+void
+bscope_read_config(void)
+{
+ ConfigDb *db;
+
+ if (!config_read) {
+ bscope_cfg.color = 0xFF3F7F;
+ db = bmp_cfg_db_open();
+
+ if (db) {
+ bmp_cfg_db_get_int(db, "BlurScope", "color",
+ (int *) &bscope_cfg.color);
+ bmp_cfg_db_close(db);
+ }
+ config_read = TRUE;
+ }
+}
+
+
+#ifndef I386_ASSEM
+void
+bscope_blur_8(guchar * ptr, gint w, gint h, gint bpl)
+{
+ register guint i, sum;
+ register guchar *iptr;
+
+ iptr = ptr + bpl + 1;
+ i = bpl * h;
+ while (i--) {
+ sum = (iptr[-bpl] + iptr[-1] + iptr[1] + iptr[bpl]) >> 2;
+ if (sum > 2)
+ sum -= 2;
+ *(iptr++) = sum;
+ }
+
+
+}
+#else
+extern void bscope_blur_8(guchar * ptr, gint w, gint h, gint bpl);
+#endif
+
+void
+generate_cmap(void)
+{
+ guint32 colors[256], i, red, blue, green;
+ if (window) {
+ red = (guint32) (bscope_cfg.color / 0x10000);
+ green = (guint32) ((bscope_cfg.color % 0x10000) / 0x100);
+ blue = (guint32) (bscope_cfg.color % 0x100);
+ for (i = 255; i > 0; i--) {
+ colors[i] =
+ (((guint32) (i * red / 256) << 16) |
+ ((guint32) (i * green / 256) << 8) |
+ ((guint32) (i * blue / 256)));
+ }
+ colors[0] = 0;
+ if (cmap) {
+ gdk_rgb_cmap_free(cmap);
+ }
+ cmap = gdk_rgb_cmap_new(colors, 256);
+ }
+}
+
+static void
+bscope_destroy_cb(GtkWidget * w, gpointer data)
+{
+ bscope_vp.disable_plugin(&bscope_vp);
+}
+
+static void
+bscope_init(void)
+{
+ if (window)
+ return;
+ bscope_read_config();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ blurscope_popup = gtk_item_factory_new(GTK_TYPE_MENU, "<Main>", NULL);
+
+ gtk_item_factory_create_items(GTK_ITEM_FACTORY(blurscope_popup),
+ blurscope_menu_entries_num,
+ blurscope_menu_entries, NULL);
+
+ gtk_widget_set_events(window,
+ GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_SCROLL_MASK | GDK_VISIBILITY_NOTIFY_MASK);
+
+ gtk_window_set_title(GTK_WINDOW(window), _("Blur scope"));
+ gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
+ gtk_widget_realize(window);
+// bg_pixmap =
+// gdk_pixmap_create_from_xpm_d(window->window, NULL, NULL, bscope_logo);
+// gdk_window_set_back_pixmap(window->window,bg_pixmap,0);
+
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(bscope_destroy_cb), NULL);
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &window);
+ g_signal_connect(G_OBJECT(window), "button-press-event",
+ G_CALLBACK(blurscope_popup_menu), NULL);
+
+ gtk_widget_set_size_request(window, WIDTH, HEIGHT);
+ area = gtk_drawing_area_new();
+ gtk_container_add(GTK_CONTAINER(window), area);
+ gtk_widget_realize(area);
+ gdk_window_set_back_pixmap(area->window, bg_pixmap, 0);
+ generate_cmap();
+ memset(rgb_buf, 0, (WIDTH + 2) * (HEIGHT + 2));
+
+
+
+ gtk_widget_show(area);
+ gtk_widget_show(window);
+ gdk_window_clear(window->window);
+ gdk_window_clear(area->window);
+
+
+}
+
+static void
+bscope_cleanup(void)
+{
+ if (window)
+ gtk_widget_destroy(window);
+ if (bg_pixmap) {
+ g_object_unref(bg_pixmap);
+ bg_pixmap = NULL;
+ }
+ if (cmap) {
+ gdk_rgb_cmap_free(cmap);
+ cmap = NULL;
+ }
+}
+
+static void
+bscope_playback_stop(void)
+{
+ if (GTK_WIDGET_REALIZED(area))
+ gdk_window_clear(area->window);
+}
+
+static inline void
+draw_vert_line(guchar * buffer, gint x, gint y1, gint y2)
+{
+ int y;
+ if (y1 < y2) {
+ for (y = y1; y <= y2; y++)
+ draw_pixel_8(buffer, x, y, 0xFF);
+ }
+ else if (y2 < y1) {
+ for (y = y2; y <= y1; y++)
+ draw_pixel_8(buffer, x, y, 0xFF);
+ }
+ else
+ draw_pixel_8(buffer, x, y1, 0xFF);
+}
+
+static void
+bscope_render_pcm(gint16 data[2][512])
+{
+ gint i, y, prev_y;
+
+ if (!window)
+ return;
+ bscope_blur_8(rgb_buf, WIDTH, HEIGHT, BPL);
+ prev_y = y = (HEIGHT / 2) + (data[0][0] >> 9);
+ for (i = 0; i < WIDTH; i++) {
+ y = (HEIGHT / 2) + (data[0][i >> 1] >> 9);
+ if (y < 0)
+ y = 0;
+ if (y >= HEIGHT)
+ y = HEIGHT - 1;
+ draw_vert_line(rgb_buf, i, prev_y, y);
+ prev_y = y;
+ }
+
+ GDK_THREADS_ENTER();
+ gdk_draw_indexed_image(area->window, area->style->white_gc, 0, 0,
+ WIDTH, HEIGHT, GDK_RGB_DITHER_NONE,
+ rgb_buf + BPL + 1, (WIDTH + 2), cmap);
+ GDK_THREADS_LEAVE();
+ return;
+}
+
+gboolean
+blurscope_popup_menu(GtkWidget * widget,
+ GdkEventButton * event, gpointer user_data)
+{
+
+ if (event->button == 3) {
+ gtk_item_factory_popup(blurscope_popup,
+ event->x_root,
+ event->y_root, event->button, event->time);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void
+blurscope_callback(gpointer data, guint action, GtkWidget * widget)
+{
+
+ switch (action) {
+ case SCOPE_TOGGLE:
+ gtk_window_set_decorated(GTK_WINDOW(window),
+ !gtk_window_get_decorated(GTK_WINDOW
+ (window)));
+ break;
+ case SCOPE_CLOSE:
+ gtk_widget_destroy(window);
+ break;
+ default:
+ break;
+ }
+ return;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/blur_scope.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,15 @@
+#ifndef BLUR_SCOPE_H
+#define BLUR_SCOPE_H
+
+void bscope_configure(void);
+void bscope_read_config(void);
+
+typedef struct {
+ guint32 color;
+} BlurScopeConfig;
+
+extern BlurScopeConfig bscope_cfg;
+
+void generate_cmap(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/config.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/config.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/Visualization/blur_scope/config.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,131 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "libbeep/configdb.h"
+#include "blur_scope.h"
+
+
+static GtkWidget *configure_win = NULL;
+static GtkWidget *vbox, *options_frame, *options_vbox;
+static GtkWidget *options_colorpicker;
+static GtkWidget *bbox, *ok, *cancel;
+
+static void
+configure_ok(GtkWidget * w, gpointer data)
+{
+ ConfigDb *db;
+ gdouble color[3];
+
+ gtk_color_selection_get_color(GTK_COLOR_SELECTION(options_colorpicker),
+ color);
+ bscope_cfg.color =
+ ((guint32) (255.0 * color[0]) << 16) |
+ ((guint32) (255.0 * color[1]) << 8) | ((guint32) (255.0 * color[2]));
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_set_int(db, "BlurScope", "color", bscope_cfg.color);
+ bmp_cfg_db_close(db);
+ generate_cmap();
+ gtk_widget_destroy(configure_win);
+}
+
+static void
+configure_cancel(GtkWidget * w, gpointer data)
+{
+ bscope_cfg.color = GPOINTER_TO_UINT(data);
+ generate_cmap();
+ gtk_widget_destroy(configure_win);
+}
+
+static void
+color_changed(GtkWidget * w, gpointer data)
+{
+ gdouble color[3];
+ gtk_color_selection_get_color(GTK_COLOR_SELECTION(options_colorpicker),
+ color);
+ bscope_cfg.color =
+ ((guint32) (255.0 * color[0]) << 16) |
+ ((guint32) (255.0 * color[1]) << 8) | ((guint32) (255.0 * color[2]));
+ generate_cmap();
+}
+
+void
+bscope_configure(void)
+{
+ /* FIXME: convert to GtkColorSelectionDialog */
+
+ gdouble color[3];
+ if (configure_win)
+ return;
+
+ bscope_read_config();
+ color[0] = ((gdouble) (bscope_cfg.color / 0x10000)) / 256;
+ color[1] = ((gdouble) ((bscope_cfg.color % 0x10000) / 0x100)) / 256;
+ color[2] = ((gdouble) (bscope_cfg.color % 0x100)) / 256;
+
+ configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(configure_win), 10);
+ gtk_window_set_title(GTK_WINDOW(configure_win),
+ _("Blur Scope: Color selection"));
+ gtk_window_set_type_hint(GTK_WINDOW(configure_win),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(configure_win), FALSE);
+ gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_MOUSE);
+ g_signal_connect(G_OBJECT(configure_win), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &configure_win);
+
+ vbox = gtk_vbox_new(FALSE, 5);
+
+ options_frame = gtk_frame_new(_("Options:"));
+ gtk_container_set_border_width(GTK_CONTAINER(options_frame), 5);
+
+ options_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(options_vbox), 5);
+
+ options_colorpicker = gtk_color_selection_new();
+ gtk_color_selection_set_color(GTK_COLOR_SELECTION(options_colorpicker),
+ color);
+ g_signal_connect(G_OBJECT(options_colorpicker), "color_changed",
+ G_CALLBACK(color_changed), NULL);
+
+ gtk_box_pack_start(GTK_BOX(options_vbox), options_colorpicker, FALSE,
+ FALSE, 0);
+ gtk_widget_show(options_colorpicker);
+
+
+ gtk_container_add(GTK_CONTAINER(options_frame), options_vbox);
+ gtk_widget_show(options_vbox);
+
+ gtk_box_pack_start(GTK_BOX(vbox), options_frame, TRUE, TRUE, 0);
+ gtk_widget_show(options_frame);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ g_signal_connect(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(configure_cancel),
+ GUINT_TO_POINTER(bscope_cfg.color));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+ gtk_widget_show(cancel);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_OK);
+ g_signal_connect(G_OBJECT(ok), "clicked", G_CALLBACK(configure_ok), NULL);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ gtk_widget_show(ok);
+
+ gtk_widget_show(bbox);
+
+ gtk_container_add(GTK_CONTAINER(configure_win), vbox);
+ gtk_widget_show(vbox);
+ gtk_widget_show(configure_win);
+ gtk_widget_grab_default(ok);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/autogen.sh
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/autogen.sh 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/autogen.sh 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,4 @@
+#! /bin/sh
+autoreconf -v --install || exit 1
+glib-gettextize --force --copy || exit 1
+./configure --enable-maintainer-mode "$@"
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/autogen.sh
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/.Makefile.swp
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/.Makefile.swp
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,96 @@
+SUBDIRS =
+
+beepincludedir = $(includedir)/bmp
+
+bin_PROGRAMS = beep
+transform = s/beep/beep-media-player/
+
+beep_LDFLAGS = -export-dynamic
+beep_LDADD = -lid3 \
+ $(X_LIBS) $(X_PRE_LIBS) -lX11 $(X_EXTRA_LIBS) \
+ $(GTK_LIBS) \
+ $(DBUS_LIBS) \
+ $(OPENMOKO_LIBS) \
+ $(LIBGLADE_LIBS) \
+ $(LTLIBINTL) \
+ $(top_builddir)/libbeep/libbeep.la
+
+beep_CFLAGS = \
+ $(X_CFLAGS) \
+ $(GTK_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(OPENMOKO_CFLAGS) \
+ $(LIBGLADE_CFLAGS) \
+ $(BEEP_DEFINES) \
+ $(ARCH_DEFINES) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/intl
+
+beep_SOURCES = \
+ skin.c skin.h \
+ util.c util.h \
+ output.c output.h \
+ fft.c fft.h \
+ input.c input.h \
+ effect.c effect.h \
+ general.c general.h \
+ visualization.c visualization.h \
+ fullscreen.c fullscreen.h \
+ pluginenum.c pluginenum.h \
+ playlist.c playlist.h \
+ controlsocket.c controlsocket.h \
+ dock.c dock.h \
+ widget.c widget.h \
+ sbutton.c sbutton.h \
+ pbutton.c pbutton.h \
+ tbutton.c tbutton.h \
+ textbox.c textbox.h \
+ menurow.c menurow.h \
+ hslider.c hslider.h \
+ monostereo.c monostereo.h \
+ vis.c vis.h \
+ svis.c svis.h \
+ number.c number.h \
+ playback.c playback.h \
+ playstatus.c playstatus.h \
+ playlist_list.c playlist_list.h \
+ playlist_slider.c playlist_slider.h \
+ playlist_popup.c playlist_popup.h \
+ eq_graph.c eq_graph.h \
+ eq_slider.c eq_slider.h \
+ main.c main.h \
+ logger.c logger.h \
+ xml_document.c xml_document.h \
+ mainwin.c mainwin.h \
+ skinwin.c skinwin.h \
+ prefswin.c prefswin.h \
+ playlistwin.c playlistwin.h \
+ equalizer.c equalizer.h \
+ glade.c glade.h \
+ hints.c hints.h \
+ about.c about.h \
+ plugin.h \
+ softvolume.c softvolume.h \
+ getopt.c getopt1.c getopt.h \
+ urldecode.c urldecode.h \
+ dnd.h \
+ debug.h \
+ mkdtemp.c \
+ pixmaps.h \
+ iir.c iir.h
+
+beepinclude_HEADERS = plugin.h fullscreen.h
+
+desktop_DATA = bmp.desktop
+desktopdir = $(datadir)/applications
+
+
+BUILT_SOURCES = pixmaps.h
+
+embedded_icons =
+
+EXTRA_DIST = \
+ $(embedded_icons) build.list
+
+pixmaps.h: $(embedded_icons)
+ gdk-pixbuf-csource --stream --build-list `cat build.list` > pixmaps.h
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,330 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 2000-2003 Haavard Kvaalen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "about.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+//#include "beep_logo.xpm"
+
+
+enum {
+ COL_LEFT,
+ COL_RIGHT,
+ N_COLS
+};
+
+
+static const gchar *bmp_brief =
+ N_("<big><b>Beep Media Player %s</b></big>\n"
+ "A media player based on XMMS\n"
+ "\n"
+ "Copyright (C) 2003-2005 BMP Development Team\n");
+
+static const gchar *credit_text[] = {
+ N_("Developers:"),
+ N_("Artem Baguinski"),
+ N_("Edward Brocklesby"),
+ N_("Chong Kai Xiong"),
+ N_("Milosz Derezynski"),
+ N_("David Lau"),
+ N_("Ole Andre Vadla Ravnaas"),
+ N_("Michiel Sikkes"),
+ NULL,
+
+ N_("With Additional Help:"),
+ N_("Andrei Badea"),
+ N_("Peter Behroozi"),
+ N_("Bernard Blackham"),
+ N_("Oliver Blin"),
+ N_("Tomas Bzatek"),
+ N_("Liviu Danicel"),
+ N_("Jon Dowland"),
+ N_("Artur Frysiak"),
+ N_("Sebastian Kapfer"),
+ N_("Lukas Koberstein"),
+ N_("Dan Korostelev"),
+ N_("Jolan Luff"),
+ N_("Michael Marineau"),
+ N_("Tim-Philipp Muller"),
+ N_("Julien Portalier"),
+ N_("Andrew Ruder"),
+ N_("Olivier Samyn"),
+ N_("Martijn Vernooij"),
+ NULL,
+
+ N_("ClearSky skin:"),
+ N_("Will Reinhart"),
+ NULL,
+
+ N_("Homepage and Graphics:"),
+ N_("Milosz Derezynski"),
+ N_("Edward Brocklesby"),
+ NULL,
+
+ NULL
+};
+
+static const gchar *translators[] = {
+ N_("Brazilian Portuguese:"),
+ N_("Philipi Pinto"),
+ NULL,
+ N_("Breton:"),
+ N_("Thierry Vignaud"),
+ NULL,
+ N_("Chinese:"),
+ N_("Chong Kai Xiong"),
+ N_("Chao-Hsiung Liao"),
+ NULL,
+ N_("Czech:"),
+ N_("Jan Narovec"),
+ NULL,
+ N_("Dutch:"),
+ N_("Laurens Buhler"),
+ NULL,
+ N_("Finnish:"),
+ N_("Pauli Virtanen"),
+ NULL,
+ N_("French:"),
+ N_("David Le Brun"),
+ NULL,
+ N_("German:"),
+ N_("Matthias Debus"),
+ NULL,
+ N_("Georgian: "),
+ N_("George Machitidze"),
+ NULL,
+ N_("Greek:"),
+ N_("Kouzinopoulos Haris"),
+ N_("Stavros Giannouris"),
+ NULL,
+ N_("Hindi:"),
+ N_("Dhananjaya Sharma"),
+ NULL,
+ N_("Hungarian:"),
+ N_("Laszlo Dvornik"),
+ NULL,
+ N_("Italian:"),
+ N_("Alessio D'Ascanio"),
+ NULL,
+ N_("Japanese:"),
+ N_("Takeshi Aihana"),
+ NULL,
+ N_("Korean:"),
+ N_("DongCheon Park"),
+ NULL,
+ N_("Lithuanian:"),
+ N_("Rimas Kudelis"),
+ NULL,
+ N_("Macedonian:"),
+ N_("Arangel Angov"),
+ NULL,
+ N_("Polish:"),
+ N_("Jacek Wolszczak"),
+ NULL,
+ N_("Romanian:"),
+ N_("Liviu Danicel"),
+ NULL,
+ N_("Russian:"),
+ N_("Pavlo Bohmat"),
+ N_("Dan Korostelev"),
+ N_("Vitaly Lipatov"),
+ NULL,
+ N_("Slovak:"),
+ N_("Pavel Kanzelsberger"),
+ NULL,
+ N_("Spanish:"),
+ N_("Francisco Javier F. Serrador"),
+ NULL,
+ N_("Swedish:"),
+ N_("Martin Persenius"),
+ NULL,
+ N_("Ukrainian:"),
+ N_("Mykola Lynnyk"),
+ NULL,
+ N_("Welsh:"),
+ N_("Edward Brocklesby"),
+ NULL,
+
+ NULL
+};
+
+
+static GtkWidget *
+generate_credit_list(const gchar * text[], gboolean sec_space)
+{
+ GtkWidget *scrollwin;
+ GtkWidget *treeview;
+ GtkListStore *list_store;
+ GtkTreeIter iter;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ const gchar *const *item;
+
+ list_store = gtk_list_store_new(N_COLS, G_TYPE_STRING, G_TYPE_STRING);
+
+ item = text;
+
+ while (*item) {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set(list_store, &iter,
+ COL_LEFT, _(item[0]), COL_RIGHT, _(item[1]), -1);
+ item += 2;
+
+ while (*item) {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set(list_store, &iter,
+ COL_LEFT, "", COL_RIGHT, _(*item++), -1);
+ }
+
+ ++item;
+
+ if (*item && sec_space) {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set(list_store, &iter,
+ COL_LEFT, "", COL_RIGHT, "", -1);
+ }
+ }
+
+ treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
+ gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), FALSE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
+ gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),
+ GTK_SELECTION_NONE);
+
+ renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "xalign", 1.0, NULL);
+ column = gtk_tree_view_column_new_with_attributes("Left", renderer,
+ "text", COL_LEFT, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+ renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "xalign", 0.0, NULL);
+ column = gtk_tree_view_column_new_with_attributes("Right", renderer,
+ "text", COL_RIGHT,
+ NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+ scrollwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN);
+ gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
+ gtk_container_set_border_width(GTK_CONTAINER(scrollwin), 10);
+
+ gtk_widget_show_all(scrollwin);
+
+ return scrollwin;
+}
+
+void
+show_about_window(void)
+{
+ static GtkWidget *about_window = NULL;
+
+ GdkPixmap *beep_logo_pmap = NULL, *beep_logo_mask = NULL;
+ GtkWidget *about_vbox;
+ GtkWidget *about_credits_logo_box, *about_credits_logo_frame;
+ GtkWidget *about_credits_logo;
+ GtkWidget *about_notebook;
+ GtkWidget *list;
+ GtkWidget *bbox, *close_btn;
+ GtkWidget *label;
+ gchar *text;
+
+ if (about_window)
+ return;
+
+ about_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(about_window),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ gtk_window_set_default_size(GTK_WINDOW(about_window), -1, 480);
+ gtk_window_set_title(GTK_WINDOW(about_window), _("About BMP"));
+ gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(about_window), TRUE);
+ gtk_container_set_border_width(GTK_CONTAINER(about_window), 10);
+
+ g_signal_connect(about_window, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &about_window);
+
+ gtk_widget_realize(about_window);
+
+ about_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(about_window), about_vbox);
+
+ //if (!beep_logo_pmap)
+ // beep_logo_pmap =
+ // gdk_pixmap_create_from_xpm_d(about_window->window,
+ // &beep_logo_mask, NULL, beep_logo);
+
+ about_credits_logo_box = gtk_hbox_new(TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(about_vbox), about_credits_logo_box,
+ FALSE, FALSE, 0);
+
+ about_credits_logo_frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(about_credits_logo_frame),
+ GTK_SHADOW_ETCHED_OUT);
+ gtk_box_pack_start(GTK_BOX(about_credits_logo_box),
+ about_credits_logo_frame, FALSE, FALSE, 0);
+
+ //about_credits_logo = gtk_pixmap_new(beep_logo_pmap, beep_logo_mask);
+ //gtk_container_add(GTK_CONTAINER(about_credits_logo_frame),
+ // about_credits_logo);
+
+ label = gtk_label_new(NULL);
+ text = g_strdup_printf(_(bmp_brief), VERSION);
+ gtk_label_set_markup(GTK_LABEL(label), text);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
+ g_free(text);
+
+ gtk_box_pack_start(GTK_BOX(about_vbox), label, FALSE, FALSE, 0);
+
+ about_notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(about_vbox), about_notebook, TRUE, TRUE, 0);
+
+ list = generate_credit_list(credit_text, TRUE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
+ gtk_label_new(_("Credits")));
+
+ list = generate_credit_list(translators, FALSE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
+ gtk_label_new(_("Translators")));
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(about_vbox), bbox, FALSE, FALSE, 0);
+
+ close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ g_signal_connect_swapped(close_btn, "clicked",
+ G_CALLBACK(gtk_widget_destroy), about_window);
+ GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), close_btn, TRUE, TRUE, 0);
+ gtk_widget_grab_default(close_btn);
+
+ gtk_widget_show_all(about_window);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/about.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,7 @@
+
+#ifndef ABOUT_H
+#define ABOUT_H
+
+void show_about_window(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/bmp.desktop.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/bmp.desktop.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/bmp.desktop.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Beep Media Player
+Comment=Play music
+Exec=beep-media-player
+Icon=bmp.png
+MimeType=audio/x-scpls;audio/x-mpegurl;audio/mpegurl;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/x-wav;application/x-ogg;
+Categories=Application;GTK;AudioVideo;Player;
+Terminal=false
+Type=Application
+Encoding=UTF-8
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/build.list
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/build.list 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/build.list 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,8 @@
+my_pixbuf
+ ./info.png
+playlist_pixbuf
+ ./playlist.png
+play_pixbuf
+ ./play.png
+queue_pixbuf
+ ./queue.png
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,695 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "controlsocket.h"
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include "main.h"
+#include "equalizer.h"
+#include "mainwin.h"
+#include "input.h"
+#include "playback.h"
+#include "playlist.h"
+#include "playlistwin.h"
+#include "prefswin.h"
+#include "skin.h"
+#include "libbeep/beepctrl.h"
+
+
+#define CTRLSOCKET_BACKLOG 100
+#define CTRLSOCKET_TIMEOUT 100000
+
+
+static gint session_id = 0;
+
+static gint ctrl_fd = 0;
+static gchar *socket_name = NULL;
+
+static gpointer ctrlsocket_func(gpointer);
+static GThread *ctrlsocket_thread;
+
+static GList *packet_list = NULL;
+static GMutex *packet_list_mutex = NULL;
+
+static gboolean started = FALSE;
+static gboolean going = TRUE;
+static GCond *start_cond = NULL;
+static GMutex *status_mutex = NULL;
+
+
+static void
+ctrlsocket_start_thread(void)
+{
+ start_cond = g_cond_new();
+ status_mutex = g_mutex_new();
+ packet_list_mutex = g_mutex_new();
+
+ ctrlsocket_thread = g_thread_create(ctrlsocket_func, NULL, TRUE, NULL);
+}
+
+gboolean
+ctrlsocket_setup(void)
+{
+ struct sockaddr_un saddr;
+ gint i;
+ gint fd;
+
+ if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
+ g_critical("ctrlsocket_setup(): Failed to open socket: %s",
+ strerror(errno));
+ return FALSE;
+ }
+
+ for (i = 0;; i++) {
+ saddr.sun_family = AF_UNIX;
+ g_snprintf(saddr.sun_path, sizeof(saddr.sun_path),
+ "%s/%s_%s.%d", g_get_tmp_dir(),
+ CTRLSOCKET_NAME, g_get_user_name(), i);
+
+ if (xmms_remote_is_running(i)) {
+ if (cfg.allow_multiple_instances)
+ continue;
+ break;
+ }
+
+ if ((unlink(saddr.sun_path) == -1) && errno != ENOENT) {
+ g_critical
+ ("ctrlsocket_setup(): Failed to unlink %s (Error: %s)",
+ saddr.sun_path, strerror(errno));
+ break;
+ }
+
+ if (bind(fd, (struct sockaddr *) &saddr, sizeof(saddr)) == -1) {
+ g_critical
+ ("ctrlsocket_setup(): Failed to assign %s to a socket (Error: %s)",
+ saddr.sun_path, strerror(errno));
+ break;
+ }
+
+ listen(fd, CTRLSOCKET_BACKLOG);
+
+ socket_name = g_strdup(saddr.sun_path);
+ ctrl_fd = fd;
+ session_id = i;
+ going = TRUE;
+
+ ctrlsocket_start_thread();
+
+ return TRUE;
+ }
+
+ close(fd);
+
+ return FALSE;
+}
+
+gint
+ctrlsocket_get_session_id(void)
+{
+ return session_id;
+}
+
+void
+ctrlsocket_cleanup(void)
+{
+ if (ctrl_fd) {
+ g_mutex_lock(status_mutex);
+ going = FALSE;
+ g_cond_signal(start_cond);
+ g_mutex_unlock(status_mutex);
+
+ /* wait for ctrlsocket_thread to terminate */
+ g_thread_join(ctrlsocket_thread);
+
+ /* close and remove socket */
+ close(ctrl_fd);
+ ctrl_fd = 0;
+ unlink(socket_name);
+ g_free(socket_name);
+
+ g_cond_free(start_cond);
+ g_mutex_free(status_mutex);
+ g_mutex_free(packet_list_mutex);
+ }
+}
+
+void
+ctrlsocket_start(void)
+{
+ /* tell control socket thread to go 'live' i.e. start handling
+ * packets */
+ g_mutex_lock(status_mutex);
+ started = TRUE;
+ g_cond_signal(start_cond);
+ g_mutex_unlock(status_mutex);
+}
+
+static gint
+write_all(gint fd, gconstpointer buf, size_t count)
+{
+ size_t left = count;
+ GTimer *timer;
+ gulong usec;
+ gint written;
+
+ timer = g_timer_new();
+
+ do {
+ if ((written = write(fd, buf, left)) < 0) {
+ count = -1;
+ break;
+ }
+ left -= written;
+ buf = (gchar *) buf + written;
+ g_timer_elapsed(timer, &usec);
+ }
+ while (left > 0 && usec <= CTRLSOCKET_IO_TIMEOUT_USEC);
+
+ g_timer_destroy(timer);
+ return count - left;
+}
+
+static void
+ctrl_write_packet(gint fd, gpointer data, gint length)
+{
+ ServerPktHeader pkthdr;
+
+ pkthdr.version = XMMS_PROTOCOL_VERSION;
+ pkthdr.data_length = length;
+ if (write_all(fd, &pkthdr, sizeof(ServerPktHeader)) < sizeof(pkthdr))
+ return;
+ if (data && length > 0)
+ write_all(fd, data, length);
+}
+
+static void
+ctrl_write_gint(gint fd, gint val)
+{
+ ctrl_write_packet(fd, &val, sizeof(gint));
+}
+
+static void
+ctrl_write_gfloat(gint fd, gfloat val)
+{
+ ctrl_write_packet(fd, &val, sizeof(gfloat));
+}
+
+static void
+ctrl_write_gboolean(gint fd, gboolean bool)
+{
+ ctrl_write_packet(fd, &bool, sizeof(gboolean));
+}
+
+static void
+ctrl_write_string(gint fd, gchar * string)
+{
+ ctrl_write_packet(fd, string, string ? strlen(string) + 1 : 0);
+}
+
+static void
+ctrl_ack_packet(PacketNode * pkt)
+{
+ ctrl_write_packet(pkt->fd, NULL, 0);
+ close(pkt->fd);
+ if (pkt->data)
+ g_free(pkt->data);
+ g_free(pkt);
+}
+
+static gint
+read_all(gint fd, gpointer buf, size_t count)
+{
+ size_t left = count;
+ GTimer *timer;
+ gulong usec;
+ gint r;
+
+ timer = g_timer_new();
+
+ do {
+ if ((r = read(fd, buf, left)) < 0) {
+ count = -1;
+ break;
+ }
+ left -= r;
+ buf = (gchar *) buf + r;
+ g_timer_elapsed(timer, &usec);
+ }
+ while (left > 0 && usec <= CTRLSOCKET_IO_TIMEOUT_USEC);
+
+ g_timer_destroy(timer);
+ return count - left;
+}
+
+static gboolean
+ctrlsocket_is_going(void)
+{
+ gboolean result;
+
+ g_mutex_lock(status_mutex);
+ result = going;
+ g_mutex_unlock(status_mutex);
+
+ return result;
+}
+
+static gpointer
+ctrlsocket_func(gpointer arg)
+{
+ fd_set set;
+ struct timeval tv;
+ struct sockaddr_un saddr;
+ gint fd, b, i;
+ guint32 info[3];
+ gint32 v[2];
+ PacketNode *pkt;
+ socklen_t len;
+ gfloat fval[11];
+
+ g_mutex_lock(status_mutex);
+ while (!started && going)
+ g_cond_wait(start_cond, status_mutex);
+ g_mutex_unlock(status_mutex);
+
+ while (ctrlsocket_is_going()) {
+ FD_ZERO(&set);
+ FD_SET(ctrl_fd, &set);
+ tv.tv_sec = 0;
+ tv.tv_usec = CTRLSOCKET_TIMEOUT;
+ len = sizeof(saddr);
+ if (select(ctrl_fd + 1, &set, NULL, NULL, &tv) <= 0)
+ continue;
+ if ((fd = accept(ctrl_fd, (struct sockaddr *) &saddr, &len)) == -1)
+ continue;
+
+ pkt = g_new0(PacketNode, 1);
+ if (read_all(fd, &pkt->hdr, sizeof(ClientPktHeader))
+ < sizeof(ClientPktHeader)) {
+ g_free(pkt);
+ continue;
+ }
+
+ if (pkt->hdr.data_length) {
+ size_t data_length = pkt->hdr.data_length;
+ pkt->data = g_malloc0(data_length);
+ if (read_all(fd, pkt->data, data_length) < data_length) {
+ g_free(pkt->data);
+ g_free(pkt);
+ g_warning("ctrlsocket_func(): Incomplete data packet dropped");
+ continue;
+ }
+ }
+
+ pkt->fd = fd;
+ switch (pkt->hdr.command) {
+ case CMD_GET_VERSION:
+ ctrl_write_gint(pkt->fd, 0x09a3);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_PLAYING:
+ ctrl_write_gboolean(pkt->fd, bmp_playback_get_playing());
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_PAUSED:
+ ctrl_write_gboolean(pkt->fd, bmp_playback_get_paused());
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_PLAYLIST_POS:
+ ctrl_write_gint(pkt->fd, playlist_get_position());
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_PLAYLIST_LENGTH:
+ ctrl_write_gint(pkt->fd, playlist_get_length());
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_PLAYQUEUE_LENGTH:
+ ctrl_write_gint(pkt->fd, playlist_queue_get_length());
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_OUTPUT_TIME:
+ if (bmp_playback_get_playing())
+ ctrl_write_gint(pkt->fd, bmp_playback_get_time());
+ else
+ ctrl_write_gint(pkt->fd, 0);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_VOLUME:
+ input_get_volume(&v[0], &v[1]);
+ ctrl_write_packet(pkt->fd, v, sizeof(v));
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_BALANCE:
+ input_get_volume(&v[0], &v[1]);
+ if (v[0] < 0 || v[1] < 0)
+ b = 0;
+ else if (v[0] > v[1])
+ b = -100 + ((v[1] * 100) / v[0]);
+ else if (v[1] > v[0])
+ b = 100 - ((v[0] * 100) / v[1]);
+ else
+ b = 0;
+ ctrl_write_gint(pkt->fd, b);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_SKIN:
+ ctrl_write_string(pkt->fd, bmp_active_skin->path);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_PLAYLIST_FILE:
+ if (pkt->data) {
+ gchar *filename;
+ filename = playlist_get_filename(*((guint32 *) pkt->data));
+ ctrl_write_string(pkt->fd, filename);
+ g_free(filename);
+ }
+ else
+ ctrl_write_string(pkt->fd, NULL);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_PLAYLIST_TITLE:
+ if (pkt->data) {
+ gchar *title;
+ title = playlist_get_songtitle(*((guint32 *) pkt->data));
+ ctrl_write_string(pkt->fd, title);
+ g_free(title);
+ }
+ else
+ ctrl_write_string(pkt->fd, NULL);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_PLAYLIST_TIME:
+ if (pkt->data)
+ ctrl_write_gint(pkt->fd,
+ playlist_get_songtime(*
+ ((guint32 *) pkt->
+ data)));
+ else
+ ctrl_write_gint(pkt->fd, -1);
+
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_INFO:
+ playback_get_sample_params(&info[0], &info[1], &info[2]);
+ ctrl_write_packet(pkt->fd, info, 3 * sizeof(gint));
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_EQ_DATA:
+ case CMD_SET_EQ_DATA:
+ /* obsolete */
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_PING:
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_PLAYLIST_ADD:
+ if (pkt->data) {
+ guint32 *dataptr = pkt->data;
+ while ((len = *dataptr) > 0) {
+ gchar *filename;
+
+ dataptr++;
+ filename = g_malloc0(len);
+ memcpy(filename, dataptr, len);
+
+ GDK_THREADS_ENTER();
+ playlist_add_url(filename);
+ GDK_THREADS_LEAVE();
+
+ g_free(filename);
+ dataptr += (len + 3) / 4;
+ }
+ }
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_PLAYLIST_ADD_URL_STRING:
+ GDK_THREADS_ENTER();
+ playlist_add_url(pkt->data);
+ GDK_THREADS_LEAVE();
+
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_PLAYLIST_INS_URL_STRING:
+ if (pkt->data) {
+ gint pos = *(gint *) pkt->data;
+ gchar *ptr = pkt->data;
+ ptr += sizeof(gint);
+ playlist_ins_url(ptr, pos);
+ }
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_PLAYLIST_DELETE:
+ GDK_THREADS_ENTER();
+ playlist_delete_index(*((guint32 *) pkt->data));
+ GDK_THREADS_LEAVE();
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_PLAYLIST_CLEAR:
+ GDK_THREADS_ENTER();
+ playlist_clear();
+ mainwin_clear_song_info();
+ mainwin_set_info_text();
+ GDK_THREADS_LEAVE();
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_MAIN_WIN:
+ ctrl_write_gboolean(pkt->fd, cfg.player_visible);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_PL_WIN:
+ ctrl_write_gboolean(pkt->fd, cfg.playlist_visible);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_EQ_WIN:
+ ctrl_write_gboolean(pkt->fd, cfg.equalizer_visible);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_REPEAT:
+ ctrl_write_gboolean(pkt->fd, cfg.repeat);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_SHUFFLE:
+ ctrl_write_gboolean(pkt->fd, cfg.shuffle);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_IS_ADVANCE:
+ ctrl_write_gboolean(pkt->fd, !cfg.no_playlist_advance);
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_EQ:
+ fval[0] = equalizerwin_get_preamp();
+ for (i = 0; i < 10; i++)
+ fval[i + 1] = equalizerwin_get_band(i);
+ ctrl_write_packet(pkt->fd, fval, 11 * sizeof(gfloat));
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_EQ_PREAMP:
+ ctrl_write_gfloat(pkt->fd, equalizerwin_get_preamp());
+ ctrl_ack_packet(pkt);
+ break;
+ case CMD_GET_EQ_BAND:
+ i = *((guint32 *) pkt->data);
+ ctrl_write_gfloat(pkt->fd, equalizerwin_get_band(i));
+ ctrl_ack_packet(pkt);
+ break;
+ default:
+ g_mutex_lock(packet_list_mutex);
+ packet_list = g_list_append(packet_list, pkt);
+ ctrl_write_packet(pkt->fd, NULL, 0);
+ close(pkt->fd);
+ g_mutex_unlock(packet_list_mutex);
+ break;
+ }
+ }
+ g_thread_exit(NULL);
+
+ /* Used to suppress GCC warnings. Sometimes you'd wish C has
+ native threading support :p */
+ return NULL;
+}
+
+void
+ctrlsocket_check(void)
+{
+ GList *pkt_list, *next;
+ PacketNode *pkt;
+ gpointer data;
+ guint32 v[2], i, num;
+ gboolean tbool;
+ gfloat *fval, f;
+
+ g_mutex_lock(packet_list_mutex);
+ for (pkt_list = packet_list; pkt_list; pkt_list = next) {
+ pkt = pkt_list->data;
+ data = pkt->data;
+
+ switch (pkt->hdr.command) {
+ case CMD_PLAY:
+ if (bmp_playback_get_paused())
+ bmp_playback_pause();
+ else if (playlist_get_length())
+ bmp_playback_initiate();
+ else
+ mainwin_eject_pushed();
+ break;
+ case CMD_PAUSE:
+ bmp_playback_pause();
+ break;
+ case CMD_STOP:
+ bmp_playback_stop();
+ mainwin_clear_song_info();
+ break;
+ case CMD_PLAY_PAUSE:
+ if (bmp_playback_get_playing())
+ bmp_playback_pause();
+ else
+ bmp_playback_initiate();
+ break;
+ case CMD_PLAYQUEUE_ADD:
+ num = *((guint32 *) data);
+ if (num < playlist_get_length())
+ playlist_queue_position(num);
+ break;
+ case CMD_PLAYQUEUE_REMOVE:
+ num = *((guint32 *) data);
+ if (num < playlist_get_length())
+ playlist_queue_remove(num);
+ break;
+ case CMD_SET_PLAYLIST_POS:
+ num = *((guint32 *) data);
+ if (num < playlist_get_length())
+ playlist_set_position(num);
+ break;
+ case CMD_JUMP_TO_TIME:
+ num = *((guint32 *) data);
+ if (playlist_get_current_length() > 0 &&
+ num < playlist_get_current_length())
+ bmp_playback_seek(num / 1000);
+ break;
+ case CMD_SET_VOLUME:
+ v[0] = ((guint32 *) data)[0];
+ v[1] = ((guint32 *) data)[1];
+ for (i = 0; i < 2; i++) {
+ if (v[i] > 100)
+ v[i] = 100;
+ }
+ input_set_volume(v[0], v[1]);
+ break;
+ case CMD_SET_SKIN:
+ bmp_active_skin_load(data);
+ break;
+ case CMD_PL_WIN_TOGGLE:
+ tbool = *((gboolean *) data);
+ if (tbool)
+ playlistwin_show();
+ else
+ playlistwin_hide();
+ break;
+ case CMD_EQ_WIN_TOGGLE:
+ tbool = *((gboolean *) data);
+ equalizerwin_show(!!tbool);
+ break;
+ case CMD_SHOW_PREFS_BOX:
+ show_prefs_window();
+ break;
+ case CMD_TOGGLE_AOT:
+ tbool = *((gboolean *) data);
+ mainwin_set_always_on_top(tbool);
+ break;
+ case CMD_SHOW_ABOUT_BOX:
+ break;
+ case CMD_EJECT:
+ mainwin_eject_pushed();
+ break;
+ case CMD_PLAYLIST_PREV:
+ playlist_prev();
+ break;
+ case CMD_PLAYLIST_NEXT:
+ playlist_next();
+ break;
+ case CMD_TOGGLE_REPEAT:
+ mainwin_repeat_pushed(!cfg.repeat);
+ break;
+ case CMD_TOGGLE_SHUFFLE:
+ mainwin_shuffle_pushed(!cfg.shuffle);
+ break;
+ case CMD_TOGGLE_ADVANCE:
+ /* FIXME: to be implemented */
+ break;
+ case CMD_MAIN_WIN_TOGGLE:
+ tbool = *((gboolean *) data);
+ mainwin_show(!!tbool);
+ break;
+ case CMD_SET_EQ:
+ if (pkt->hdr.data_length >= 11 * sizeof(gfloat)) {
+ fval = (gfloat *) data;
+ equalizerwin_set_preamp(fval[0]);
+ for (i = 0; i < 10; i++)
+ equalizerwin_set_band(i, fval[i + 1]);
+ }
+ break;
+ case CMD_SET_EQ_PREAMP:
+ f = *((gfloat *) data);
+ equalizerwin_set_preamp(f);
+ break;
+ case CMD_SET_EQ_BAND:
+ if (pkt->hdr.data_length >= sizeof(gint) + sizeof(gfloat)) {
+ i = *((gint *) data);
+ f = *((gfloat *) ((gchar *) data + sizeof(gint)));
+ equalizerwin_set_band(i, f);
+ }
+ break;
+ case CMD_QUIT:
+ /*
+ * We unlock the packet_list_mutex to
+ * avoid that cleanup_ctrlsocket() can
+ * deadlock, mainwin_quit_cb() will
+ * never return anyway, so this will
+ * work ok.
+ */
+ g_mutex_unlock(packet_list_mutex);
+ mainwin_quit_cb();
+ break;
+ case CMD_ACTIVATE:
+ gtk_window_present(GTK_WINDOW(mainwin));
+ break;
+ default:
+ g_message("Unknown socket command received");
+ break;
+ }
+ next = g_list_next(pkt_list);
+ packet_list = g_list_remove_link(packet_list, pkt_list);
+ g_list_free_1(pkt_list);
+ if (pkt->data)
+ g_free(pkt->data);
+ g_free(pkt);
+ }
+ g_mutex_unlock(packet_list_mutex);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/controlsocket.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,79 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef CONTROLSOCKET_H
+#define CONTROLSOCKET_H
+
+#include <glib.h>
+
+#define XMMS_PROTOCOL_VERSION 1
+
+#define CTRLSOCKET_NAME "xmms"
+#define CTRLSOCKET_IO_TIMEOUT_USEC 100000
+
+enum {
+ CMD_GET_VERSION, CMD_PLAYLIST_ADD, CMD_PLAY, CMD_PAUSE, CMD_STOP,
+ CMD_IS_PLAYING, CMD_IS_PAUSED, CMD_GET_PLAYLIST_POS,
+ CMD_SET_PLAYLIST_POS, CMD_GET_PLAYLIST_LENGTH, CMD_PLAYLIST_CLEAR,
+ CMD_GET_OUTPUT_TIME, CMD_JUMP_TO_TIME, CMD_GET_VOLUME,
+ CMD_SET_VOLUME, CMD_GET_SKIN, CMD_SET_SKIN, CMD_GET_PLAYLIST_FILE,
+ CMD_GET_PLAYLIST_TITLE, CMD_GET_PLAYLIST_TIME, CMD_GET_INFO,
+ CMD_GET_EQ_DATA, CMD_SET_EQ_DATA, CMD_PL_WIN_TOGGLE,
+ CMD_EQ_WIN_TOGGLE, CMD_SHOW_PREFS_BOX, CMD_TOGGLE_AOT,
+ CMD_SHOW_ABOUT_BOX, CMD_EJECT, CMD_PLAYLIST_PREV, CMD_PLAYLIST_NEXT,
+ CMD_PING, CMD_GET_BALANCE, CMD_TOGGLE_REPEAT, CMD_TOGGLE_SHUFFLE,
+ CMD_MAIN_WIN_TOGGLE, CMD_PLAYLIST_ADD_URL_STRING,
+ CMD_IS_EQ_WIN, CMD_IS_PL_WIN, CMD_IS_MAIN_WIN, CMD_PLAYLIST_DELETE,
+ CMD_IS_REPEAT, CMD_IS_SHUFFLE,
+ CMD_GET_EQ, CMD_GET_EQ_PREAMP, CMD_GET_EQ_BAND,
+ CMD_SET_EQ, CMD_SET_EQ_PREAMP, CMD_SET_EQ_BAND,
+ CMD_QUIT, CMD_PLAYLIST_INS_URL_STRING, CMD_PLAYLIST_INS, CMD_PLAY_PAUSE,
+ CMD_PLAYQUEUE_ADD, CMD_GET_PLAYQUEUE_LENGTH, CMD_PLAYQUEUE_REMOVE,
+ CMD_TOGGLE_ADVANCE, CMD_IS_ADVANCE,
+ CMD_ACTIVATE
+};
+
+
+typedef struct {
+ guint16 version;
+ guint16 command;
+ guint32 data_length;
+} ClientPktHeader;
+
+typedef struct {
+ guint16 version;
+ guint32 data_length;
+} ServerPktHeader;
+
+typedef struct {
+ ClientPktHeader hdr;
+ gpointer data;
+ gint fd;
+} PacketNode;
+
+
+gboolean ctrlsocket_setup(void);
+void ctrlsocket_start(void);
+void ctrlsocket_check(void);
+void ctrlsocket_cleanup(void);
+gint ctrlsocket_get_session_id(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/debug.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/debug.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/debug.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,44 @@
+#ifndef DEBUG_H
+#define DEBUG_H
+
+#include <glib.h>
+
+#ifdef NDEBUG
+
+/* void REQUIRE_LOCK(GMutex *m); */
+# define REQUIRE_LOCK(m)
+
+/* void REQUIRE_STR_UTF8(const gchar *str); */
+# define REQUIRE_STR_UTF8(str)
+
+/* void REQUIRE_STATIC_LOCK(GStaticMutex *m); */
+# define REQUIRE_STATIC_LOCK(m)
+
+#else /* !NDEBUG */
+
+/* void REQUIRE_LOCK(GMutex *m); */
+# define REQUIRE_LOCK(m) G_STMT_START { \
+ if (g_mutex_trylock(m)) { \
+ g_critical(G_STRLOC ": Mutex not locked!"); \
+ g_mutex_unlock(m); \
+ } \
+ } G_STMT_END
+
+/* void REQUIRE_STATIC_LOCK(GStaticMutex *m); */
+# define REQUIRE_STATIC_LOCK(m) G_STMT_START { \
+ if (G_TRYLOCK(m)) { \
+ g_critical(G_STRLOC ": Mutex not locked!"); \
+ G_UNLOCK(m); \
+ } \
+ } G_STMT_END
+
+/* void REQUIRE_STR_UTF8(const gchar *str); */
+# define REQUIRE_STR_UTF8(str) G_STMT_START { \
+ if (!g_utf_validate(str, -1, NULL)) \
+ g_warning(G_STRLOC ": String is not UTF-8!"); \
+ } G_STMT_END
+
+#endif /* NDEBUG */
+
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dnd.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dnd.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dnd.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <gtk/gtk.h>
+
+/* Designate dropped data types that we know and care about */
+enum {
+ BMP_DROP_STRING,
+ BMP_DROP_PLAINTEXT,
+ BMP_DROP_URLENCODED,
+ BMP_DROP_SKIN,
+ BMP_DROP_FONT
+};
+
+/* Drag data format listing for gtk_drag_dest_set() */
+static const GtkTargetEntry bmp_drop_types[] = {
+ {"text/plain", 0, BMP_DROP_PLAINTEXT},
+ {"text/uri-list", 0, BMP_DROP_URLENCODED},
+ {"STRING", 0, BMP_DROP_STRING},
+ {"interface/x-winamp-skin", 0, BMP_DROP_SKIN},
+ {"application/x-font-ttf", 0, BMP_DROP_FONT},
+};
+
+#define bmp_drag_dest_set(widget) \
+ gtk_drag_dest_set(widget, \
+ GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, \
+ bmp_drop_types, 5, \
+ GDK_ACTION_COPY | GDK_ACTION_MOVE)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,657 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "dock.h"
+
+#include <gdk/gdk.h>
+#include <stdlib.h>
+#include "main.h"
+
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+
+struct _DockedWindow {
+ GtkWindow *w;
+ gint offset_x, offset_y;
+};
+
+typedef struct _DockedWindow DockedWindow;
+
+
+static gint
+docked_list_compare(DockedWindow * a, DockedWindow * b)
+{
+ if (a->w == b->w)
+ return 0;
+ return 1;
+}
+
+static void
+snap_edge(gint * x, gint * y, gint w, gint h, gint bx, gint by,
+ gint bw, gint bh)
+{
+ gint sd = cfg.snap_distance;
+
+ if ((*x + w > bx - sd) && (*x + w < bx + sd) &&
+ (*y > by - h - sd) && (*y < by + bh + sd)) {
+ *x = bx - w;
+ if ((*y > by - sd) && (*y < by + sd))
+ *y = by;
+ if ((*y + h > by + bh - sd) && (*y + h < by + bh + sd))
+ *y = by + bh - h;
+ }
+ if ((*x > bx + bw - sd) && (*x < bx + bw + sd) &&
+ (*y > by - h - sd) && (*y < by + bh + sd)) {
+ *x = bx + bw;
+ if ((*y > by - sd) && (*y < by + sd))
+ *y = by;
+ if ((*y + h > by + bh - sd) && (*y + h < by + bh + sd))
+ *y = by + bh - h;
+ }
+}
+
+static void
+snap(gint * x, gint * y, gint w, gint h, gint bx, gint by, gint bw, gint bh)
+{
+ snap_edge(x, y, w, h, bx, by, bw, bh);
+ snap_edge(y, x, h, w, by, bx, bh, bw);
+}
+
+static void
+calc_snap_offset(GList * dlist, GList * wlist, gint x, gint y,
+ gint * off_x, gint * off_y)
+{
+ gint nx, ny, nw, nh, sx, sy, sw, sh;
+ GtkWindow *w;
+ GList *dnode, *wnode;
+ DockedWindow temp, *dw;
+
+
+ *off_x = 0;
+ *off_y = 0;
+
+ if (!cfg.snap_windows)
+ return;
+
+ /*
+ * FIXME: Why not break out of the loop when we find someting
+ * to snap to?
+ */
+ for (dnode = dlist; dnode; dnode = g_list_next(dnode)) {
+ dw = dnode->data;
+ gtk_window_get_size(dw->w, &nw, &nh);
+
+ nx = dw->offset_x + *off_x + x;
+ ny = dw->offset_y + *off_y + y;
+
+ /* Snap to screen edges */
+ if (abs(nx) < cfg.snap_distance)
+ *off_x -= nx;
+ if (abs(ny) < cfg.snap_distance)
+ *off_y -= ny;
+ if (abs(nx + nw - gdk_screen_width()) < cfg.snap_distance)
+ *off_x -= nx + nw - gdk_screen_width();
+ if (abs(ny + nh - gdk_screen_height()) < cfg.snap_distance)
+ *off_y -= ny + nh - gdk_screen_height();
+
+ /* Snap to other windows */
+ for (wnode = wlist; wnode; wnode = g_list_next(wnode)) {
+ temp.w = wnode->data;
+ if (g_list_find_custom
+ (dlist, &temp, (GCompareFunc) docked_list_compare))
+ /* These windows are already docked */
+ continue;
+
+ w = GTK_WINDOW(wnode->data);
+ gtk_window_get_position(w, &sx, &sy);
+ gtk_window_get_size(w, &sw, &sh);
+
+ nx = dw->offset_x + *off_x + x;
+ ny = dw->offset_y + *off_y + y;
+
+ snap(&nx, &ny, nw, nh, sx, sy, sw, sh);
+
+ *off_x += nx - (dw->offset_x + *off_x + x);
+ *off_y += ny - (dw->offset_y + *off_y + y);
+ }
+ }
+}
+
+
+static gboolean
+is_docked(gint a_x, gint a_y, gint a_w, gint a_h,
+ gint b_x, gint b_y, gint b_w, gint b_h)
+{
+ if (((a_x == b_x + b_w) || (a_x + a_w == b_x)) &&
+ (b_y + b_h >= a_y) && (b_y <= a_y + a_h))
+ return TRUE;
+
+ if (((a_y == b_y + b_h) || (a_y + a_h == b_y)) &&
+ (b_x >= a_x - b_w) && (b_x <= a_x + a_w))
+ return TRUE;
+
+ return FALSE;
+}
+
+/*
+ * Builds a list of all windows that are docked to the window "w".
+ * Recursively adds all windows that are docked to the windows that are
+ * docked to "w" and so on...
+ * FIXME: init_off_? ?
+ */
+
+static GList *
+get_docked_list(GList * dlist, GList * wlist, GtkWindow * w,
+ gint init_off_x, gint init_off_y)
+{
+ GList *node;
+ DockedWindow *dwin, temp;
+ gint w_x, w_y, w_width, w_height;
+ gint t_x, t_y, t_width, t_height;
+
+
+ gtk_window_get_position(w, &w_x, &w_y);
+ gtk_window_get_size(w, &w_width, &w_height);
+ if (!dlist) {
+ dwin = g_new0(DockedWindow, 1);
+ dwin->w = w;
+ dlist = g_list_append(dlist, dwin);
+ }
+
+ for (node = wlist; node; node = g_list_next(node)) {
+ temp.w = node->data;
+ if (g_list_find_custom
+ (dlist, &temp, (GCompareFunc) docked_list_compare))
+ continue;
+
+ gtk_window_get_position(GTK_WINDOW(node->data), &t_x, &t_y);
+ gtk_window_get_size(GTK_WINDOW(node->data), &t_width, &t_height);
+ if (is_docked
+ (w_x, w_y, w_width, w_height, t_x, t_y, t_width, t_height)) {
+ dwin = g_new0(DockedWindow, 1);
+ dwin->w = node->data;
+
+ dwin->offset_x = t_x - w_x + init_off_x;
+ dwin->offset_y = t_y - w_y + init_off_y;
+
+ dlist = g_list_append(dlist, dwin);
+
+ dlist =
+ get_docked_list(dlist, wlist, dwin->w, dwin->offset_x,
+ dwin->offset_y);
+ }
+ }
+ return dlist;
+}
+
+static void
+free_docked_list(GList * dlist)
+{
+ GList *node;
+
+ for (node = dlist; node; node = g_list_next(node))
+ g_free(node->data);
+ g_list_free(dlist);
+}
+
+static void
+docked_list_move(GList * list, gint x, gint y)
+{
+ GList *node;
+ DockedWindow *dw;
+
+ for (node = list; node; node = g_list_next(node)) {
+ dw = node->data;
+ gtk_window_move(dw->w, x + dw->offset_x, y + dw->offset_y);
+ gdk_flush();
+ }
+}
+
+static GList *
+shade_move_list(GList * list, GtkWindow * widget, gint offset)
+{
+ gint x, y, w, h;
+ GList *node;
+ DockedWindow *dw;
+
+ gtk_window_get_position(widget, &x, &y);
+ gtk_window_get_size(widget, &w, &h);
+
+
+ for (node = list; node;) {
+ gint dx, dy, dwidth, dheight;
+
+ dw = node->data;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ if (is_docked(x, y, w, h, dx, dy, dwidth, dheight) &&
+ ((dx + dwidth) > x && dx < (x + w))) {
+ list = g_list_remove_link(list, node);
+ g_list_free_1(node);
+
+ node = list = shade_move_list(list, dw->w, offset);
+ }
+ else
+ node = g_list_next(node);
+ }
+ gtk_window_move(widget, x, y + offset);
+ return list;
+}
+
+/*
+ * Builds a list of the windows in the list of DockedWindows "winlist"
+ * that are docked to the top or bottom of the window, and recursively
+ * adds all windows that are docked to the top or bottom of that window,
+ * and so on...
+ * Note: The data in "winlist" is not copied.
+ */
+static GList *
+find_shade_list(GtkWindow * widget, GList * winlist, GList * shade_list)
+{
+ gint x, y, w, h;
+ gint dx, dy, dwidth, dheight;
+ GList *node;
+
+ gtk_window_get_position(widget, &x, &y);
+ gtk_window_get_size(widget, &w, &h);
+ for (node = winlist; node; node = g_list_next(node)) {
+ DockedWindow *dw = node->data;
+ if (g_list_find_custom
+ (shade_list, dw, (GCompareFunc) docked_list_compare))
+ continue;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+
+ /* FIXME. Is the is_docked() necessary? */
+ if (is_docked(x, y, w, h, dx, dy, dwidth, dheight) &&
+ ((dx + dwidth) > x && dx < (x + w))) {
+ shade_list = g_list_append(shade_list, dw);
+ shade_list = find_shade_list(dw->w, winlist, shade_list);
+ }
+ }
+ return shade_list;
+}
+
+static void
+dock_window_resize(GtkWindow * widget, gint new_w, gint new_h, gint w, gint h)
+{
+ gdk_window_set_hints(GTK_WIDGET(widget)->window, 0, 0, MIN(w, new_w),
+ MIN(h, new_h), MAX(w, new_w), MAX(h, new_h),
+ GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
+ gdk_window_resize(GTK_WIDGET(widget)->window, new_w, new_h);
+ gdk_window_set_hints(GTK_WIDGET(widget)->window, 0, 0, new_w, new_h,
+ new_w, new_h, GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
+}
+
+void
+dock_shade(GList * window_list, GtkWindow * widget, gint new_h)
+{
+ gint x, y, w, h, off_y, orig_off_y;
+ GList *node, *docked_list, *slist;
+ DockedWindow *dw;
+
+ gtk_window_get_position(widget, &x, &y);
+ gtk_window_get_size(widget, &w, &h);
+
+ if (cfg.show_wm_decorations) {
+ dock_window_resize(widget, w, new_h, w, h);
+ return;
+ }
+
+ docked_list = get_docked_list(NULL, window_list, widget, 0, 0);
+ slist = find_shade_list(widget, docked_list, NULL);
+
+ off_y = new_h - h;
+ do {
+ orig_off_y = off_y;
+ for (node = slist; node; node = g_list_next(node)) {
+ gint dx, dy, dwidth, dheight;
+
+ dw = node->data;
+ if (dw->w == widget)
+ continue;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ if ((dy >= y) && ((dy + off_y + dheight) > gdk_screen_height()))
+ off_y -= (dy + off_y + dheight) - gdk_screen_height();
+ else if ((dy >= y) && ((dy + dheight) == gdk_screen_height()))
+ off_y = 0;
+
+ if (((dy >= y) && ((dy + off_y) < 0)))
+ off_y -= dy + off_y;
+ if ((dy < y) && ((dy + (off_y - (new_h - h))) < 0))
+ off_y -= dy + (off_y - (new_h - h));
+ }
+ } while (orig_off_y != off_y);
+ if (slist) {
+ GList *mlist = g_list_copy(slist);
+
+ /* Remove this widget from the list */
+ for (node = mlist; node; node = g_list_next(node)) {
+ dw = node->data;
+ if (dw->w == widget) {
+ mlist = g_list_remove_link(mlist, node);
+ g_list_free_1(node);
+ break;
+ }
+ }
+ for (node = mlist; node;) {
+ GList *temp;
+ gint dx, dy, dwidth, dheight;
+
+ dw = node->data;
+
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ /*
+ * Find windows that are directly docked to this window,
+ * move it, and any windows docked to that window again
+ */
+ if (is_docked(x, y, w, h, dx, dy, dwidth, dheight) &&
+ ((dx + dwidth) > x && dx < (x + w))) {
+ mlist = g_list_remove_link(mlist, node);
+ g_list_free_1(node);
+ if (dy > y)
+ temp = shade_move_list(mlist, dw->w, off_y);
+ else if (off_y - (new_h - h) != 0)
+ temp = shade_move_list(mlist, dw->w, off_y - (new_h - h));
+ else
+ temp = mlist;
+ node = mlist = temp;
+ }
+ else
+ node = g_list_next(node);
+ }
+ g_list_free(mlist);
+ }
+ g_list_free(slist);
+ free_docked_list(docked_list);
+ gtk_window_move(widget, x, y + off_y - (new_h - h));
+ dock_window_resize(widget, w, new_h, w, h);
+}
+
+static GList *
+resize_move_list(GList * list, GtkWindow * widget,
+ gint offset_x, gint offset_y)
+{
+ gint x, y, w, h;
+ GList *node;
+ DockedWindow *dw;
+
+ gtk_window_get_position(widget, &x, &y);
+ gtk_window_get_size(widget, &w, &h);
+
+
+ for (node = list; node;) {
+ gint dx, dy, dwidth, dheight;
+ dw = node->data;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ if (is_docked(x, y, w, h, dx, dy, dwidth, dheight)) {
+
+ list = g_list_remove_link(list, node);
+ g_list_free_1(node);
+ node = list = resize_move_list(list, dw->w, offset_x, offset_y);
+ }
+ else
+ node = g_list_next(node);
+ }
+ gtk_window_move(widget, x + offset_x, y + offset_y);
+ return list;
+}
+
+static GList *
+resize_calc_offset(GList * list, GtkWindow * widget,
+ gint offset_x, gint offset_y,
+ gint * goffset_x, gint * goffset_y)
+{
+ gint x, y, w, h;
+ GList *node;
+ DockedWindow *dw;
+
+ gtk_window_get_position(widget, &x, &y);
+ gtk_window_get_size(widget, &w, &h);
+
+
+ for (node = list; node;) {
+ gint dx, dy, dwidth, dheight;
+ dw = node->data;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ if (is_docked(x, y, w, h, dx, dy, dwidth, dheight)) {
+ if (dx + offset_x + dwidth > gdk_screen_width()) {
+ offset_x -= dx + offset_x + dwidth - gdk_screen_width();
+ (*goffset_x) -= dx + offset_x + dwidth - gdk_screen_width();
+ }
+ if (dy + offset_y + dheight > gdk_screen_height()) {
+ offset_y -= dy + offset_y + dheight - gdk_screen_height();
+ (*goffset_y) -= dy + offset_y + dheight - gdk_screen_height();
+ }
+ list = g_list_remove_link(list, node);
+ g_list_free_1(node);
+ node = list =
+ resize_calc_offset(list, dw->w, offset_x, offset_y,
+ goffset_x, goffset_y);
+ }
+ else
+ node = g_list_next(node);
+ }
+ return list;
+}
+
+void
+dock_resize(GList * window_list, GtkWindow * widget, gint new_w, gint new_h)
+{
+ gint x, y, w, h;
+ gint dx, dy, dwidth, dheight;
+ gint off_x, off_y;
+ GList *list, *dlist = NULL, *tlist = NULL, *mlist = NULL, *node;
+ DockedWindow *dw;
+
+ gtk_window_get_position(widget, &x, &y);
+ gtk_window_get_size(widget, &w, &h);
+ if (cfg.show_wm_decorations) {
+ dock_window_resize(widget, new_w, new_h, w, h);
+ return;
+ }
+
+ list = get_docked_list(NULL, window_list, widget, 0, 0);
+
+ off_x = 0;
+ off_y = 0;
+
+ for (node = list; node; node = g_list_next(node)) {
+ dw = node->data;
+ if (dw->w != widget) {
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ if (is_docked(x, y, w, h, dx, dy, dwidth, dheight))
+ dlist = g_list_append(dlist, dw);
+ else
+ mlist = g_list_append(mlist, dw);
+ }
+ }
+ tlist = g_list_copy(mlist);
+ for (node = dlist; node; node = g_list_next(node)) {
+ gint doff_x, doff_y;
+ dw = node->data;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ gtk_window_get_size(dw->w, &dwidth, &dheight);
+ if (dx - x - w == 0)
+ doff_x = (x + off_x + new_w) - dx;
+ else
+ doff_x = (x + off_x + (dx - x)) - dx;
+
+ if (dy - y - h == 0)
+ doff_y = (y + off_y + new_h) - dy;
+ else
+ doff_y = (y + off_y + (dy - y)) - dy;
+
+ if (dx + doff_x + dwidth > gdk_screen_width()) {
+ off_x -= dx + doff_x + dwidth - gdk_screen_width();
+ doff_x -= dx + doff_x + dwidth - gdk_screen_width();
+ }
+ if (dy + doff_y + dheight > gdk_screen_height()) {
+ off_y -= dy + doff_y + dheight - gdk_screen_height();
+ doff_y -= dy + doff_y + dheight - gdk_screen_height();
+ }
+ tlist =
+ resize_calc_offset(tlist, dw->w, doff_x, doff_y, &off_x, &off_y);
+ }
+ if ((x + off_x + new_w) > gdk_screen_width())
+ off_x -= x + off_x + new_w - gdk_screen_width();
+ if ((y + off_y + new_h) > gdk_screen_height())
+ off_y -= y + off_y + new_h - gdk_screen_height();
+
+ g_list_free(tlist);
+ for (node = dlist; node; node = g_list_next(node)) {
+ gint doff_x, doff_y;
+ dw = node->data;
+ gtk_window_get_position(dw->w, &dx, &dy);
+ if (dx - x - w == 0)
+ doff_x = (x + off_x + new_w) - dx;
+ else
+ doff_x = (x + off_x + (dx - x)) - dx;
+
+ if (dy - y - h == 0)
+ doff_y = (y + off_y + new_h) - dy;
+ else
+ doff_y = (y + off_y + (dy - y)) - dy;
+ mlist = resize_move_list(mlist, dw->w, doff_x, doff_y);
+ gtk_window_move(GTK_WINDOW(dw->w), dx + doff_x, dy + doff_y);
+ }
+
+
+ gtk_window_move(widget, x + off_x, y + off_y);
+ dock_window_resize(widget, new_w, new_h, w, h);
+}
+
+void
+dock_move_press(GList * window_list, GtkWindow * w,
+ GdkEventButton * event, gboolean move_list)
+{
+ gint mx, my;
+ DockedWindow *dwin;
+
+ if (cfg.show_wm_decorations)
+ return;
+
+ gtk_window_present(w);
+ gdk_window_get_pointer(GTK_WIDGET(w)->window, &mx, &my, NULL);
+ gtk_object_set_data(GTK_OBJECT(w), "move_offset_x", GINT_TO_POINTER(mx));
+ gtk_object_set_data(GTK_OBJECT(w), "move_offset_y", GINT_TO_POINTER(my));
+ if (move_list)
+ gtk_object_set_data(GTK_OBJECT(w), "docked_list",
+ get_docked_list(NULL, window_list, w, 0, 0));
+ else {
+ dwin = g_new0(DockedWindow, 1);
+ dwin->w = w;
+ gtk_object_set_data(GTK_OBJECT(w), "docked_list",
+ g_list_append(NULL, dwin));
+ }
+ gtk_object_set_data(GTK_OBJECT(w), "window_list", window_list);
+ gtk_object_set_data(GTK_OBJECT(w), "is_moving", GINT_TO_POINTER(1));
+}
+
+void
+dock_move_motion(GtkWindow * w, GdkEventMotion * event)
+{
+ gint offset_x, offset_y, win_x, win_y, x, y, mx, my;
+ GList *dlist;
+ GList *window_list;
+ XEvent ev;
+
+ gdk_flush();
+ while (XCheckTypedEvent(GDK_DISPLAY(), MotionNotify, &ev));
+
+ if (!gtk_object_get_data(GTK_OBJECT(w), "is_moving"))
+ return;
+
+ offset_x =
+ GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(w), "move_offset_x"));
+ offset_y =
+ GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(w), "move_offset_y"));
+ dlist = gtk_object_get_data(GTK_OBJECT(w), "docked_list");
+ window_list = gtk_object_get_data(GTK_OBJECT(w), "window_list");
+
+ gtk_window_get_position(w, &win_x, &win_y);
+
+ gdk_window_get_pointer(NULL, &mx, &my, NULL);
+
+ x = mx - offset_x;
+ y = my - offset_y;
+
+ calc_snap_offset(dlist, window_list, x, y, &offset_x, &offset_y);
+ x += offset_x;
+ y += offset_y;
+
+ docked_list_move(dlist, x, y);
+}
+
+void
+dock_move_release(GtkWindow * w)
+{
+ GList *dlist;
+ gtk_object_remove_data(GTK_OBJECT(w), "is_moving");
+ gtk_object_remove_data(GTK_OBJECT(w), "move_offset_x");
+ gtk_object_remove_data(GTK_OBJECT(w), "move_offset_y");
+ if ((dlist = gtk_object_get_data(GTK_OBJECT(w), "docked_list")) != NULL)
+ free_docked_list(dlist);
+ gtk_object_remove_data(GTK_OBJECT(w), "docked_list");
+ gtk_object_remove_data(GTK_OBJECT(w), "window_list");
+}
+
+gboolean
+dock_is_moving(GtkWindow * w)
+{
+ if (gtk_object_get_data(GTK_OBJECT(w), "is_moving"))
+ return TRUE;
+ return FALSE;
+}
+
+GList *
+dock_add_window(GList * list, GtkWindow * window)
+{
+ return g_list_append(list, window);
+}
+
+GList *
+dock_remove_window(GList * list, GtkWindow * window)
+{
+ return g_list_remove(list, window);
+}
+
+GList *
+dock_window_set_decorated(GList * list, GtkWindow * window,
+ gboolean decorated)
+{
+ if (gtk_window_get_decorated(window) == decorated)
+ return list;
+
+ if (decorated)
+ list = dock_remove_window(list, window);
+ else
+ list = dock_add_window(list, window);
+
+ gtk_window_set_decorated(window, decorated);
+
+ return list;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/dock.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef DOCK_H
+#define DOCK_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+void dock_set_uposition(GtkWindow * widget, gint x, gint y);
+GList *dock_add_window(GList * window_list, GtkWindow * window);
+GList *dock_remove_window(GList * window_list, GtkWindow * window);
+void dock_move_press(GList * window_list, GtkWindow * w,
+ GdkEventButton * event, gboolean move_list);
+void dock_move_motion(GtkWindow * w, GdkEventMotion * event);
+void dock_move_release(GtkWindow * w);
+void dock_get_widget_pos(GtkWindow * w, gint * x, gint * y);
+gboolean dock_is_moving(GtkWindow * w);
+void dock_shade(GList * window_list, GtkWindow * widget, gint new_h);
+void dock_resize(GList * window_list, GtkWindow * w, gint new_w, gint new_h);
+
+GList *dock_window_set_decorated(GList * list, GtkWindow * window,
+ gboolean decorated);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,217 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "effect.h"
+
+#include <glib.h>
+#include <string.h>
+#include "plugin.h"
+
+EffectPluginData ep_data = {
+ NULL,
+ NULL,
+ FALSE,
+ FALSE
+};
+
+static gint
+effect_do_mod_samples(gpointer * data, gint length,
+ AFormat fmt, gint srate, gint nch)
+{
+ GList *l = ep_data.enabled_list;
+
+ while (l) {
+ if (l->data) {
+ EffectPlugin *ep = l->data;
+ if (ep->mod_samples)
+ length = ep->mod_samples(data, length, fmt, srate, nch);
+ }
+ l = g_list_next(l);
+ }
+
+ return length;
+}
+
+static void
+effect_do_query_format(AFormat * fmt, gint * rate, gint * nch)
+{
+ GList *l = ep_data.enabled_list;
+
+ while (l) {
+ if (l->data) {
+ EffectPlugin *ep = l->data;
+ if (ep->query_format)
+ ep->query_format(fmt, rate, nch);
+ }
+ l = g_list_next(l);
+ }
+}
+
+static EffectPlugin pseudo_effect_plugin = {
+ NULL,
+ NULL,
+ "XMMS Multiple Effects Support",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ effect_do_mod_samples,
+ effect_do_query_format
+};
+
+/* get_current_effect_plugin() and effects_enabled() are still to be used by
+ * output plugins as they were when we only supported one effects plugin at
+ * a time. We now had a pseudo-effects-plugin that chains all the enabled
+ * plugins. -- Jakdaw */
+
+EffectPlugin *
+get_current_effect_plugin(void)
+{
+ return &pseudo_effect_plugin;
+}
+
+gboolean
+effects_enabled(void)
+{
+ return TRUE;
+}
+
+GList *
+get_effect_enabled_list(void)
+{
+ return ep_data.enabled_list;
+}
+
+void
+effect_about(int i)
+{
+ EffectPlugin *effect;
+ GList *node = g_list_nth(ep_data.effect_list, i);
+ if (node) {
+ effect = node->data;
+ if (effect && effect->about)
+ effect->about();
+ }
+}
+
+void
+effect_configure(int i)
+{
+ GList *node = g_list_nth(ep_data.effect_list, i);
+ EffectPlugin *effect;
+ if (node) {
+ effect = node->data;
+ if (effect && effect->configure)
+ effect->configure();
+ }
+}
+
+
+void
+enable_effect_plugin(int i, gboolean enable)
+{
+ GList *node = g_list_nth(ep_data.effect_list, i);
+ EffectPlugin *ep;
+
+ if (!node || !(node->data))
+ return;
+ ep = node->data;
+
+ if (enable && !g_list_find(ep_data.enabled_list, ep)) {
+ ep_data.enabled_list = g_list_append(ep_data.enabled_list, ep);
+ if (ep->init)
+ ep->init();
+ }
+ else if (!enable && g_list_find(ep_data.enabled_list, ep)) {
+ ep_data.enabled_list = g_list_remove(ep_data.enabled_list, ep);
+ if (ep->cleanup)
+ ep->cleanup();
+ }
+}
+
+GList *
+get_effect_list(void)
+{
+ return ep_data.effect_list;
+}
+
+gboolean
+effect_enabled(int i)
+{
+ return (g_list_find
+ (ep_data.enabled_list,
+ (EffectPlugin *) g_list_nth(ep_data.effect_list,
+ i)->data) ? TRUE : FALSE);
+}
+
+gchar *
+effect_stringify_enabled_list(void)
+{
+ gchar *enalist = NULL, *temp, *temp2;
+ GList *node = ep_data.enabled_list;
+
+ if (g_list_length(node)) {
+ enalist =
+ g_strdup(g_basename(((EffectPlugin *) node->data)->filename));
+ node = node->next;
+ while (node) {
+ temp = enalist;
+ temp2 =
+ g_strdup(g_basename(((EffectPlugin *) node->data)->filename));
+ enalist = g_strconcat(temp, ",", temp2, NULL);
+ g_free(temp);
+ g_free(temp2);
+ node = node->next;
+ }
+ }
+ return enalist;
+}
+
+void
+effect_enable_from_stringified_list(const gchar * list)
+{
+ gchar **plugins, *base;
+ GList *node;
+ gint i;
+ EffectPlugin *ep;
+
+ if (!list || !strcmp(list, ""))
+ return;
+ plugins = g_strsplit(list, ",", 0);
+ for (i = 0; plugins[i]; i++) {
+ node = ep_data.effect_list;
+ while (node) {
+ base =
+ g_path_get_basename((char *) ((EffectPlugin *) node->
+ data)->filename);
+ if (!strcmp(plugins[i], base)) {
+ ep = node->data;
+ ep_data.enabled_list =
+ g_list_append(ep_data.enabled_list, ep);
+ if (ep->init)
+ ep->init();
+ }
+ g_free(base);
+ node = node->next;
+ }
+ }
+ g_strfreev(plugins);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/effect.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,48 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef EFFECT_H
+#define EFFECT_H
+
+#include <glib.h>
+
+typedef struct _EffectPluginData EffectPluginData;
+
+struct _EffectPluginData {
+ GList *effect_list;
+ GList *enabled_list;
+ /* FIXME: Needed? */
+ gboolean playing;
+ gboolean paused;
+};
+
+GList *get_effect_list(void);
+void effect_about(gint i);
+void effect_configure(gint i);
+GList *get_effect_enabled_list(void);
+void enable_effect_plugin(gint i, gboolean enable);
+gboolean effect_enabled(gint i);
+gchar *effect_stringify_enabled_list(void);
+void effect_enable_from_stringified_list(const gchar * list);
+
+extern EffectPluginData ep_data;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,149 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "eq_graph.h"
+
+#include <glib.h>
+
+#include "main.h"
+#include "skin.h"
+
+void
+init_spline(gfloat * x, gfloat * y, gint n, gfloat * y2)
+{
+ gint i, k;
+ gfloat p, qn, sig, un, *u;
+
+ u = (gfloat *) g_malloc(n * sizeof(gfloat));
+
+ y2[0] = u[0] = 0.0;
+
+ for (i = 1; i < n - 1; i++) {
+ sig = ((gfloat) x[i] - x[i - 1]) / ((gfloat) x[i + 1] - x[i - 1]);
+ p = sig * y2[i - 1] + 2.0;
+ y2[i] = (sig - 1.0) / p;
+ u[i] =
+ (((gfloat) y[i + 1] - y[i]) / (x[i + 1] - x[i])) -
+ (((gfloat) y[i] - y[i - 1]) / (x[i] - x[i - 1]));
+ u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
+ }
+ qn = un = 0.0;
+
+ y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0);
+ for (k = n - 2; k >= 0; k--)
+ y2[k] = y2[k] * y2[k + 1] + u[k];
+ g_free(u);
+}
+
+gfloat
+eval_spline(gfloat xa[], gfloat ya[], gfloat y2a[], gint n, gfloat x)
+{
+ gint klo, khi, k;
+ gfloat h, b, a;
+
+ klo = 0;
+ khi = n - 1;
+ while (khi - klo > 1) {
+ k = (khi + klo) >> 1;
+ if (xa[k] > x)
+ khi = k;
+ else
+ klo = k;
+ }
+ h = xa[khi] - xa[klo];
+ a = (xa[khi] - x) / h;
+ b = (x - xa[klo]) / h;
+ return (a * ya[klo] + b * ya[khi] +
+ ((a * a * a - a) * y2a[klo] +
+ (b * b * b - b) * y2a[khi]) * (h * h) / 6.0);
+}
+
+void
+eqgraph_draw(Widget * w)
+{
+ EqGraph *eg = (EqGraph *) w;
+ GdkPixmap *obj;
+ GdkColor col;
+ guint32 cols[19];
+ gint i, y, ymin, ymax, py = 0;
+ gfloat x[] = { 0, 11, 23, 35, 47, 59, 71, 83, 97, 109 }, yf[10];
+
+ /*
+ * This avoids the init_spline() function to be inlined.
+ * Inlining the function caused troubles when compiling with
+ * `-O' (at least on FreeBSD).
+ */
+ void (*__init_spline) (gfloat *, gfloat *, gint, gfloat *) = init_spline;
+
+ obj = eg->eg_widget.parent;
+ skin_draw_pixmap(bmp_active_skin, obj, eg->eg_widget.gc, SKIN_EQMAIN,
+ 0, 294, eg->eg_widget.x, eg->eg_widget.y,
+ eg->eg_widget.width, eg->eg_widget.height);
+ skin_draw_pixmap(bmp_active_skin, obj, eg->eg_widget.gc, SKIN_EQMAIN,
+ 0, 314, eg->eg_widget.x,
+ eg->eg_widget.y + 9 +
+ ((cfg.equalizer_preamp * 9) / 20),
+ eg->eg_widget.width, 1);
+
+ skin_get_eq_spline_colors(bmp_active_skin, cols);
+
+ __init_spline(x, cfg.equalizer_bands, 10, yf);
+ for (i = 0; i < 109; i++) {
+ y = 9 -
+ (gint) ((eval_spline(x, cfg.equalizer_bands, yf, 10, i) *
+ 9.0) / 20.0);
+ if (y < 0)
+ y = 0;
+ if (y > 18)
+ y = 18;
+ if (!i)
+ py = y;
+ if (y < py) {
+ ymin = y;
+ ymax = py;
+ }
+ else {
+ ymin = py;
+ ymax = y;
+ }
+ py = y;
+ for (y = ymin; y <= ymax; y++) {
+ col.pixel = cols[y];
+ gdk_gc_set_foreground(eg->eg_widget.gc, &col);
+ gdk_draw_point(obj, eg->eg_widget.gc, eg->eg_widget.x + i + 2,
+ eg->eg_widget.y + y);
+ }
+ }
+}
+
+EqGraph *
+create_eqgraph(GList ** wlist, GdkPixmap * parent, GdkGC * gc, gint x, gint y)
+{
+ EqGraph *eg;
+
+ eg = g_new0(EqGraph, 1);
+ widget_init(&eg->eg_widget, parent, gc, x, y, 113, 19, TRUE);
+ eg->eg_widget.draw = eqgraph_draw;
+
+ widget_list_add(wlist, WIDGET(eg));
+
+ return eg;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_graph.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,40 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef EQ_GRAPH_H
+#define EQ_GRAPH_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+
+#define EQ_GRAPH(x) ((EqGraph *)(x))
+struct _EqGraph {
+ Widget eg_widget;
+};
+
+typedef struct _EqGraph EqGraph;
+
+EqGraph *create_eqgraph(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,235 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "eq_slider.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+#include "equalizer.h"
+#include "mainwin.h"
+#include "skin.h"
+
+void
+eqslider_set_position(EqSlider * es,
+ gfloat pos)
+{
+ es->es_position = 25 - (gint) ((pos * 25.0) / 20.0);
+
+ if (es->es_position < 0)
+ es->es_position = 0;
+
+ if (es->es_position > 50)
+ es->es_position = 50;
+
+ if (es->es_position >= 24 && es->es_position <= 26)
+ es->es_position = 25;
+
+ widget_draw(WIDGET(es));
+}
+
+gfloat
+eqslider_get_position(EqSlider * es)
+{
+ return 20.0 - (((gfloat) es->es_position * 20.0) / 25.0);
+}
+
+void
+eqslider_draw(Widget * w)
+{
+ EqSlider *es = (EqSlider *) w;
+ GdkPixmap *obj;
+ SkinPixmapId src;
+ gint frame;
+
+ src = SKIN_EQMAIN;
+ obj = es->es_widget.parent;
+
+ frame = 27 - ((es->es_position * 27) / 50);
+ if (frame < 14)
+ skin_draw_pixmap(bmp_active_skin, obj, es->es_widget.gc, src,
+ (frame * 15) + 13, 164, es->es_widget.x,
+ es->es_widget.y, es->es_widget.width,
+ es->es_widget.height);
+ else
+ skin_draw_pixmap(bmp_active_skin, obj, es->es_widget.gc, src,
+ ((frame - 14) * 15) + 13, 229, es->es_widget.x,
+ es->es_widget.y, es->es_widget.width,
+ es->es_widget.height);
+ if (es->es_isdragging)
+ skin_draw_pixmap(bmp_active_skin, obj, es->es_widget.gc, src, 0,
+ 176, es->es_widget.x + 1,
+ es->es_widget.y + es->es_position, 11, 11);
+ else
+ skin_draw_pixmap(bmp_active_skin, obj, es->es_widget.gc, src, 0,
+ 164, es->es_widget.x + 1,
+ es->es_widget.y + es->es_position, 11, 11);
+}
+
+void
+eqslider_set_mainwin_text(EqSlider * es)
+{
+ gint band = 0;
+ const gchar *bandname[11] = { N_("PREAMP"), N_("60HZ"), N_("170HZ"),
+ N_("310HZ"), N_("600HZ"), N_("1KHZ"),
+ N_("3KHZ"), N_("6KHZ"), N_("12KHZ"),
+ N_("14KHZ"), N_("16KHZ")
+ };
+ gchar *tmp;
+
+ if (es->es_widget.x > 21)
+ band = ((es->es_widget.x - 78) / 18) + 1;
+
+ tmp =
+ g_strdup_printf("EQ: %s: %+.1f DB", _(bandname[band]),
+ eqslider_get_position(es));
+ mainwin_lock_info_text(tmp);
+ g_free(tmp);
+}
+
+void
+eqslider_button_press_cb(GtkWidget * w,
+ GdkEventButton * event,
+ gpointer data)
+{
+ EqSlider *es = EQ_SLIDER(data);
+ gint y;
+
+ if (widget_contains(&es->es_widget, event->x, event->y)) {
+ if (event->button == 1) {
+ y = event->y - es->es_widget.y;
+ es->es_isdragging = TRUE;
+ if (y >= es->es_position && y < es->es_position + 11)
+ es->es_drag_y = y - es->es_position;
+ else {
+ es->es_position = y - 5;
+ es->es_drag_y = 5;
+ if (es->es_position < 0)
+ es->es_position = 0;
+ if (es->es_position > 50)
+ es->es_position = 50;
+ if (es->es_position >= 24 && es->es_position <= 26)
+ es->es_position = 25;
+ equalizerwin_eq_changed();
+ }
+
+ eqslider_set_mainwin_text(es);
+ widget_draw(WIDGET(es));
+ }
+ if (event->button == 4) {
+ es->es_position -= 2;
+ if (es->es_position < 0)
+ es->es_position = 0;
+ equalizerwin_eq_changed();
+ widget_draw(WIDGET(es));
+ }
+ }
+}
+
+void
+eqslider_mouse_scroll_cb(GtkWidget * w,
+ GdkEventScroll * event,
+ gpointer data)
+{
+ EqSlider *es = EQ_SLIDER(data);
+
+ if (!widget_contains(&es->es_widget, event->x, event->y))
+ return;
+
+ if (event->direction == GDK_SCROLL_UP) {
+ es->es_position -= 2;
+
+ if (es->es_position < 0)
+ es->es_position = 0;
+
+ equalizerwin_eq_changed();
+ widget_draw(WIDGET(es));
+ }
+ else {
+ es->es_position += 2;
+
+ if (es->es_position > 50)
+ es->es_position = 50;
+
+ equalizerwin_eq_changed();
+ widget_draw(WIDGET(es));
+ }
+}
+
+void
+eqslider_motion_cb(GtkWidget * w,
+ GdkEventMotion * event,
+ gpointer data)
+{
+ EqSlider *es = EQ_SLIDER(data);
+ gint y;
+
+ y = event->y - es->es_widget.y;
+ if (es->es_isdragging) {
+ es->es_position = y - es->es_drag_y;
+ if (es->es_position < 0)
+ es->es_position = 0;
+ if (es->es_position > 50)
+ es->es_position = 50;
+ if (es->es_position >= 24 && es->es_position <= 26)
+ es->es_position = 25;
+ equalizerwin_eq_changed();
+ eqslider_set_mainwin_text(es);
+ widget_draw(WIDGET(es));
+ }
+}
+
+void
+eqslider_button_release_cb(GtkWidget * w,
+ GdkEventButton * event,
+ gpointer data)
+{
+ EqSlider *es = EQ_SLIDER(data);
+
+ if (es->es_isdragging) {
+ es->es_isdragging = FALSE;
+ mainwin_release_info_text();
+ widget_draw(WIDGET(es));
+ }
+}
+
+EqSlider *
+create_eqslider(GList ** wlist,
+ GdkPixmap * parent,
+ GdkGC * gc,
+ gint x, gint y)
+{
+ EqSlider *es;
+
+ es = g_new0(EqSlider, 1);
+ widget_init(&es->es_widget, parent, gc, x, y, 14, 63, TRUE);
+ es->es_widget.button_press_cb = eqslider_button_press_cb;
+ es->es_widget.button_release_cb = eqslider_button_release_cb;
+ es->es_widget.motion_cb = eqslider_motion_cb;
+ es->es_widget.draw = eqslider_draw;
+ es->es_widget.mouse_scroll_cb = eqslider_mouse_scroll_cb;
+
+ widget_list_add(wlist, WIDGET(es));
+
+ return es;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/eq_slider.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,44 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef EQ_SLIDER_H
+#define EQ_SLIDER_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+
+#define EQ_SLIDER(x) ((EqSlider *)(x))
+struct _EqSlider {
+ Widget es_widget;
+ gint es_position;
+ gboolean es_isdragging;
+ gint es_drag_y;
+};
+
+typedef struct _EqSlider EqSlider;
+
+EqSlider *create_eqslider(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y);
+void eqslider_set_position(EqSlider * es, gfloat pos);
+gfloat eqslider_get_position(EqSlider * es);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1709 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "equalizer.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+
+#include "dock.h"
+#include "eq_graph.h"
+#include "eq_slider.h"
+#include "hints.h"
+#include "hslider.h"
+#include "input.h"
+#include "main.h"
+#include "pbutton.h"
+#include "playlist.h"
+#include "playlistwin.h"
+#include "skin.h"
+#include "tbutton.h"
+#include "util.h"
+#include "output.h"
+
+#include "libbeep/rcfile.h"
+#include "libbeep/vfs.h"
+
+//#include "images/bmp_eq.xpm"
+
+
+enum PresetViewCols {
+ PRESET_VIEW_COL_NAME,
+ PRESET_VIEW_N_COLS
+};
+
+enum {
+ EQUALIZER_PRESETS_LOAD_PRESET,
+ EQUALIZER_PRESETS_LOAD_AUTOPRESET,
+ EQUALIZER_PRESETS_LOAD_DEFAULT,
+ EQUALIZER_PRESETS_LOAD_ZERO,
+ EQUALIZER_PRESETS_LOAD_FROM_FILE,
+ EQUALIZER_PRESETS_LOAD_FROM_WINAMPFILE,
+ EQUALIZER_PRESETS_IMPORT_WINAMPFILE,
+ EQUALIZER_PRESETS_SAVE_PRESET,
+ EQUALIZER_PRESETS_SAVE_AUTOPRESET,
+ EQUALIZER_PRESETS_SAVE_DEFAULT,
+ EQUALIZER_PRESETS_SAVE_TO_FILE,
+ EQUALIZER_PRESETS_SAVE_TO_WINAMPFILE,
+ EQUALIZER_PRESETS_DELETE_PRESET,
+ EQUALIZER_PRESETS_DELETE_AUTOPRESET
+};
+
+
+struct _EqualizerPreset {
+ gchar *name;
+ gfloat preamp, bands[10];
+};
+
+typedef struct _EqualizerPreset EqualizerPreset;
+
+
+GtkWidget *equalizerwin;
+
+static GtkWidget *equalizerwin_load_window = NULL;
+static GtkWidget *equalizerwin_load_auto_window = NULL;
+static GtkWidget *equalizerwin_save_window = NULL;
+static GtkWidget *equalizerwin_save_entry;
+static GtkWidget *equalizerwin_save_auto_window = NULL;
+static GtkWidget *equalizerwin_save_auto_entry;
+static GtkWidget *equalizerwin_delete_window = NULL;
+static GtkWidget *equalizerwin_delete_auto_window = NULL;
+
+static GdkPixmap *equalizerwin_bg;
+static GdkGC *equalizerwin_gc;
+
+static GList *equalizerwin_wlist = NULL;
+
+static GtkAccelGroup *equalizerwin_accel;
+
+static TButton *equalizerwin_on, *equalizerwin_auto;
+
+static PButton *equalizerwin_presets, *equalizerwin_shade;
+PButton *equalizerwin_close;
+static EqGraph *equalizerwin_graph;
+static EqSlider *equalizerwin_preamp, *equalizerwin_bands[10];
+static HSlider *equalizerwin_volume, *equalizerwin_balance;
+
+static GtkItemFactory *equalizerwin_presets_menu;
+
+static GList *equalizer_presets = NULL, *equalizer_auto_presets = NULL;
+
+
+static void equalizerwin_presets_menu_cb(gpointer cb_data, guint action,
+ GtkWidget * w);
+
+static GtkItemFactoryEntry equalizerwin_presets_menu_entries[] = {
+ {N_("/Load"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Load/Preset"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_LOAD_PRESET, "<Item>"},
+ {N_("/Load/Auto-load preset"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_LOAD_AUTOPRESET, "<Item>"},
+ {N_("/Load/Default"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_LOAD_DEFAULT, "<Item>"},
+ {"/Load/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Load/Zero"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_LOAD_ZERO, "<Item>"},
+ {"/Load/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Load/From file"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_LOAD_FROM_FILE, "<Item>"},
+ {N_("/Load/From WinAMP EQF file"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_LOAD_FROM_WINAMPFILE, "<Item>"},
+ {N_("/Import"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Import/WinAMP Presets"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_IMPORT_WINAMPFILE, "<Item>"},
+ {N_("/Save"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Save/Preset"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_SAVE_PRESET, "<Item>"},
+ {N_("/Save/Auto-load preset"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_SAVE_AUTOPRESET, "<Item>"},
+ {N_("/Save/Default"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_SAVE_DEFAULT, "<Item>"},
+ {"/Save/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Save/To file"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_SAVE_TO_FILE, "<Item>"},
+ {N_("/Save/To WinAMP EQF file"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_SAVE_TO_WINAMPFILE, "<Item>"},
+ {N_("/Delete"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Delete/Preset"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_DELETE_PRESET, "<Item>"},
+ {N_("/Delete/Auto-load preset"), NULL, equalizerwin_presets_menu_cb,
+ EQUALIZER_PRESETS_DELETE_AUTOPRESET, "<Item>"},
+};
+
+static gint equalizerwin_presets_menu_entries_num =
+ G_N_ELEMENTS(equalizerwin_presets_menu_entries);
+
+
+EqualizerPreset *
+equalizer_preset_new(const gchar * name)
+{
+ EqualizerPreset *preset = g_new0(EqualizerPreset, 1);
+ preset->name = g_strdup(name);
+ return preset;
+}
+
+void
+equalizer_preset_free(EqualizerPreset * preset)
+{
+ if (!preset)
+ return;
+
+ g_free(preset->name);
+ g_free(preset);
+}
+
+
+static void
+equalizerwin_set_shape_mask(void)
+{
+ GdkBitmap *mask;
+
+ if (cfg.show_wm_decorations)
+ return;
+
+ mask = skin_get_mask(bmp_active_skin, SKIN_MASK_EQ + cfg.equalizer_shaded);
+ gtk_widget_shape_combine_mask(equalizerwin, mask, 0, 0);
+}
+
+
+void
+equalizerwin_set_shade_menu_cb(gboolean shaded)
+{
+ cfg.equalizer_shaded = shaded;
+
+ equalizerwin_set_shape_mask();
+
+ if (shaded) {
+ dock_shade(dock_window_list, GTK_WINDOW(equalizerwin), 14);
+ pbutton_set_button_data(equalizerwin_shade, -1, 3, -1, 47);
+ pbutton_set_skin_index1(equalizerwin_shade, SKIN_EQ_EX);
+ pbutton_set_button_data(equalizerwin_close, 11, 38, 11, 47);
+ pbutton_set_skin_index(equalizerwin_close, SKIN_EQ_EX);
+ widget_show(WIDGET(equalizerwin_volume));
+ widget_show(WIDGET(equalizerwin_balance));
+ }
+ else {
+ dock_shade(dock_window_list, GTK_WINDOW(equalizerwin), 116);
+ pbutton_set_button_data(equalizerwin_shade, -1, 137, -1, 38);
+ pbutton_set_skin_index1(equalizerwin_shade, SKIN_EQMAIN);
+ pbutton_set_button_data(equalizerwin_close, 0, 116, 0, 125);
+ pbutton_set_skin_index(equalizerwin_close, SKIN_EQMAIN);
+ widget_hide(WIDGET(equalizerwin_volume));
+ widget_hide(WIDGET(equalizerwin_balance));
+ }
+
+ draw_equalizer_window(TRUE);
+}
+
+static void
+equalizerwin_set_shade(gboolean shaded)
+{
+ GtkWidget *widget;
+ widget = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Roll up Equalizer");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), shaded);
+}
+
+static void
+equalizerwin_shade_toggle(void)
+{
+ equalizerwin_set_shade(!cfg.equalizer_shaded);
+}
+
+static void
+equalizerwin_raise(void)
+{
+ if (cfg.equalizer_visible)
+ gtk_window_present(GTK_WINDOW(equalizerwin));
+}
+
+void
+equalizerwin_eq_changed(void)
+{
+ gint i;
+
+ cfg.equalizer_preamp = eqslider_get_position(equalizerwin_preamp);
+ for (i = 0; i < 10; i++)
+ cfg.equalizer_bands[i] = eqslider_get_position(equalizerwin_bands[i]);
+ /* um .. i think we need both of these for xmms compatibility ..
+ not sure. -larne */
+ input_set_eq(cfg.equalizer_active, cfg.equalizer_preamp,
+ cfg.equalizer_bands);
+ output_set_eq(cfg.equalizer_active, cfg.equalizer_preamp,
+ cfg.equalizer_bands);
+
+ widget_draw(WIDGET(equalizerwin_graph));
+}
+
+static void
+equalizerwin_on_pushed(gboolean toggled)
+{
+ cfg.equalizer_active = toggled;
+ equalizerwin_eq_changed();
+}
+
+static void
+equalizerwin_presets_pushed(void)
+{
+ GdkModifierType modmask;
+ gint x, y;
+
+ gdk_window_get_pointer(NULL, &x, &y, &modmask);
+ util_item_factory_popup(equalizerwin_presets_menu, x, y, 1,
+ GDK_CURRENT_TIME);
+}
+
+static void
+equalizerwin_auto_pushed(gboolean toggled)
+{
+ cfg.equalizer_autoload = toggled;
+}
+
+void
+draw_equalizer_window(gboolean force)
+{
+ gboolean redraw;
+
+ widget_list_lock(equalizerwin_wlist);
+
+ if (force) {
+ skin_draw_pixmap(bmp_active_skin, equalizerwin_bg, equalizerwin_gc,
+ SKIN_EQMAIN, 0, 0, 0, 0, 275, 116);
+ if (gtk_window_has_toplevel_focus(GTK_WINDOW(equalizerwin)) ||
+ !cfg.dim_titlebar) {
+ if (!cfg.equalizer_shaded)
+ skin_draw_pixmap(bmp_active_skin, equalizerwin_bg,
+ equalizerwin_gc, SKIN_EQMAIN, 0, 134, 0,
+ 0, 275, 14);
+ else
+ skin_draw_pixmap(bmp_active_skin, equalizerwin_bg,
+ equalizerwin_gc, SKIN_EQ_EX, 0, 0, 0, 0,
+ 275, 14);
+ }
+ else {
+ if (!cfg.equalizer_shaded)
+ skin_draw_pixmap(bmp_active_skin, equalizerwin_bg,
+ equalizerwin_gc, SKIN_EQMAIN, 0, 149, 0,
+ 0, 275, 14);
+ else
+ skin_draw_pixmap(bmp_active_skin, equalizerwin_bg,
+ equalizerwin_gc, SKIN_EQ_EX, 0, 15, 0, 0,
+ 275, 14);
+
+ }
+ }
+
+ widget_list_draw(equalizerwin_wlist, &redraw, force);
+
+ if (force || redraw) {
+ widget_list_clear_redraw(equalizerwin_wlist);
+ gdk_window_clear(equalizerwin->window);
+ gdk_flush();
+ }
+
+ widget_list_unlock(equalizerwin_wlist);
+}
+
+static gboolean
+inside_sensitive_widgets(gint x, gint y)
+{
+ return (widget_contains(WIDGET(equalizerwin_on), x, y) ||
+ widget_contains(WIDGET(equalizerwin_auto), x, y) ||
+ widget_contains(WIDGET(equalizerwin_presets), x, y) ||
+ widget_contains(WIDGET(equalizerwin_close), x, y) ||
+ widget_contains(WIDGET(equalizerwin_shade), x, y) ||
+ widget_contains(WIDGET(equalizerwin_preamp), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[0]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[1]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[2]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[3]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[4]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[5]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[6]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[7]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[8]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_bands[9]), x, y) ||
+ widget_contains(WIDGET(equalizerwin_volume), x, y) ||
+ widget_contains(WIDGET(equalizerwin_balance), x, y));
+}
+
+gboolean
+equalizerwin_press(GtkWidget * widget, GdkEventButton * event,
+ gpointer callback_data)
+{
+ gint mx, my;
+ gboolean grab = TRUE;
+
+ mx = event->x;
+ my = event->y;
+
+ if (event->button == 1 && event->type == GDK_BUTTON_PRESS &&
+ ((cfg.equalizer_shaded || event->y < 14) &&
+ !inside_sensitive_widgets(event->x, event->y))) {
+ if (0 && hint_move_resize_available()) {
+ hint_move_resize(equalizerwin, event->x_root,
+ event->y_root, TRUE);
+ grab = FALSE;
+ }
+ else {
+ equalizerwin_raise();
+ dock_move_press(dock_window_list, GTK_WINDOW(equalizerwin), event,
+ FALSE);
+ }
+ }
+ else if (event->button == 1 && event->type == GDK_2BUTTON_PRESS
+ && event->y < 14) {
+ equalizerwin_set_shade(!cfg.equalizer_shaded);
+ if (dock_is_moving(GTK_WINDOW(equalizerwin)))
+ dock_move_release(GTK_WINDOW(equalizerwin));
+ }
+ else if (event->button == 3 &&
+ !(widget_contains(WIDGET(equalizerwin_on), event->x, event->y) ||
+ widget_contains(WIDGET(equalizerwin_auto), event->x, event->y))) {
+ /*
+ * Pop up the main menu a few pixels down to avoid
+ * anything to be selected initially.
+ */
+ util_item_factory_popup(mainwin_general_menu, event->x_root,
+ event->y_root + 2, 3, event->time);
+ grab = FALSE;
+ }
+ else {
+ handle_press_cb(equalizerwin_wlist, widget, event);
+ draw_equalizer_window(FALSE);
+ }
+ if (grab)
+ gdk_pointer_grab(GDK_WINDOW(equalizerwin->window), FALSE,
+ GDK_BUTTON_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
+ NULL, NULL, GDK_CURRENT_TIME);
+
+ return FALSE;
+}
+
+static void
+equalizerwin_scroll(GtkWidget * widget, GdkEventScroll * event, gpointer data)
+{
+ handle_scroll_cb(equalizerwin_wlist, widget, event);
+ draw_equalizer_window(FALSE);
+}
+
+static gboolean
+equalizerwin_motion(GtkWidget * widget,
+ GdkEventMotion * event, gpointer callback_data)
+{
+ XEvent ev;
+
+ if (dock_is_moving(GTK_WINDOW(equalizerwin))) {
+ dock_move_motion(GTK_WINDOW(equalizerwin), event);
+ }
+ else {
+ handle_motion_cb(equalizerwin_wlist, widget, event);
+ draw_main_window(FALSE);
+ }
+ gdk_flush();
+ while (XCheckMaskEvent(GDK_DISPLAY(), ButtonMotionMask, &ev));
+
+ return FALSE;
+}
+
+static gboolean
+equalizerwin_release(GtkWidget * widget,
+ GdkEventButton * event, gpointer callback_data)
+{
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ gdk_flush();
+ if (dock_is_moving(GTK_WINDOW(equalizerwin))) {
+ dock_move_release(GTK_WINDOW(equalizerwin));
+ }
+ else {
+ handle_release_cb(equalizerwin_wlist, widget, event);
+ draw_equalizer_window(FALSE);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+equalizerwin_focus_in(GtkWidget * widget,
+ GdkEvent * event,
+ gpointer data)
+{
+ equalizerwin_close->pb_allow_draw = TRUE;
+ equalizerwin_shade->pb_allow_draw = TRUE;
+ draw_equalizer_window(TRUE);
+ return TRUE;
+}
+
+static gboolean
+equalizerwin_focus_out(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer data)
+{
+ equalizerwin_close->pb_allow_draw = FALSE;
+ equalizerwin_shade->pb_allow_draw = FALSE;
+ draw_equalizer_window(TRUE);
+ return TRUE;
+}
+
+static gboolean
+equalizerwin_keypress(GtkWidget * widget,
+ GdkEventKey * event,
+ gpointer data)
+{
+ if (!cfg.equalizer_shaded) {
+ gtk_widget_event(mainwin, (GdkEvent *) event);
+ return TRUE;
+ }
+
+ switch (event->keyval) {
+ case GDK_Left:
+ case GDK_KP_Left:
+ mainwin_set_balance_diff(-4);
+ break;
+ case GDK_Right:
+ case GDK_KP_Right:
+ mainwin_set_balance_diff(4);
+ break;
+ default:
+ gtk_widget_event(mainwin, (GdkEvent *) event);
+ break;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+equalizerwin_configure(GtkWidget * window,
+ GdkEventConfigure * event,
+ gpointer data)
+{
+ if (!GTK_WIDGET_VISIBLE(window))
+ return FALSE;
+
+ cfg.equalizer_x = event->x;
+ cfg.equalizer_y = event->y;
+ return FALSE;
+}
+
+static void
+equalizerwin_set_back_pixmap(void)
+{
+ gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0);
+ gdk_window_clear(equalizerwin->window);
+}
+
+static void
+equalizerwin_close_cb(void)
+{
+ equalizerwin_show(FALSE);
+}
+
+static gboolean
+equalizerwin_delete(GtkWidget * widget,
+ gpointer data)
+{
+ equalizerwin_show(FALSE);
+ return TRUE;
+}
+
+static GList *
+equalizerwin_read_presets(const gchar * basename)
+{
+ gchar *filename, *name;
+ RcFile *rcfile;
+ GList *list = NULL;
+ gint i, p = 0;
+ EqualizerPreset *preset;
+
+ filename = g_build_filename(bmp_paths[BMP_PATH_USER_DIR], basename, NULL);
+
+ if ((rcfile = bmp_rcfile_open(filename)) == NULL) {
+ g_free(filename);
+ return NULL;
+ }
+
+ g_free(filename);
+
+ for (;;) {
+ gchar section[21];
+
+ g_snprintf(section, sizeof(section), "Preset%d", p++);
+ if (bmp_rcfile_read_string(rcfile, "Presets", section, &name)) {
+ preset = g_new0(EqualizerPreset, 1);
+ preset->name = name;
+ bmp_rcfile_read_float(rcfile, name, "Preamp", &preset->preamp);
+ for (i = 0; i < 10; i++) {
+ gchar band[7];
+ g_snprintf(band, sizeof(band), "Band%d", i);
+ bmp_rcfile_read_float(rcfile, name, band, &preset->bands[i]);
+ }
+ list = g_list_prepend(list, preset);
+ }
+ else
+ break;
+ }
+ list = g_list_reverse(list);
+ bmp_rcfile_free(rcfile);
+ return list;
+}
+
+gint
+equalizerwin_volume_frame_cb(gint pos)
+{
+ if (equalizerwin_volume) {
+ if (pos < 32)
+ equalizerwin_volume->hs_knob_nx =
+ equalizerwin_volume->hs_knob_px = 1;
+ else if (pos < 63)
+ equalizerwin_volume->hs_knob_nx =
+ equalizerwin_volume->hs_knob_px = 4;
+ else
+ equalizerwin_volume->hs_knob_nx =
+ equalizerwin_volume->hs_knob_px = 7;
+ }
+ return 1;
+}
+
+static void
+equalizerwin_volume_motion_cb(gint pos)
+{
+ gint v = (gint) rint(pos * 100 / 94.0);
+ mainwin_adjust_volume_motion(v);
+ mainwin_set_volume_slider(v);
+}
+
+static void
+equalizerwin_volume_release_cb(gint pos)
+{
+ mainwin_adjust_volume_release();
+}
+
+static gint
+equalizerwin_balance_frame_cb(gint pos)
+{
+ if (equalizerwin_balance) {
+ if (pos < 13)
+ equalizerwin_balance->hs_knob_nx =
+ equalizerwin_balance->hs_knob_px = 11;
+ else if (pos < 26)
+ equalizerwin_balance->hs_knob_nx =
+ equalizerwin_balance->hs_knob_px = 14;
+ else
+ equalizerwin_balance->hs_knob_nx =
+ equalizerwin_balance->hs_knob_px = 17;
+ }
+
+ return 1;
+}
+
+static void
+equalizerwin_balance_motion_cb(gint pos)
+{
+ gint b;
+ pos = MIN(pos, 38); /* The skin uses a even number of pixels
+ for the balance-slider *sigh* */
+ b = (gint) rint((pos - 19) * 100 / 19.0);
+ mainwin_adjust_balance_motion(b);
+ mainwin_set_balance_slider(b);
+}
+
+static void
+equalizerwin_balance_release_cb(gint pos)
+{
+ mainwin_adjust_balance_release();
+}
+
+void
+equalizerwin_set_balance_slider(gint percent)
+{
+ hslider_set_position(equalizerwin_balance,
+ (gint) rint((percent * 19 / 100.0) + 19));
+}
+
+void
+equalizerwin_set_volume_slider(gint percent)
+{
+ hslider_set_position(equalizerwin_volume,
+ (gint) rint(percent * 94 / 100.0));
+}
+
+static void
+equalizerwin_create_widgets(void)
+{
+ gint i;
+
+ equalizerwin_on =
+ create_tbutton(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 14, 18, 25, 12, 10, 119, 128, 119,
+ 69, 119, 187, 119, equalizerwin_on_pushed,
+ SKIN_EQMAIN);
+ tbutton_set_toggled(equalizerwin_on, cfg.equalizer_active);
+ equalizerwin_auto =
+ create_tbutton(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 39, 18, 33, 12, 35, 119, 153, 119,
+ 94, 119, 212, 119, equalizerwin_auto_pushed,
+ SKIN_EQMAIN);
+ tbutton_set_toggled(equalizerwin_auto, cfg.equalizer_autoload);
+ equalizerwin_presets =
+ create_pbutton(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 217, 18, 44, 12, 224, 164, 224,
+ 176, equalizerwin_presets_pushed, SKIN_EQMAIN);
+ equalizerwin_close =
+ create_pbutton(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 264, 3, 9, 9, 0, 116, 0, 125,
+ equalizerwin_close_cb, SKIN_EQMAIN);
+ equalizerwin_close->pb_allow_draw = FALSE;
+
+ equalizerwin_shade =
+ create_pbutton_ex(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 254, 3, 9, 9, 254, 137, 1, 38,
+ equalizerwin_shade_toggle, SKIN_EQMAIN, SKIN_EQ_EX);
+ equalizerwin_shade->pb_allow_draw = FALSE;
+
+ equalizerwin_graph =
+ create_eqgraph(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 86, 17);
+ equalizerwin_preamp =
+ create_eqslider(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 21, 38);
+ eqslider_set_position(equalizerwin_preamp, cfg.equalizer_preamp);
+ for (i = 0; i < 10; i++) {
+ equalizerwin_bands[i] =
+ create_eqslider(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 78 + (i * 18), 38);
+ eqslider_set_position(equalizerwin_bands[i], cfg.equalizer_bands[i]);
+ }
+
+ equalizerwin_volume =
+ create_hslider(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 61, 4, 97, 8, 1, 30, 1, 30, 3, 7,
+ 4, 61, 0, 94, equalizerwin_volume_frame_cb,
+ equalizerwin_volume_motion_cb,
+ equalizerwin_volume_release_cb, SKIN_EQ_EX);
+ equalizerwin_balance =
+ create_hslider(&equalizerwin_wlist, equalizerwin_bg,
+ equalizerwin_gc, 164, 4, 42, 8, 11, 30, 11, 30, 3,
+ 7, 4, 164, 0, 39, equalizerwin_balance_frame_cb,
+ equalizerwin_balance_motion_cb,
+ equalizerwin_balance_release_cb, SKIN_EQ_EX);
+
+ if (!cfg.equalizer_shaded) {
+ widget_hide(WIDGET(equalizerwin_volume));
+ widget_hide(WIDGET(equalizerwin_balance));
+ }
+ else {
+ pbutton_set_button_data(equalizerwin_shade, -1, 3, -1, 47);
+ pbutton_set_skin_index1(equalizerwin_shade, SKIN_EQ_EX);
+ pbutton_set_button_data(equalizerwin_close, 11, 38, 11, 47);
+ pbutton_set_skin_index(equalizerwin_close, SKIN_EQ_EX);
+ }
+}
+
+
+static void
+equalizerwin_create_window(void)
+{
+ GdkPixbuf *icon;
+ gint width, height;
+
+ equalizerwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(equalizerwin), _("BMP Equalizer"));
+ gtk_window_set_role(GTK_WINDOW(equalizerwin), "equalizer");
+
+ width = 275;
+ height = cfg.equalizer_shaded ? 14 : 116;
+
+ gtk_window_set_default_size(GTK_WINDOW(equalizerwin), width, height);
+ gtk_window_set_resizable(GTK_WINDOW(equalizerwin), FALSE);
+ dock_window_list = dock_window_set_decorated(dock_window_list,
+ GTK_WINDOW(equalizerwin),
+ cfg.show_wm_decorations);
+
+ gtk_window_set_transient_for(GTK_WINDOW(equalizerwin),
+ GTK_WINDOW(mainwin));
+ gtk_window_set_skip_taskbar_hint(GTK_WINDOW(equalizerwin), TRUE);
+
+ //icon = gdk_pixbuf_new_from_xpm_data((const gchar **) bmp_eq_icon);
+ //gtk_window_set_icon(GTK_WINDOW(equalizerwin), icon);
+ //g_object_unref(icon);
+
+ gtk_widget_set_app_paintable(equalizerwin, TRUE);
+
+ if (cfg.equalizer_x != -1 && cfg.save_window_position)
+ gtk_window_move(GTK_WINDOW(equalizerwin),
+ cfg.equalizer_x, cfg.equalizer_y);
+
+ gtk_widget_set_events(equalizerwin,
+ GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_VISIBILITY_NOTIFY_MASK);
+ gtk_widget_realize(equalizerwin);
+
+ util_set_cursor(equalizerwin);
+
+ g_signal_connect(equalizerwin, "delete_event",
+ G_CALLBACK(equalizerwin_delete), NULL);
+ g_signal_connect(equalizerwin, "button_press_event",
+ G_CALLBACK(equalizerwin_press), NULL);
+ g_signal_connect(equalizerwin, "button_release_event",
+ G_CALLBACK(equalizerwin_release), NULL);
+ g_signal_connect(equalizerwin, "motion_notify_event",
+ G_CALLBACK(equalizerwin_motion), NULL);
+ g_signal_connect_after(equalizerwin, "focus_in_event",
+ G_CALLBACK(equalizerwin_focus_in), NULL);
+ g_signal_connect_after(equalizerwin, "focus_out_event",
+ G_CALLBACK(equalizerwin_focus_out), NULL);
+ g_signal_connect(equalizerwin, "configure_event",
+ G_CALLBACK(equalizerwin_configure), NULL);
+ g_signal_connect(equalizerwin, "style_set",
+ G_CALLBACK(equalizerwin_set_back_pixmap), NULL);
+ g_signal_connect(equalizerwin, "key_press_event",
+ G_CALLBACK(equalizerwin_keypress), NULL);
+ g_signal_connect(equalizerwin, "scroll_event",
+ G_CALLBACK(equalizerwin_scroll), NULL);
+}
+
+void
+equalizerwin_create_popup_menus(void)
+{
+ equalizerwin_accel = gtk_accel_group_new();
+ gtk_window_add_accel_group(GTK_WINDOW(equalizerwin), equalizerwin_accel);
+
+ equalizerwin_presets_menu = create_menu(equalizerwin_presets_menu_entries,
+ equalizerwin_presets_menu_entries_num,
+ NULL);
+}
+
+void
+equalizerwin_create(void)
+{
+ equalizer_presets = equalizerwin_read_presets("eq.preset");
+ equalizer_auto_presets = equalizerwin_read_presets("eq.auto_preset");
+
+ equalizerwin_create_window();
+ equalizerwin_create_popup_menus();
+
+ equalizerwin_gc = gdk_gc_new(equalizerwin->window);
+ equalizerwin_bg = gdk_pixmap_new(equalizerwin->window, 275, 116, -1);
+
+ equalizerwin_create_widgets();
+
+ equalizerwin_set_back_pixmap();
+ gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0);
+}
+
+
+void
+equalizerwin_show(gboolean show)
+{
+ GtkWidget *item = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Show Equalizer");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), show);
+}
+
+void
+equalizerwin_real_show(void)
+{
+ /*
+ * This function should only be called from the
+ * main menu signal handler
+ */
+
+ gint x, y;
+
+ gtk_window_get_position(GTK_WINDOW(equalizerwin), &x, &y);
+ gtk_window_move(GTK_WINDOW(equalizerwin), x, y);
+ gtk_widget_set_size_request(equalizerwin, 275,
+ (cfg.equalizer_shaded ? 14 : 116));
+ gdk_flush();
+ draw_equalizer_window(TRUE);
+ cfg.equalizer_visible = TRUE;
+ tbutton_set_toggled(mainwin_eq, TRUE);
+
+ gtk_widget_show(equalizerwin);
+}
+
+void
+equalizerwin_real_hide(void)
+{
+ /*
+ * This function should only be called from the
+ * main menu signal handler
+ */
+ gtk_widget_hide(equalizerwin);
+ cfg.equalizer_visible = FALSE;
+ tbutton_set_toggled(mainwin_eq, FALSE);
+}
+
+static EqualizerPreset *
+equalizerwin_find_preset(GList * list, const gchar * name)
+{
+ GList *node = list;
+ EqualizerPreset *preset;
+
+ while (node) {
+ preset = node->data;
+ if (!strcasecmp(preset->name, name))
+ return preset;
+ node = g_list_next(node);
+ }
+ return NULL;
+}
+
+static void
+equalizerwin_write_preset_file(GList * list, const gchar * basename)
+{
+ gchar *filename, *tmp;
+ gint i, p;
+ EqualizerPreset *preset;
+ RcFile *rcfile;
+ GList *node;
+
+ rcfile = bmp_rcfile_new();
+ p = 0;
+ for (node = list; node; node = g_list_next(node)) {
+ preset = node->data;
+ tmp = g_strdup_printf("Preset%d", p++);
+ bmp_rcfile_write_string(rcfile, "Presets", tmp, preset->name);
+ g_free(tmp);
+ bmp_rcfile_write_float(rcfile, preset->name, "Preamp",
+ preset->preamp);
+ for (i = 0; i < 10; i++) {
+ tmp = g_strdup_printf("Band%d\n", i);
+ bmp_rcfile_write_float(rcfile, preset->name, tmp,
+ preset->bands[i]);
+ g_free(tmp);
+ }
+ }
+
+ filename = g_build_filename(bmp_paths[BMP_PATH_USER_DIR], basename, NULL);
+ bmp_rcfile_write(rcfile, filename);
+ bmp_rcfile_free(rcfile);
+ g_free(filename);
+}
+
+static gboolean
+equalizerwin_load_preset(GList * list, const gchar * name)
+{
+ EqualizerPreset *preset;
+ gint i;
+
+ if ((preset = equalizerwin_find_preset(list, name)) != NULL) {
+ eqslider_set_position(equalizerwin_preamp, preset->preamp);
+ for (i = 0; i < 10; i++)
+ eqslider_set_position(equalizerwin_bands[i], preset->bands[i]);
+ equalizerwin_eq_changed();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static GList *
+equalizerwin_save_preset(GList * list, const gchar * name,
+ const gchar * filename)
+{
+ gint i;
+ EqualizerPreset *preset;
+
+ if (!(preset = equalizerwin_find_preset(list, name))) {
+ preset = g_new0(EqualizerPreset, 1);
+ preset->name = g_strdup(name);
+ list = g_list_append(list, preset);
+ }
+
+ preset->preamp = eqslider_get_position(equalizerwin_preamp);
+ for (i = 0; i < 10; i++)
+ preset->bands[i] = eqslider_get_position(equalizerwin_bands[i]);
+
+ equalizerwin_write_preset_file(list, filename);
+
+ return list;
+}
+
+static GList *
+equalizerwin_delete_preset(GList * list, gchar * name, gchar * filename)
+{
+ EqualizerPreset *preset;
+ GList *node;
+
+ if (!(preset = equalizerwin_find_preset(list, name)))
+ return list;
+
+ if (!(node = g_list_find(list, preset)))
+ return list;
+
+ list = g_list_remove_link(list, node);
+ equalizer_preset_free(preset);
+ g_list_free_1(node);
+
+ equalizerwin_write_preset_file(list, filename);
+
+ return list;
+}
+
+
+static GList *
+import_winamp_eqf(VFSFile * file)
+{
+ gchar header[31];
+ gchar name[257];
+ gchar bands[11];
+ gint i = 0;
+ GList *list = NULL;
+ EqualizerPreset *preset;
+
+ vfs_fread(header, 1, 31, file);
+ if (!strncmp(header, "Winamp EQ library file v1.1", 27)) {
+ while (vfs_fread(name, 1, 257, file)) {
+ preset = equalizer_preset_new(name);
+ preset->preamp = 20.0 - ((bands[10] * 40.0) / 64);
+
+ vfs_fread(bands, 1, 11, file);
+
+ for (i = 0; i < 10; i++)
+ preset->bands[i] = 20.0 - ((bands[i] * 40.0) / 64);
+
+ list = g_list_prepend(list, preset);
+ }
+ }
+
+ list = g_list_reverse(list);
+ return list;
+}
+
+static void
+equalizerwin_read_winamp_eqf(VFSFile * file)
+{
+ gchar header[31];
+ guchar bands[11];
+ gint i;
+
+ vfs_fread(header, 1, 31, file);
+
+ if (!strncmp(header, "Winamp EQ library file v1.1", 27)) {
+ /* Skip name */
+ if (vfs_fseek(file, 257, SEEK_CUR) == -1)
+ return;
+
+ if (vfs_fread(bands, 1, 11, file) != 11)
+ return;
+
+ eqslider_set_position(equalizerwin_preamp,
+ 20.0 - ((bands[10] * 40.0) / 63.0));
+
+ for (i = 0; i < 10; i++)
+ eqslider_set_position(equalizerwin_bands[i],
+ 20.0 - ((bands[i] * 40.0) / 64.0));
+ }
+
+ equalizerwin_eq_changed();
+}
+
+static void
+equalizerwin_read_bmp_preset(RcFile * rcfile)
+{
+ gfloat val;
+ gint i;
+
+ if (bmp_rcfile_read_float(rcfile, "Equalizer preset", "Preamp", &val))
+ eqslider_set_position(equalizerwin_preamp, val);
+ for (i = 0; i < 10; i++) {
+ gchar tmp[7];
+ g_snprintf(tmp, sizeof(tmp), "Band%d", i);
+ if (bmp_rcfile_read_float(rcfile, "Equalizer preset", tmp, &val))
+ eqslider_set_position(equalizerwin_bands[i], val);
+ }
+ equalizerwin_eq_changed();
+}
+
+static void
+equalizerwin_save_ok(GtkWidget * widget, gpointer data)
+{
+ const gchar *text;
+
+ text = gtk_entry_get_text(GTK_ENTRY(equalizerwin_save_entry));
+ if (strlen(text) != 0)
+ equalizer_presets =
+ equalizerwin_save_preset(equalizer_presets, text, "eq.preset");
+ gtk_widget_destroy(equalizerwin_save_window);
+}
+
+static void
+equalizerwin_save_select(GtkCList * clist, gint row,
+ gint column, GdkEventButton * event, gpointer data)
+{
+ gchar *text;
+
+ gtk_clist_get_text(clist, row, 0, &text);
+
+ gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_entry), text);
+ if (event->type == GDK_2BUTTON_PRESS)
+ equalizerwin_save_ok(NULL, NULL);
+
+}
+
+static void
+equalizerwin_load_ok(GtkWidget * widget, gpointer data)
+{
+ gchar *text;
+ GtkCList *clist = GTK_CLIST(data);
+
+ if (clist && clist->selection) {
+ gtk_clist_get_text(clist, GPOINTER_TO_INT(clist->selection->data),
+ 0, &text);
+ equalizerwin_load_preset(equalizer_presets, text);
+ }
+ gtk_widget_destroy(equalizerwin_load_window);
+}
+
+static void
+equalizerwin_load_select(GtkCList * widget, gint row,
+ gint column, GdkEventButton * event, gpointer data)
+{
+ if (event->type == GDK_2BUTTON_PRESS)
+ equalizerwin_load_ok(NULL, widget);
+}
+
+static void
+equalizerwin_delete_delete(GtkWidget * widget, gpointer data)
+{
+ gchar *text;
+ GList *list, *next;
+ GtkCList *clist = GTK_CLIST(data);
+
+ g_return_if_fail(clist != NULL);
+
+ list = clist->selection;
+ gtk_clist_freeze(clist);
+ while (list) {
+ next = g_list_next(list);
+ gtk_clist_get_text(clist, GPOINTER_TO_INT(list->data), 0, &text);
+ equalizer_auto_presets =
+ equalizerwin_delete_preset(equalizer_presets, text, "eq.preset");
+ gtk_clist_remove(clist, GPOINTER_TO_INT(list->data));
+ list = next;
+ }
+ gtk_clist_thaw(clist);
+}
+
+static void
+equalizerwin_save_auto_ok(GtkWidget * widget, gpointer data)
+{
+ const gchar *text;
+
+ text = gtk_entry_get_text(GTK_ENTRY(equalizerwin_save_auto_entry));
+ if (strlen(text) != 0)
+ equalizer_auto_presets =
+ equalizerwin_save_preset(equalizer_auto_presets, text,
+ "eq.auto_preset");
+ gtk_widget_destroy(equalizerwin_save_auto_window);
+}
+
+static void
+equalizerwin_save_auto_select(GtkCList * clist, gint row,
+ gint column,
+ GdkEventButton * event, gpointer data)
+{
+ gchar *text;
+
+ gtk_clist_get_text(clist, row, 0, &text);
+
+ gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_auto_entry), text);
+ if (event->type == GDK_2BUTTON_PRESS)
+ equalizerwin_save_auto_ok(NULL, NULL);
+
+}
+
+static void
+equalizerwin_load_auto_ok(GtkWidget * widget, gpointer data)
+{
+ gchar *text;
+ GtkCList *clist = GTK_CLIST(data);
+
+ if (clist && clist->selection) {
+ gtk_clist_get_text(clist, GPOINTER_TO_INT(clist->selection->data),
+ 0, &text);
+ equalizerwin_load_preset(equalizer_auto_presets, text);
+ }
+ gtk_widget_destroy(equalizerwin_load_auto_window);
+}
+
+static void
+equalizerwin_load_auto_select(GtkWidget * widget, gint row,
+ gint column,
+ GdkEventButton * event, gpointer data)
+{
+ if (event->type == GDK_2BUTTON_PRESS)
+ equalizerwin_load_auto_ok(NULL, widget);
+}
+
+static void
+equalizerwin_delete_auto_delete(GtkWidget * widget, gpointer data)
+{
+ gchar *text;
+ GList *list, *next;
+ GtkCList *clist = GTK_CLIST(data);
+
+ g_return_if_fail(clist != NULL);
+
+ list = clist->selection;
+ gtk_clist_freeze(clist);
+ while (list) {
+ next = g_list_next(list);
+ gtk_clist_get_text(clist, GPOINTER_TO_INT(list->data), 0, &text);
+ equalizer_auto_presets =
+ equalizerwin_delete_preset(equalizer_auto_presets, text,
+ "eq.auto_preset");
+ gtk_clist_remove(clist, GPOINTER_TO_INT(list->data));
+ list = next;
+ }
+ gtk_clist_thaw(clist);
+}
+
+
+typedef void (*ResponseHandler)(const gchar *filename);
+
+static void
+equalizerwin_file_chooser_on_response(GtkWidget * dialog,
+ gint response,
+ gpointer data)
+{
+ GtkFileChooser *file_chooser = GTK_FILE_CHOOSER(dialog);
+ ResponseHandler handler = (ResponseHandler) data;
+ gchar *filename;
+
+ gtk_widget_hide(dialog);
+
+ switch (response)
+ {
+ case GTK_RESPONSE_ACCEPT:
+ filename = gtk_file_chooser_get_filename(file_chooser);
+ handler(filename);
+ g_free(filename);
+ break;
+
+ case GTK_RESPONSE_REJECT:
+ break;
+ }
+
+ gtk_widget_destroy(dialog);
+}
+
+
+
+static void
+load_preset_file(const gchar *filename)
+{
+ RcFile *rcfile;
+
+ if ((rcfile = bmp_rcfile_open(filename)) != NULL) {
+ equalizerwin_read_bmp_preset(rcfile);
+ bmp_rcfile_free(rcfile);
+ }
+}
+
+static void
+load_winamp_file(const gchar * filename)
+{
+ VFSFile *file;
+
+ /* FIXME: show error dialog */
+ if (!(file = vfs_fopen(filename, "rb")))
+ return;
+
+ equalizerwin_read_winamp_eqf(file);
+ vfs_fclose(file);
+}
+
+static void
+import_winamp_file(const gchar * filename)
+{
+ VFSFile *file;
+
+ /* FIXME: show error dialog */
+ if (!(file = vfs_fopen(filename, "rb")))
+ return;
+
+ equalizer_presets = g_list_concat(equalizer_presets,
+ import_winamp_eqf(file));
+ equalizerwin_write_preset_file(equalizer_presets, "eq.preset");
+
+ vfs_fclose(file);
+}
+
+static void
+save_preset_file(const gchar * filename)
+{
+ RcFile *rcfile;
+ gint i;
+
+ rcfile = bmp_rcfile_new();
+ bmp_rcfile_write_float(rcfile, "Equalizer preset", "Preamp",
+ eqslider_get_position(equalizerwin_preamp));
+
+ for (i = 0; i < 10; i++) {
+ gchar tmp[7];
+ g_snprintf(tmp, sizeof(tmp), "Band%d", i);
+ bmp_rcfile_write_float(rcfile, "Equalizer preset", tmp,
+ eqslider_get_position(equalizerwin_bands[i]));
+ }
+
+ bmp_rcfile_write(rcfile, filename);
+ bmp_rcfile_free(rcfile);
+}
+
+static void
+save_winamp_file(const gchar * filename)
+{
+ VFSFile *file;
+
+ gchar name[257];
+ gint i;
+ guchar bands[11];
+
+ /* FIXME: show error dialog */
+ if (!(file = vfs_fopen(filename, "wb")))
+ return;
+
+ vfs_fwrite("Winamp EQ library file v1.1\x1a!--", 1, 31, file);
+
+ memset(name, 0, 257);
+ strcpy(name, "Entry1");
+ vfs_fwrite(name, 1, 257, file);
+
+ for (i = 0; i < 10; i++)
+ bands[i] = 63 - (((eqslider_get_position(equalizerwin_bands[i]) + 20) * 63) / 40);
+ bands[10] = 63 - (((eqslider_get_position(equalizerwin_preamp) + 20) * 63) / 40);
+ vfs_fwrite(bands, 1, 11, file);
+
+ vfs_fclose(file);
+}
+
+static gint
+equalizerwin_list_sort_func(GtkCList * clist,
+ gconstpointer ptr1, gconstpointer ptr2)
+{
+ GtkCListRow *row1 = (GtkCListRow *) ptr1;
+ GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+ return strcasecmp(GTK_CELL_TEXT(row1->cell[clist->sort_column])->text,
+ GTK_CELL_TEXT(row2->cell[clist->sort_column])->text);
+}
+
+
+static GtkListStore *
+preset_list_store_new(GList * preset)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GList *node;
+
+ store = gtk_list_store_new(PRESET_VIEW_N_COLS, G_TYPE_STRING);
+
+ for (node = preset; node; node = g_list_next(node)) {
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ PRESET_VIEW_COL_NAME,
+ &((EqualizerPreset *) node->data)->name, -1);
+ }
+
+ return store;
+}
+
+
+GtkWidget *
+preset_view_new(GList * preset)
+{
+ GtkWidget *treeview;
+ GtkTreeModel *model;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkListStore *store;
+
+ store = preset_list_store_new(preset);
+
+ model = gtk_tree_model_sort_new_with_model(GTK_TREE_MODEL(store));
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
+ PRESET_VIEW_COL_NAME,
+ GTK_SORT_ASCENDING);
+
+ treeview = gtk_tree_view_new_with_model(model);
+ gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), TRUE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), TRUE);
+
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("Preset"), renderer,
+ "text",
+ PRESET_VIEW_COL_NAME,
+ NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+ return treeview;
+}
+
+
+static GtkWidget *
+equalizerwin_create_list_window(GList * preset_list,
+ const gchar * title,
+ GtkWidget ** window,
+ GtkSelectionMode sel_mode,
+ GtkWidget ** entry,
+ const gchar * btn2_stock_name,
+ const gchar * btn1_stock_name,
+ GCallback btn2_func,
+ GCallback select_row_func)
+{
+ GtkWidget *vbox, *scrolled_window, *bbox, *btn1, *btn2, *clist;
+ gchar *preset_text[1];
+ GList *node;
+
+ *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(*window), title);
+ gtk_window_set_type_hint(GTK_WINDOW(*window), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_default_size(GTK_WINDOW(*window), 350, 300);
+ gtk_window_set_position(GTK_WINDOW(*window), GTK_WIN_POS_CENTER);
+ gtk_container_set_border_width(GTK_CONTAINER(*window), 10);
+ gtk_window_set_transient_for(GTK_WINDOW(*window),
+ GTK_WINDOW(equalizerwin));
+ g_signal_connect(*window, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), window);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(*window), vbox);
+
+ scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+
+ preset_text[0] = _("Presets");
+ clist = gtk_clist_new_with_titles(1, preset_text);
+ if (select_row_func)
+ g_signal_connect(clist, "select_row",
+ G_CALLBACK(select_row_func), NULL);
+ gtk_clist_column_titles_passive(GTK_CLIST(clist));
+ gtk_clist_set_selection_mode(GTK_CLIST(clist), sel_mode);
+
+ for (node = preset_list; node; node = g_list_next(node)) {
+ gtk_clist_append(GTK_CLIST(clist),
+ &((EqualizerPreset *) node->data)->name);
+ }
+ gtk_clist_set_compare_func(GTK_CLIST(clist), equalizerwin_list_sort_func);
+ gtk_clist_sort(GTK_CLIST(clist));
+
+ gtk_container_add(GTK_CONTAINER(scrolled_window), clist);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
+
+ if (entry) {
+ *entry = gtk_entry_new();
+ g_signal_connect(*entry, "activate", btn2_func, NULL);
+ gtk_box_pack_start(GTK_BOX(vbox), *entry, FALSE, FALSE, 0);
+ }
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ btn1 = gtk_button_new_from_stock(btn1_stock_name);
+ g_signal_connect_swapped(btn1, "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(*window));
+ gtk_box_pack_start(GTK_BOX(bbox), btn1, TRUE, TRUE, 0);
+
+ btn2 = gtk_button_new_from_stock(btn2_stock_name);
+ g_signal_connect(btn2, "clicked", G_CALLBACK(btn2_func), clist);
+ GTK_WIDGET_SET_FLAGS(btn2, GTK_CAN_DEFAULT);
+
+
+ gtk_box_pack_start(GTK_BOX(bbox), btn2, TRUE, TRUE, 0);
+
+ gtk_widget_grab_default(btn2);
+
+
+ gtk_widget_show_all(*window);
+
+ return *window;
+}
+
+void
+equalizerwin_presets_menu_cb(gpointer cb_data, guint action, GtkWidget * w)
+{
+ GtkWidget *dialog;
+
+ switch (action) {
+ case EQUALIZER_PRESETS_LOAD_PRESET:
+ if (!equalizerwin_load_window)
+ equalizerwin_create_list_window(equalizer_presets,
+ _("Load preset"),
+ &equalizerwin_load_window,
+ GTK_SELECTION_SINGLE, NULL,
+ GTK_STOCK_OK, GTK_STOCK_CANCEL,
+ G_CALLBACK
+ (equalizerwin_load_ok),
+ G_CALLBACK
+ (equalizerwin_load_select));
+ else
+ gtk_window_present(GTK_WINDOW(equalizerwin_load_window));
+ break;
+ case EQUALIZER_PRESETS_LOAD_AUTOPRESET:
+ if (!equalizerwin_load_auto_window)
+ equalizerwin_create_list_window(equalizer_auto_presets,
+ _("Load auto-preset"),
+ &equalizerwin_load_auto_window,
+ GTK_SELECTION_SINGLE, NULL,
+ GTK_STOCK_OK, GTK_STOCK_CANCEL,
+ G_CALLBACK
+ (equalizerwin_load_auto_ok),
+ G_CALLBACK
+ (equalizerwin_load_auto_select));
+ else
+ gtk_window_present(GTK_WINDOW(equalizerwin_load_auto_window));
+ break;
+ case EQUALIZER_PRESETS_LOAD_DEFAULT:
+ equalizerwin_load_preset(equalizer_presets, "Default");
+ break;
+ case EQUALIZER_PRESETS_LOAD_ZERO:
+ {
+ gint i;
+
+ eqslider_set_position(equalizerwin_preamp, 0);
+ for (i = 0; i < 10; i++)
+ eqslider_set_position(equalizerwin_bands[i], 0);
+ equalizerwin_eq_changed();
+ break;
+ }
+ case EQUALIZER_PRESETS_LOAD_FROM_FILE:
+ dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
+ g_signal_connect(dialog , "response",
+ G_CALLBACK(equalizerwin_file_chooser_on_response),
+ load_preset_file);
+ break;
+ case EQUALIZER_PRESETS_LOAD_FROM_WINAMPFILE:
+ dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(equalizerwin_file_chooser_on_response),
+ load_winamp_file);
+ break;
+
+ case EQUALIZER_PRESETS_IMPORT_WINAMPFILE:
+ dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(equalizerwin_file_chooser_on_response),
+ import_winamp_file);
+ break;
+
+ case EQUALIZER_PRESETS_SAVE_PRESET:
+ if (!equalizerwin_save_window)
+ equalizerwin_create_list_window(equalizer_presets,
+ _("Save preset"),
+ &equalizerwin_save_window,
+ GTK_SELECTION_SINGLE,
+ &equalizerwin_save_entry,
+ GTK_STOCK_OK, GTK_STOCK_CANCEL,
+ G_CALLBACK
+ (equalizerwin_save_ok),
+ G_CALLBACK
+ (equalizerwin_save_select));
+ else
+ gtk_window_present(GTK_WINDOW(equalizerwin_save_window));
+ break;
+
+ case EQUALIZER_PRESETS_SAVE_AUTOPRESET:
+ {
+ gchar *name;
+
+ if (!equalizerwin_save_auto_window)
+ equalizerwin_create_list_window(equalizer_auto_presets,
+ _("Save auto-preset"),
+ &equalizerwin_save_auto_window,
+ GTK_SELECTION_SINGLE,
+ &equalizerwin_save_auto_entry,
+ GTK_STOCK_OK,
+ GTK_STOCK_CANCEL,
+ G_CALLBACK
+ (equalizerwin_save_auto_ok),
+ G_CALLBACK
+ (equalizerwin_save_auto_select));
+ else
+ gtk_window_present(GTK_WINDOW(equalizerwin_save_auto_window));
+
+ name = playlist_get_filename(playlist_get_position());
+
+ if (name) {
+ gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_auto_entry),
+ g_basename(name));
+ g_free(name);
+ }
+ break;
+ }
+
+ case EQUALIZER_PRESETS_SAVE_DEFAULT:
+ equalizer_presets =
+ equalizerwin_save_preset(equalizer_presets, "Default",
+ "eq.preset");
+ break;
+
+ case EQUALIZER_PRESETS_SAVE_TO_FILE:
+ {
+ gchar *songname;
+
+ dialog = make_filebrowser(_("Save equalizer preset"), TRUE);
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(equalizerwin_file_chooser_on_response),
+ save_preset_file);
+
+ songname = playlist_get_filename(playlist_get_position());
+ if (songname) {
+ gchar *eqname = g_strdup_printf("%s.%s", songname,
+ cfg.eqpreset_extension);
+ g_free(songname);
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
+ eqname);
+ g_free(eqname);
+ }
+
+ break;
+ }
+
+ case EQUALIZER_PRESETS_SAVE_TO_WINAMPFILE:
+ dialog = make_filebrowser(_("Save equalizer preset"), TRUE);
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(equalizerwin_file_chooser_on_response),
+ save_winamp_file);
+ break;
+
+ case EQUALIZER_PRESETS_DELETE_PRESET:
+ if (!equalizerwin_delete_window)
+ equalizerwin_create_list_window(equalizer_presets,
+ _("Delete preset"),
+ &equalizerwin_delete_window,
+ GTK_SELECTION_EXTENDED, NULL,
+ GTK_STOCK_DELETE,
+ GTK_STOCK_CLOSE,
+ G_CALLBACK
+ (equalizerwin_delete_delete),
+ NULL);
+ else
+ gtk_window_present(GTK_WINDOW(equalizerwin_delete_window));
+
+ break;
+
+ case EQUALIZER_PRESETS_DELETE_AUTOPRESET:
+ if (!equalizerwin_delete_auto_window)
+ equalizerwin_create_list_window(equalizer_auto_presets,
+ _("Delete auto-preset"),
+ &equalizerwin_delete_auto_window,
+ GTK_SELECTION_EXTENDED, NULL,
+ GTK_STOCK_DELETE,
+ GTK_STOCK_CLOSE,
+ G_CALLBACK
+ (equalizerwin_delete_auto_delete),
+ NULL);
+ else
+ gtk_window_present(GTK_WINDOW(equalizerwin_delete_auto_window));
+
+ break;
+ }
+}
+
+void
+equalizerwin_load_auto_preset(const gchar * filename)
+{
+ gchar *presetfilename, *directory;
+ RcFile *rcfile;
+
+ g_return_if_fail(filename != NULL);
+
+ if (!cfg.equalizer_autoload)
+ return;
+
+ presetfilename = g_strconcat(filename, ".", cfg.eqpreset_extension, NULL);
+
+ /* First try to find a per file preset file */
+ if (strlen(cfg.eqpreset_extension) > 0 &&
+ (rcfile = bmp_rcfile_open(presetfilename)) != NULL) {
+ g_free(presetfilename);
+ equalizerwin_read_bmp_preset(rcfile);
+ bmp_rcfile_free(rcfile);
+ return;
+ }
+
+ g_free(presetfilename);
+
+ directory = g_path_get_dirname(filename);
+ presetfilename = g_build_filename(directory, cfg.eqpreset_default_file,
+ NULL);
+ g_free(directory);
+
+ /* Try to find a per directory preset file */
+ if (strlen(cfg.eqpreset_default_file) > 0 &&
+ (rcfile = bmp_rcfile_open(presetfilename)) != NULL) {
+ equalizerwin_read_bmp_preset(rcfile);
+ bmp_rcfile_free(rcfile);
+ }
+ else if (!equalizerwin_load_preset
+ (equalizer_auto_presets, g_basename(filename))) {
+ /* Fall back to the oldstyle auto presets */
+ equalizerwin_load_preset(equalizer_presets, "Default");
+ }
+
+ g_free(presetfilename);
+}
+
+void
+equalizerwin_set_preamp(gfloat preamp)
+{
+ eqslider_set_position(equalizerwin_preamp, preamp);
+ equalizerwin_eq_changed();
+}
+
+void
+equalizerwin_set_band(gint band, gfloat value)
+{
+ g_return_if_fail(band >= 0 && band < 10);
+ eqslider_set_position(equalizerwin_bands[band], value);
+}
+
+gfloat
+equalizerwin_get_preamp(void)
+{
+ return eqslider_get_position(equalizerwin_preamp);
+}
+
+gfloat
+equalizerwin_get_band(gint band)
+{
+ g_return_val_if_fail(band >= 0 && band < 10, 0);
+ return eqslider_get_position(equalizerwin_bands[band]);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/equalizer.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,60 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef EQUALIZER_H
+#define EQUALIZER_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "pbutton.h"
+
+#define EQUALIZER_HEIGHT (gint)(cfg.equalizer_shaded ? 14 : 116)
+#define EQUALIZER_WIDTH (gint)275
+
+#define EQUALIZER_DEFAULT_POS_X 20
+#define EQUALIZER_DEFAULT_POS_Y 136
+
+#define EQUALIZER_DEFAULT_DIR_PRESET "dir_default.preset"
+#define EQUALIZER_DEFAULT_PRESET_EXT "preset"
+
+void equalizerwin_set_shade_menu_cb(gboolean shaded);
+void draw_equalizer_window(gboolean force);
+void equalizerwin_create(void);
+void equalizerwin_show(gboolean show);
+void equalizerwin_real_show(void);
+void equalizerwin_real_hide(void);
+void equalizerwin_load_auto_preset(const gchar * filename);
+void equalizerwin_set_volume_slider(gint percent);
+void equalizerwin_set_balance_slider(gint percent);
+void equalizerwin_eq_changed(void);
+void equalizerwin_set_preamp(gfloat preamp);
+void equalizerwin_set_band(gint band, gfloat value);
+gfloat equalizerwin_get_preamp(void);
+gfloat equalizerwin_get_band(gint band);
+
+gboolean equalizerwin_has_focus(void);
+
+extern GtkWidget *equalizerwin;
+extern PButton *equalizerwin_close;
+extern gboolean equalizerwin_focus;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,296 @@
+/* fft.c: Iterative implementation of a FFT
+ * Copyright (C) 1999 Richard Boulton <richard at tartarus.org>
+ * Convolution stuff by Ralph Loader <suckfish at ihug.co.nz>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * TODO
+ * Remove compiling in of FFT_BUFFER_SIZE? (Might slow things down, but would
+ * be nice to be able to change size at runtime.)
+ * Finish making / checking thread-safety.
+ * More optimisations.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "fft.h"
+
+#include <glib.h>
+#include <stdlib.h>
+#include <math.h>
+#ifndef PI
+#ifdef M_PI
+#define PI M_PI
+#else
+#define PI 3.14159265358979323846 /* pi */
+#endif
+#endif
+
+/* ########### */
+/* # Structs # */
+/* ########### */
+
+struct _struct_fft_state {
+ /* Temporary data stores to perform FFT in. */
+ float real[FFT_BUFFER_SIZE];
+ float imag[FFT_BUFFER_SIZE];
+};
+
+/* ############################# */
+/* # Local function prototypes # */
+/* ############################# */
+
+static void fft_prepare(const sound_sample * input, float *re, float *im);
+static void fft_calculate(float *re, float *im);
+static void fft_output(const float *re, const float *im, float *output);
+static int reverseBits(unsigned int initial);
+
+/* #################### */
+/* # Global variables # */
+/* #################### */
+
+/* Table to speed up bit reverse copy */
+static unsigned int bitReverse[FFT_BUFFER_SIZE];
+
+/* The next two tables could be made to use less space in memory, since they
+ * overlap hugely, but hey. */
+static float sintable[FFT_BUFFER_SIZE / 2];
+static float costable[FFT_BUFFER_SIZE / 2];
+
+/* ############################## */
+/* # Externally called routines # */
+/* ############################## */
+
+/* --------- */
+/* FFT stuff */
+/* --------- */
+
+/*
+ * Initialisation routine - sets up tables and space to work in.
+ * Returns a pointer to internal state, to be used when performing calls.
+ * On error, returns NULL.
+ * The pointer should be freed when it is finished with, by fft_close().
+ */
+fft_state *
+fft_init(void)
+{
+ fft_state *state;
+ unsigned int i;
+
+ state = (fft_state *) g_malloc(sizeof(fft_state));
+ if (!state)
+ return NULL;
+
+ for (i = 0; i < FFT_BUFFER_SIZE; i++) {
+ bitReverse[i] = reverseBits(i);
+ }
+ for (i = 0; i < FFT_BUFFER_SIZE / 2; i++) {
+ float j = 2 * PI * i / FFT_BUFFER_SIZE;
+ costable[i] = cos(j);
+ sintable[i] = sin(j);
+ }
+
+ return state;
+}
+
+/*
+ * Do all the steps of the FFT, taking as input sound data (as described in
+ * sound.h) and returning the intensities of each frequency as floats in the
+ * range 0 to ((FFT_BUFFER_SIZE / 2) * 32768) ^ 2
+ *
+ * FIXME - the above range assumes no frequencies present have an amplitude
+ * larger than that of the sample variation. But this is false: we could have
+ * a wave such that its maximums are always between samples, and it's just
+ * inside the representable range at the places samples get taken.
+ * Question: what _is_ the maximum value possible. Twice that value? Root
+ * two times that value? Hmmm. Think it depends on the frequency, too.
+ *
+ * The input array is assumed to have FFT_BUFFER_SIZE elements,
+ * and the output array is assumed to have (FFT_BUFFER_SIZE / 2 + 1) elements.
+ * state is a (non-NULL) pointer returned by fft_init.
+ */
+void
+fft_perform(const sound_sample * input, float *output, fft_state * state)
+{
+ /* Convert data from sound format to be ready for FFT */
+ fft_prepare(input, state->real, state->imag);
+
+ /* Do the actual FFT */
+ fft_calculate(state->real, state->imag);
+
+ /* Convert the FFT output into intensities */
+ fft_output(state->real, state->imag, output);
+}
+
+/*
+ * Free the state.
+ */
+void
+fft_close(fft_state * state)
+{
+ if (state)
+ free(state);
+}
+
+/* ########################### */
+/* # Locally called routines # */
+/* ########################### */
+
+/*
+ * Prepare data to perform an FFT on
+ */
+static void
+fft_prepare(const sound_sample * input, float *re, float *im)
+{
+ unsigned int i;
+ float *realptr = re;
+ float *imagptr = im;
+
+ /* Get input, in reverse bit order */
+ for (i = 0; i < FFT_BUFFER_SIZE; i++) {
+ *realptr++ = input[bitReverse[i]];
+ *imagptr++ = 0;
+ }
+}
+
+/*
+ * Take result of an FFT and calculate the intensities of each frequency
+ * Note: only produces half as many data points as the input had.
+ * This is roughly a consequence of the Nyquist sampling theorm thingy.
+ * (FIXME - make this comment better, and helpful.)
+ *
+ * The two divisions by 4 are also a consequence of this: the contributions
+ * returned for each frequency are split into two parts, one at i in the
+ * table, and the other at FFT_BUFFER_SIZE - i, except for i = 0 and
+ * FFT_BUFFER_SIZE which would otherwise get float (and then 4* when squared)
+ * the contributions.
+ */
+static void
+fft_output(const float *re, const float *im, float *output)
+{
+ float *outputptr = output;
+ const float *realptr = re;
+ const float *imagptr = im;
+ float *endptr = output + FFT_BUFFER_SIZE / 2;
+
+#ifdef DEBUG
+ unsigned int i, j;
+#endif
+
+ while (outputptr <= endptr) {
+ *outputptr = (*realptr * *realptr) + (*imagptr * *imagptr);
+ outputptr++;
+ realptr++;
+ imagptr++;
+ }
+ /* Do divisions to keep the constant and highest frequency terms in scale
+ * with the other terms. */
+ *output /= 4;
+ *endptr /= 4;
+
+#ifdef DEBUG
+ printf("Recalculated input:\n");
+ for (i = 0; i < FFT_BUFFER_SIZE; i++) {
+ float val_real = 0;
+ float val_imag = 0;
+ for (j = 0; j < FFT_BUFFER_SIZE; j++) {
+ float fact_real = cos(-2 * j * i * PI / FFT_BUFFER_SIZE);
+ float fact_imag = sin(-2 * j * i * PI / FFT_BUFFER_SIZE);
+ val_real += fact_real * re[j] - fact_imag * im[j];
+ val_imag += fact_real * im[j] + fact_imag * re[j];
+ }
+ printf("%5d = %8f + i * %8f\n", i,
+ val_real / FFT_BUFFER_SIZE, val_imag / FFT_BUFFER_SIZE);
+ }
+ printf("\n");
+#endif
+}
+
+/*
+ * Actually perform the FFT
+ */
+static void
+fft_calculate(float *re, float *im)
+{
+ unsigned int i, j, k;
+ unsigned int exchanges;
+ float fact_real, fact_imag;
+ float tmp_real, tmp_imag;
+ unsigned int factfact;
+
+ /* Set up some variables to reduce calculation in the loops */
+ exchanges = 1;
+ factfact = FFT_BUFFER_SIZE / 2;
+
+ /* Loop through the divide and conquer steps */
+ for (i = FFT_BUFFER_SIZE_LOG; i != 0; i--) {
+ /* In this step, we have 2 ^ (i - 1) exchange groups, each with
+ * 2 ^ (FFT_BUFFER_SIZE_LOG - i) exchanges
+ */
+ /* Loop through the exchanges in a group */
+ for (j = 0; j != exchanges; j++) {
+ /* Work out factor for this exchange
+ * factor ^ (exchanges) = -1
+ * So, real = cos(j * PI / exchanges),
+ * imag = sin(j * PI / exchanges)
+ */
+ fact_real = costable[j * factfact];
+ fact_imag = sintable[j * factfact];
+
+ /* Loop through all the exchange groups */
+ for (k = j; k < FFT_BUFFER_SIZE; k += exchanges << 1) {
+ int k1 = k + exchanges;
+ /* newval[k] := val[k] + factor * val[k1]
+ * newval[k1] := val[k] - factor * val[k1]
+ **/
+#ifdef DEBUG
+ printf("%d %d %d\n", i, j, k);
+ printf("Exchange %d with %d\n", k, k1);
+ printf("Factor %9f + i * %8f\n", fact_real, fact_imag);
+#endif
+ /* FIXME - potential scope for more optimization here? */
+ tmp_real = fact_real * re[k1] - fact_imag * im[k1];
+ tmp_imag = fact_real * im[k1] + fact_imag * re[k1];
+ re[k1] = re[k] - tmp_real;
+ im[k1] = im[k] - tmp_imag;
+ re[k] += tmp_real;
+ im[k] += tmp_imag;
+#ifdef DEBUG
+ for (k1 = 0; k1 < FFT_BUFFER_SIZE; k1++) {
+ printf("%5d = %8f + i * %8f\n", k1, real[k1], imag[k1]);
+ }
+#endif
+ }
+ }
+ exchanges <<= 1;
+ factfact >>= 1;
+ }
+}
+
+static int
+reverseBits(unsigned int initial)
+{
+ unsigned int reversed = 0, loop;
+ for (loop = 0; loop < FFT_BUFFER_SIZE_LOG; loop++) {
+ reversed <<= 1;
+ reversed += (initial & 1);
+ initial >>= 1;
+ }
+ return reversed;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fft.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,45 @@
+/* fft.h: Header for iterative implementation of a FFT
+ * Copyright (C) 1999 Richard Boulton <richard at tartarus.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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _FFT_H_
+#define _FFT_H_
+
+#define FFT_BUFFER_SIZE_LOG 9
+
+#define FFT_BUFFER_SIZE (1 << FFT_BUFFER_SIZE_LOG)
+
+/* sound sample - should be an signed 16 bit value */
+typedef short int sound_sample;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* FFT library */
+ typedef struct _struct_fft_state fft_state;
+ fft_state *fft_init(void);
+ void fft_perform(const sound_sample * input, float *output,
+ fft_state * state);
+ void fft_close(fft_state * state);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FFT_H_ */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,487 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Zinx Verituse
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "fullscreen.h"
+
+#include "libbeep/util.h"
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xmd.h>
+
+#ifndef XF86VIDMODE
+
+gboolean
+xmms_fullscreen_available(Display * dpy)
+{
+ return FALSE;
+}
+
+gboolean
+xmms_fullscreen_init(GtkWidget * win)
+{
+ return FALSE;
+}
+
+gboolean
+xmms_fullscreen_enter(GtkWidget * win, gint * w, gint * h)
+{
+ return FALSE;
+}
+
+void
+xmms_fullscreen_leave(GtkWidget * win)
+{
+ return;
+}
+
+gboolean
+xmms_fullscreen_in(GtkWidget * win)
+{
+ return FALSE;
+}
+
+gboolean
+xmms_fullscreen_mark(GtkWidget * win)
+{
+ return FALSE;
+}
+
+void
+xmms_fullscreen_unmark(GtkWidget * win)
+{
+ return;
+}
+
+void
+xmms_fullscreen_cleanup(GtkWidget * win)
+{
+ return;
+}
+
+GSList *
+xmms_fullscreen_modelist(GtkWidget * win)
+{
+ return NULL;
+}
+
+void
+xmms_fullscreen_modelist_free(GSList * modes)
+{
+ return;
+}
+
+#else /* XF86VIDMODE */
+
+#include <X11/extensions/xf86vmode.h>
+#include <X11/extensions/xf86vmstr.h>
+
+gboolean
+xmms_fullscreen_available(Display * dpy)
+{
+ int event_base, error_base, num_modes;
+ XF86VidModeModeInfo **dummy;
+
+ if (!XF86VidModeQueryExtension(dpy, &event_base, &error_base))
+ return FALSE;
+
+ XF86VidModeGetAllModeLines(dpy, DefaultScreen(dpy), &num_modes, &dummy);
+ XFree(dummy);
+
+ return (num_modes > 1);
+}
+
+typedef struct {
+ Display *display;
+ XF86VidModeModeInfo **modes, *origmode;
+ gboolean is_full, can_full;
+ gint num_modes;
+} fullscreen_display_t;
+
+static fullscreen_display_t **displays = NULL;
+
+typedef struct {
+ GtkWidget *window;
+ gint is_full;
+ gint ox, oy, owidth, oheight;
+ fullscreen_display_t *display;
+} fullscreen_window_t;
+static fullscreen_window_t **windows = NULL;
+
+G_LOCK_DEFINE_STATIC(full_mutex);
+
+#define FULL_LOCK() G_LOCK(full_mutex);
+#define FULL_UNLOCK() G_UNLOCK(full_mutex);
+
+static fullscreen_display_t *
+getdisplay(Display * dpy)
+{
+ gint i;
+
+ if (displays) {
+ for (i = 0; displays[i]; i++) {
+ if (displays[i]->display == dpy)
+ return displays[i];
+ }
+ displays = g_realloc(displays, sizeof(*displays) * (i + 2));
+ }
+ else {
+ displays = g_malloc(sizeof(*displays) * 2);
+ i = 0;
+ }
+ displays[i + 1] = NULL;
+ displays[i] = g_malloc(sizeof(**displays));
+ displays[i]->display = dpy;
+ displays[i]->modes = NULL;
+ displays[i]->origmode = NULL;
+ displays[i]->num_modes = 0;
+ displays[i]->is_full = FALSE;
+ displays[i]->can_full = FALSE;
+ return displays[i];
+}
+
+static fullscreen_window_t *
+getwindow(GtkWidget * win)
+{
+ gint i;
+
+ if (windows) {
+ for (i = 0; windows[i]; i++) {
+ if (windows[i]->window == win)
+ return windows[i];
+ }
+ windows = g_realloc(windows, sizeof(*windows) * (i + 2));
+ }
+ else {
+ windows = g_malloc(sizeof(*windows) * 2);
+ i = 0;
+ }
+ windows[i + 1] = NULL;
+ windows[i] = g_malloc(sizeof(**windows));
+ windows[i]->window = win;
+ windows[i]->ox = 0;
+ windows[i]->oy = 0;
+ windows[i]->owidth = 0;
+ windows[i]->oheight = 0;
+ windows[i]->display = getdisplay(GDK_WINDOW_XDISPLAY(win->window));
+ windows[i]->is_full = 0;
+ return windows[i];
+}
+
+gboolean
+xmms_fullscreen_init(GtkWidget * win)
+{
+ int event_base, error_base, dummy;
+ fullscreen_window_t *fwin;
+ gint i;
+ XF86VidModeModeLine origmode;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+
+ if (!XF86VidModeQueryExtension
+ (fwin->display->display, &event_base, &error_base)) {
+ FULL_UNLOCK();
+ return FALSE;
+ }
+
+ if (!fwin->display->modes) {
+ XF86VidModeGetAllModeLines(fwin->display->display,
+ DefaultScreen(fwin->display->display),
+ &fwin->display->num_modes,
+ &fwin->display->modes);
+
+ if (!fwin->display->origmode) {
+ XF86VidModeGetModeLine(fwin->display->display,
+ DefaultScreen(fwin->display->display),
+ &dummy, &origmode);
+ for (i = 0; i < fwin->display->num_modes; i++) {
+ if (fwin->display->modes[i]->hdisplay ==
+ origmode.hdisplay
+ && fwin->display->modes[i]->vdisplay ==
+ origmode.vdisplay) {
+ fwin->display->origmode = fwin->display->modes[i];
+ break;
+ }
+ }
+
+ if (!fwin->display->origmode) {
+ fprintf(stderr,
+ "ERROR: Could not determine original mode.\n");
+ FULL_UNLOCK();
+ return FALSE;
+ }
+
+ }
+
+ fwin->display->can_full = (fwin->display->num_modes > 1);
+ }
+ FULL_UNLOCK();
+ return fwin->display->can_full;
+}
+
+gboolean
+xmms_fullscreen_enter(GtkWidget * win, gint * w, gint * h)
+{
+ gint i, close, how_close = -1, t, dummy;
+ gboolean retval = FALSE;
+ fullscreen_window_t *fwin;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+
+ if (!fwin->display->is_full && !fwin->is_full && fwin->display->can_full) {
+ for (close = 0; close < fwin->display->num_modes; close++) {
+ if ((fwin->display->modes[close]->hdisplay >= *w) &&
+ (fwin->display->modes[close]->vdisplay >= *h)) {
+ how_close = fwin->display->modes[close]->hdisplay - *w;
+ break;
+ }
+ }
+
+ for (i = close + 1; i < fwin->display->num_modes; i++) {
+ if (fwin->display->modes[i]->vdisplay < *h)
+ continue;
+ t = fwin->display->modes[i]->hdisplay - *w;
+ if (t >= 0 && t < how_close) {
+ close = i;
+ how_close = t;
+ }
+ }
+
+ if (close < fwin->display->num_modes) {
+ *w = fwin->display->modes[close]->hdisplay;
+ *h = fwin->display->modes[close]->vdisplay;
+
+ /* Save the old position/size */
+ gdk_window_get_root_origin(fwin->window->window, &fwin->ox,
+ &fwin->oy);
+ gdk_window_get_size(fwin->window->window, &fwin->owidth,
+ &fwin->oheight);
+
+ /* Move it. */
+ gdk_window_move_resize(fwin->window->window, 0, 0,
+ fwin->display->modes[close]->hdisplay,
+ fwin->display->modes[close]->vdisplay);
+
+ /* Tell the WM not to mess with this window (no more decor) */
+ gdk_window_hide(fwin->window->window);
+ gdk_window_set_override_redirect(fwin->window->window, TRUE);
+ gdk_window_show(fwin->window->window);
+
+ /*
+ * XXX: HACK
+ * Something is ungrabbing the pointer shortly
+ * after the above unmap/override_redirect=TRUE/map
+ * is done. I don't know what at this time, only
+ * that it's not XMMS, and that it's very very evil.
+ */
+ gdk_flush();
+ xmms_usleep(50000);
+
+ /* Steal the keyboard/mouse */
+ /* XXX: FIXME, use timeouts.. */
+ for (t = 0; t < 10; t++) {
+ dummy = gdk_pointer_grab(fwin->window->window,
+ TRUE, 0,
+ fwin->window->window,
+ NULL, GDK_CURRENT_TIME);
+
+ if (dummy == GrabSuccess)
+ break;
+
+ gtk_main_iteration_do(FALSE);
+ xmms_usleep(10000);
+ }
+ gdk_keyboard_grab(fwin->window->window, TRUE, GDK_CURRENT_TIME);
+
+ /* Do the video mode switch.. */
+ XF86VidModeSwitchToMode(fwin->display->display,
+ DefaultScreen(fwin->display->display),
+ fwin->display->modes[close]);
+
+ XF86VidModeSetViewPort(fwin->display->display,
+ DefaultScreen(fwin->display->display),
+ 0, 0);
+
+ retval = TRUE;
+
+ fwin->is_full = TRUE;
+ fwin->display->is_full = TRUE;
+ }
+ }
+
+ FULL_UNLOCK();
+
+ return retval;
+}
+
+void
+xmms_fullscreen_leave(GtkWidget * win)
+{
+ fullscreen_window_t *fwin;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+
+ if (fwin->is_full && fwin->display->is_full) {
+ /* Release our grabs */
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ gdk_keyboard_ungrab(GDK_CURRENT_TIME);
+
+ /* Let the WM manage this window again */
+ gdk_window_hide(fwin->window->window);
+ gdk_window_set_override_redirect(fwin->window->window, FALSE);
+ gdk_window_show(fwin->window->window);
+
+ /* Restore size/position */
+ gdk_window_move_resize(fwin->window->window, fwin->ox, fwin->oy,
+ fwin->owidth, fwin->oheight);
+
+ XF86VidModeSwitchToMode(fwin->display->display,
+ DefaultScreen(fwin->display->display),
+ fwin->display->origmode);
+ fwin->display->is_full = FALSE;
+ }
+ fwin->is_full = FALSE;
+ FULL_UNLOCK();
+}
+
+gboolean
+xmms_fullscreen_in(GtkWidget * win)
+{
+ fullscreen_window_t *fwin;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+ FULL_UNLOCK();
+
+ if (fwin->display->is_full)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+gboolean
+xmms_fullscreen_mark(GtkWidget * win)
+{
+ fullscreen_window_t *fwin;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+
+ if (fwin->display->is_full) {
+ FULL_UNLOCK();
+ return FALSE;
+ }
+ else {
+ fwin->is_full = TRUE;
+ fwin->display->is_full = TRUE;
+ FULL_UNLOCK();
+ return TRUE;
+ }
+}
+
+void
+xmms_fullscreen_unmark(GtkWidget * win)
+{
+ fullscreen_window_t *fwin;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+
+ if (fwin->is_full) {
+ fwin->is_full = FALSE;
+ fwin->display->is_full = FALSE;
+ }
+ FULL_UNLOCK();
+}
+
+void
+xmms_fullscreen_cleanup(GtkWidget * win)
+{
+ gint i, j;
+ fullscreen_display_t *display;
+
+ FULL_LOCK();
+ if (!windows)
+ goto unlock_return;
+
+ for (i = 0; windows[i]; i++) {
+ if (windows[i]->window == win) {
+ display = windows[i]->display;
+ for (j = i + 1; windows[j]; j++);
+ windows[i] = windows[j - 1];
+ windows = g_realloc(windows, sizeof(*windows) * (j + 1));
+ windows[j] = NULL;
+
+ for (i = 0; windows[i]; i++) {
+ if (windows[i]->display == display)
+ goto unlock_return;
+ }
+ /* bugger all, kill the display */
+ for (i = 0; displays[i]; i++) {
+ if (displays[i] == display) {
+ XFree(displays[i]->modes);
+ for (j = i + 1; displays[j]; j++);
+ displays[i] = displays[j - 1];
+ displays =
+ g_realloc(displays, sizeof(*displays) * (j + 1));
+ displays[j] = NULL;
+ break;
+ }
+ }
+ }
+ }
+ unlock_return:
+ FULL_UNLOCK();
+}
+
+GSList *
+xmms_fullscreen_modelist(GtkWidget * win)
+{
+ fullscreen_window_t *fwin;
+ xmms_fullscreen_mode_t *ent;
+ GSList *retlist = NULL;
+ int i;
+
+ FULL_LOCK();
+ fwin = getwindow(win);
+
+ for (i = 0; i < fwin->display->num_modes; i++) {
+ ent = g_malloc(sizeof(*ent));
+ ent->width = fwin->display->modes[i]->hdisplay;
+ ent->height = fwin->display->modes[i]->vdisplay;
+ retlist = g_slist_append(retlist, ent);
+ }
+ FULL_UNLOCK();
+
+ return retlist;
+}
+
+void
+xmms_fullscreen_modelist_free(GSList * modes)
+{
+ g_slist_foreach(modes, (GFunc) g_free_func, NULL);
+ g_slist_free(modes);
+}
+
+#endif /* XF86VIDMODE */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/fullscreen.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,59 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Zinx Verituse
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. 2.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _XMMS_FULLSCREEN_H
+#define _XMMS_FULLSCREEN_H 1
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <X11/Xlib.h>
+
+typedef struct {
+ gint width, height;
+} xmms_fullscreen_mode_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ gboolean xmms_fullscreen_available(Display * dpy);
+ gboolean xmms_fullscreen_init(GtkWidget * win);
+
+ gboolean xmms_fullscreen_enter(GtkWidget * win, gint * w, gint * h);
+ void xmms_fullscreen_leave(GtkWidget * win);
+
+ gboolean xmms_fullscreen_in(GtkWidget * win);
+ gboolean xmms_fullscreen_mark(GtkWidget * win);
+ void xmms_fullscreen_unmark(GtkWidget * win);
+
+ void xmms_fullscreen_cleanup(GtkWidget * win);
+
+ GSList *xmms_fullscreen_modelist(GtkWidget * win);
+ void xmms_fullscreen_modelist_free(GSList * modes);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,167 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <string.h>
+#include "plugin.h"
+#include "general.h"
+
+GeneralPluginData gp_data = {
+ NULL,
+ NULL
+};
+
+GList *
+get_general_list(void)
+{
+ return gp_data.general_list;
+}
+
+GList *
+get_general_enabled_list(void)
+{
+ return gp_data.enabled_list;
+}
+
+static GeneralPlugin *
+get_general_plugin(gint i)
+{
+ GList *node = g_list_nth(get_general_list(), i);
+
+ if (!node)
+ return NULL;
+
+ return GENERAL_PLUGIN(node->data);
+}
+
+
+void
+general_about(gint i)
+{
+ GeneralPlugin *plugin = get_general_plugin(i);
+
+ if (!plugin || !plugin->about)
+ return;
+
+ plugin->about();
+}
+
+void
+general_configure(gint i)
+{
+ GeneralPlugin *plugin = get_general_plugin(i);
+
+ if (!plugin || !plugin->configure)
+ return;
+
+ plugin->configure();
+}
+
+static gboolean
+general_plugin_is_enabled(GeneralPlugin * plugin)
+{
+ return (g_list_find(get_general_enabled_list(), plugin) != NULL);
+}
+
+void
+enable_general_plugin(gint i, gboolean enable)
+{
+ GeneralPlugin *plugin = get_general_plugin(i);
+
+ if (!plugin)
+ return;
+
+ if (enable && !general_plugin_is_enabled(plugin)) {
+ gp_data.enabled_list = g_list_append(gp_data.enabled_list, plugin);
+ if (plugin->init)
+ plugin->init();
+ }
+ else if (!enable && general_plugin_is_enabled(plugin)) {
+ gp_data.enabled_list = g_list_remove(gp_data.enabled_list, plugin);
+ if (plugin->cleanup)
+ plugin->cleanup();
+ }
+}
+
+gboolean
+general_enabled(gint i)
+{
+ return (g_list_find(gp_data.enabled_list,
+ get_general_plugin(i)) != NULL);
+}
+
+gchar *
+general_stringify_enabled_list(void)
+{
+ GString *enable_str;
+ gchar *name;
+ GList *node = get_general_enabled_list();
+
+ if (!node)
+ return NULL;
+
+ name = g_path_get_basename(GENERAL_PLUGIN(node->data)->filename);
+ enable_str = g_string_new(name);
+ g_free(name);
+
+ for (node = g_list_next(node); node; node = g_list_next(node)) {
+ name = g_path_get_basename(GENERAL_PLUGIN(node->data)->filename);
+ g_string_append_c(enable_str, ',');
+ g_string_append(enable_str, name);
+ g_free(name);
+ }
+
+ return g_string_free(enable_str, FALSE);
+}
+
+void
+general_enable_from_stringified_list(const gchar * list_str)
+{
+ gchar **list, **str;
+ GeneralPlugin *plugin;
+
+ if (!list_str || !strcmp(list_str, ""))
+ return;
+
+ list = g_strsplit(list_str, ",", 0);
+
+ for (str = list; *str; str++) {
+ GList *node;
+
+ for (node = get_general_list(); node; node = g_list_next(node)) {
+ gchar *base;
+
+ base = g_path_get_basename(GENERAL_PLUGIN(node->data)->filename);
+
+ if (!strcmp(*str, base)) {
+ plugin = GENERAL_PLUGIN(node->data);
+ gp_data.enabled_list = g_list_append(gp_data.enabled_list,
+ plugin);
+ if (plugin->init)
+ plugin->init();
+ }
+
+ g_free(base);
+ }
+ }
+
+ g_strfreev(list);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/general.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,45 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GENERIC_H
+#define GENERIC_H
+
+#include <glib.h>
+
+typedef struct _GeneralPluginData GeneralPluginData;
+
+struct _GeneralPluginData {
+ GList *general_list;
+ GList *enabled_list;
+};
+
+GList *get_general_list(void);
+GList *get_general_enabled_list(void);
+void enable_general_plugin(gint i, gboolean enable);
+void general_about(gint i);
+void general_configure(gint i);
+gboolean general_enabled(gint i);
+gchar *general_stringify_enabled_list(void);
+void general_enable_from_stringified_list(const gchar * list);
+
+extern GeneralPluginData gp_data;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,960 @@
+/* Getopt for GNU.
+ NOTE: getopt is now part of the C library, so if you don't know what
+ "Keep this file name-space clean" means, talk to roland at gnu.ai.mit.edu
+ before changing it!
+
+ Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in /gd/gnu/lib.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+ Ditto for AIX 3.2 and <stdlib.h>. */
+#ifndef _NO_PROTO
+#define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if !defined (__STDC__) || !__STDC__
+/* This is a separate conditional since some stdc systems
+ reject `defined (const)'. */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
+#include <gnu-versions.h>
+#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#define ELIDE_CODE
+#endif
+#endif
+
+#ifndef ELIDE_CODE
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+ contain conflicting prototypes for getopt. */
+#include <stdlib.h>
+#include <unistd.h>
+#endif /* GNU C library. */
+
+#ifdef VMS
+#include <unixlib.h>
+#if HAVE_STRING_H - 0
+#include <string.h>
+#endif
+#endif
+
+#if defined (WIN32) && !defined (__CYGWIN32__)
+/* It's not Unix, really. See? Capital letters. */
+#include <windows.h>
+#define getpid() GetCurrentProcessId()
+#endif
+
+#ifndef _
+/* This is for other GNU distributions with internationalized messages.
+ When compiling libc, the _ macro is predefined. */
+#ifdef HAVE_LIBINTL_H
+#include <libintl.h>
+#define _(msgid) gettext (msgid)
+#else
+#define _(msgid) (msgid)
+#endif
+#endif
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' works, it permutes the elements of ARGV so that,
+ when it is done, all the options precede everything else. Thus
+ all application programs are extended to handle flexible argument order.
+
+ Setting the environment variable POSIXLY_CORRECT disables permutation.
+ Then the behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg = NULL;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+/* 1003.2 says this must be 1 before any call. */
+int optind = 1;
+
+/* Formerly, initialization of getopt depended on optind==0, which
+ causes problems with re-calling getopt as programs generally don't
+ know that. */
+
+int __getopt_initialized = 0;
+
+/* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+ This must be initialized on some systems to avoid linking in the
+ system's own getopt implementation. */
+
+int optopt = '?';
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ stop option processing when the first non-option is seen.
+ This is what Unix does.
+ This mode of operation is selected by either setting the environment
+ variable POSIXLY_CORRECT, or using `+' as the first character
+ of the list of option characters.
+
+ PERMUTE is the default. We permute the contents of ARGV as we scan,
+ so that eventually all the non-options are at the end. This allows options
+ to be given in any order, even with programs that were not written to
+ expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were written
+ to expect options and other ARGV-elements in any order and that care about
+ the ordering of the two. We describe each non-option ARGV-element
+ as if it were the argument of an option with character code 1.
+ Using `-' as the first character of the list of option characters
+ selects this mode of operation.
+
+ The special argument `--' forces an end of option-scanning regardless
+ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+ `--' can cause `getopt' to return -1 with `optind' != ARGC. */
+
+static enum {
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Value of POSIXLY_CORRECT environment variable. */
+static char *posixly_correct;
+
+#ifdef __GNU_LIBRARY__
+/* We want to avoid inclusion of string.h with non-GNU libraries
+ because there are many ways it can cause trouble.
+ On some systems, it contains special magic macros that don't work
+ in GCC. */
+#include <string.h>
+#define my_index strchr
+#else
+
+/* Avoid depending on library functions or files
+ whose names are inconsistent. */
+
+char *getenv();
+
+static char *
+my_index(str, chr)
+ const char *str;
+ int chr;
+{
+ while (*str) {
+ if (*str == chr)
+ return (char *) str;
+ str++;
+ }
+ return 0;
+}
+
+/* If using GCC, we can safely declare strlen this way.
+ If not using GCC, it is ok not to declare it. */
+#ifdef __GNUC__
+/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+ That was relevant to code that was here before. */
+#if !defined (__STDC__) || !__STDC__
+/* gcc with -traditional declares the built-in strlen to return int,
+ and has done so at least since version 2.4.5. -- rms. */
+extern int strlen(const char *);
+
+#endif /* not __STDC__ */
+#endif /* __GNUC__ */
+
+#endif /* not __GNU_LIBRARY__ */
+
+/* Handle permutation of arguments. */
+
+/* Describe the part of ARGV that contains non-options that have
+ been skipped. `first_nonopt' is the index in ARGV of the first of them;
+ `last_nonopt' is the index after the last of them. */
+
+static int first_nonopt;
+static int last_nonopt;
+
+#ifdef _LIBC
+/* Bash 2.0 gives us an environment variable containing flags
+ indicating ARGV elements that should not be considered arguments. */
+
+static const char *nonoption_flags;
+static int nonoption_flags_len;
+
+static int original_argc;
+static char *const *original_argv;
+
+/* Make sure the environment variable bash 2.0 puts in the environment
+ is valid for the getopt call we must make sure that the ARGV passed
+ to getopt is that one passed to the process. */
+static void store_args(int argc, char *const *argv)
+ __attribute__ ((unused));
+static void
+store_args(int argc, char *const *argv)
+{
+ /* XXX This is no good solution. We should rather copy the args so
+ that we can compare them later. But we must not use malloc(3). */
+ original_argc = argc;
+ original_argv = argv;
+}
+
+text_set_element(__libc_subinit, store_args);
+#endif
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ `first_nonopt' and `last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+#if defined (__STDC__) && __STDC__
+static void exchange(char **);
+
+#endif
+
+static void
+exchange(argv)
+ char **argv;
+{
+ int bottom = first_nonopt;
+ int middle = last_nonopt;
+ int top = optind;
+ char *tem;
+
+ /* Exchange the shorter segment with the far end of the longer segment.
+ That puts the shorter segment into the right place.
+ It leaves the longer segment in the right place overall,
+ but it consists of two parts that need to be swapped next. */
+
+ while (top > middle && middle > bottom) {
+ if (top - middle > middle - bottom) {
+ /* Bottom segment is the short one. */
+ int len = middle - bottom;
+ register int i;
+
+ /* Swap it with the top part of the top segment. */
+ for (i = 0; i < len; i++) {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[top - (middle - bottom) + i];
+ argv[top - (middle - bottom) + i] = tem;
+ }
+ /* Exclude the moved bottom segment from further swapping. */
+ top -= len;
+ }
+ else {
+ /* Top segment is the short one. */
+ int len = top - middle;
+ register int i;
+
+ /* Swap it with the bottom part of the bottom segment. */
+ for (i = 0; i < len; i++) {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[middle + i];
+ argv[middle + i] = tem;
+ }
+ /* Exclude the moved top segment from further swapping. */
+ bottom += len;
+ }
+ }
+
+ /* Update records for the slots the non-options now occupy. */
+
+ first_nonopt += (optind - last_nonopt);
+ last_nonopt = optind;
+}
+
+/* Initialize the internal data when the first call is made. */
+
+#if defined (__STDC__) && __STDC__
+static const char *_getopt_initialize(int, char *const *, const char *);
+
+#endif
+static const char *
+_getopt_initialize(argc, argv, optstring)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+{
+ /* Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ first_nonopt = last_nonopt = optind = 1;
+
+ nextchar = NULL;
+
+ posixly_correct = getenv("POSIXLY_CORRECT");
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-') {
+ ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+') {
+ ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (posixly_correct != NULL)
+ ordering = REQUIRE_ORDER;
+ else
+ ordering = PERMUTE;
+
+#ifdef _LIBC
+ if (posixly_correct == NULL
+ && argc == original_argc && argv == original_argv) {
+ /* Bash 2.0 puts a special variable in the environment for each
+ command it runs, specifying which ARGV elements are the results of
+ file name wildcard expansion and therefore should not be
+ considered as options. */
+ char var[100];
+
+ sprintf(var, "_%d_GNU_nonoption_argv_flags_", getpid());
+ nonoption_flags = getenv(var);
+ if (nonoption_flags == NULL)
+ nonoption_flags_len = 0;
+ else
+ nonoption_flags_len = strlen(nonoption_flags);
+ }
+ else
+ nonoption_flags_len = 0;
+#endif
+
+ return optstring;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If `getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If `getopt' finds another option character, it returns that character,
+ updating `optind' and `nextchar' so that the next call to `getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, `getopt' returns -1.
+ Then `optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set `opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in `optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ If OPTSTRING starts with `-' or `+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with `--' instead of `-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a `=', or else the in next ARGV-element.
+ When `getopt' finds a long-named option, it returns 0 if that option's
+ `flag' field is nonzero, the value of the option's `val' field
+ if the `flag' field is zero.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ LONGOPTS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+
+ LONGIND returns the index in LONGOPT of the long-named option found.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options. */
+
+int
+_getopt_internal(argc, argv, optstring, longopts, longind, long_only)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+ const struct option *longopts;
+ int *longind;
+ int long_only;
+{
+ optarg = NULL;
+
+ if (!__getopt_initialized || optind == 0) {
+ optstring = _getopt_initialize(argc, argv, optstring);
+ optind = 1; /* Don't scan ARGV[0], the program name. */
+ __getopt_initialized = 1;
+ }
+
+ /* Test whether ARGV[optind] points to a non-option argument.
+ Either it does not have option syntax, or there is an environment flag
+ from the shell indicating it is not an option. The later information
+ is only used when the used in the GNU libc. */
+#ifdef _LIBC
+#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
+ || (optind < nonoption_flags_len \
+ && nonoption_flags[optind] == '1'))
+#else
+#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
+#endif
+
+ if (nextchar == NULL || *nextchar == '\0') {
+ /* Advance to the next ARGV-element. */
+
+ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+ moved back by the user (who may also have changed the arguments). */
+ if (last_nonopt > optind)
+ last_nonopt = optind;
+ if (first_nonopt > optind)
+ first_nonopt = optind;
+
+ if (ordering == PERMUTE) {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange((char **) argv);
+ else if (last_nonopt != optind)
+ first_nonopt = optind;
+
+ /* Skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (optind < argc && NONOPTION_P)
+ optind++;
+ last_nonopt = optind;
+ }
+
+ /* The special ARGV-element `--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (optind != argc && !strcmp(argv[optind], "--")) {
+ optind++;
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange((char **) argv);
+ else if (first_nonopt == last_nonopt)
+ first_nonopt = optind;
+ last_nonopt = argc;
+
+ optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (optind == argc) {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (first_nonopt != last_nonopt)
+ optind = first_nonopt;
+ return -1;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if (NONOPTION_P) {
+ if (ordering == REQUIRE_ORDER)
+ return -1;
+ optarg = argv[optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Skip the initial punctuation. */
+
+ nextchar = (argv[optind] + 1
+ + (longopts != NULL && argv[optind][1] == '-'));
+ }
+
+ /* Decode the current option-ARGV-element. */
+
+ /* Check whether the ARGV-element is a long option.
+
+ If long_only and the ARGV-element has the form "-f", where f is
+ a valid short option, don't consider it an abbreviated form of
+ a long option that starts with f. Otherwise there would be no
+ way to give the -f short option.
+
+ On the other hand, if there's a long option "fubar" and
+ the ARGV-element is "-fu", do consider that an abbreviation of
+ the long option, just like "--fu", and not "-f" with arg "u".
+
+ This distinction seems to be the most useful approach. */
+
+ if (longopts != NULL
+ && (argv[optind][1] == '-' || (long_only && (argv[optind][2]
+ ||
+ !my_index(optstring,
+ argv[optind]
+ [1]))))) {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = -1;
+ int option_index;
+
+ for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp(p->name, nextchar, nameend - nextchar)) {
+ if ((unsigned int) (nameend - nextchar)
+ == (unsigned int) strlen(p->name)) {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL) {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact) {
+ if (opterr)
+ fprintf(stderr, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[optind]);
+ nextchar += strlen(nextchar);
+ optind++;
+ optopt = 0;
+ return '?';
+ }
+
+ if (pfound != NULL) {
+ option_index = indfound;
+ optind++;
+ if (*nameend) {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ optarg = nameend + 1;
+ else {
+ if (opterr)
+ if (argv[optind - 1][1] == '-')
+ /* --option */
+ fprintf(stderr,
+ _
+ ("%s: option `--%s' doesn't allow an argument\n"),
+ argv[0], pfound->name);
+ else
+ /* +option or -option */
+ fprintf(stderr,
+ _
+ ("%s: option `%c%s' doesn't allow an argument\n"),
+ argv[0], argv[optind - 1][0],
+ pfound->name);
+
+ nextchar += strlen(nextchar);
+
+ optopt = pfound->val;
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1) {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else {
+ if (opterr)
+ fprintf(stderr,
+ _
+ ("%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]);
+ nextchar += strlen(nextchar);
+ optopt = pfound->val;
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ nextchar += strlen(nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag) {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short
+ option, then it's an error.
+ Otherwise interpret it as a short option. */
+ if (!long_only || argv[optind][1] == '-'
+ || my_index(optstring, *nextchar) == NULL) {
+ if (opterr) {
+ if (argv[optind][1] == '-')
+ /* --option */
+ fprintf(stderr, _("%s: unrecognized option `--%s'\n"),
+ argv[0], nextchar);
+ else
+ /* +option or -option */
+ fprintf(stderr, _("%s: unrecognized option `%c%s'\n"),
+ argv[0], argv[optind][0], nextchar);
+ }
+ nextchar = (char *) "";
+ optind++;
+ optopt = 0;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next short option-character. */
+
+ {
+ char c = *nextchar++;
+ char *temp = my_index(optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*nextchar == '\0')
+ ++optind;
+
+ if (temp == NULL || c == ':') {
+ if (opterr) {
+ if (posixly_correct)
+ /* 1003.2 specifies the format of this message. */
+ fprintf(stderr, _("%s: illegal option -- %c\n"),
+ argv[0], c);
+ else
+ fprintf(stderr, _("%s: invalid option -- %c\n"),
+ argv[0], c);
+ }
+ optopt = c;
+ return '?';
+ }
+ /* Convenience. Treat POSIX -W foo same as long option --foo */
+ if (temp[0] == 'W' && temp[1] == ';') {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = 0;
+ int option_index;
+
+ /* This is an option that requires an argument. */
+ if (*nextchar != '\0') {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc) {
+ if (opterr) {
+ /* 1003.2 specifies the format of this message. */
+ fprintf(stderr,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+ }
+ optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ return c;
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+
+ /* optarg is now the argument, see if it's in the
+ table of longopts. */
+
+ for (nextchar = nameend = optarg; *nameend && *nameend != '=';
+ nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp(p->name, nextchar, nameend - nextchar)) {
+ if ((unsigned int) (nameend - nextchar) ==
+ strlen(p->name)) {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL) {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+ if (ambig && !exact) {
+ if (opterr)
+ fprintf(stderr, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[optind]);
+ nextchar += strlen(nextchar);
+ optind++;
+ return '?';
+ }
+ if (pfound != NULL) {
+ option_index = indfound;
+ if (*nameend) {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ optarg = nameend + 1;
+ else {
+ if (opterr)
+ fprintf(stderr, _("\
+%s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name);
+
+ nextchar += strlen(nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1) {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else {
+ if (opterr)
+ fprintf(stderr,
+ _
+ ("%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]);
+ nextchar += strlen(nextchar);
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ nextchar += strlen(nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag) {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+ nextchar = NULL;
+ return 'W'; /* Let the application handle it. */
+ }
+ if (temp[1] == ':') {
+ if (temp[2] == ':') {
+ /* This is an option that accepts an argument optionally. */
+ if (*nextchar != '\0') {
+ optarg = nextchar;
+ optind++;
+ }
+ else
+ optarg = NULL;
+ nextchar = NULL;
+ }
+ else {
+ /* This is an option that requires an argument. */
+ if (*nextchar != '\0') {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc) {
+ if (opterr) {
+ /* 1003.2 specifies the format of this message. */
+ fprintf(stderr,
+ _
+ ("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+ }
+ optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+ nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+getopt(argc, argv, optstring)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+{
+ return _getopt_internal(argc, argv, optstring,
+ (const struct option *) 0, (int *) 0, 0);
+}
+
+#endif /* Not ELIDE_CODE. */
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1) {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt(argc, argv, "abc:d:0123456789");
+ if (c == -1)
+ break;
+
+ switch (c) {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf("option %c\n", c);
+ break;
+
+ case 'a':
+ printf("option a\n");
+ break;
+
+ case 'b':
+ printf("option b\n");
+ break;
+
+ case 'c':
+ printf("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc) {
+ printf("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf("%s ", argv[optind++]);
+ printf("\n");
+ }
+
+ exit(0);
+}
+
+#endif /* TEST */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,132 @@
+/* Declarations for getopt.
+ Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in /gd/gnu/lib.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _GETOPT_H
+#define _GETOPT_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+ extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+ extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+ for unrecognized options. */
+
+ extern int opterr;
+
+/* Set to an option character which was unrecognized. */
+
+ extern int optopt;
+
+/* Describe the long-named options requested by the application.
+ The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+ of `struct option' terminated by an element containing a name which is
+ zero.
+
+ The field `has_arg' is:
+ no_argument (or 0) if the option does not take an argument,
+ required_argument (or 1) if the option requires an argument,
+ optional_argument (or 2) if the option takes an optional argument.
+
+ If the field `flag' is not NULL, it points to a variable that is set
+ to the value given in the field `val' when the option is found, but
+ left unchanged if the option is not found.
+
+ To have a long-named option do something other than set an `int' to
+ a compiled-in constant, such as set a value from `optarg', set the
+ option's `flag' field to zero and its `val' field to a nonzero
+ value (the equivalent single-letter option character, if there is
+ one). For long options that have a zero `flag' field, `getopt'
+ returns the contents of the `val' field. */
+
+ struct option {
+#if defined (__STDC__) && __STDC__
+ const char *name;
+#else
+ char *name;
+#endif
+ /* has_arg can't be an enum because some compilers complain about
+ type mismatches in all the code that assumes it is an int. */
+ int has_arg;
+ int *flag;
+ int val;
+ };
+
+/* Names for the values of the `has_arg' field of `struct option'. */
+
+#define no_argument 0
+#define required_argument 1
+#define optional_argument 2
+
+#if defined (__STDC__) && __STDC__
+#ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+ differences in the consts, in stdlib.h. To avoid compilation
+ errors, only prototype getopt for the GNU C library. */
+ extern int getopt(int argc, char *const *argv, const char *shortopts);
+#else /* not __GNU_LIBRARY__ */
+ extern int getopt();
+#endif /* __GNU_LIBRARY__ */
+ extern int getopt_long(int argc, char *const *argv,
+ const char *shortopts,
+ const struct option *longopts, int *longind);
+ extern int getopt_long_only(int argc, char *const *argv,
+ const char *shortopts,
+ const struct option *longopts, int *longind);
+
+/* Internal only. Users should not call this directly. */
+ extern int _getopt_internal(int argc, char *const *argv,
+ const char *shortopts,
+ const struct option *longopts,
+ int *longind, int long_only);
+#else /* not __STDC__ */
+ extern int getopt();
+ extern int getopt_long();
+ extern int getopt_long_only();
+
+ extern int _getopt_internal();
+#endif /* __STDC__ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _GETOPT_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt1.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt1.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/getopt1.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,183 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+ Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in /gd/gnu/lib.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "getopt.h"
+
+#if !defined (__STDC__) || !__STDC__
+/* This is a separate conditional since some stdc systems
+ reject `defined (const)'. */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
+#include <gnu-versions.h>
+#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#define ELIDE_CODE
+#endif
+#endif
+
+#ifndef ELIDE_CODE
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long(argc, argv, options, long_options, opt_index)
+ int argc;
+ char *const *argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ return _getopt_internal(argc, argv, options, long_options, opt_index, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+ If an option that starts with '-' (not '--') doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only(argc, argv, options, long_options, opt_index)
+ int argc;
+ char *const *argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ return _getopt_internal(argc, argv, options, long_options, opt_index, 1);
+}
+
+#endif /* Not ELIDE_CODE. */
+
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1) {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] = {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long(argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c) {
+ case 0:
+ printf("option %s", long_options[option_index].name);
+ if (optarg)
+ printf(" with arg %s", optarg);
+ printf("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf("option %c\n", c);
+ break;
+
+ case 'a':
+ printf("option a\n");
+ break;
+
+ case 'b':
+ printf("option b\n");
+ break;
+
+ case 'c':
+ printf("option c with value `%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf("option d with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc) {
+ printf("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf("%s ", argv[optind++]);
+ printf("\n");
+ }
+
+ exit(0);
+}
+
+#endif /* TEST */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,159 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gmodule.h>
+#include <gtk/gtk.h>
+//#include <glade/glade.h>
+
+#include <stdlib.h>
+
+#include "glade.h"
+
+/*
+GladeXML *
+glade_xml_new_or_die(const gchar * name,
+ const gchar * path,
+ const gchar * root,
+ const gchar * domain)
+{
+ const gchar *markup =
+ N_("<b><big>Unable to create %s.</big></b>\n"
+ "\n"
+ "Could not open glade file (%s). Please check your "
+ "installation.\n");
+
+ GladeXML *xml = glade_xml_new(path, root, domain);
+
+ if (!xml) {
+ GtkWidget *dialog =
+ gtk_message_dialog_new_with_markup(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _(markup),
+ name, path);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+
+ exit(EXIT_FAILURE);
+ }
+
+ return xml;
+}
+
+GtkWidget *
+glade_xml_get_widget_warn(GladeXML * xml, const gchar * name)
+{
+ GtkWidget *widget = glade_xml_get_widget(xml, name);
+
+ if (!widget) {
+ g_warning("Widget not found (%s)", name);
+ return NULL;
+ }
+
+ return widget;
+}
+
+
+static GCallback
+self_symbol_lookup(const gchar * symbol_name)
+{
+ static GModule *module = NULL;
+ gpointer symbol = NULL;
+
+ if (!module)
+ module = g_module_open(NULL, 0);
+
+ g_module_symbol(module, symbol_name, &symbol);
+ return (GCallback) symbol;
+}
+
+static GHashTable *
+func_map_to_hash(FuncMap * map)
+{
+ GHashTable *hash;
+ FuncMap *current;
+
+ g_return_val_if_fail(map != NULL, NULL);
+
+ hash = g_hash_table_new(g_str_hash, g_str_equal);
+
+ for (current = map; current->name; current++)
+ g_hash_table_insert(hash, current->name, (gpointer) current->function);
+
+ return hash;
+}
+
+static void
+map_connect_func(const gchar * handler_name,
+ GObject * object,
+ const gchar * signal_name,
+ const gchar * signal_data,
+ GObject * connect_object,
+ gboolean after,
+ gpointer data)
+{
+ GHashTable *hash = data;
+ GCallback callback;
+
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(handler_name != NULL);
+ g_return_if_fail(signal_name != NULL);
+
+ if (!(callback = self_symbol_lookup(handler_name)))
+ callback = (GCallback) g_hash_table_lookup(hash, handler_name);
+
+ if (!callback) {
+ g_message("Signal handler (%s) not found", handler_name);
+ return;
+ }
+
+ if (connect_object) {
+ g_signal_connect_object(object, signal_name, callback,
+ connect_object,
+ (after ? G_CONNECT_AFTER : 0) |
+ G_CONNECT_SWAPPED);
+ }
+ else {
+ if (after)
+ g_signal_connect_after(object, signal_name, callback, NULL);
+ else
+ g_signal_connect(object, signal_name, callback, NULL);
+ }
+}
+
+void
+glade_xml_signal_autoconnect_map(GladeXML * xml,
+ FuncMap * map)
+{
+ GHashTable *hash;
+
+ g_return_if_fail(xml != NULL);
+ g_return_if_fail(map != NULL);
+
+ hash = func_map_to_hash(map);
+ glade_xml_signal_autoconnect_full(xml, map_connect_func, hash);
+ g_hash_table_destroy(hash);
+}
+*/
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/glade.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,47 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef BMP_GLADE_H
+#define BMP_GLADE_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+//#include <glade/glade.h>
+
+
+typedef struct _FuncMap FuncMap;
+
+struct _FuncMap {
+ gchar *name;
+ GCallback function;
+};
+
+
+#define FUNC_MAP_BEGIN(map) static FuncMap map[] = {
+#define FUNC_MAP_ENTRY(function) { #function, (GCallback) function },
+#define FUNC_MAP_END { NULL, NULL } };
+
+/*
+GladeXML *glade_xml_new_or_die(const gchar * name, const gchar * path,
+ const gchar * root, const gchar * domain);
+
+GtkWidget *glade_xml_get_widget_warn(GladeXML * xml, const gchar * name);
+
+void glade_xml_signal_autoconnect_map(GladeXML * xml, FuncMap * map);
+*/
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,337 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "hints.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "equalizer.h"
+#include "mainwin.h"
+#include "playlistwin.h"
+
+#include <gdk/gdkx.h>
+#include <gdk/gdkprivate.h>
+#include <X11/Xlib.h>
+#include <X11/Xmd.h>
+#include <X11/Xatom.h>
+
+/* flags for the window layer */
+typedef enum {
+ WIN_LAYER_DESKTOP = 0,
+ WIN_LAYER_BELOW = 2,
+ WIN_LAYER_NORMAL = 4,
+ WIN_LAYER_ONTOP = 6,
+ WIN_LAYER_DOCK = 8,
+ WIN_LAYER_ABOVE_DOCK = 10
+} WinLayer;
+
+#define WIN_STATE_STICKY (1 << 0)
+
+#define WIN_HINTS_SKIP_WINLIST (1 << 1) /* not in win list */
+#define WIN_HINTS_SKIP_TASKBAR (1 << 2) /* not on taskbar */
+
+#define _NET_WM_STATE_REMOVE 0
+#define _NET_WM_STATE_ADD 1
+#define _NET_WM_STATE_TOGGLE 2
+
+#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT 0
+#define _NET_WM_MOVERESIZE_SIZE_TOP 1
+#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT 2
+#define _NET_WM_MOVERESIZE_SIZE_RIGHT 3
+#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4
+#define _NET_WM_MOVERESIZE_SIZE_BOTTOM 5
+#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT 6
+#define _NET_WM_MOVERESIZE_SIZE_LEFT 7
+#define _NET_WM_MOVERESIZE_MOVE 8
+
+
+static void (*set_always_func) (GtkWidget *, gboolean) = NULL;
+static void (*set_sticky_func) (GtkWidget *, gboolean) = NULL;
+static void (*set_skip_winlist_func) (GtkWidget *) = NULL;
+static void (*move_resize_func) (GtkWidget *, gint, gint, gboolean) = NULL;
+
+void
+hint_set_skip_winlist(GtkWidget * window)
+{
+ if (set_skip_winlist_func)
+ set_skip_winlist_func(window);
+}
+
+void
+hint_set_always(gboolean always)
+{
+ if (set_always_func) {
+ set_always_func(mainwin, always);
+ set_always_func(equalizerwin, always);
+ set_always_func(playlistwin, always);
+ }
+}
+
+gboolean
+hint_always_on_top_available(void)
+{
+ return !!set_always_func;
+}
+
+void
+hint_set_sticky(gboolean sticky)
+{
+ if (sticky) {
+ gtk_window_stick(GTK_WINDOW(mainwin));
+ gtk_window_stick(GTK_WINDOW(equalizerwin));
+ gtk_window_stick(GTK_WINDOW(playlistwin));
+ }
+ else {
+ gtk_window_unstick(GTK_WINDOW(mainwin));
+ gtk_window_unstick(GTK_WINDOW(equalizerwin));
+ gtk_window_unstick(GTK_WINDOW(playlistwin));
+ }
+}
+
+gboolean
+hint_move_resize_available(void)
+{
+ return !!move_resize_func;
+}
+
+void
+hint_move_resize(GtkWidget * window, gint x, gint y, gboolean move)
+{
+ move_resize_func(window, x, y, move);
+}
+
+static gboolean
+net_wm_found(void)
+{
+ Atom r_type, support_check;
+ gint r_format, p;
+ gulong count, bytes_remain;
+ guchar *prop = NULL, *prop2 = NULL;
+ gboolean ret = FALSE;
+
+ gdk_error_trap_push();
+ support_check =
+ XInternAtom(GDK_DISPLAY(), "_NET_SUPPORTING_WM_CHECK", FALSE);
+
+ p = XGetWindowProperty(GDK_DISPLAY(), GDK_ROOT_WINDOW(), support_check,
+ 0, 1, False, XA_WINDOW, &r_type, &r_format,
+ &count, &bytes_remain, &prop);
+
+ if (p == Success && prop && r_type == XA_WINDOW &&
+ r_format == 32 && count == 1) {
+ Window n = *(Window *) prop;
+
+ p = XGetWindowProperty(GDK_DISPLAY(), n, support_check, 0, 1,
+ False, XA_WINDOW, &r_type, &r_format,
+ &count, &bytes_remain, &prop2);
+
+ if (p == Success && prop2 && *prop2 == *prop &&
+ r_type == XA_WINDOW && r_format == 32 && count == 1)
+ ret = TRUE;
+ }
+
+ if (prop)
+ XFree(prop);
+ if (prop2)
+ XFree(prop2);
+ if (gdk_error_trap_pop())
+ return FALSE;
+ return ret;
+}
+
+static void
+net_wm_set_property(GtkWidget * window, gchar * atom, gboolean state)
+{
+ XEvent xev;
+ gint set = _NET_WM_STATE_ADD;
+ Atom type, property;
+
+ if (state == FALSE)
+ set = _NET_WM_STATE_REMOVE;
+
+ type = XInternAtom(GDK_DISPLAY(), "_NET_WM_STATE", FALSE);
+ property = XInternAtom(GDK_DISPLAY(), atom, FALSE);
+
+
+ xev.type = ClientMessage;
+ xev.xclient.type = ClientMessage;
+ xev.xclient.window = GDK_WINDOW_XWINDOW(window->window);
+ xev.xclient.message_type = type;
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = set;
+ xev.xclient.data.l[1] = property;
+ xev.xclient.data.l[2] = 0;
+
+ XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), False,
+ SubstructureNotifyMask, &xev);
+}
+
+static void
+net_wm_set_desktop(GtkWidget * window, gboolean all)
+{
+ XEvent xev;
+ guint32 current_desktop = 0;
+
+ if (!all) {
+ gint r_format, p;
+ gulong count, bytes_remain;
+ guchar *prop;
+ Atom r_type;
+ Atom current =
+ XInternAtom(GDK_DISPLAY(), "_NET_CURRENT_DESKTOP", FALSE);
+
+ p = XGetWindowProperty(GDK_DISPLAY(), GDK_ROOT_WINDOW(), current,
+ 0, 1, False, XA_CARDINAL, &r_type,
+ &r_format, &count, &bytes_remain, &prop);
+
+ if (p == Success && prop && r_type == XA_CARDINAL &&
+ r_format == 32 && count == 1) {
+ current_desktop = *(long *) prop;
+ XFree(prop);
+ }
+ }
+ else
+ current_desktop = 0xffffffff;
+
+ xev.type = ClientMessage;
+ xev.xclient.type = ClientMessage;
+ xev.xclient.window = GDK_WINDOW_XWINDOW(window->window);
+ xev.xclient.message_type =
+ XInternAtom(GDK_DISPLAY(), "_NET_WM_DESKTOP", FALSE);
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = current_desktop;
+
+ XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), False,
+ SubstructureNotifyMask, &xev);
+}
+
+
+
+static void
+net_wm_set_window_always(GtkWidget * window, gboolean always)
+{
+ net_wm_set_property(window, "_NET_WM_STATE_STAYS_ON_TOP", always);
+}
+
+static void
+net_wm_set_window_above(GtkWidget * window, gboolean always)
+{
+ net_wm_set_property(window, "_NET_WM_STATE_ABOVE", always);
+}
+
+static void
+net_wm_move_resize(GtkWidget * window, gint x, gint y, gboolean move)
+{
+ XEvent xev;
+ gint dir;
+ Atom type;
+
+ if (move)
+ dir = _NET_WM_MOVERESIZE_MOVE;
+ else
+ dir = _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT;
+
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+
+ type = XInternAtom(GDK_DISPLAY(), "_NET_WM_MOVERESIZE", FALSE);
+
+ xev.type = ClientMessage;
+ xev.xclient.type = ClientMessage;
+ xev.xclient.window = GDK_WINDOW_XWINDOW(window->window);
+ xev.xclient.message_type = type;
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = x;
+ xev.xclient.data.l[1] = y;
+ xev.xclient.data.l[2] = dir;
+ xev.xclient.data.l[3] = 1; /* button */
+
+
+ XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), False,
+ SubstructureNotifyMask, &xev);
+}
+
+static gboolean
+find_atom(Atom * atoms, gint n, const gchar * name)
+{
+ Atom a = XInternAtom(GDK_DISPLAY(), name, FALSE);
+ gint i;
+
+ for (i = 0; i < n; i++)
+ if (a == atoms[i])
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+get_supported_atoms(Atom ** atoms, gulong * natoms, const gchar * name)
+{
+ Atom supported = XInternAtom(GDK_DISPLAY(), name, FALSE), r_type;
+ gulong bremain;
+ gint r_format, p;
+
+ *atoms = NULL;
+ gdk_error_trap_push();
+ p = XGetWindowProperty(GDK_DISPLAY(), GDK_ROOT_WINDOW(), supported,
+ 0, 1000, False, XA_ATOM, &r_type, &r_format,
+ natoms, &bremain, (guchar **) atoms);
+ if (gdk_error_trap_pop() || p != Success || r_type != XA_ATOM ||
+ *natoms == 0 || *atoms == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+net_wm_check_features(void)
+{
+ Atom *atoms;
+ gulong n_atoms;
+
+ if (!get_supported_atoms(&atoms, &n_atoms, "_NET_SUPPORTED"))
+ return;
+
+ if (find_atom(atoms, n_atoms, "_NET_WM_STATE")) {
+ if (!set_always_func &&
+ find_atom(atoms, n_atoms, "_NET_WM_STATE_ABOVE"))
+ set_always_func = net_wm_set_window_above;
+ if (!set_always_func &&
+ find_atom(atoms, n_atoms, "_NET_WM_STATE_STAYS_ON_TOP"))
+ set_always_func = net_wm_set_window_always;
+ if (!set_sticky_func && find_atom(atoms, n_atoms, "_NET_WM_DESKTOP"))
+ set_sticky_func = net_wm_set_desktop;
+ }
+
+ if (find_atom(atoms, n_atoms, "_NET_WM_MOVERESIZE"))
+ move_resize_func = net_wm_move_resize;
+
+ XFree(atoms);
+}
+
+void
+check_wm_hints(void)
+{
+ if (net_wm_found()) {
+ g_message("found NET_WM");
+ net_wm_check_features();
+ }
+
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hints.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,41 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HINTS_H
+#define HINTS_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+/* Window Managers */
+#define WM_HINTS_NONE 0
+#define WM_HINTS_GNOME 1
+#define WM_HINTS_NET 2
+
+void check_wm_hints(void);
+void hint_set_always(gboolean always);
+void hint_set_skip_winlist(GtkWidget * window);
+void hint_set_sticky(gboolean sticky);
+gboolean hint_always_on_top_available(void);
+gboolean hint_move_resize_available(void);
+void hint_move_resize(GtkWidget * window, gint x, gint y, gboolean move);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,203 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "hslider.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+#include "skin.h"
+
+void
+hslider_set_position(HSlider * hs,
+ gint pos)
+{
+ if (pos == hs->hs_position || hs->hs_pressed)
+ return;
+
+ hs->hs_position = pos;
+
+ if (hs->hs_frame_cb)
+ hs->hs_frame = hs->hs_frame_cb(hs->hs_position);
+
+ widget_draw(WIDGET(hs));
+}
+
+gint
+hslider_get_position(HSlider * hs)
+{
+ return hs->hs_position;
+}
+
+void
+hslider_draw(Widget * w)
+{
+ HSlider *hs = (HSlider *) w;
+ GdkPixmap *obj;
+
+ obj = hs->hs_widget.parent;
+
+ skin_draw_pixmap(bmp_active_skin, obj, hs->hs_widget.gc,
+ hs->hs_skin_index, hs->hs_frame_offset,
+ hs->hs_frame * hs->hs_frame_height, hs->hs_widget.x,
+ hs->hs_widget.y, hs->hs_widget.width,
+ hs->hs_widget.height);
+ if (hs->hs_pressed)
+ skin_draw_pixmap(bmp_active_skin, obj, hs->hs_widget.gc,
+ hs->hs_skin_index, hs->hs_knob_px,
+ hs->hs_knob_py, hs->hs_widget.x + hs->hs_position,
+ hs->hs_widget.y +
+ ((hs->hs_widget.height - hs->hs_knob_height) / 2),
+ hs->hs_knob_width, hs->hs_knob_height);
+ else
+ skin_draw_pixmap(bmp_active_skin, obj, hs->hs_widget.gc,
+ hs->hs_skin_index, hs->hs_knob_nx, hs->hs_knob_ny,
+ hs->hs_widget.x + hs->hs_position,
+ hs->hs_widget.y +
+ ((hs->hs_widget.height - hs->hs_knob_height) / 2),
+ hs->hs_knob_width, hs->hs_knob_height);
+}
+
+void
+hslider_button_press_cb(GtkWidget * w,
+ GdkEventButton * event,
+ gpointer data)
+{
+ HSlider *hs = HSLIDER(data);
+ gint x;
+
+ if (event->button != 1)
+ return;
+
+ if (widget_contains(&hs->hs_widget, event->x, event->y)) {
+ x = event->x - hs->hs_widget.x;
+ hs->hs_pressed = TRUE;
+
+ if (x >= hs->hs_position && x < hs->hs_position + hs->hs_knob_width)
+ hs->hs_pressed_x = x - hs->hs_position;
+ else {
+ hs->hs_position = x - (hs->hs_knob_width / 2);
+ hs->hs_pressed_x = hs->hs_knob_width / 2;
+ if (hs->hs_position < hs->hs_min)
+ hs->hs_position = hs->hs_min;
+ if (hs->hs_position > hs->hs_max)
+ hs->hs_position = hs->hs_max;
+ if (hs->hs_frame_cb)
+ hs->hs_frame = hs->hs_frame_cb(hs->hs_position);
+
+ }
+
+ if (hs->hs_motion_cb)
+ hs->hs_motion_cb(hs->hs_position);
+
+ widget_draw(WIDGET(hs));
+ }
+}
+
+void
+hslider_motion_cb(GtkWidget * w, GdkEventMotion * event, gpointer data)
+{
+ HSlider *hs = (HSlider *) data;
+ gint x;
+
+ if (hs->hs_pressed) {
+ if (!hs->hs_widget.visible) {
+ hs->hs_pressed = FALSE;
+ return;
+ }
+
+ x = event->x - hs->hs_widget.x;
+ hs->hs_position = x - hs->hs_pressed_x;
+
+ if (hs->hs_position < hs->hs_min)
+ hs->hs_position = hs->hs_min;
+
+ if (hs->hs_position > hs->hs_max)
+ hs->hs_position = hs->hs_max;
+
+ if (hs->hs_frame_cb)
+ hs->hs_frame = hs->hs_frame_cb(hs->hs_position);
+
+ if (hs->hs_motion_cb)
+ hs->hs_motion_cb(hs->hs_position);
+
+ widget_draw(WIDGET(hs));
+ }
+}
+
+void
+hslider_button_release_cb(GtkWidget * w,
+ GdkEventButton * event,
+ gpointer data)
+{
+ HSlider *hs = HSLIDER(data);
+
+ if (hs->hs_pressed) {
+ hs->hs_pressed = FALSE;
+
+ if (hs->hs_release_cb)
+ hs->hs_release_cb(hs->hs_position);
+
+ widget_draw(WIDGET(hs));
+ }
+}
+
+HSlider *
+create_hslider(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint knx, gint kny,
+ gint kpx, gint kpy, gint kw, gint kh, gint fh,
+ gint fo, gint min, gint max, gint(*fcb) (gint),
+ void (*mcb) (gint), void (*rcb) (gint), SkinPixmapId si)
+{
+ HSlider *hs;
+
+ hs = g_new0(HSlider, 1);
+ widget_init(&hs->hs_widget, parent, gc, x, y, w, h, 1);
+ hs->hs_widget.button_press_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ hslider_button_press_cb;
+ hs->hs_widget.button_release_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ hslider_button_release_cb;
+ hs->hs_widget.motion_cb =
+ (void (*)(GtkWidget *, GdkEventMotion *, gpointer))
+ hslider_motion_cb;
+ hs->hs_widget.draw = hslider_draw;
+ hs->hs_knob_nx = knx;
+ hs->hs_knob_ny = kny;
+ hs->hs_knob_px = kpx;
+ hs->hs_knob_py = kpy;
+ hs->hs_knob_width = kw;
+ hs->hs_knob_height = kh;
+ hs->hs_frame_height = fh;
+ hs->hs_frame_offset = fo;
+ hs->hs_min = min;
+ hs->hs_position = min;
+ hs->hs_max = max;
+ hs->hs_frame_cb = fcb;
+ hs->hs_motion_cb = mcb;
+ hs->hs_release_cb = rcb;
+ if (hs->hs_frame_cb)
+ hs->hs_frame = hs->hs_frame_cb(0);
+ hs->hs_skin_index = si;
+
+ widget_list_add(wlist, WIDGET(hs));
+
+ return hs;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/hslider.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,54 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef HSLIDER_H
+#define HSLIDER_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+#include "widget.h"
+
+#define HSLIDER(x) ((HSlider *)(x))
+struct _HSlider {
+ Widget hs_widget;
+ gint hs_frame, hs_frame_offset, hs_frame_height, hs_min, hs_max;
+ gint hs_knob_nx, hs_knob_ny, hs_knob_px, hs_knob_py;
+ gint hs_knob_width, hs_knob_height;
+ gint hs_position;
+ gboolean hs_pressed;
+ gint hs_pressed_x, hs_pressed_y;
+ gint(*hs_frame_cb) (gint);
+ void (*hs_motion_cb) (gint);
+ void (*hs_release_cb) (gint);
+ SkinPixmapId hs_skin_index;
+};
+
+typedef struct _HSlider HSlider;
+
+HSlider *create_hslider(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint knx, gint kny,
+ gint kpx, gint kpy, gint kw, gint kh, gint fh,
+ gint fo, gint min, gint max, gint(*fcb) (gint),
+ void (*mcb) (gint), void (*rcb) (gint),
+ SkinPixmapId si);
+
+void hslider_set_position(HSlider * hs, gint pos);
+gint hslider_get_position(HSlider * hs);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,217 @@
+/*
+ * PCM time-domain equalizer
+ *
+ * Copyright (C) 2002 Felipe Rivera <liebremx at users sourceforge 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 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.
+ *
+ * $Id: iir.c,v 1.5 2004/06/20 18:48:54 mderezynski Exp $
+ */
+
+#include "equalizer.h"
+#include "main.h"
+#include <math.h>
+#include <string.h>
+#include "output.h"
+
+#include "iir.h"
+
+// Fixed Point Fractional bits
+#define FP_FRBITS 28
+
+// Conversions
+#define EQ_REAL(x) ((gint)((x) * (1 << FP_FRBITS)))
+
+/* Floating point */
+typedef struct {
+ float beta;
+ float alpha;
+ float gamma;
+} sIIRCoefficients;
+
+/* Coefficient history for the IIR filter */
+typedef struct {
+ float x[3]; /* x[n], x[n-1], x[n-2] */
+ float y[3]; /* y[n], y[n-1], y[n-2] */
+} sXYData;
+
+/* BETA, ALPHA, GAMMA */
+static sIIRCoefficients iir_cforiginal10[] = {
+ {(9.9421504945e-01), (2.8924752745e-03), (1.9941421835e+00)}, /* 60.0 Hz */
+ {(9.8335039428e-01), (8.3248028618e-03), (1.9827686547e+00)}, /* 170.0 Hz */
+ {(9.6958094144e-01), (1.5209529281e-02), (1.9676601546e+00)}, /* 310.0 Hz */
+ {(9.4163923306e-01), (2.9180383468e-02), (1.9345490229e+00)}, /* 600.0 Hz */
+ {(9.0450844499e-01), (4.7745777504e-02), (1.8852109613e+00)}, /* 1000.0 Hz */
+ {(7.3940088234e-01), (1.3029955883e-01), (1.5829158753e+00)}, /* 3000.0 Hz */
+ {(5.4697667908e-01), (2.2651166046e-01), (1.0153238114e+00)}, /* 6000.0 Hz */
+ {(3.1023210589e-01), (3.4488394706e-01), (-1.8142472036e-01)}, /* 12000.0 Hz */
+ {(2.6718639778e-01), (3.6640680111e-01), (-5.2117742267e-01)}, /* 14000.0 Hz */
+ {(2.4201241845e-01), (3.7899379077e-01), (-8.0847117831e-01)}, /* 16000.0 Hz */
+};
+
+/* History for two filters */
+static sXYData data_history[EQ_MAX_BANDS][EQ_CHANNELS];
+static sXYData data_history2[EQ_MAX_BANDS][EQ_CHANNELS];
+
+/* Coefficients */
+static sIIRCoefficients *iir_cf;
+
+/* Gain for each band
+ * values should be between -0.2 and 1.0 */
+float gain[10];
+float preamp;
+
+int round_trick(float floatvalue_to_round);
+
+/* Init the filter */
+void
+init_iir()
+{
+ iir_cf = iir_cforiginal10;
+
+ /* Zero the history arrays */
+ memset(data_history, 0, sizeof(sXYData) * EQ_MAX_BANDS * EQ_CHANNELS);
+ memset(data_history2, 0, sizeof(sXYData) * EQ_MAX_BANDS * EQ_CHANNELS);
+
+ output_set_eq(cfg.equalizer_active, cfg.equalizer_preamp,
+ cfg.equalizer_bands);
+}
+
+int
+iir(gpointer * d, gint length)
+{
+ gint16 *data = (gint16 *) * d;
+ /* Indexes for the history arrays
+ * These have to be kept between calls to this function
+ * hence they are static */
+ static gint i = 0, j = 2, k = 1;
+
+ gint index, band, channel;
+ gint tempgint, halflength;
+ float out[EQ_CHANNELS], pcm[EQ_CHANNELS];
+
+ /**
+ * IIR filter equation is
+ * y[n] = 2 * (alpha*(x[n]-x[n-2]) + gamma*y[n-1] - beta*y[n-2])
+ *
+ * NOTE: The 2 factor was introduced in the coefficients to save
+ * a multiplication
+ *
+ * This algorithm cascades two filters to get nice filtering
+ * at the expense of extra CPU cycles
+ */
+ /* 16bit, 2 bytes per sample, so divide by two the length of
+ * the buffer (length is in bytes)
+ */
+ halflength = (length >> 1);
+ for (index = 0; index < halflength; index += 2) {
+ /* For each channel */
+ for (channel = 0; channel < EQ_CHANNELS; channel++) {
+ /* No need to scale when processing the PCM with the filter */
+ pcm[channel] = data[index + channel];
+ /* Preamp gain */
+ pcm[channel] *= preamp;
+
+ out[channel] = 0;
+ /* For each band */
+ for (band = 0; band < 10; band++) {
+ /* Store Xi(n) */
+ data_history[band][channel].x[i] = pcm[channel];
+ /* Calculate and store Yi(n) */
+ data_history[band][channel].y[i] =
+ (iir_cf[band].alpha * (data_history[band][channel].x[i]
+ - data_history[band][channel].x[k])
+ + iir_cf[band].gamma * data_history[band][channel].y[j]
+ - iir_cf[band].beta * data_history[band][channel].y[k]
+ );
+ /*
+ * The multiplication by 2.0 was 'moved' into the coefficients to save
+ * CPU cycles here */
+ /* Apply the gain */
+ out[channel] += data_history[band][channel].y[i] * gain[band]; // * 2.0;
+ } /* For each band */
+
+ if (cfg.eq_extra_filtering) {
+ /* Filter the sample again */
+ for (band = 0; band < 10; band++) {
+ /* Store Xi(n) */
+ data_history2[band][channel].x[i] = out[channel];
+ /* Calculate and store Yi(n) */
+ data_history2[band][channel].y[i] =
+ (iir_cf[band].alpha *
+ (data_history2[band][channel].x[i]
+ - data_history2[band][channel].x[k])
+ +
+ iir_cf[band].gamma *
+ data_history2[band][channel].y[j]
+ -
+ iir_cf[band].beta * data_history2[band][channel].y[k]
+ );
+ /* Apply the gain */
+ out[channel] +=
+ data_history2[band][channel].y[i] * gain[band];
+ } /* For each band */
+ }
+
+ /* Volume stuff
+ Scale down original PCM sample and add it to the filters
+ output. This substitutes the multiplication by 0.25
+ */
+
+ out[channel] += (data[index + channel] >> 2);
+
+ //printf("out[channel] = %f\n", out[channel]);
+ /* Round and convert to integer */
+#if 0
+#ifdef PPC
+ tempgint = round_ppc(out[channel]);
+#else
+# ifdef X86
+ tempgint = round_trick(out[channel]);
+# else
+ tempgint = (int) lroundf(out[channel]);
+# endif
+#endif
+#endif
+ //tempgint = (int) lroundf(out[channel]);
+ tempgint = (int) out[channel];
+
+ //printf("iir: old=%d new=%d\n", data[index+channel], tempgint);
+ /* Limit the output */
+ if (tempgint < -32768)
+ data[index + channel] = -32768;
+ else if (tempgint > 32767)
+ data[index + channel] = 32767;
+ else
+ data[index + channel] = tempgint;
+ } /* For each channel */
+
+ i++;
+ j++;
+ k++;
+
+ /* Wrap around the indexes */
+ if (i == 3)
+ i = 0;
+ else if (j == 3)
+ j = 0;
+ else
+ k = 0;
+
+
+ } /* For each pair of samples */
+
+ return length;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/iir.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,35 @@
+/*
+ * PCM time-domain equalizer
+ *
+ * Copyright (C) 2002 Felipe Rivera <liebremx at users.sourceforge.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 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.
+ *
+ * $Id: iir.h,v 1.5 2004/06/20 18:48:54 mderezynski Exp $
+ */
+#ifndef IIR_H
+#define IIR_H
+
+#define EQ_MAX_BANDS 10
+#define EQ_CHANNELS 2
+
+extern float gain[10];
+extern float preamp;
+
+int iir(gpointer * d, gint length);
+void init_iir();
+
+
+#endif /* #define IIR_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,706 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <string.h>
+
+#include "fft.h"
+#include "input.h"
+#include "main.h"
+#include "mainwin.h"
+#include "output.h"
+#include "util.h"
+#include "visualization.h"
+#include "playback.h"
+#include "playstatus.h"
+#include "pluginenum.h"
+
+#include "libbeep/titlestring.h"
+#include "libbeep/util.h"
+#include "libbeep/xentry.h"
+
+G_LOCK_DEFINE_STATIC(vis_mutex);
+
+struct _VisNode {
+ gint time;
+ gint nch;
+ gint length; /* number of samples per channel */
+ gint16 data[2][512];
+};
+
+typedef struct _VisNode VisNode;
+
+
+InputPluginData ip_data = {
+ NULL,
+ NULL,
+ FALSE,
+ FALSE
+};
+
+static GList *vis_list = NULL;
+
+gchar *input_info_text = NULL;
+
+InputPlugin *
+get_current_input_plugin(void)
+{
+ return ip_data.current_input_plugin;
+}
+
+void
+set_current_input_plugin(InputPlugin * ip)
+{
+ ip_data.current_input_plugin = ip;
+}
+
+GList *
+get_input_list(void)
+{
+ return ip_data.input_list;
+}
+
+
+gboolean
+input_is_enabled(const gchar * filename)
+{
+ gchar *basename = g_path_get_basename(filename);
+ gint enabled;
+
+ enabled = GPOINTER_TO_INT(g_hash_table_lookup(plugin_matrix, basename));
+ g_free(basename);
+
+ return enabled;
+}
+
+static void
+disabled_iplugins_foreach_func(const gchar * name,
+ gboolean enabled,
+ GString * list)
+{
+ g_return_if_fail(list != NULL);
+
+ if (enabled)
+ return;
+
+ if (list->len > 0)
+ g_string_append(list, ":");
+
+ g_string_append(list, name);
+}
+
+gchar *
+input_stringify_disabled_list(void)
+{
+ GString *disabled_list;
+
+ disabled_list = g_string_new("");
+ g_hash_table_foreach(plugin_matrix,
+ (GHFunc) disabled_iplugins_foreach_func,
+ disabled_list);
+
+ return g_string_free(disabled_list, FALSE);
+}
+
+void
+free_vis_data(void)
+{
+ G_LOCK(vis_mutex);
+ g_list_foreach(vis_list, (GFunc) g_free, NULL);
+ g_list_free(vis_list);
+ vis_list = NULL;
+ G_UNLOCK(vis_mutex);
+}
+
+static void
+convert_to_s16_ne(AFormat fmt, gpointer ptr, gint16 * left,
+ gint16 * right, gint nch, gint max)
+{
+ gint16 *ptr16;
+ guint16 *ptru16;
+ guint8 *ptru8;
+ gint i;
+
+ switch (fmt) {
+ case FMT_U8:
+ ptru8 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++)
+ left[i] = ((*ptru8++) ^ 128) << 8;
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = ((*ptru8++) ^ 128) << 8;
+ right[i] = ((*ptru8++) ^ 128) << 8;
+ }
+ break;
+ case FMT_S8:
+ ptru8 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++)
+ left[i] = (*ptru8++) << 8;
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = (*ptru8++) << 8;
+ right[i] = (*ptru8++) << 8;
+ }
+ break;
+ case FMT_U16_LE:
+ ptru16 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++, ptru16++)
+ left[i] = GUINT16_FROM_LE(*ptru16) ^ 32768;
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = GUINT16_FROM_LE(*ptru16) ^ 32768;
+ ptru16++;
+ right[i] = GUINT16_FROM_LE(*ptru16) ^ 32768;
+ ptru16++;
+ }
+ break;
+ case FMT_U16_BE:
+ ptru16 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++, ptru16++)
+ left[i] = GUINT16_FROM_BE(*ptru16) ^ 32768;
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = GUINT16_FROM_BE(*ptru16) ^ 32768;
+ ptru16++;
+ right[i] = GUINT16_FROM_BE(*ptru16) ^ 32768;
+ ptru16++;
+ }
+ break;
+ case FMT_U16_NE:
+ ptru16 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++)
+ left[i] = (*ptru16++) ^ 32768;
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = (*ptru16++) ^ 32768;
+ right[i] = (*ptru16++) ^ 32768;
+ }
+ break;
+ case FMT_S16_LE:
+ ptr16 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++, ptr16++)
+ left[i] = GINT16_FROM_LE(*ptr16);
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = GINT16_FROM_LE(*ptr16);
+ ptr16++;
+ right[i] = GINT16_FROM_LE(*ptr16);
+ ptr16++;
+ }
+ break;
+ case FMT_S16_BE:
+ ptr16 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++, ptr16++)
+ left[i] = GINT16_FROM_BE(*ptr16);
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = GINT16_FROM_BE(*ptr16);
+ ptr16++;
+ right[i] = GINT16_FROM_BE(*ptr16);
+ ptr16++;
+ }
+ break;
+ case FMT_S16_NE:
+ ptr16 = ptr;
+ if (nch == 1)
+ for (i = 0; i < max; i++)
+ left[i] = (*ptr16++);
+ else
+ for (i = 0; i < max; i++) {
+ left[i] = (*ptr16++);
+ right[i] = (*ptr16++);
+ }
+ break;
+ }
+}
+
+InputVisType
+input_get_vis_type()
+{
+ return INPUT_VIS_OFF;
+}
+
+void
+input_add_vis(gint time, guchar * s, InputVisType type)
+{
+ g_warning("plugin uses obsoleted input_add_vis()");
+}
+
+void
+input_add_vis_pcm(gint time, AFormat fmt, gint nch, gint length, gpointer ptr)
+{
+ VisNode *vis_node;
+ gint max;
+
+ max = length / nch;
+ if (fmt == FMT_U16_LE || fmt == FMT_U16_BE || fmt == FMT_U16_NE ||
+ fmt == FMT_S16_LE || fmt == FMT_S16_BE || fmt == FMT_S16_NE)
+ max /= 2;
+ max = CLAMP(max, 0, 512);
+
+ vis_node = g_new0(VisNode, 1);
+ vis_node->time = time;
+ vis_node->nch = nch;
+ vis_node->length = max;
+ convert_to_s16_ne(fmt, ptr, vis_node->data[0], vis_node->data[1], nch,
+ max);
+
+ G_LOCK(vis_mutex);
+ vis_list = g_list_append(vis_list, vis_node);
+ G_UNLOCK(vis_mutex);
+}
+
+void
+input_dont_show_warning(GtkObject * object, gpointer user_data)
+{
+ *((gboolean *) user_data) =
+ !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object));
+}
+
+
+void
+input_show_unplayable_files(const gchar * filename)
+{
+ static GtkWidget *dialog = NULL;
+ static GtkListStore *store = NULL;
+
+ const gchar *markup =
+ N_("<b><big>Unable to play files.</big></b>\n\n"
+ "The following files could not be played. Please check that:\n"
+ "1. they are accessible.\n"
+ "2. you have enabled the media plugins required.");
+
+ GtkTreeIter iter;
+
+ gchar *filename_utf8;
+
+ if (!dialog) {
+ GtkWidget *vbox, *check;
+ GtkWidget *expander;
+ GtkWidget *scrolled, *treeview;
+ GtkCellRenderer *renderer;
+
+ dialog =
+ gtk_message_dialog_new_with_markup(GTK_WINDOW(mainwin),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _(markup));
+
+ vbox = gtk_vbox_new(FALSE, 6);
+
+ check = gtk_check_button_new_with_label
+ (_("Don't show this warning anymore"));
+
+ expander = gtk_expander_new_with_mnemonic(_("Show more _details"));
+
+ scrolled = gtk_scrolled_window_new(NULL, NULL);
+ gtk_container_add(GTK_CONTAINER(expander), scrolled);
+
+ store = gtk_list_store_new(1, G_TYPE_STRING);
+
+ treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled),
+ treeview);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
+ -1, _("Filename"),
+ renderer,
+ "text", 0,
+ NULL);
+
+ vbox = GTK_DIALOG(dialog)->vbox;
+ gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), expander, TRUE, TRUE, 0);
+
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(gtk_widget_destroy),
+ dialog);
+ g_signal_connect(dialog, "destroy",
+ G_CALLBACK(gtk_widget_destroyed),
+ &dialog);
+ g_signal_connect(check, "clicked",
+ G_CALLBACK(input_dont_show_warning),
+ &cfg.warn_about_unplayables);
+
+ gtk_widget_show_all(dialog);
+ }
+
+ gtk_window_present(GTK_WINDOW(dialog));
+
+ filename_utf8 = filename_to_utf8(filename);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, filename_utf8, -1);
+ g_free(filename_utf8);
+}
+
+
+void
+input_file_not_playable(const gchar * filename)
+{
+ if (cfg.warn_about_unplayables)
+ input_show_unplayable_files(filename);
+}
+
+
+gboolean
+input_check_file(const gchar * filename, gboolean show_warning)
+{
+ GList *node;
+ InputPlugin *ip;
+ gchar *filename_proxy;
+
+ filename_proxy = g_strdup(filename);
+
+ for (node = get_input_list(); node != NULL; node = g_list_next(node)) {
+ ip = INPUT_PLUGIN(node->data);
+ if (ip && input_is_enabled(ip->filename) &&
+ ip->is_our_file(filename_proxy)) {
+ g_free(filename_proxy);
+ return TRUE;
+ }
+ }
+
+ g_free(filename_proxy);
+
+ if (show_warning) {
+ input_file_not_playable(filename);
+ }
+
+ return FALSE;
+}
+
+
+void
+input_set_eq(gint on, gfloat preamp, gfloat * bands)
+{
+ if (!ip_data.playing)
+ return;
+
+ if (!get_current_input_plugin())
+ return;
+
+ if (get_current_input_plugin()->set_eq)
+ get_current_input_plugin()->set_eq(on, preamp, bands);
+}
+
+void
+input_get_song_info(const gchar * filename, gchar ** title, gint * length)
+{
+ InputPlugin *ip = NULL;
+ BmpTitleInput *input;
+ GList *node;
+ gchar *tmp = NULL, *ext;
+ gchar *filename_proxy;
+
+ g_return_if_fail(filename != NULL);
+ g_return_if_fail(title != NULL);
+ g_return_if_fail(length != NULL);
+
+ filename_proxy = g_strdup(filename);
+
+ for (node = get_input_list(); node != NULL; node = g_list_next(node)) {
+ ip = INPUT_PLUGIN(node->data);
+ if (input_is_enabled(ip->filename) && ip->is_our_file(filename_proxy))
+ break;
+ }
+
+ if (ip && node && ip->get_song_info) {
+ ip->get_song_info(filename_proxy, &tmp, length);
+ *title = str_to_utf8(tmp);
+ g_free(tmp);
+ }
+ else {
+ input = bmp_title_input_new();
+
+ tmp = g_strdup(filename);
+ if ((ext = strrchr(tmp, '.')))
+ *ext = '\0';
+
+ input->file_name = g_path_get_basename(tmp);
+ input->file_ext = ext ? ext + 1 : NULL;
+ input->file_path = tmp;
+
+ if ((tmp = xmms_get_titlestring(xmms_get_gentitle_format(), input))) {
+ (*title) = str_to_utf8(tmp);
+ g_free(tmp);
+ }
+ else {
+ (*title) = filename_to_utf8(input->file_name);
+ }
+
+ (*length) = -1;
+
+ bmp_title_input_free(input);
+ }
+
+ g_free(filename_proxy);
+}
+
+static void
+input_general_file_info_box(const gchar * filename, InputPlugin * ip)
+{
+ GtkWidget *window, *vbox;
+ GtkWidget *label, *filename_hbox, *filename_entry;
+ GtkWidget *bbox, *cancel;
+
+ gchar *title, *fileinfo, *basename, *iplugin;
+ gchar *filename_utf8;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+
+ basename = g_path_get_basename(filename);
+ fileinfo = filename_to_utf8(basename);
+ title = g_strdup_printf(_("bmp: %s"), fileinfo);
+
+ gtk_window_set_title(GTK_WINDOW(window), title);
+
+ g_free(title);
+ g_free(fileinfo);
+ g_free(basename);
+
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ filename_hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox), filename_hbox, FALSE, TRUE, 0);
+
+ label = gtk_label_new(_("Filename:"));
+ gtk_box_pack_start(GTK_BOX(filename_hbox), label, FALSE, TRUE, 0);
+
+ filename_entry = xmms_entry_new();
+ filename_utf8 = filename_to_utf8(filename);
+
+ gtk_entry_set_text(GTK_ENTRY(filename_entry), filename_utf8);
+ gtk_editable_set_editable(GTK_EDITABLE(filename_entry), FALSE);
+ gtk_box_pack_start(GTK_BOX(filename_hbox), filename_entry, TRUE, TRUE, 0);
+
+ g_free(filename_utf8);
+
+ if (ip)
+ if (ip->description)
+ iplugin = ip->description;
+ else
+ iplugin = ip->filename;
+ else
+ iplugin = _("No input plugin recognized this file");
+
+ title = g_strdup_printf(_("Input plugin: %s"), iplugin);
+
+ label = gtk_label_new(title);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
+ g_free(title);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT(window));
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+
+ gtk_widget_show_all(window);
+}
+
+void
+input_file_info_box(const gchar * filename)
+{
+ GList *node;
+ InputPlugin *ip;
+ gchar *filename_proxy;
+
+ filename_proxy = g_strdup(filename);
+
+ for (node = get_input_list(); node != NULL; node = g_list_next(node)) {
+ ip = INPUT_PLUGIN(node->data);
+ if (input_is_enabled(ip->filename)
+ && ip->is_our_file(filename_proxy)) {
+ if (ip->file_info_box)
+ ip->file_info_box(filename_proxy);
+ else
+ input_general_file_info_box(filename, ip);
+
+ g_free(filename_proxy);
+ return;
+ }
+ }
+
+ input_general_file_info_box(filename, NULL);
+ g_free(filename_proxy);
+}
+
+GList *
+input_scan_dir(const gchar * path)
+{
+ GList *node, *result = NULL;
+ InputPlugin *ip;
+ gchar *path_proxy;
+
+ g_return_val_if_fail(path != NULL, NULL);
+
+ if (*path == '/')
+ while (path[1] == '/')
+ path++;
+
+ path_proxy = g_strdup(path);
+
+ for (node = get_input_list(); node; node = g_list_next(node)) {
+ ip = INPUT_PLUGIN(node->data);
+
+ if (!ip)
+ continue;
+
+ if (!ip->scan_dir)
+ continue;
+
+ if (!input_is_enabled(ip->filename))
+ continue;
+
+ if ((result = ip->scan_dir(path_proxy)))
+ break;
+ }
+
+ g_free(path_proxy);
+
+ return result;
+}
+
+void
+input_get_volume(gint * l, gint * r)
+{
+ *l = -1;
+ *r = -1;
+ if (bmp_playback_get_playing()) {
+ if (get_current_input_plugin() &&
+ get_current_input_plugin()->get_volume) {
+ get_current_input_plugin()->get_volume(l, r);
+ return;
+ }
+ }
+ output_get_volume(l, r);
+}
+
+void
+input_set_volume(gint l, gint r)
+{
+ if (bmp_playback_get_playing()) {
+ if (get_current_input_plugin() &&
+ get_current_input_plugin()->set_volume) {
+ get_current_input_plugin()->set_volume(l, r);
+ return;
+ }
+ }
+ output_set_volume(l, r);
+}
+
+void
+input_update_vis(gint time)
+{
+ GList *node;
+ VisNode *vis = NULL, *visnext = NULL;
+ gboolean found = FALSE;
+
+ G_LOCK(vis_mutex);
+ node = vis_list;
+ while (g_list_next(node) && !found) {
+ visnext = g_list_next(node)->data;
+ vis = node->data;
+
+ if (vis->time >= time)
+ break;
+
+ vis_list = g_list_delete_link(vis_list, node);
+
+ if (visnext->time >= time) {
+ found = TRUE;
+ break;
+ }
+ g_free(vis);
+ node = vis_list;
+ }
+ G_UNLOCK(vis_mutex);
+
+ if (found) {
+ vis_send_data(vis->data, vis->nch, vis->length);
+ g_free(vis);
+ }
+ else
+ vis_send_data(NULL, 0, 0);
+}
+
+
+gchar *
+input_get_info_text(void)
+{
+ return g_strdup(input_info_text);
+}
+
+void
+input_set_info_text(const gchar * text)
+{
+ g_free(input_info_text);
+ input_info_text = g_strdup(text);
+ mainwin_set_info_text();
+}
+
+void
+input_about(gint index)
+{
+ InputPlugin *ip;
+
+ ip = g_list_nth(ip_data.input_list, index)->data;
+ if (ip && ip->about)
+ ip->about();
+}
+
+void
+input_configure(gint index)
+{
+ InputPlugin *ip;
+
+ ip = g_list_nth(ip_data.input_list, index)->data;
+ if (ip && ip->configure)
+ ip->configure();
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/input.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,77 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef INPUT_H
+#define INPUT_H
+
+#include "plugin.h"
+
+typedef struct _InputPluginData InputPluginData;
+
+struct _InputPluginData {
+ GList *input_list;
+ InputPlugin *current_input_plugin;
+ gboolean playing;
+ gboolean paused;
+};
+
+GList *get_input_list(void);
+InputPlugin *get_current_input_plugin(void);
+void set_current_input_plugin(InputPlugin * ip);
+InputVisType input_get_vis_type();
+void free_vis_data(void);
+gboolean input_check_file(const gchar * filename, gboolean show_warning);
+void input_play(gchar * filename);
+void input_stop(void);
+void input_pause(void);
+gint input_get_time(void);
+void input_set_eq(gint on, gfloat preamp, gfloat * bands);
+void input_seek(gint time);
+void input_get_song_info(const gchar * filename, gchar ** title,
+ gint * length);
+guchar *input_get_vis(gint time);
+void input_update_vis_plugin(gint time);
+gchar *input_get_info_text(void);
+void input_about(gint index);
+void input_configure(gint index);
+void input_add_vis(gint time, guchar * s, InputVisType type);
+void input_add_vis_pcm(gint time, AFormat fmt, gint nch, gint length,
+ gpointer ptr);
+InputVisType input_get_vis_type();
+void input_update_vis(gint time);
+
+void input_set_info_text(const gchar * text);
+
+GList *input_scan_dir(const gchar * dir);
+void input_get_volume(gint * l, gint * r);
+void input_set_volume(gint l, gint r);
+void input_file_info_box(const gchar * filename);
+
+void input_file_not_playable(const gchar * filename);
+gboolean input_is_disabled(const gchar * filename);
+gboolean input_is_enabled(const gchar * filename);
+gchar *input_stringify_disabled_list(void);
+
+extern InputPluginData ip_data;
+extern gchar *input_info_text;
+
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,150 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "logger.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#include "main.h"
+
+
+#define LOG_ALL_LEVELS \
+ (G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION)
+
+
+struct _LogHandler {
+ gchar *domain;
+ GLogLevelFlags level;
+ guint id;
+};
+
+typedef struct _LogHandler LogHandler;
+
+
+static FILE *bmp_log_file = NULL;
+
+G_LOCK_DEFINE_STATIC(bmp_log_file);
+
+static LogHandler log_handlers[] = {
+ {NULL, LOG_ALL_LEVELS},
+ {"Glib", LOG_ALL_LEVELS},
+ {"Gtk", LOG_ALL_LEVELS}
+};
+
+static guint log_handler_count = G_N_ELEMENTS(log_handlers);
+
+
+static const gchar *
+get_timestamp_str(void)
+{
+ time_t current_time = time(NULL);
+ return ctime(¤t_time);
+}
+
+static size_t
+get_filesize(const gchar *filename)
+{
+ struct stat info;
+
+ if (stat(filename, &info))
+ return 0;
+
+ return info.st_size;
+}
+
+static void
+log_to_file(const gchar * domain, GLogLevelFlags level,
+ const gchar * message, gpointer data)
+{
+ FILE *file = (FILE *) data;
+
+ if (!file) {
+ g_printerr(G_STRLOC ": file is NULL!\n");
+ return;
+ }
+
+ G_LOCK(bmp_log_file);
+
+ if (domain)
+ g_fprintf(file, "(%s) ", domain);
+
+ if (message)
+ g_fprintf(file, "%s\n", message);
+ else
+ g_fprintf(file, "message is NULL!\n");
+
+ fflush(file);
+
+ G_UNLOCK(bmp_log_file);
+}
+
+gboolean
+bmp_logger_start(const gchar * filename)
+{
+ guint i;
+
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ /* truncate file when size limit is reached */
+ if (get_filesize(filename) < BMP_LOGGER_FILE_MAX_SIZE)
+ bmp_log_file = fopen(filename, "at");
+ else
+ bmp_log_file = fopen(filename, "w+t");
+
+ if (!bmp_log_file) {
+ g_printerr(_("Unable to create log file (%s)!\n"), filename);
+ return FALSE;
+ }
+
+ for (i = 0; i < log_handler_count; i++) {
+ log_handlers[i].id = g_log_set_handler(log_handlers[i].domain,
+ log_handlers[i].level,
+ log_to_file, bmp_log_file);
+ }
+
+ g_message("\n** LOGGING STARTED AT %s", get_timestamp_str());
+
+ return TRUE;
+}
+
+void
+bmp_logger_stop(void)
+{
+ guint i;
+
+ if (!bmp_log_file)
+ return;
+
+ g_message("\n** LOGGING STOPPED AT %s", get_timestamp_str());
+
+ for (i = 0; i < log_handler_count; i++)
+ g_log_remove_handler(log_handlers[i].domain, log_handlers[i].id);
+
+ fclose(bmp_log_file);
+ bmp_log_file = NULL;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/logger.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,34 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef LOGGER_H
+#define LOGGER_H
+
+#include <glib.h>
+
+
+#define BMP_LOGGER_DEFAULT_LOG_LEVEL G_LOG_LEVEL_MESSAGE
+
+/* default log file max size: 512kb */
+#define BMP_LOGGER_FILE_MAX_SIZE ((size_t)1 << 19)
+
+
+gboolean bmp_logger_start(const gchar * filename);
+void bmp_logger_stop(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1103 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "main.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <gdk/gdk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <ctype.h>
+#include <time.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+
+#include "libbeep/configdb.h"
+#include "libbeep/beepctrl.h"
+#include "libbeep/util.h"
+#include "libbeep/vfs.h"
+
+#include "controlsocket.h"
+#include "dnd.h"
+#include "dock.h"
+#include "effect.h"
+#include "equalizer.h"
+#include "general.h"
+#include "hints.h"
+#include "input.h"
+#include "logger.h"
+#include "mainwin.h"
+#include "output.h"
+#include "playlist.h"
+#include "playlistwin.h"
+#include "pluginenum.h"
+#include "prefswin.h"
+#include "skin.h"
+#include "skinwin.h"
+#include "util.h"
+#include "visualization.h"
+
+#include "pixmaps.h"
+//#include "images/bmp_player.xpm"
+
+
+/* Translatable string for beep.desktop's comment field */
+const gchar *desktop_comment = N_("Beep Media Player");
+
+const gchar *application_name = N_("Beep Media Player");
+
+
+struct _BmpCmdLineOpt {
+ GList *filenames;
+ gint session;
+ gboolean play, stop, pause, fwd, rew, play_pause, playcd;
+ gboolean enqueue, mainwin, remote, activate;
+ gboolean load_skins;
+ gchar *previous_session_id;
+};
+
+typedef struct _BmpCmdLineOpt BmpCmdLineOpt;
+
+
+BmpConfig cfg;
+
+BmpConfig bmp_default_config = {
+ MAINWIN_DEFAULT_POS_X, /* mainwin x position */
+ MAINWIN_DEFAULT_POS_Y, /* mainwin y position */
+ EQUALIZER_DEFAULT_POS_X, /* equalizer x position */
+ EQUALIZER_DEFAULT_POS_Y, /* equalizer y position */
+ PLAYLISTWIN_DEFAULT_POS_X, /* playlistwin x position */
+ PLAYLISTWIN_DEFAULT_POS_Y, /* playlistwin y position */
+ PLAYLISTWIN_DEFAULT_WIDTH, /* playlistwin width */
+ PLAYLISTWIN_DEFAULT_HEIGHT, /* playlistwin height */
+ 10, /* snap distance */
+ FALSE, /* real-time priority */
+ FALSE, FALSE, /* shuffle, repeat */
+ FALSE, /* UNUSED (double size) */
+ TRUE, /* autoscroll */
+ TRUE, /* analyzer peaks */
+ FALSE, /* equalizer autoload */
+ FALSE, /* easy move */
+ FALSE, /* equalizer active */
+ FALSE, /* playlistwin visible */
+ FALSE, /* equalizer visible */
+ TRUE, /* player visible */
+ FALSE, /* player shaded */
+ FALSE, /* playlistwin shaded */
+ FALSE, /* equalizer shaded */
+ FALSE, /* allow multiple instances */
+ TRUE, /* always show cb */
+ TRUE, TRUE, /* convert '_' and %20 */
+ TRUE, /* show numbers in playlist */
+ TRUE, /* snap windows */
+ TRUE, /* save window positions */
+ TRUE, /* dim titlebar */
+ FALSE, /* get playlist info on load */
+ TRUE, /* get playlist info on demand */
+ TRUE, /* UNUSED (equalizer doublesize linked) */
+ FALSE, /* sort jump to file */
+ FALSE, /* use effect plugins */
+ FALSE, /* always on top */
+ FALSE, /* sticky */
+ FALSE, /* no playlist advance */
+ TRUE, /* UNUSED (smooth title scrolling) */
+ TRUE, /* use playlist metadata */
+ TRUE, /* warn about unplayables */
+ FALSE, /* use \ as directory delimiter */
+ FALSE, /* random skin on play */
+ FALSE, /* use fontsets */
+ FALSE, /* use X font for mainwin */
+ TRUE, /* use custom cursors */
+ TRUE, /* close dialog on open */
+ TRUE, /* close dialog on add */
+ 0.0, /* equalizer preamp */
+ {0, 0, 0, 0, 0, /* equalizer bands */
+ 0, 0, 0, 0, 0},
+ NULL, /* skin */
+ NULL, /* output plugin */
+ NULL, /* file selector path */
+ NULL, /* playlist path */
+ NULL, /* playlist font */
+ NULL, /* mainwin font */
+ NULL, /* disabled input plugins */
+ NULL, /* enabled general plugins */
+ NULL, /* enabled visualization plugins */
+ NULL, /* enabled effect plugins */
+ NULL, /* equalizer preset default file */
+ NULL, /* equalizer preset extension */
+ NULL, /* URL history */
+ 0, /* timer mode */
+ VIS_ANALYZER, /* visualizer type */
+ ANALYZER_NORMAL, /* analyzer mode */
+ ANALYZER_BARS, /* analyzer type */
+ SCOPE_DOT, /* scope mode */
+ VU_SMOOTH, /* VU mode */
+ REFRESH_FULL, /* visualizer refresh rate */
+ FALLOFF_FAST, /* analyzer fall off rate */
+ FALLOFF_SLOW, /* peaks fall off rate */
+ 0, /* playlist position */
+ 2, /* pause between songs time */
+ FALSE, /* pause between songs */
+ FALSE, /* show window decorations */
+ 8, /* mouse wheel scroll step */
+ FALSE, /* playlist transparent */
+ 1, /* 2nd preset (ARTIST - TITLE) */
+ NULL, /* title format */
+ FALSE, /* software volume control enabled */
+ TRUE, /* UNUSED (XMMS compatibility mode) */
+ TRUE, /* extra eq filtering */
+ 3 /* scroll pl by */
+};
+
+typedef struct bmp_cfg_boolent_t {
+ char const *be_vname;
+ gboolean *be_vloc;
+ gboolean be_wrt;
+} bmp_cfg_boolent;
+
+typedef struct bmp_cfg_nument_t {
+ char const *ie_vname;
+ gint *ie_vloc;
+ gboolean ie_wrt;
+} bmp_cfg_nument;
+
+typedef struct bmp_cfg_strent_t {
+ char const *se_vname;
+ char **se_vloc;
+ gboolean se_wrt;
+} bmp_cfg_strent;
+
+const gchar *bmp_titlestring_presets[] = {
+ "%t",
+ "%p - %t",
+ "%p - %a - %t",
+ "%a - %t"
+};
+
+const guint n_titlestring_presets = G_N_ELEMENTS(bmp_titlestring_presets);
+
+static bmp_cfg_boolent bmp_boolents[] = {
+ {"allow_multiple_instances", &cfg.allow_multiple_instances, TRUE},
+ {"use_realtime", &cfg.use_realtime, TRUE},
+ {"always_show_cb", &cfg.always_show_cb, TRUE},
+ {"convert_underscore", &cfg.convert_underscore, TRUE},
+ {"convert_twenty", &cfg.convert_twenty, TRUE},
+ {"show_numbers_in_pl", &cfg.show_numbers_in_pl, TRUE},
+ {"snap_windows", &cfg.snap_windows, TRUE},
+ {"save_window_positions", &cfg.save_window_position, TRUE},
+ {"dim_titlebar", &cfg.dim_titlebar, TRUE},
+ {"get_info_on_load", &cfg.get_info_on_load, TRUE},
+ {"get_info_on_demand", &cfg.get_info_on_demand, TRUE},
+ {"no_playlist_advance", &cfg.no_playlist_advance, TRUE},
+ {"sort_jump_to_file", &cfg.sort_jump_to_file, TRUE},
+ {"use_pl_metadata", &cfg.use_pl_metadata, TRUE},
+ {"warn_about_unplayables", &cfg.warn_about_unplayables, TRUE},
+ {"use_backslash_as_dir_delimiter", &cfg.use_backslash_as_dir_delimiter, TRUE},
+ {"player_shaded", &cfg.player_shaded, TRUE},
+ {"player_visible", &cfg.player_visible, TRUE},
+ {"shuffle", &cfg.shuffle, TRUE},
+ {"repeat", &cfg.repeat, TRUE},
+ {"autoscroll_songname", &cfg.autoscroll, TRUE},
+ {"playlist_shaded", &cfg.playlist_shaded, TRUE},
+ {"playlist_visible", &cfg.playlist_visible, TRUE},
+ {"playlist_transparent", &cfg.playlist_transparent, TRUE},
+ {"use_fontsets", &cfg.use_fontsets, TRUE},
+ {"mainwin_use_xfont", &cfg.mainwin_use_xfont, TRUE},
+ {"equalizer_visible", &cfg.equalizer_visible, TRUE},
+ {"equalizer_active", &cfg.equalizer_active, TRUE},
+ {"equalizer_shaded", &cfg.equalizer_shaded, TRUE},
+ {"equalizer_autoload", &cfg.equalizer_autoload, TRUE},
+ {"use_eplugins", &cfg.use_eplugins, TRUE},
+ {"always_on_top", &cfg.always_on_top, TRUE},
+ {"sticky", &cfg.sticky, TRUE},
+ {"random_skin_on_play", &cfg.random_skin_on_play, TRUE},
+ {"pause_between_songs", &cfg.pause_between_songs, TRUE},
+ {"show_wm_decorations", &cfg.show_wm_decorations, TRUE},
+ {"eq_extra_filtering", &cfg.eq_extra_filtering, TRUE},
+ {"analyzer_peaks", &cfg.analyzer_peaks, TRUE},
+ {"custom_cursors", &cfg.custom_cursors, TRUE},
+ {"close_dialog_open", &cfg.close_dialog_open, TRUE},
+ {"close_dialog_add", &cfg.close_dialog_add, TRUE}
+};
+
+static gint ncfgbent = G_N_ELEMENTS(bmp_boolents);
+
+static bmp_cfg_nument bmp_numents[] = {
+ {"player_x", &cfg.player_x, TRUE},
+ {"player_y", &cfg.player_y, TRUE},
+ {"timer_mode", &cfg.timer_mode, TRUE},
+ {"vis_type", &cfg.vis_type, TRUE},
+ {"analyzer_mode", &cfg.analyzer_mode, TRUE},
+ {"analyzer_type", &cfg.analyzer_type, TRUE},
+ {"scope_mode", &cfg.scope_mode, TRUE},
+ {"vu_mode", &cfg.vu_mode, TRUE},
+ {"vis_refresh_rate", &cfg.vis_refresh, TRUE},
+ {"analyzer_falloff", &cfg.analyzer_falloff, TRUE},
+ {"peaks_falloff", &cfg.peaks_falloff, TRUE},
+ {"playlist_x", &cfg.playlist_x, TRUE},
+ {"playlist_y", &cfg.playlist_y, TRUE},
+ {"playlist_width", &cfg.playlist_width, TRUE},
+ {"playlist_height", &cfg.playlist_height, TRUE},
+ {"playlist_position", &cfg.playlist_position, TRUE},
+ {"equalizer_x", &cfg.equalizer_x, TRUE},
+ {"equalizer_y", &cfg.equalizer_y, TRUE},
+ {"snap_distance", &cfg.snap_distance, TRUE},
+ {"pause_between_songs_time", &cfg.pause_between_songs_time, TRUE},
+ {"mouse_wheel_change", &cfg.mouse_change, TRUE},
+ {"scroll_pl_by", &cfg.scroll_pl_by, TRUE},
+ {"titlestring_preset", &cfg.titlestring_preset, TRUE},
+};
+
+static gint ncfgient = G_N_ELEMENTS(bmp_numents);
+
+static bmp_cfg_strent bmp_strents[] = {
+ {"playlist_font", &cfg.playlist_font, TRUE},
+ {"mainwin_font", &cfg.mainwin_font, TRUE},
+ {"eqpreset_default_file", &cfg.eqpreset_default_file, TRUE},
+ {"eqpreset_extension", &cfg.eqpreset_extension, TRUE},
+ {"skin", &cfg.skin, FALSE},
+ {"output_plugin", &cfg.outputplugin, FALSE},
+ {"disabled_iplugins", &cfg.disabled_iplugins, TRUE},
+ {"enabled_gplugins", &cfg.enabled_gplugins, FALSE},
+ {"enabled_vplugins", &cfg.enabled_vplugins, FALSE},
+ {"enabled_eplugins", &cfg.enabled_eplugins, FALSE},
+ {"filesel_path", &cfg.filesel_path, FALSE},
+ {"playlist_path", &cfg.playlist_path, FALSE},
+ {"generic_title_format", &cfg.gentitle_format, TRUE},
+};
+
+static gint ncfgsent = G_N_ELEMENTS(bmp_strents);
+
+gchar *bmp_paths[BMP_PATH_COUNT] = {};
+
+GList *dock_window_list = NULL;
+
+gboolean pposition_broken = FALSE;
+
+
+static GSList *
+get_feature_list(void)
+{
+ GSList *features = NULL;
+
+#ifdef HAVE_GNOME_VFS
+ features = g_slist_append(features, "GNOME VFS");
+#endif
+
+#ifdef HAVE_GCONF
+ features = g_slist_append(features, "GConf");
+#endif
+
+ return features;
+}
+
+static void
+dump_version(void)
+{
+ GSList *features;
+
+ g_printf("%s %s", _(application_name), VERSION);
+
+ features = get_feature_list();
+
+ if (features) {
+ GSList *item;
+
+ g_printf(" (");
+
+ for (item = features; g_slist_next(item); item = g_slist_next(item))
+ g_printf("%s, ", (const gchar *) item->data);
+
+ g_printf("%s)", (const gchar *) item->data);
+
+ g_slist_free(features);
+ }
+
+ g_printf("\n");
+}
+
+const gchar *
+xmms_get_gentitle_format(void)
+{
+ gint titlestring_preset = cfg.titlestring_preset;
+
+ if (titlestring_preset < n_titlestring_presets)
+ return bmp_titlestring_presets[titlestring_preset];
+
+ return cfg.gentitle_format;
+}
+
+static void
+make_directory(const gchar * path, mode_t mode)
+{
+ if (mkdir(path, mode) == 0)
+ return;
+
+ if (errno == EEXIST)
+ return;
+
+ g_printerr(_("Could not create directory (%s): %s"), path,
+ g_strerror(errno));
+}
+
+static void
+bmp_make_user_dir(void)
+{
+ const mode_t mode755 = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+
+ make_directory(bmp_paths[BMP_PATH_USER_DIR], mode755);
+ make_directory(bmp_paths[BMP_PATH_USER_PLUGIN_DIR], mode755);
+ make_directory(bmp_paths[BMP_PATH_USER_SKIN_DIR], mode755);
+ make_directory(bmp_paths[BMP_PATH_SKIN_THUMB_DIR], mode755);
+}
+
+static void
+bmp_free_paths(void)
+{
+ int i;
+
+ for (i = 0; i < BMP_PATH_COUNT; i++)
+ {
+ g_free(bmp_paths[i]);
+ bmp_paths[i] = 0;
+ }
+}
+
+
+#define USER_PATH(path) \
+ g_build_filename(bmp_paths[BMP_PATH_USER_DIR], path, NULL);
+
+static void
+bmp_init_paths(void)
+{
+ bmp_paths[BMP_PATH_USER_DIR] = g_build_filename(g_get_home_dir(), BMP_RCPATH, NULL);
+
+ bmp_paths[BMP_PATH_USER_PLUGIN_DIR] = USER_PATH(BMP_USER_PLUGIN_DIR_BASENAME);
+ bmp_paths[BMP_PATH_USER_SKIN_DIR] = USER_PATH(BMP_SKIN_DIR_BASENAME);
+ bmp_paths[BMP_PATH_SKIN_THUMB_DIR] = USER_PATH(BMP_SKIN_THUMB_DIR_BASENAME);
+ bmp_paths[BMP_PATH_CONFIG_FILE] = USER_PATH(BMP_CONFIG_BASENAME);
+ bmp_paths[BMP_PATH_PLAYLIST_FILE] = USER_PATH(BMP_PLAYLIST_BASENAME);
+ bmp_paths[BMP_PATH_ACCEL_FILE] = USER_PATH(BMP_ACCEL_BASENAME);
+ bmp_paths[BMP_PATH_LOG_FILE] = USER_PATH(BMP_LOG_BASENAME);
+
+ g_atexit(bmp_free_paths);
+}
+
+
+void
+bmp_config_load(void)
+{
+ ConfigDb *db;
+ gint i, length;
+
+ memcpy(&cfg, &bmp_default_config, sizeof(BmpConfig));
+
+ db = bmp_cfg_db_open();
+ for (i = 0; i < ncfgbent; ++i) {
+ bmp_cfg_db_get_bool(db, NULL,
+ bmp_boolents[i].be_vname,
+ bmp_boolents[i].be_vloc);
+ }
+
+ for (i = 0; i < ncfgient; ++i) {
+ bmp_cfg_db_get_int(db, NULL,
+ bmp_numents[i].ie_vname,
+ bmp_numents[i].ie_vloc);
+ }
+
+ for (i = 0; i < ncfgsent; ++i) {
+ bmp_cfg_db_get_string(db, NULL,
+ bmp_strents[i].se_vname,
+ bmp_strents[i].se_vloc);
+ }
+
+ /* Preset */
+ bmp_cfg_db_get_float(db, NULL, "equalizer_preamp", &cfg.equalizer_preamp);
+ for (i = 0; i < 10; i++) {
+ gchar eqtext[18];
+
+ g_snprintf(eqtext, sizeof(eqtext), "equalizer_band%d", i);
+ bmp_cfg_db_get_float(db, NULL, eqtext, &cfg.equalizer_bands[i]);
+ }
+
+ /* History */
+ if (bmp_cfg_db_get_int(db, NULL, "url_history_length", &length)) {
+ for (i = 1; i <= length; i++) {
+ gchar str[19], *tmp;
+
+ g_snprintf(str, sizeof(str), "url_history%d", i);
+ if (bmp_cfg_db_get_string(db, NULL, str, &tmp))
+ cfg.url_history = g_list_append(cfg.url_history, tmp);
+ }
+ }
+
+ bmp_cfg_db_close(db);
+
+
+ if (cfg.playlist_font && strlen(cfg.playlist_font) == 0) {
+ g_free(cfg.playlist_font);
+ cfg.playlist_font = NULL;
+ }
+
+ if (cfg.mainwin_font && strlen(cfg.mainwin_font) == 0) {
+ g_free(cfg.mainwin_font);
+ cfg.mainwin_font = NULL;
+ }
+
+ if (!cfg.playlist_font)
+ cfg.playlist_font = g_strdup(PLAYLISTWIN_DEFAULT_FONT);
+
+ if (!cfg.mainwin_font)
+ cfg.mainwin_font = g_strdup(MAINWIN_DEFAULT_FONT);
+
+ if (!cfg.gentitle_format)
+ cfg.gentitle_format = g_strdup("%p - %t");
+
+ if (!cfg.outputplugin) {
+#ifdef HAVE_OSS
+ cfg.outputplugin = g_build_filename(PLUGIN_DIR, plugin_dir_list[0],
+ PLUGIN_FILENAME("OSS"), NULL);
+#else
+ /* FIXME: This implicitly means the output plugin that is
+ * first in the alphabet will be used (usually the disk writer
+ * plugin) */
+ cfg.outputplugin = g_strdup("");
+#endif
+ }
+
+ if (!cfg.eqpreset_default_file)
+ cfg.eqpreset_default_file = g_strdup(EQUALIZER_DEFAULT_DIR_PRESET);
+
+ if (!cfg.eqpreset_extension)
+ cfg.eqpreset_extension = g_strdup(EQUALIZER_DEFAULT_PRESET_EXT);
+}
+
+
+void
+bmp_config_save(void)
+{
+ GList *node;
+ gchar *str;
+ gint i;
+ ConfigDb *db;
+
+ cfg.disabled_iplugins = input_stringify_disabled_list();
+
+
+ db = bmp_cfg_db_open();
+
+ for (i = 0; i < ncfgbent; ++i)
+ if (bmp_boolents[i].be_wrt)
+ bmp_cfg_db_set_bool(db, NULL,
+ bmp_boolents[i].be_vname,
+ *bmp_boolents[i].be_vloc);
+
+ /* HACK: Work-around for bug #129 */
+ bmp_cfg_db_set_bool(db, NULL, "playlist_shaded",
+ FALSE);
+
+ for (i = 0; i < ncfgient; ++i)
+ if (bmp_numents[i].ie_wrt)
+ bmp_cfg_db_set_int(db, NULL,
+ bmp_numents[i].ie_vname,
+ *bmp_numents[i].ie_vloc);
+
+ /* This is a bit lame .. it'll end up being written twice,
+ * could do with being done a bit neater. -larne */
+// bmp_cfg_db_set_int(db, NULL, "playlist_position",
+// playlist_get_position());
+
+ for (i = 0; i < ncfgsent; ++i) {
+ if (bmp_strents[i].se_wrt)
+ bmp_cfg_db_set_string(db, NULL,
+ bmp_strents[i].se_vname,
+ *bmp_strents[i].se_vloc);
+ }
+
+// bmp_cfg_db_set_float(db, NULL, "equalizer_preamp", cfg.equalizer_preamp);
+
+// for (i = 0; i < 10; i++) {
+// str = g_strdup_printf("equalizer_band%d", i);
+// bmp_cfg_db_set_float(db, NULL, str, cfg.equalizer_bands[i]);
+// g_free(str);
+// }
+
+ if (bmp_active_skin->path)
+ bmp_cfg_db_set_string(db, NULL, "skin", bmp_active_skin->path);
+ else
+ bmp_cfg_db_unset_key(db, NULL, "skin");
+
+ if (get_current_output_plugin())
+ bmp_cfg_db_set_string(db, NULL, "output_plugin",
+ get_current_output_plugin()->filename);
+ else
+ bmp_cfg_db_unset_key(db, NULL, "output_plugin");
+
+ str = general_stringify_enabled_list();
+ if (str) {
+ bmp_cfg_db_set_string(db, NULL, "enabled_gplugins", str);
+ g_free(str);
+ }
+ else
+ bmp_cfg_db_unset_key(db, NULL, "enabled_gplugins");
+
+ str = vis_stringify_enabled_list();
+ if (str) {
+ bmp_cfg_db_set_string(db, NULL, "enabled_vplugins", str);
+ g_free(str);
+ }
+ else
+ bmp_cfg_db_unset_key(db, NULL, "enabled_vplugins");
+
+ str = effect_stringify_enabled_list();
+ if (str) {
+ bmp_cfg_db_set_string(db, NULL, "enabled_eplugins", str);
+ g_free(str);
+ }
+ else
+ bmp_cfg_db_unset_key(db, NULL, "enabled_eplugins");
+
+ if (cfg.filesel_path)
+ bmp_cfg_db_set_string(db, NULL, "filesel_path", cfg.filesel_path);
+
+ if (cfg.playlist_path)
+ bmp_cfg_db_set_string(db, NULL, "playlist_path", cfg.playlist_path);
+
+ bmp_cfg_db_set_int(db, NULL, "url_history_length",
+ g_list_length(cfg.url_history));
+
+ for (node = cfg.url_history, i = 1; node; node = g_list_next(node), i++) {
+ str = g_strdup_printf("url_history%d", i);
+ bmp_cfg_db_set_string(db, NULL, str, node->data);
+ g_free(str);
+ }
+
+ bmp_cfg_db_close(db);
+
+ playlist_save(bmp_paths[BMP_PATH_PLAYLIST_FILE], FALSE);
+}
+
+static void
+bmp_set_default_icon(void)
+{
+ //GdkPixbuf *icon;
+
+ //icon = gdk_pixbuf_new_from_xpm_data((const gchar **) bmp_player_icon);
+ //gtk_window_set_default_icon(icon);
+ //g_object_unref(icon);
+}
+
+static void
+display_usage(void)
+{
+ g_print(_("Usage: beep-media-player [options] [files] ...\n\n"
+ "Options:\n"
+ "--------\n"));
+ g_print("\n-h, --help ");
+ /* -h, --help switch */
+ g_print(_("Display this text and exit"));
+ g_print("\n-n, --session ");
+ /* -n, --session switch */
+ g_print(_("Select BMP/XMMS session (Default: 0)"));
+ g_print("\n-r, --rew ");
+ /* -r, --rew switch */
+ g_print(_("Skip backwards in playlist"));
+ g_print("\n-p, --play ");
+ /* -p, --play switch */
+ g_print(_("Start playing current playlist"));
+ g_print("\n-u, --pause ");
+ /* -u, --pause switch */
+ g_print(_("Pause current song"));
+ g_print("\n-s, --stop ");
+ /* -s, --stop switch */
+ g_print(_("Stop current song"));
+ g_print("\n-t, --play-pause ");
+ /* -t, --play-pause switch */
+ g_print(_("Pause if playing, play otherwise"));
+ g_print("\n-f, --fwd ");
+ /* -f, --fwd switch */
+ g_print(_("Skip forward in playlist"));
+ g_print("\n-e, --enqueue ");
+ /* -e, --enqueue switch */
+ g_print(_("Don't clear the playlist"));
+ g_print("\n-m, --show-main-window ");
+ /* -m, --show-main-window switch */
+ g_print(_("Show the main window"));
+ g_print("\n-a, --activate ");
+ /* -a, --activate switch */
+ g_print(_("Activate BMP"));
+ g_print("\n-i, --sm-client-id ");
+ /* -i, --sm-client-id switch */
+ g_print(_("Previous session ID"));
+ g_print("\n-v, --version ");
+ /* -v, --version switch */
+ g_print(_("Print version number and exit\n"));
+
+ exit(EXIT_SUCCESS);
+}
+
+static void
+parse_cmd_line(gint argc,
+ gchar ** argv,
+ BmpCmdLineOpt * options)
+{
+ static struct option long_options[] = {
+ {"help", 0, NULL, 'h'},
+ {"session", 1, NULL, 'n'},
+ {"rew", 0, NULL, 'r'},
+ {"play", 0, NULL, 'p'},
+ {"pause", 0, NULL, 'u'},
+ {"play-pause", 0, NULL, 't'},
+ {"stop", 0, NULL, 's'},
+ {"fwd", 0, NULL, 'f'},
+ {"enqueue", 0, NULL, 'e'},
+ {"show-main-window", 0, NULL, 'm'},
+ {"activate", 0, NULL, 'a'},
+ {"version", 0, NULL, 'v'},
+ {"sm-client-id", 1, NULL, 'i'},
+ {"xmms", 0, NULL, 'x'},
+ {0, 0, 0, 0}
+ };
+
+ gchar *filename, *current_dir;
+ gint c, i;
+
+ memset(options, 0, sizeof(BmpCmdLineOpt));
+ options->session = -1;
+
+ while ((c = getopt_long(argc, argv, "chn:rpusfemavtLS", long_options,
+ NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ display_usage();
+ break;
+ case 'n':
+ options->session = atoi(optarg);
+ break;
+ case 'r':
+ options->rew = TRUE;
+ break;
+ case 'p':
+ options->play = TRUE;
+ break;
+ case 'u':
+ options->pause = TRUE;
+ break;
+ case 's':
+ options->stop = TRUE;
+ break;
+ case 'f':
+ options->fwd = TRUE;
+ break;
+ case 't':
+ options->play_pause = TRUE;
+ break;
+ case 'm':
+ options->mainwin = TRUE;
+ break;
+ case 'a':
+ options->activate = TRUE;
+ break;
+ case 'e':
+ options->enqueue = TRUE;
+ break;
+ case 'v':
+ dump_version();
+ exit(EXIT_SUCCESS);
+ break;
+ case 'i':
+ options->previous_session_id = g_strdup(optarg);
+ break;
+ case 'c':
+ options->playcd = TRUE;
+ break;
+ case 'S':
+ options->load_skins = TRUE;
+ break;
+ }
+ }
+
+ current_dir = g_get_current_dir();
+
+ for (i = optind; i < argc; i++) {
+ if (argv[i][0] == '/' || strstr(argv[i], "://"))
+ filename = g_strdup(argv[i]);
+ else
+ filename = g_build_filename(current_dir, argv[i], NULL);
+
+ options->filenames = g_list_prepend(options->filenames, filename);
+ }
+
+ options->filenames = g_list_reverse(options->filenames);
+
+ g_free(current_dir);
+}
+
+static void
+handle_cmd_line_options(BmpCmdLineOpt * options,
+ gboolean remote)
+{
+ GList *filenames = options->filenames;
+ gint session = options->session;
+
+ if (session == -1) {
+ if (!remote)
+ session = ctrlsocket_get_session_id();
+ else
+ session = 0;
+ }
+
+ if (filenames) {
+ gint pos = 0;
+
+ if (options->load_skins) {
+ xmms_remote_set_skin(session, filenames->data);
+ skin_install_skin(filenames->data);
+ }
+ else {
+ if (options->enqueue && options->play)
+ pos = xmms_remote_get_playlist_length(session);
+
+ if (!options->enqueue)
+ xmms_remote_playlist_clear(session);
+
+ xmms_remote_playlist_add(session, filenames);
+
+ if (options->enqueue && options->play &&
+ xmms_remote_get_playlist_length(session) > pos)
+ xmms_remote_set_playlist_pos(session, pos);
+
+ if (!options->enqueue)
+ xmms_remote_play(session);
+ }
+
+ g_list_foreach(filenames, (GFunc) g_free, NULL);
+ g_list_free(filenames);
+ }
+
+ if (options->rew)
+ xmms_remote_playlist_prev(session);
+
+ if (options->play)
+ xmms_remote_play(session);
+
+ if (options->pause)
+ xmms_remote_pause(session);
+
+ if (options->stop)
+ xmms_remote_stop(session);
+
+ if (options->fwd)
+ xmms_remote_playlist_next(session);
+
+ if (options->play_pause)
+ xmms_remote_play_pause(session);
+
+ if (options->mainwin)
+ xmms_remote_main_win_toggle(session, TRUE);
+
+ if (options->activate)
+ xmms_remote_activate(session);
+
+ if (options->playcd)
+ play_medium();
+}
+
+static void
+segfault_handler(gint sig)
+{
+ g_printerr(_("\nReceived SIGSEGV\n\n"
+ "This could be a bug in BMP. If you don't know why this happened, "
+ "send a mail to us at beepmp-devel at lists.sourceforge.net\n\n"));
+#ifdef HANDLE_SIGSEGV
+ exit(EXIT_FAILURE);
+#else
+ abort();
+#endif
+}
+
+static void
+bmp_setup_logger(void)
+{
+ if (!bmp_logger_start(bmp_paths[BMP_PATH_LOG_FILE]))
+ return;
+
+ g_atexit(bmp_logger_stop);
+}
+
+static void
+run_load_skin_error_dialog(const gchar * skin_path)
+{
+ const gchar *markup =
+ N_("<b><big>Unable to load skin.</big></b>\n"
+ "\n"
+ "Check that skin at '%s' is usable and default skin is properly "
+ "installed at '%s'\n");
+
+ GtkWidget *dialog =
+ gtk_message_dialog_new_with_markup(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _(markup),
+ skin_path,
+ BMP_DEFAULT_SKIN_PATH);
+
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+static pid_t
+testlock(char* fname)
+{
+ int fd;
+ struct flock fl;
+
+ fd = open(fname, O_WRONLY, S_IWUSR);
+ if(fd < 0)
+ {
+ if(errno == ENOENT)
+ {
+ return 0;
+ }
+ else
+ {
+ perror("Test lock open file");
+ return -1;
+ }
+ }
+
+ fl.l_type = F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+
+ if(fcntl(fd, F_GETLK, &fl) < 0)
+ {
+ close(fd);
+ return -1;
+ }
+ close(fd);
+
+ if(fl.l_type == F_UNLCK)
+ return 0;
+
+ return fl.l_pid;
+}
+
+static void
+setlock(char* fname)
+{
+ int fd;
+ struct flock fl;
+
+ fd = open(fname, O_WRONLY|O_CREAT, S_IWUSR);
+ if(fd < 0)
+ {
+ perror("Set lock open file");
+ return;
+ }
+
+ fl.l_type = F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+
+ if(fcntl(fd, F_SETLK, &fl) < 0)
+ {
+ perror("Lock file");
+ close(fd);
+ }
+
+}
+
+gint
+main(gint argc, gchar ** argv)
+{
+ //added by lijiang
+ pid_t lockmusicplayer;
+ lockmusicplayer = testlock("/tmp/musicplayer.lock");
+ if(lockmusicplayer > 0)
+ {
+ printf("Already running a instance\n");
+ return 0;
+ }
+ setlock("/tmp/musicplayer.lock");
+ //added end
+
+ //BmpCmdLineOpt options;
+
+ /* Setup l10n early so we can print localized error messages */
+ gtk_set_locale();
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset(PACKAGE, "UTF-8");
+ textdomain(PACKAGE);
+
+ bmp_init_paths();
+ bmp_make_user_dir();
+ bmp_setup_logger();
+
+ /* Check GTK version. Really, this is only needed for binary
+ * distribution since configure already checks. */
+ if (!GTK_CHECK_VERSION(2, 4, 0)) {
+ g_printerr(_("Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+ "Please use GTK+ %s or newer.\n"),
+ gtk_major_version, gtk_minor_version, gtk_micro_version,
+ "2.4.0");
+ exit(EXIT_FAILURE);
+ }
+
+ g_set_application_name(_(application_name));
+
+ g_thread_init(NULL);
+ if (!g_thread_supported()) {
+ g_printerr(_("Sorry, threads isn't supported on your platform.\n\n"
+ "If you're on a libc5 based linux system and installed Glib & GTK+ before you\n"
+ "installed LinuxThreads you need to recompile Glib & GTK+.\n"));
+ exit(EXIT_FAILURE);
+ }
+
+ gdk_threads_init();
+
+
+ if (!gtk_init_check(&argc, &argv)) {
+ if (argc < 2) {
+ /* GTK check failed, and no arguments passed to indicate
+ that user is intending to only remote control a running
+ session */
+ g_printerr(_("BMP: Unable to open display, exiting."));
+ exit(EXIT_FAILURE);
+ }
+
+// handle_cmd_line_options(&options, TRUE);
+ exit(EXIT_SUCCESS);
+ }
+
+// if (!vfs_init()) {
+// g_printerr(Q_("Could not initialize VFS.\n"));
+// exit(EXIT_FAILURE);
+// }
+
+// signal(SIGPIPE, SIG_IGN); /* for controlsocket.c */
+ signal(SIGSEGV, segfault_handler);
+
+// parse_cmd_line(argc, argv, &options);
+
+ g_random_set_seed(time(NULL));
+
+ bmp_config_load();
+
+// if (options.session != -1 || !ctrlsocket_setup()) {
+// handle_cmd_line_options(&options, TRUE);
+// exit(EXIT_SUCCESS);
+// }
+
+// check_wm_hints();
+
+// bmp_set_default_icon();
+
+// gtk_accel_map_load(bmp_paths[BMP_PATH_ACCEL_FILE]);
+
+ mainwin_create();
+
+// playlistwin_create();
+// equalizerwin_create();
+/*
+ if (!init_skins(cfg.skin)) {
+ run_load_skin_error_dialog(cfg.skin);
+ exit(EXIT_FAILURE);
+ }
+*/
+ GDK_THREADS_ENTER();
+
+ plugin_system_init();
+// read_volume(VOLSET_STARTUP);
+// playlist_load(bmp_paths[BMP_PATH_PLAYLIST_FILE]);
+// playlist_set_position(cfg.playlist_position);
+
+ /* this needs to be called after all 3 windows are created and
+ input plugins are setup'ed */
+// mainwin_setup_menus();
+
+ GDK_THREADS_LEAVE();
+
+// ctrlsocket_start();
+
+// handle_cmd_line_options(&options, FALSE);
+
+ GDK_THREADS_ENTER();
+
+// mainwin_set_info_text();
+
+ /* FIXME: delayed, because it deals directly with the plugin
+ * interface to set menu items */
+// create_prefs_window();
+
+// if (cfg.equalizer_visible)
+// equalizerwin_show(TRUE);
+
+// if (cfg.playlist_visible)
+// playlistwin_show();
+/*
+ if (cfg.player_visible)
+ {
+ mainwin_show(TRUE);
+ }
+ else if (!cfg.playlist_visible && !cfg.equalizer_visible)
+ {
+ mainwin_show(TRUE);
+ }
+*/
+ /* FIXME: move this away */
+// hint_set_always(cfg.always_on_top);
+
+// playlist_start_get_info_thread();
+// mainwin_attach_idle_func();
+
+ /*added by lijiang*/
+ playlist_clear();
+ gchar *audio_path = g_build_filename(g_get_home_dir(), "audio", NULL);
+ playlist_add_dir(audio_path);
+ g_free(audio_path);
+
+ openmoko_mainwin_create();
+
+ gtk_main();
+
+ GDK_THREADS_LEAVE();
+
+ return EXIT_SUCCESS;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/main.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,141 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef MAIN_H
+#define MAIN_H
+
+#include "mainwin.h"
+#include "textbox.h"
+#include "vis.h"
+
+
+#define BMP_USER_PLUGIN_DIR_BASENAME "Plugins"
+#define BMP_SKIN_DIR_BASENAME "Skins"
+#define BMP_SKIN_THUMB_DIR_BASENAME ".thumbs"
+#define BMP_ACCEL_BASENAME "accels"
+#define BMP_CONFIG_BASENAME "config"
+#define BMP_PLAYLIST_BASENAME "bmp.m3u"
+#define BMP_LOG_BASENAME "log"
+
+
+#define PLAYER_HEIGHT \
+ (cfg.player_shaded ? MAINWIN_SHADED_HEIGHT : MAINWIN_HEIGHT)
+#define PLAYER_WIDTH MAINWIN_WIDTH
+
+struct _BmpConfig {
+ gint player_x, player_y;
+ gint equalizer_x, equalizer_y;
+ gint playlist_x, playlist_y;
+ gint playlist_width, playlist_height;
+ gint snap_distance;
+ gboolean use_realtime;
+ gboolean shuffle, repeat;
+ gboolean doublesize, autoscroll;
+ gboolean analyzer_peaks, equalizer_autoload, easy_move, equalizer_active;
+ gboolean playlist_visible, equalizer_visible, player_visible;
+ gboolean player_shaded, playlist_shaded, equalizer_shaded;
+ gboolean allow_multiple_instances, always_show_cb;
+ gboolean convert_underscore, convert_twenty;
+ gboolean show_numbers_in_pl;
+ gboolean snap_windows, save_window_position;
+ gboolean dim_titlebar;
+ gboolean get_info_on_load, get_info_on_demand;
+ gboolean eq_doublesize_linked;
+ gboolean sort_jump_to_file;
+ gboolean use_eplugins;
+ gboolean always_on_top, sticky;
+ gboolean no_playlist_advance;
+ gboolean smooth_title_scroll;
+ gboolean use_pl_metadata;
+ gboolean warn_about_unplayables;
+ gboolean use_backslash_as_dir_delimiter;
+ gboolean random_skin_on_play;
+ gboolean use_fontsets;
+ gboolean mainwin_use_xfont;
+ gboolean custom_cursors;
+ gboolean close_dialog_open;
+ gboolean close_dialog_add;
+ gfloat equalizer_preamp, equalizer_bands[10];
+ gchar *skin;
+ gchar *outputplugin;
+ gchar *filesel_path;
+ gchar *playlist_path;
+ gchar *playlist_font, *mainwin_font;
+ gchar *disabled_iplugins;
+ gchar *enabled_gplugins, *enabled_vplugins, *enabled_eplugins;
+ gchar *eqpreset_default_file, *eqpreset_extension;
+ GList *url_history;
+ gint timer_mode;
+ gint vis_type;
+ gint analyzer_mode, analyzer_type;
+ gint scope_mode;
+ gint vu_mode, vis_refresh;
+ gint analyzer_falloff, peaks_falloff;
+ gint playlist_position;
+ gint pause_between_songs_time;
+ gboolean pause_between_songs;
+ gboolean show_wm_decorations;
+ gint mouse_change;
+ gboolean playlist_transparent;
+ gint titlestring_preset;
+ gchar *gentitle_format;
+ gboolean softvolume_enable;
+ gboolean xmms_compat_mode;
+ gboolean eq_extra_filtering;
+ gint scroll_pl_by;
+};
+
+typedef struct _BmpConfig BmpConfig;
+
+enum {
+ VOLSET_STARTUP,
+ VOLSET_UPDATE,
+ VOLUME_ADJUSTED,
+ VOLUME_SET
+};
+
+enum {
+ BMP_PATH_LOG_FILE,
+ BMP_PATH_USER_DIR,
+ BMP_PATH_USER_PLUGIN_DIR,
+ BMP_PATH_USER_SKIN_DIR,
+ BMP_PATH_SKIN_THUMB_DIR,
+ BMP_PATH_ACCEL_FILE,
+ BMP_PATH_CONFIG_FILE,
+ BMP_PATH_PLAYLIST_FILE,
+ BMP_PATH_COUNT
+};
+
+extern BmpConfig cfg;
+extern BmpConfig bmp_default_config;
+
+extern gchar *bmp_paths[];
+
+extern const gchar *bmp_titlestring_presets[];
+extern const guint n_titlestring_presets;
+
+extern GList *dock_window_list;
+extern gboolean pposition_broken;
+
+void bmp_config_save(void);
+void bmp_config_load(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,4642 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+
+#include "textbox.h"
+#include "mainwin.h"
+#include "pixmaps.h"
+
+#include "main.h"
+
+#include "controlsocket.h"
+#include "pluginenum.h"
+
+#include "about.h"
+#include "dnd.h"
+#include "dock.h"
+#include "equalizer.h"
+#include "hints.h"
+#include "input.h"
+#include "playlistwin.h"
+#include "prefswin.h"
+#include "skinwin.h"
+
+#include "hslider.h"
+#include "menurow.h"
+#include "monostereo.h"
+#include "pbutton.h"
+#include "playback.h"
+#include "playlist.h"
+#include "playlist_list.h"
+#include "playstatus.h"
+#include "sbutton.h"
+#include "svis.h"
+#include "textbox.h"
+#include "urldecode.h"
+#include "util.h"
+#include "vis.h"
+#include "visualization.h"
+#include "libbeep/configdb.h"
+
+//added by lijiang
+#define DBUS_API_SUBJECT_TO_CHANGE
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+
+//openmoko header
+#include <libmokoui/moko-application.h>
+#include <libmokoui/moko-finger-tool-box.h>
+#include <libmokoui/moko-finger-window.h>
+#include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-pixmap-button.h>
+
+//id3lib
+#include <id3.h>
+
+//vorbis
+//#include "vorbis/codec.h"
+//#include "vorbisfile.h"
+
+//vfs
+#include <libbeep/vfs.h>
+
+//mp4
+//#include <mp4.h>
+//added end
+
+#define ITEM_SEPARATOR {"/-", NULL, NULL, 0, "<Separator>"}
+
+/*
+ * If you change the menu above change these defines also
+ */
+
+#define MAINWIN_VIS_MENU_VIS_MODE 1
+#define MAINWIN_VIS_MENU_NUM_VIS_MODE 3
+#define MAINWIN_VIS_MENU_ANALYZER_MODE 5
+#define MAINWIN_VIS_MENU_NUM_ANALYZER_MODE 3
+#define MAINWIN_VIS_MENU_ANALYZER_TYPE 9
+#define MAINWIN_VIS_MENU_NUM_ANALYZER_TYPE 2
+#define MAINWIN_VIS_MENU_ANALYZER_PEAKS 12
+#define MAINWIN_VIS_MENU_SCOPE_MODE 14
+#define MAINWIN_VIS_MENU_NUM_SCOPE_MODE 3
+#define MAINWIN_VIS_MENU_WSHADEVU_MODE 18
+#define MAINWIN_VIS_MENU_NUM_WSHADEVU_MODE 2
+#define MAINWIN_VIS_MENU_REFRESH_RATE 21
+#define MAINWIN_VIS_MENU_NUM_REFRESH_RATE 4
+#define MAINWIN_VIS_MENU_AFALLOFF 26
+#define MAINWIN_VIS_MENU_NUM_AFALLOFF 5
+#define MAINWIN_VIS_MENU_PFALLOFF 32
+#define MAINWIN_VIS_MENU_NUM_PFALLOFF 5
+
+#define VOLSET_DISP_TIMES 5
+
+
+enum {
+ MAINWIN_SONGNAME_FILEINFO,
+ MAINWIN_SONGNAME_JTF,
+ MAINWIN_SONGNAME_JTT,
+ MAINWIN_SONGNAME_SCROLL
+};
+
+enum {
+ MAINWIN_OPT_SKIN, MAINWIN_OPT_RELOADSKIN,
+ MAINWIN_OPT_REPEAT, MAINWIN_OPT_SHUFFLE, MAINWIN_OPT_NPA,
+ MAINWIN_OPT_TELAPSED, MAINWIN_OPT_TREMAINING,
+ MAINWIN_OPT_ALWAYS,
+ MAINWIN_OPT_STICKY,
+ MAINWIN_OPT_WS,
+ MAINWIN_OPT_PWS,
+ MAINWIN_OPT_EQWS
+};
+
+enum {
+ MAINWIN_VIS_ANALYZER, MAINWIN_VIS_SCOPE, MAINWIN_VIS_OFF,
+ MAINWIN_VIS_ANALYZER_NORMAL, MAINWIN_VIS_ANALYZER_FIRE,
+ MAINWIN_VIS_ANALYZER_VLINES,
+ MAINWIN_VIS_ANALYZER_LINES, MAINWIN_VIS_ANALYZER_BARS,
+ MAINWIN_VIS_ANALYZER_PEAKS,
+ MAINWIN_VIS_SCOPE_DOT, MAINWIN_VIS_SCOPE_LINE, MAINWIN_VIS_SCOPE_SOLID,
+ MAINWIN_VIS_VU_NORMAL, MAINWIN_VIS_VU_SMOOTH,
+ MAINWIN_VIS_REFRESH_FULL, MAINWIN_VIS_REFRESH_HALF,
+ MAINWIN_VIS_REFRESH_QUARTER, MAINWIN_VIS_REFRESH_EIGHTH,
+ MAINWIN_VIS_AFALLOFF_SLOWEST, MAINWIN_VIS_AFALLOFF_SLOW,
+ MAINWIN_VIS_AFALLOFF_MEDIUM, MAINWIN_VIS_AFALLOFF_FAST,
+ MAINWIN_VIS_AFALLOFF_FASTEST,
+ MAINWIN_VIS_PFALLOFF_SLOWEST, MAINWIN_VIS_PFALLOFF_SLOW,
+ MAINWIN_VIS_PFALLOFF_MEDIUM, MAINWIN_VIS_PFALLOFF_FAST,
+ MAINWIN_VIS_PFALLOFF_FASTEST,
+ MAINWIN_VIS_PLUGINS
+};
+
+enum {
+ MAINWIN_VIS_ACTIVE_MAINWIN, MAINWIN_VIS_ACTIVE_PLAYLISTWIN
+};
+
+
+typedef struct _PlaybackInfo PlaybackInfo;
+
+struct _PlaybackInfo {
+ gchar *title;
+ gint bitrate;
+ gint frequency;
+ gint n_channels;
+};
+
+
+GtkWidget *mainwin = NULL;
+
+static GdkBitmap *nullmask;
+static gint balance;
+
+GtkWidget *mainwin_jtf = NULL;
+static GtkWidget *mainwin_jtt = NULL;
+
+GtkItemFactory *mainwin_songname_menu, *mainwin_vis_menu;
+GtkItemFactory *mainwin_general_menu, *mainwin_play_menu, *mainwin_add_menu;
+GtkItemFactory *mainwin_view_menu;
+
+
+GdkGC *mainwin_gc;
+static GdkPixmap *mainwin_bg = NULL;
+
+GtkAccelGroup *mainwin_accel = NULL;
+
+static PButton *mainwin_menubtn;
+static PButton *mainwin_minimize, *mainwin_shade, *mainwin_close;
+
+static PButton *mainwin_rew, *mainwin_fwd;
+static PButton *mainwin_eject;
+static PButton *mainwin_play, *mainwin_pause, *mainwin_stop;
+
+TButton *mainwin_shuffle, *mainwin_repeat, *mainwin_eq, *mainwin_pl;
+TextBox *mainwin_info;
+
+static TextBox *mainwin_rate_text, *mainwin_freq_text;
+static TextBox *mainwin_stime_min, *mainwin_stime_sec;
+
+PlayStatus *mainwin_playstatus;
+
+static Number *mainwin_minus_num, *mainwin_10min_num, *mainwin_min_num;
+static Number *mainwin_10sec_num, *mainwin_sec_num;
+
+static gboolean setting_volume = FALSE;
+
+Vis *active_vis;
+Vis *mainwin_vis;
+SVis *mainwin_svis;
+
+static MenuRow *mainwin_menurow;
+static HSlider *mainwin_volume, *mainwin_balance, *mainwin_position;
+static HSlider *mainwin_sposition = NULL;
+static MonoStereo *mainwin_monostereo;
+static SButton *mainwin_srew, *mainwin_splay, *mainwin_spause;
+static SButton *mainwin_sstop, *mainwin_sfwd, *mainwin_seject, *mainwin_about;
+
+static GList *mainwin_wlist = NULL;
+
+static gint mainwin_timeout_id;
+
+G_LOCK_DEFINE_STATIC(mainwin_title);
+
+static gboolean mainwin_force_redraw = FALSE;
+static gchar *mainwin_title_text = NULL;
+static gboolean mainwin_info_text_locked = FALSE;
+
+
+static void mainwin_songname_menu_callback(gpointer user_data,
+ guint action,
+ GtkWidget * widget);
+
+static void mainwin_vis_menu_callback(gpointer user_data,
+ guint action,
+ GtkWidget * widget);
+
+static void mainwin_view_menu_callback(gpointer user_data,
+ guint action,
+ GtkWidget * widget);
+
+static void mainwin_play_menu_callback(gpointer user_data,
+ guint action,
+ GtkWidget * widget);
+
+/* Song name area menu */
+
+static GtkItemFactoryEntry mainwin_songname_menu_entries[] = {
+ {N_("/View Track Details"), "<alt>i", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_FILEINFO, "<ImageItem>", my_pixbuf},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Autoscroll Songname"), NULL, mainwin_songname_menu_callback,
+ MAINWIN_SONGNAME_SCROLL, "<ToggleItem>"},
+};
+
+static gint mainwin_songname_menu_entries_num =
+ G_N_ELEMENTS(mainwin_songname_menu_entries);
+
+/* Mini-visualizer area menu */
+
+static GtkItemFactoryEntry mainwin_vis_menu_entries[] = {
+ {N_("/Visualization Mode"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Visualization Mode/Analyzer"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER, "<RadioItem>"},
+ {N_("/Visualization Mode/Scope"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_SCOPE, "/Visualization Mode/Analyzer"},
+ {N_("/Visualization Mode/Off"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_OFF, "/Visualization Mode/Analyzer"},
+ {N_("/Analyzer Mode"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Analyzer Mode/Normal"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER_NORMAL, "<RadioItem>"},
+ {N_("/Analyzer Mode/Fire"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER_FIRE, "/Analyzer Mode/Normal"},
+ {N_("/Analyzer Mode/Vertical Lines"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER_VLINES, "/Analyzer Mode/Normal"},
+ {"/Analyzer Mode/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Analyzer Mode/Lines"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER_LINES, "<RadioItem>"},
+ {N_("/Analyzer Mode/Bars"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER_BARS, "/Analyzer Mode/Lines"},
+ {"/Analyzer Mode/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Analyzer Mode/Peaks"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_ANALYZER_PEAKS, "<ToggleItem>"},
+ {N_("/Scope Mode"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Scope Mode/Dot Scope"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_SCOPE_DOT, "<RadioItem>"},
+ {N_("/Scope Mode/Line Scope"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_SCOPE_LINE, "/Scope Mode/Dot Scope"},
+ {N_("/Scope Mode/Solid Scope"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_SCOPE_SOLID, "/Scope Mode/Dot Scope"},
+ {N_("/WindowShade VU Mode"), NULL, NULL, 0, "<Branch>"},
+ {N_("/WindowShade VU Mode/Normal"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_VU_NORMAL, "<RadioItem>"},
+ {N_("/WindowShade VU Mode/Smooth"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_VU_SMOOTH, "/WindowShade VU Mode/Normal"},
+ {N_("/Refresh Rate"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Refresh Rate/Full (~50 fps)"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_REFRESH_FULL, "<RadioItem>"},
+ {N_("/Refresh Rate/Half (~25 fps)"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_REFRESH_HALF, "/Refresh Rate/Full (~50 fps)"},
+ {N_("/Refresh Rate/Quarter (~13 fps)"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_REFRESH_QUARTER, "/Refresh Rate/Full (~50 fps)"},
+ {N_("/Refresh Rate/Eighth (~6 fps)"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_REFRESH_EIGHTH, "/Refresh Rate/Full (~50 fps)"},
+ {N_("/Analyzer Falloff"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Analyzer Falloff/Slowest"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_AFALLOFF_SLOWEST, "<RadioItem>"},
+ {N_("/Analyzer Falloff/Slow"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_AFALLOFF_SLOW, "/Analyzer Falloff/Slowest"},
+ {N_("/Analyzer Falloff/Medium"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_AFALLOFF_MEDIUM, "/Analyzer Falloff/Slowest"},
+ {N_("/Analyzer Falloff/Fast"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_AFALLOFF_FAST, "/Analyzer Falloff/Slowest"},
+ {N_("/Analyzer Falloff/Fastest"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_AFALLOFF_FASTEST, "/Analyzer Falloff/Slowest"},
+ {N_("/Peaks Falloff"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Peaks Falloff/Slowest"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_PFALLOFF_SLOWEST, "<RadioItem>"},
+ {N_("/Peaks Falloff/Slow"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_PFALLOFF_SLOW, "/Peaks Falloff/Slowest"},
+ {N_("/Peaks Falloff/Medium"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_PFALLOFF_MEDIUM, "/Peaks Falloff/Slowest"},
+ {N_("/Peaks Falloff/Fast"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_PFALLOFF_FAST, "/Peaks Falloff/Slowest"},
+ {N_("/Peaks Falloff/Fastest"), NULL, mainwin_vis_menu_callback,
+ MAINWIN_VIS_PFALLOFF_FASTEST, "/Peaks Falloff/Slowest"}
+};
+
+static const gint mainwin_vis_menu_entries_num =
+ G_N_ELEMENTS(mainwin_vis_menu_entries);
+
+/* Playback menu (now used only for accelerators) */
+
+static GtkItemFactoryEntry mainwin_playback_menu_entries[] = {
+/*
+ {N_("/Play CD"), "<alt>C", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYCD, "<StockItem>", GTK_STOCK_CDROM},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+*/
+ {N_("/Repeat"), "R", mainwin_play_menu_callback,
+ MAINWIN_OPT_REPEAT, "<ToggleItem>"},
+ {N_("/Shuffle"), "S", mainwin_play_menu_callback,
+ MAINWIN_OPT_SHUFFLE, "<ToggleItem>"},
+/*
+ {N_("/No Playlist Advance"), "<control>N", mainwin_play_menu_callback,
+ MAINWIN_OPT_NPA, "<ToggleItem>"},
+*/
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Play"), "x", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAY, "<Item>"},
+ {N_("/Pause"), "c", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PAUSE, "<Item>"},
+ {N_("/Stop"), "v", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_STOP, "<StockItem>", GTK_STOCK_STOP},
+ {N_("/Previous"), "z", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PREV, "<StockItem>", GTK_STOCK_GO_BACK},
+ {N_("/Next"), "b", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_NEXT, "<StockItem>", GTK_STOCK_GO_FORWARD},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Jump to Playlist Start"), "<control>Z", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_START, "<StockItem>", GTK_STOCK_GOTO_TOP},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Jump to File"), "J", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_JTF, "<StockItem>", GTK_STOCK_JUMP_TO},
+ {N_("/Jump to Time"), "<control>J", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_JTT, "<StockItem>", GTK_STOCK_JUMP_TO},
+};
+
+static const gint mainwin_playback_menu_entries_num =
+ G_N_ELEMENTS(mainwin_playback_menu_entries);
+
+/* Main menu */
+
+static GtkItemFactoryEntry mainwin_general_menu_entries[] = {
+ { N_("/View Track Details"), "<alt>I", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_FILEINFO, "<ImageItem>", my_pixbuf},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Preferences"), "<control>P", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PREFS, "<StockItem>", GTK_STOCK_PREFERENCES},
+ {N_("/_View"), NULL, NULL, 0, "<Item>"},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/About BMP"), NULL, mainwin_general_menu_callback,
+ MAINWIN_GENERAL_ABOUT, "<StockItem>", GTK_STOCK_DIALOG_INFO},
+ {N_("/_Quit"), NULL, mainwin_general_menu_callback,
+ MAINWIN_GENERAL_EXIT, "<StockItem>", GTK_STOCK_QUIT}
+};
+
+static const gint mainwin_general_menu_entries_num =
+ G_N_ELEMENTS(mainwin_general_menu_entries);
+
+/* Add submenu */
+
+static GtkItemFactoryEntry mainwin_add_menu_entries[] = {
+ {N_("/Files..."), "f", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYFILE, "<StockItem>", GTK_STOCK_OPEN},
+/*
+ {N_("/Folders..."), "d",
+ mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYDIRECTORY, "<StockItem>", GTK_STOCK_OPEN},
+*/
+ {N_("/Internet location..."), "<control>h", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYLOCATION, "<StockItem>", GTK_STOCK_NETWORK},
+};
+
+static const gint mainwin_add_menu_entries_num =
+ G_N_ELEMENTS(mainwin_add_menu_entries);
+
+
+/*
+*/
+
+/* View submenu */
+
+static GtkItemFactoryEntry mainwin_view_menu_entries[] = {
+ {N_("/Show Playlist Editor"), "<alt>E", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_SHOWPLWIN, "<ToggleItem>"},
+ {N_("/Show Equalizer"), "<alt>G", mainwin_general_menu_callback,
+ MAINWIN_GENERAL_SHOWEQWIN, "<ToggleItem>"},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Time Elapsed"), "<control>E", mainwin_view_menu_callback,
+ MAINWIN_OPT_TELAPSED, "<RadioItem>"},
+ {N_("/Time Remaining"), "<control>R", mainwin_view_menu_callback,
+ MAINWIN_OPT_TREMAINING, "/Time Elapsed"},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Always On Top"), "<control>o", mainwin_view_menu_callback,
+ MAINWIN_OPT_ALWAYS, "<ToggleItem>"},
+ {N_("/Put on All Workspaces"), "<control>S",
+ mainwin_view_menu_callback, MAINWIN_OPT_STICKY, "<ToggleItem>"},
+ {"/-", NULL, NULL, 0, "<Separator>"},
+ {N_("/Roll up Player"), "<control>W", mainwin_view_menu_callback,
+ MAINWIN_OPT_WS, "<ToggleItem>"},
+ {N_("/Roll up Playlist Editor"), "<control><shift>W", mainwin_view_menu_callback,
+ MAINWIN_OPT_PWS, "<ToggleItem>"},
+ {N_("/Roll up Equalizer"), "<control><alt>W", mainwin_view_menu_callback,
+ MAINWIN_OPT_EQWS, "<ToggleItem>"}
+};
+
+static const gint mainwin_view_menu_entries_num =
+ G_N_ELEMENTS(mainwin_view_menu_entries);
+
+
+static PlaybackInfo playback_info = { NULL, 0, 0, 0 };
+
+
+static gint mainwin_idle_func(gpointer data);
+
+static void set_timer_mode_menu_cb(TimerMode mode);
+static void set_timer_mode(TimerMode mode);
+
+
+/* FIXME: placed here for now */
+void
+playback_get_sample_params(gint * bitrate,
+ gint * frequency,
+ gint * n_channels)
+{
+ if (bitrate)
+ *bitrate = playback_info.bitrate;
+
+ if (frequency)
+ *frequency = playback_info.frequency;
+
+ if (n_channels)
+ *n_channels = playback_info.n_channels;
+}
+
+static void
+playback_set_sample_params(gint bitrate,
+ gint frequency,
+ gint n_channels)
+{
+ if (bitrate >= 0)
+ playback_info.bitrate = bitrate;
+
+ if (frequency >= 0)
+ playback_info.frequency = frequency;
+
+ if (n_channels >= 0)
+ playback_info.n_channels = n_channels;
+}
+
+static void
+mainwin_set_title_scroll(gboolean scroll)
+{
+ cfg.autoscroll = scroll;
+ textbox_set_scroll(mainwin_info, cfg.autoscroll);
+}
+
+
+void
+mainwin_set_always_on_top(gboolean always)
+{
+ GtkWidget *widget = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Always On Top");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget),
+ mainwin_menurow->mr_always_selected);
+}
+
+static void
+mainwin_set_shape_mask(void)
+{
+ GdkBitmap *mask;
+
+ if (!cfg.player_visible)
+ return;
+
+ mask = skin_get_mask(bmp_active_skin, SKIN_MASK_MAIN + cfg.player_shaded);
+ gtk_widget_shape_combine_mask(mainwin, mask, 0, 0);
+}
+
+static void
+mainwin_set_shade(gboolean shaded)
+{
+ GtkWidget *widget;
+ widget = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Roll up Player");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), shaded);
+}
+
+static void
+mainwin_set_shade_menu_cb(gboolean shaded)
+{
+ cfg.player_shaded = shaded;
+
+ mainwin_set_shape_mask();
+
+ if (shaded) {
+ dock_shade(dock_window_list, GTK_WINDOW(mainwin),
+ MAINWIN_SHADED_HEIGHT);
+
+ widget_show(WIDGET(mainwin_svis));
+ vis_clear_data(mainwin_vis);
+
+ widget_show(WIDGET(mainwin_srew));
+ widget_show(WIDGET(mainwin_splay));
+ widget_show(WIDGET(mainwin_spause));
+ widget_show(WIDGET(mainwin_sstop));
+ widget_show(WIDGET(mainwin_sfwd));
+ widget_show(WIDGET(mainwin_seject));
+
+ widget_show(WIDGET(mainwin_stime_min));
+ widget_show(WIDGET(mainwin_stime_sec));
+
+ textbox_set_scroll(mainwin_info, FALSE);
+ if (bmp_playback_get_playing()
+ && playlist_get_current_length() != -1)
+ widget_show(WIDGET(mainwin_sposition));
+
+ mainwin_shade->pb_ny = mainwin_shade->pb_py = 27;
+ }
+ else {
+ dock_shade(dock_window_list, GTK_WINDOW(mainwin), MAINWIN_HEIGHT);
+
+ widget_hide(WIDGET(mainwin_svis));
+ svis_clear_data(mainwin_svis);
+
+ widget_hide(WIDGET(mainwin_srew));
+ widget_hide(WIDGET(mainwin_splay));
+ widget_hide(WIDGET(mainwin_spause));
+ widget_hide(WIDGET(mainwin_sstop));
+ widget_hide(WIDGET(mainwin_sfwd));
+ widget_hide(WIDGET(mainwin_seject));
+
+ widget_hide(WIDGET(mainwin_stime_min));
+ widget_hide(WIDGET(mainwin_stime_sec));
+ widget_hide(WIDGET(mainwin_sposition));
+
+ textbox_set_scroll(mainwin_info, TRUE);
+ mainwin_shade->pb_ny = mainwin_shade->pb_py = 18;
+ }
+
+ draw_main_window(TRUE);
+}
+
+static void
+mainwin_vis_set_active_vis(gint new_vis)
+{
+ switch (new_vis) {
+ case MAINWIN_VIS_ACTIVE_MAINWIN:
+// playlistwin_vis_disable();
+ active_vis = mainwin_vis;
+ break;
+ case MAINWIN_VIS_ACTIVE_PLAYLISTWIN:
+// playlistwin_vis_enable();
+ active_vis = playlistwin_vis;
+ break;
+ }
+}
+
+static void
+mainwin_vis_set_refresh(RefreshRate rate)
+{
+ cfg.vis_refresh = rate;
+}
+
+static void
+mainwin_vis_set_afalloff(FalloffSpeed speed)
+{
+ cfg.analyzer_falloff = speed;
+}
+
+static void
+mainwin_vis_set_pfalloff(FalloffSpeed speed)
+{
+ cfg.peaks_falloff = speed;
+}
+
+static void
+mainwin_vis_set_analyzer_mode(AnalyzerMode mode)
+{
+ cfg.analyzer_mode = mode;
+}
+
+static void
+mainwin_vis_set_analyzer_type(AnalyzerType mode)
+{
+ cfg.analyzer_type = mode;
+}
+
+void
+mainwin_vis_set_type(VisType mode)
+{
+ gchar *path =
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_VIS_MODE + mode].path;
+ GtkWidget *widget = gtk_item_factory_get_widget(mainwin_vis_menu, path);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), TRUE);
+}
+
+static void
+mainwin_vis_set_type_menu_cb(VisType mode)
+{
+ cfg.vis_type = mode;
+
+ if (mode == VIS_OFF) {
+ if (cfg.player_shaded && cfg.player_visible)
+ svis_clear(mainwin_svis);
+ else
+ vis_clear(active_vis);
+ }
+ if (mode == VIS_ANALYZER) {
+ vis_clear_data(active_vis);
+ svis_clear_data(mainwin_svis);
+ }
+}
+
+static void
+mainwin_menubtn_cb(void)
+{
+ gint x, y;
+ gtk_window_get_position(GTK_WINDOW(mainwin), &x, &y);
+ util_item_factory_popup(mainwin_general_menu,
+ x + 6,
+ y + MAINWIN_SHADED_HEIGHT,
+ 1, GDK_CURRENT_TIME);
+}
+
+void
+mainwin_minimize_cb(void)
+{
+ if (!mainwin)
+ return;
+
+ gtk_window_iconify(GTK_WINDOW(mainwin));
+}
+
+static void
+mainwin_shade_toggle(void)
+{
+ mainwin_set_shade(!cfg.player_shaded);
+}
+
+void
+mainwin_quit_cb(void)
+{
+// gtk_widget_hide(equalizerwin);
+// gtk_widget_hide(playlistwin);
+ gtk_widget_hide(mainwin);
+ gdk_flush();
+
+ if(mainwin_timeout_id > 0)
+ g_source_remove(mainwin_timeout_id);
+
+ util_set_cursor(NULL);
+
+// bmp_config_save();
+// gtk_accel_map_save(bmp_paths[BMP_PATH_ACCEL_FILE]);
+
+// ctrlsocket_cleanup();
+
+// playlist_stop_get_info_thread();
+ playlist_clear();
+
+ plugin_system_cleanup();
+
+ gtk_main_quit();
+}
+
+static void
+mainwin_destroy(GtkWidget * widget, gpointer data)
+{
+ mainwin_quit_cb();
+}
+
+static void
+mainwin_draw_titlebar(gboolean focus)
+{
+ skin_draw_mainwin_titlebar(bmp_active_skin, mainwin_bg, mainwin_gc,
+ cfg.player_shaded, focus || !cfg.dim_titlebar);
+}
+
+void
+draw_main_window(gboolean force)
+{
+ GList *wl;
+ Widget *w;
+ gboolean redraw;
+
+ if (!cfg.player_visible)
+ return;
+
+ widget_list_lock(mainwin_wlist);
+
+ if (force) {
+ if (!cfg.player_shaded)
+ skin_draw_pixmap(bmp_active_skin, mainwin_bg, mainwin_gc,
+ SKIN_MAIN, 0, 0, 0, 0, MAINWIN_WIDTH,
+ MAINWIN_HEIGHT);
+ mainwin_draw_titlebar(gtk_window_has_toplevel_focus
+ (GTK_WINDOW(mainwin)));
+ }
+
+ widget_list_draw(mainwin_wlist, &redraw, force);
+
+ if (redraw || force) {
+ if (force) {
+ gdk_window_clear(mainwin->window);
+ }
+ else {
+ for (wl = mainwin_wlist; wl; wl = g_list_next(wl)) {
+ w = WIDGET(wl->data);
+
+ if (!w->redraw || !w->visible)
+ continue;
+
+ gdk_window_clear_area(mainwin->window, w->x, w->y,
+ w->width, w->height);
+ w->redraw = FALSE;
+ }
+ }
+
+ gdk_flush();
+ }
+
+ widget_list_unlock(mainwin_wlist);
+}
+
+
+void
+mainwin_set_info_text(void)
+{
+ gchar *text;
+
+ if (mainwin_info_text_locked)
+ return;
+
+ if ((text = input_get_info_text()) != NULL) {
+ textbox_set_text(mainwin_info, text);
+ g_free(text);
+ }
+ else if ((text = playlist_get_info_text()) != NULL) {
+ textbox_set_text(mainwin_info, text);
+ g_free(text);
+ }
+}
+
+void
+mainwin_lock_info_text(const gchar * text)
+{
+ mainwin_info_text_locked = TRUE;
+ textbox_set_text(mainwin_info, text);
+}
+
+void
+mainwin_release_info_text(void)
+{
+ mainwin_info_text_locked = FALSE;
+ mainwin_set_info_text();
+}
+
+
+static gchar *
+make_mainwin_title(const gchar * title)
+{
+ if (title)
+ return g_strdup_printf(_("%s - BMP"), title);
+ else
+ return g_strdup(_("BMP"));
+}
+
+void
+mainwin_set_song_title(const gchar * title)
+{
+ G_LOCK(mainwin_title);
+ g_free(mainwin_title_text);
+ mainwin_title_text = make_mainwin_title(title);
+ G_UNLOCK(mainwin_title);
+}
+
+void
+mainwin_set_song_info(gint bitrate,
+ gint frequency,
+ gint n_channels)
+{
+ gchar text[10];
+ gchar *title;
+
+ playback_set_sample_params(bitrate, frequency, n_channels);
+
+ if (bitrate != -1) {
+ bitrate /= 1000;
+
+ if (bitrate < 1000) {
+ /* Show bitrate in 1000s */
+ g_snprintf(text, sizeof(text), "%3d", bitrate);
+ textbox_set_text(mainwin_rate_text, text);
+ }
+ else {
+ /* Show bitrate in 100,000s */
+ bitrate /= 100;
+ g_snprintf(text, sizeof(text), "%2dH", bitrate);
+ textbox_set_text(mainwin_rate_text, text);
+ }
+ }
+ else
+ textbox_set_text(mainwin_rate_text, _("VBR"));
+
+ /* Show sampling frequency in kHz */
+ g_snprintf(text, sizeof(text), "%2d", frequency / 1000);
+ textbox_set_text(mainwin_freq_text, text);
+
+ monostereo_set_num_channels(mainwin_monostereo, n_channels);
+
+ widget_show(WIDGET(mainwin_minus_num));
+ widget_show(WIDGET(mainwin_10min_num));
+ widget_show(WIDGET(mainwin_min_num));
+ widget_show(WIDGET(mainwin_10sec_num));
+ widget_show(WIDGET(mainwin_sec_num));
+
+ if (!bmp_playback_get_paused())
+ playstatus_set_status(mainwin_playstatus, STATUS_PLAY);
+
+ if (playlist_get_current_length() != -1) {
+ if (cfg.player_shaded)
+ widget_show(WIDGET(mainwin_sposition));
+ widget_show(WIDGET(mainwin_position));
+ }
+ else {
+ widget_hide(WIDGET(mainwin_position));
+ widget_hide(WIDGET(mainwin_sposition));
+ mainwin_force_redraw = TRUE;
+ }
+
+ title = playlist_get_info_text();
+ mainwin_set_song_title(title);
+ g_free(title);
+}
+
+void
+mainwin_clear_song_info(void)
+{
+ /* clear title */
+ G_LOCK(mainwin_title);
+ g_free(mainwin_title_text);
+ mainwin_title_text = NULL;
+ G_UNLOCK(mainwin_title);
+
+ /* clear sampling parameters */
+ playback_set_sample_params(0, 0, 0);
+
+ mainwin_position->hs_pressed = FALSE;
+ mainwin_sposition->hs_pressed = FALSE;
+
+ /* clear sampling parameter displays */
+ textbox_set_text(mainwin_rate_text, " ");
+ textbox_set_text(mainwin_freq_text, " ");
+ monostereo_set_num_channels(mainwin_monostereo, 0);
+
+ playstatus_set_status(mainwin_playstatus, STATUS_STOP);
+
+ /* hide playback time */
+ widget_hide(WIDGET(mainwin_minus_num));
+ widget_hide(WIDGET(mainwin_10min_num));
+ widget_hide(WIDGET(mainwin_min_num));
+ widget_hide(WIDGET(mainwin_10sec_num));
+ widget_hide(WIDGET(mainwin_sec_num));
+
+ textbox_set_text(mainwin_stime_min, " ");
+ textbox_set_text(mainwin_stime_sec, " ");
+
+ widget_hide(WIDGET(mainwin_position));
+ widget_hide(WIDGET(mainwin_sposition));
+
+ playlistwin_hide_timer();
+ draw_main_window(TRUE);
+
+ vis_clear(active_vis);
+}
+
+void
+mainwin_disable_seekbar(void)
+{
+ /*
+ * We dont call draw_main_window() here so this will not
+ * remove them visually. It will only prevent us from sending
+ * any seek calls to the input plugin before the input plugin
+ * calls ->set_info().
+ */
+ widget_hide(WIDGET(mainwin_position));
+ widget_hide(WIDGET(mainwin_sposition));
+}
+
+static gboolean
+mainwin_mouse_button_release(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer callback_data)
+{
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+
+ /*
+ * The gdk_flush() is just for making sure that the pointer really
+ * gets ungrabbed before calling any button callbacks
+ *
+ */
+
+ gdk_flush();
+
+ if (dock_is_moving(GTK_WINDOW(mainwin))) {
+ dock_move_release(GTK_WINDOW(mainwin));
+ }
+
+ if (mainwin_menurow->mr_doublesize_selected) {
+ event->x /= 2;
+ event->y /= 2;
+ }
+
+ handle_release_cb(mainwin_wlist, widget, event);
+
+ draw_main_window(FALSE);
+
+ return FALSE;
+}
+
+static gboolean
+mainwin_motion(GtkWidget * widget,
+ GdkEventMotion * event,
+ gpointer callback_data)
+{
+ XEvent ev;
+ gint i = 0;
+
+ XSync(GDK_DISPLAY(), False);
+
+ while (XCheckTypedEvent(GDK_DISPLAY(), MotionNotify, &ev)) {
+ event->x = ev.xmotion.x;
+ event->y = ev.xmotion.y;
+ i++;
+ }
+
+ if (dock_is_moving(GTK_WINDOW(mainwin))) {
+ dock_move_motion(GTK_WINDOW(mainwin), event);
+ }
+ else {
+ handle_motion_cb(mainwin_wlist, widget, event);
+ draw_main_window(FALSE);
+ }
+ gdk_flush();
+
+ return FALSE;
+}
+
+static gboolean
+inside_sensitive_widgets(gint x, gint y)
+{
+ return (widget_contains(WIDGET(mainwin_menubtn), x, y)
+ || widget_contains(WIDGET(mainwin_minimize), x, y)
+ || widget_contains(WIDGET(mainwin_shade), x, y)
+ || widget_contains(WIDGET(mainwin_close), x, y)
+ || widget_contains(WIDGET(mainwin_rew), x, y)
+ || widget_contains(WIDGET(mainwin_play), x, y)
+ || widget_contains(WIDGET(mainwin_pause), x, y)
+ || widget_contains(WIDGET(mainwin_stop), x, y)
+ || widget_contains(WIDGET(mainwin_fwd), x, y)
+ || widget_contains(WIDGET(mainwin_eject), x, y)
+ || widget_contains(WIDGET(mainwin_shuffle), x, y)
+ || widget_contains(WIDGET(mainwin_repeat), x, y)
+ || widget_contains(WIDGET(mainwin_pl), x, y)
+ || widget_contains(WIDGET(mainwin_eq), x, y)
+ || widget_contains(WIDGET(mainwin_info), x, y)
+ || widget_contains(WIDGET(mainwin_menurow), x, y)
+ || widget_contains(WIDGET(mainwin_volume), x, y)
+ || widget_contains(WIDGET(mainwin_balance), x, y)
+ || (widget_contains(WIDGET(mainwin_position), x, y) &&
+ widget_is_visible(WIDGET(mainwin_position)))
+ || widget_contains(WIDGET(mainwin_minus_num), x, y)
+ || widget_contains(WIDGET(mainwin_10min_num), x, y)
+ || widget_contains(WIDGET(mainwin_min_num), x, y)
+ || widget_contains(WIDGET(mainwin_10sec_num), x, y)
+ || widget_contains(WIDGET(mainwin_sec_num), x, y)
+ || widget_contains(WIDGET(mainwin_vis), x, y)
+ || widget_contains(WIDGET(mainwin_minimize), x, y)
+ || widget_contains(WIDGET(mainwin_shade), x, y)
+ || widget_contains(WIDGET(mainwin_close), x, y)
+ || widget_contains(WIDGET(mainwin_menubtn), x, y)
+ || widget_contains(WIDGET(mainwin_sposition), x, y)
+ || widget_contains(WIDGET(mainwin_stime_min), x, y)
+ || widget_contains(WIDGET(mainwin_stime_sec), x, y)
+ || widget_contains(WIDGET(mainwin_srew), x, y)
+ || widget_contains(WIDGET(mainwin_splay), x, y)
+ || widget_contains(WIDGET(mainwin_spause), x, y)
+ || widget_contains(WIDGET(mainwin_sstop), x, y)
+ || widget_contains(WIDGET(mainwin_sfwd), x, y)
+ || widget_contains(WIDGET(mainwin_seject), x, y)
+ || widget_contains(WIDGET(mainwin_svis), x, y)
+ || widget_contains(WIDGET(mainwin_about), x, y));
+}
+
+void
+mainwin_scrolled(GtkWidget * widget,
+ GdkEventScroll * event,
+ gpointer callback_data)
+{
+ gint d = cfg.mouse_change;
+ if (event->direction == GDK_SCROLL_DOWN)
+ d *= -1;
+ mainwin_set_volume_diff(d);
+}
+
+
+static gboolean
+mainwin_mouse_button_press(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer callback_data)
+{
+
+ gboolean grab = TRUE;
+
+ if (event->button == 1 && event->type == GDK_BUTTON_PRESS &&
+ !inside_sensitive_widgets(event->x, event->y) && event->y < 14) {
+ if (0 && hint_move_resize_available()) {
+ hint_move_resize(mainwin, event->x_root, event->y_root, TRUE);
+ grab = FALSE;
+ }
+ else {
+ gtk_window_present(GTK_WINDOW(mainwin));
+ dock_move_press(dock_window_list, GTK_WINDOW(mainwin), event,
+ TRUE);
+ }
+ }
+ else if (event->button == 1 && event->type == GDK_2BUTTON_PRESS &&
+ event->y < 14 && !inside_sensitive_widgets(event->x, event->y)) {
+ mainwin_set_shade(!cfg.player_shaded);
+ if (dock_is_moving(GTK_WINDOW(mainwin)))
+ dock_move_release(GTK_WINDOW(mainwin));
+ }
+ else if (event->button == 1 && event->type == GDK_2BUTTON_PRESS &&
+ widget_contains(WIDGET(mainwin_info), event->x, event->y)) {
+ playlist_fileinfo_current();
+ }
+ else {
+ handle_press_cb(mainwin_wlist, widget, event);
+ draw_main_window(FALSE);
+ }
+
+ if ((event->button == 1) && event->type != GDK_2BUTTON_PRESS &&
+ (widget_contains(WIDGET(mainwin_vis), event->x, event->y) ||
+ widget_contains(WIDGET(mainwin_svis), event->x, event->y))) {
+
+ cfg.vis_type++;
+
+ if (cfg.vis_type > VIS_OFF)
+ cfg.vis_type = VIS_ANALYZER;
+
+ mainwin_vis_set_type(cfg.vis_type);
+ }
+
+ if (event->button == 3) {
+ if (widget_contains(WIDGET(mainwin_info), event->x, event->y)) {
+ util_item_factory_popup(mainwin_songname_menu,
+ event->x_root, event->y_root,
+ 3, event->time);
+ grab = FALSE;
+ }
+ else if (widget_contains(WIDGET(mainwin_vis), event->x, event->y) ||
+ widget_contains(WIDGET(mainwin_svis), event->x, event->y)) {
+ util_item_factory_popup(mainwin_vis_menu, event->x_root,
+ event->y_root, 3, event->time);
+ grab = FALSE;
+ }
+ else if ( (event->y > 70) && (event->x < 128) )
+ {
+
+ util_item_factory_popup(mainwin_play_menu,
+ event->x_root,
+ event->y_root, 3, event->time);
+ grab = FALSE;
+ } else {
+ /*
+ * Pop up the main menu a few pixels down.
+ * This will avoid that anything is selected
+ * if one right-clicks to focus the window
+ * without raising it.
+ *
+ ***MD I think the above is stupid, people don't expect this
+ *
+ */
+ util_item_factory_popup(mainwin_general_menu,
+ event->x_root,
+ event->y_root, 3, event->time);
+ grab = FALSE;
+ }
+ }
+ if (event->button == 1) {
+ if ((event->x > 35 && event->x < 100 &&
+ event->y > 25 && event->y < 40) ||
+ widget_contains(WIDGET(mainwin_stime_min), event->x, event->y) ||
+ widget_contains(WIDGET(mainwin_stime_sec), event->x, event->y)) {
+
+ if (cfg.timer_mode == TIMER_ELAPSED)
+ set_timer_mode(TIMER_REMAINING);
+ else
+ set_timer_mode(TIMER_ELAPSED);
+ }
+
+ }
+
+ if (grab)
+ gdk_pointer_grab(mainwin->window, FALSE,
+ GDK_BUTTON_MOTION_MASK |
+ GDK_BUTTON_RELEASE_MASK,
+ GDK_WINDOW(GDK_NONE), NULL, GDK_CURRENT_TIME);
+
+ return FALSE;
+}
+
+static gboolean
+mainwin_focus_in(GtkWidget * window,
+ GdkEventFocus * event,
+ gpointer data)
+{
+ mainwin_menubtn->pb_allow_draw = TRUE;
+ mainwin_minimize->pb_allow_draw = TRUE;
+ mainwin_shade->pb_allow_draw = TRUE;
+ mainwin_close->pb_allow_draw = TRUE;
+ draw_main_window(TRUE);
+
+ return TRUE;
+}
+
+
+static gboolean
+mainwin_focus_out(GtkWidget * widget,
+ GdkEventFocus * event,
+ gpointer callback_data)
+{
+ mainwin_menubtn->pb_allow_draw = FALSE;
+ mainwin_minimize->pb_allow_draw = FALSE;
+ mainwin_shade->pb_allow_draw = FALSE;
+ mainwin_close->pb_allow_draw = FALSE;
+ draw_main_window(TRUE);
+
+ return TRUE;
+}
+
+static gboolean
+mainwin_keypress(GtkWidget * grab_widget,
+ GdkEventKey * event,
+ gpointer data)
+{
+
+ switch (event->keyval) {
+
+ case GDK_Up:
+ case GDK_KP_Up:
+ mainwin_set_volume_diff(2);
+ break;
+ case GDK_Down:
+ case GDK_KP_Down:
+ mainwin_set_volume_diff(-2);
+ break;
+ case GDK_Left:
+ case GDK_KP_Left:
+ if (playlist_get_current_length() != -1)
+ bmp_playback_seek(CLAMP
+ (bmp_playback_get_time() - 5000, 0,
+ playlist_get_current_length()) / 1000);
+ break;
+ case GDK_Right:
+ case GDK_KP_Right:
+ if (playlist_get_current_length() != -1)
+ bmp_playback_seek(CLAMP
+ (bmp_playback_get_time() + 5000, 0,
+ playlist_get_current_length()) / 1000);
+ break;
+ case GDK_Escape:
+ mainwin_minimize_cb();
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+mainwin_jump_to_time_cb(GtkWidget * widget,
+ GtkWidget * entry)
+{
+ guint min = 0, sec = 0, params, time;
+
+ params = sscanf(gtk_entry_get_text(GTK_ENTRY(entry)), "%u:%u",
+ &min, &sec);
+ if (params == 2)
+ time = (min * 60) + sec;
+ else if (params == 1)
+ time = min;
+ else
+ return;
+
+ if (playlist_get_current_length() > -1 &&
+ time <= (playlist_get_current_length() / 1000)) {
+ bmp_playback_seek(time);
+ gtk_widget_destroy(mainwin_jtt);
+ }
+}
+
+
+void
+mainwin_jump_to_time(void)
+{
+ GtkWidget *vbox, *hbox_new, *hbox_total;
+ GtkWidget *time_entry, *label, *bbox, *jump, *cancel;
+ guint tindex;
+ gchar time_str[10];
+
+ if (!bmp_playback_get_playing()) {
+ /* FIXME: pop an error dialog and/or disable menu option to
+ indicate JTT can't be launched when no track is being
+ played */
+ return;
+ }
+
+ if (mainwin_jtt) {
+ gtk_window_present(GTK_WINDOW(mainwin_jtt));
+ return;
+ }
+
+ mainwin_jtt = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(mainwin_jtt),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ gtk_window_set_title(GTK_WINDOW(mainwin_jtt), _("Jump to Time"));
+ gtk_window_set_position(GTK_WINDOW(mainwin_jtt), GTK_WIN_POS_CENTER);
+ gtk_window_set_transient_for(GTK_WINDOW(mainwin_jtt),
+ GTK_WINDOW(mainwin));
+
+ g_signal_connect(mainwin_jtt, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &mainwin_jtt);
+ gtk_container_border_width(GTK_CONTAINER(mainwin_jtt), 10);
+
+ vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(mainwin_jtt), vbox);
+
+ hbox_new = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox_new, TRUE, TRUE, 5);
+
+ time_entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox_new), time_entry, FALSE, FALSE, 5);
+ g_signal_connect(time_entry, "activate",
+ G_CALLBACK(mainwin_jump_to_time_cb), time_entry);
+
+ gtk_widget_set_size_request(time_entry, 70, -1);
+ label = gtk_label_new(_("minutes:seconds"));
+ gtk_box_pack_start(GTK_BOX(hbox_new), label, FALSE, FALSE, 5);
+
+ hbox_total = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox_total, TRUE, TRUE, 5);
+ gtk_widget_show(hbox_total);
+
+ /* FIXME: Disable display of current track length. It's not
+ updated when track changes */
+#if 0
+ label = gtk_label_new(_("Track length:"));
+ gtk_box_pack_start(GTK_BOX(hbox_total), label, FALSE, FALSE, 5);
+
+ len = playlist_get_current_length() / 1000;
+ g_snprintf(time_str, sizeof(time_str), "%u:%2.2u", len / 60, len % 60);
+ label = gtk_label_new(time_str);
+
+ gtk_box_pack_start(GTK_BOX(hbox_total), label, FALSE, FALSE, 10);
+#endif
+
+ bbox = gtk_hbutton_box_new();
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 0);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_container_add(GTK_CONTAINER(bbox), cancel);
+ g_signal_connect_swapped(cancel, "clicked",
+ G_CALLBACK(gtk_widget_destroy), mainwin_jtt);
+
+ jump = gtk_button_new_from_stock(GTK_STOCK_JUMP_TO);
+ GTK_WIDGET_SET_FLAGS(jump, GTK_CAN_DEFAULT);
+ gtk_container_add(GTK_CONTAINER(bbox), jump);
+ g_signal_connect(jump, "clicked",
+ G_CALLBACK(mainwin_jump_to_time_cb), time_entry);
+
+ tindex = bmp_playback_get_time() / 1000;
+ g_snprintf(time_str, sizeof(time_str), "%u:%2.2u", tindex / 60,
+ tindex % 60);
+ gtk_entry_set_text(GTK_ENTRY(time_entry), time_str);
+
+ gtk_entry_select_region(GTK_ENTRY(time_entry), 0, strlen(time_str));
+
+ gtk_widget_show_all(mainwin_jtt);
+
+ gtk_widget_grab_focus(time_entry);
+ gtk_widget_grab_default(jump);
+}
+
+static void
+change_song(guint pos)
+{
+ if (bmp_playback_get_playing())
+ bmp_playback_stop();
+
+ playlist_set_position(pos);
+ bmp_playback_initiate();
+}
+
+static void
+mainwin_jump_to_file_jump(GtkTreeView * treeview)
+{
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ gchar *pos_str;
+ guint pos;
+
+ model = gtk_tree_view_get_model(treeview);
+ selection = gtk_tree_view_get_selection(treeview);
+
+ if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, 0, &pos_str, -1);
+ pos = g_ascii_strtoull(pos_str, NULL, 10) - 1;
+
+ change_song(pos);
+
+ /* FIXME: should only hide window */
+ gtk_widget_destroy(mainwin_jtf);
+ mainwin_jtf = NULL;
+}
+
+static void
+mainwin_jump_to_file_jump_cb(GtkTreeView * treeview,
+ gpointer data)
+{
+ mainwin_jump_to_file_jump(treeview);
+}
+
+static void
+mainwin_jump_to_file_set_queue_button_label(GtkButton * button,
+ guint pos)
+{
+ if (playlist_is_position_queued(pos))
+ gtk_button_set_label(button, _("Un_queue"));
+ else
+ gtk_button_set_label(button, _("_Queue"));
+}
+
+static void
+mainwin_jump_to_file_queue_cb(GtkButton * button,
+ gpointer data)
+{
+ GtkTreeView *treeview;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ gchar *pos_str;
+ guint pos;
+
+ treeview = GTK_TREE_VIEW(data);
+ model = gtk_tree_view_get_model(treeview);
+ selection = gtk_tree_view_get_selection(treeview);
+
+ if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, 0, &pos_str, -1);
+ pos = g_ascii_strtoull(pos_str, NULL, 10) - 1;
+
+ playlist_queue_position(pos);
+
+ mainwin_jump_to_file_set_queue_button_label(button, pos);
+}
+
+static void
+mainwin_jump_to_file_selection_changed_cb(GtkTreeSelection *treesel,
+ gpointer data)
+{
+ GtkTreeView *treeview;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ gchar *pos_str;
+ guint pos;
+
+ treeview = gtk_tree_selection_get_tree_view(treesel);
+ model = gtk_tree_view_get_model(treeview);
+ selection = gtk_tree_view_get_selection(treeview);
+
+ if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, 0, &pos_str, -1);
+ pos = g_ascii_strtoull(pos_str, NULL, 10) - 1;
+
+ mainwin_jump_to_file_set_queue_button_label(GTK_BUTTON(data), pos);
+}
+
+static gboolean
+mainwin_jump_to_file_keypress_cb(GtkWidget * object,
+ GdkEventKey * event,
+ gpointer data)
+{
+ switch (event->keyval) {
+ case GDK_Escape:
+ /* FIXME: show only hide window */
+ gtk_widget_destroy(mainwin_jtf);
+ mainwin_jtf = NULL;
+ return TRUE;
+ case GDK_Return:
+ mainwin_jump_to_file_jump(GTK_TREE_VIEW(data));
+ return TRUE;
+ default:
+ return FALSE;
+ };
+}
+
+static gboolean
+mainwin_jump_to_file_match(const gchar * song, gchar ** keys)
+{
+ gint i = 0;
+ gchar *key;
+ gchar *song_lc;
+
+ song_lc = g_ascii_strdown(song, -1);
+
+ while (keys[i]) {
+ key = g_ascii_strdown(keys[i], -1);
+ if (!g_strrstr(song_lc, key)) {
+ g_free(key);
+ g_free(song_lc);
+ return FALSE;
+ }
+
+ g_free(key);
+ i++;
+ }
+
+ g_free(song_lc);
+
+ return TRUE;
+}
+
+/* FIXME: Clear the entry when the list gets updated */
+static void
+mainwin_update_jtf(GtkWidget * widget, gpointer user_data)
+{
+ /* FIXME: Is not in sync with playlist due to delayed extinfo
+ * reading */
+ gint row;
+ GList *playlist;
+ gchar *desc_buf;
+ gchar *row_str;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+
+ GtkTreeModel *store;
+
+ if (!mainwin_jtf)
+ return;
+
+ store = gtk_tree_view_get_model(GTK_TREE_VIEW(user_data));
+ gtk_list_store_clear(GTK_LIST_STORE(store));
+
+ row = 1;
+ for (playlist = playlist_get(); playlist;
+ playlist = g_list_next(playlist)) {
+ PlaylistEntry *entry = PLAYLIST_ENTRY(playlist->data);
+
+ if (entry->title)
+ desc_buf = entry->title;
+ else if (strchr(entry->filename, '/'))
+ desc_buf = strrchr(entry->filename, '/') + 1;
+ else
+ desc_buf = entry->filename;
+
+ row_str = g_strdup_printf("%d", row++);
+
+ gtk_list_store_append(GTK_LIST_STORE(store), &iter);
+ gtk_list_store_set(GTK_LIST_STORE(store), &iter,
+ 0, row_str, 1, desc_buf, -1);
+
+ g_free(row_str);
+ }
+
+ gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(user_data));
+ gtk_tree_selection_select_iter(selection, &iter);
+}
+
+static void
+mainwin_jump_to_file_edit_cb(GtkEntry * entry, gpointer user_data)
+{
+ GtkTreeView *treeview = GTK_TREE_VIEW(user_data);
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ GtkListStore *store;
+
+ gint song_index = 0;
+ gchar **words;
+ GList *playlist;
+
+ gboolean match = FALSE;
+
+ /* Chop the key string into ' '-separated key words */
+ words = g_strsplit(gtk_entry_get_text(entry), " ", 0);
+
+ /* FIXME: Remove the connected signals before clearing
+ * (row-selected will still eventually arrive once) */
+ store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview));
+ gtk_list_store_clear(store);
+
+ PLAYLIST_LOCK();
+
+ for (playlist = playlist_get(); playlist;
+ playlist = g_list_next(playlist)) {
+
+ PlaylistEntry *entry = PLAYLIST_ENTRY(playlist->data);
+ const gchar *title, *filename;
+
+ title = entry->title;
+ if (!title) {
+ filename = entry->filename;
+
+ if (strchr(filename, '/'))
+ title = strrchr(filename, '/') + 1;
+ else
+ title = filename;
+ }
+
+ /* Compare the key words to the string - if all the words
+ match, add to the ListStore */
+
+ /*
+ * FIXME: The search string should be adapted to the
+ * current display setting, e.g. if the user has set it to
+ * "%p - %t" then build the match string like that too, or
+ * even better, search for each of the tags seperatly.
+ *
+ * In any case the string to match should _never_ contain
+ * something the user can't actually see in the playlist.
+ */
+ if (words[0])
+ match = mainwin_jump_to_file_match(title, words);
+ else
+ match = TRUE;
+
+ if (match) {
+ gchar *song_index_str = g_strdup_printf("%d", song_index + 1);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, song_index_str, 1, title, -1);
+ g_free(song_index_str);
+ }
+
+ song_index++;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ g_strfreev(words);
+
+ if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) {
+ selection = gtk_tree_view_get_selection(treeview);
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
+}
+
+void
+mainwin_jump_to_file(void)
+{
+ GtkWidget *scrollwin;
+ GtkWidget *vbox, *bbox, *sep;
+ GtkWidget *jump, *queue, *cancel;
+ GtkWidget *rescan, *edit;
+ GtkWidget *search_label, *hbox;
+ GList *playlist;
+ gchar *desc_buf;
+ gchar *row_str;
+ gint row;
+
+ GtkWidget *treeview;
+ GtkListStore *jtf_store;
+
+ GtkTreeIter iter;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ if (mainwin_jtf) {
+ gtk_window_present(GTK_WINDOW(mainwin_jtf));
+ return;
+ }
+
+ mainwin_jtf = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint(GTK_WINDOW(mainwin_jtf),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ gtk_window_set_title(GTK_WINDOW(mainwin_jtf), _("Jump to Track"));
+
+ gtk_window_set_position(GTK_WINDOW(mainwin_jtf), GTK_WIN_POS_CENTER);
+ g_signal_connect(mainwin_jtf, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &mainwin_jtf);
+
+ gtk_container_border_width(GTK_CONTAINER(mainwin_jtf), 10);
+ gtk_window_set_default_size(GTK_WINDOW(mainwin_jtf), 550, 350);
+
+ vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(mainwin_jtf), vbox);
+
+ jtf_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+ treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(jtf_store));
+ g_object_unref(jtf_store);
+
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text", 0, NULL);
+ gtk_tree_view_column_set_spacing(column, 4);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text", 1, NULL);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+ g_signal_connect(treeview, "row-activated",
+ G_CALLBACK(mainwin_jump_to_file_jump), NULL);
+
+ hbox = gtk_hbox_new(FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
+
+ search_label = gtk_label_new(_("Filter: "));
+ gtk_label_set_markup_with_mnemonic(GTK_LABEL(search_label), "_Filter:");
+ gtk_box_pack_start(GTK_BOX(hbox), search_label, FALSE, FALSE, 0);
+
+ edit = gtk_entry_new();
+ gtk_entry_set_editable(GTK_ENTRY(edit), TRUE);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(search_label), edit);
+ g_signal_connect(edit, "changed",
+ G_CALLBACK(mainwin_jump_to_file_edit_cb), treeview);
+
+ g_signal_connect(mainwin_jtf, "key_press_event",
+ G_CALLBACK(mainwin_jump_to_file_keypress_cb), treeview);
+
+ gtk_box_pack_start(GTK_BOX(hbox), edit, TRUE, TRUE, 3);
+
+ scrollwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin),
+ GTK_SHADOW_IN);
+ gtk_box_pack_start(GTK_BOX(vbox), scrollwin, TRUE, TRUE, 0);
+
+ sep = gtk_hseparator_new();
+ gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ queue = gtk_button_new_with_mnemonic(_("_Queue"));
+ gtk_box_pack_start(GTK_BOX(bbox), queue, FALSE, FALSE, 0);
+ GTK_WIDGET_SET_FLAGS(queue, GTK_CAN_DEFAULT);
+ g_signal_connect(queue, "clicked",
+ G_CALLBACK(mainwin_jump_to_file_queue_cb),
+ treeview);
+ g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), "changed",
+ G_CALLBACK(mainwin_jump_to_file_selection_changed_cb),
+ queue);
+
+ rescan = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
+ gtk_box_pack_start(GTK_BOX(bbox), rescan, FALSE, FALSE, 0);
+ g_signal_connect(rescan, "clicked",
+ G_CALLBACK(mainwin_update_jtf), treeview);
+ GTK_WIDGET_SET_FLAGS(rescan, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default(rescan);
+
+ jump = gtk_button_new_from_stock(GTK_STOCK_JUMP_TO);
+ gtk_box_pack_start(GTK_BOX(bbox), jump, FALSE, FALSE, 0);
+
+ g_signal_connect_swapped(jump, "clicked",
+ G_CALLBACK(mainwin_jump_to_file_jump_cb),
+ treeview);
+
+ GTK_WIDGET_SET_FLAGS(jump, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default(jump);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, FALSE, FALSE, 0);
+ g_signal_connect_swapped(cancel, "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ mainwin_jtf);
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+
+ gtk_list_store_clear(jtf_store);
+
+ row = 1;
+
+ PLAYLIST_LOCK();
+
+ for (playlist = playlist_get(); playlist;
+ playlist = g_list_next(playlist)) {
+
+ PlaylistEntry *entry = PLAYLIST_ENTRY(playlist->data);
+
+ if (entry->title)
+ desc_buf = entry->title;
+ else if (strchr(entry->filename, '/'))
+ desc_buf = strrchr(entry->filename, '/') + 1;
+ else
+ desc_buf = entry->filename;
+
+ row_str = g_strdup_printf("%d", row++);
+
+ gtk_list_store_append(GTK_LIST_STORE(jtf_store), &iter);
+ gtk_list_store_set(GTK_LIST_STORE(jtf_store), &iter,
+ 0, row_str, 1, desc_buf, -1);
+
+ g_free(row_str);
+ }
+
+ PLAYLIST_UNLOCK();
+
+ gtk_widget_show_all(mainwin_jtf);
+}
+
+static gboolean
+mainwin_configure(GtkWidget * window,
+ GdkEventConfigure * event,
+ gpointer data)
+{
+ if (!GTK_WIDGET_VISIBLE(window))
+ return FALSE;
+
+ if (cfg.show_wm_decorations)
+ gdk_window_get_root_origin(window->window,
+ &cfg.player_x, &cfg.player_y);
+ else
+ gdk_window_get_deskrelative_origin(window->window,
+ &cfg.player_x, &cfg.player_y);
+ return FALSE;
+}
+
+void
+mainwin_set_back_pixmap(void)
+{
+ gdk_window_set_back_pixmap(mainwin->window, mainwin_bg, 0);
+ gdk_window_clear(mainwin->window);
+}
+
+void
+mainwin_drag_data_received(GtkWidget * widget,
+ GdkDragContext * context,
+ gint x,
+ gint y,
+ GtkSelectionData * selection_data,
+ guint info,
+ guint time,
+ gpointer user_data)
+{
+ ConfigDb *db;
+ gchar *path, *decoded;
+
+ if (!selection_data->data) {
+ g_warning("DND data string is NULL");
+ return;
+ }
+
+ path = (gchar *) selection_data->data;
+
+ g_message(path);
+
+ /* FIXME: use a real URL validator/parser */
+
+ if (str_has_prefix_nocase(path, "fonts:///")) {
+ path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */
+ path += 8;
+
+ /* plain, since we already stripped the first URI part */
+ decoded = xmms_urldecode_plain(path);
+
+ /* Get the old font's size, and add it to the dropped
+ * font's name */
+ cfg.playlist_font = g_strconcat(decoded + 1,
+ strrchr(cfg.playlist_font, ' '),
+ NULL);
+ playlist_list_set_font(cfg.playlist_font);
+ playlistwin_update_list();
+
+ g_free(decoded);
+ return;
+ }
+
+ if (str_has_prefix_nocase(path, "file:///")) {
+ path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */
+ path += 7;
+ }
+ else if (str_has_prefix_nocase(path, "file:")) {
+ path += 5;
+ }
+
+ if (file_is_archive(path)) {
+ bmp_active_skin_load(path);
+ skin_install_skin(path); /* ...and install the skin */
+ skin_view_update(user_data);
+ /* Change skin name in the config file */
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_set_string(db, NULL, "skin", path);
+ bmp_cfg_db_close(db);
+ }
+ else {
+ if (input_check_file((gchar *) selection_data->data, FALSE)) {
+ playlist_clear();
+ playlist_add_url((gchar *) selection_data->data);
+ bmp_playback_initiate();
+ }
+ }
+}
+
+static void
+dirbrowser_add_dir(const gchar * dir)
+{
+ g_free(cfg.filesel_path);
+ cfg.filesel_path = g_strdup(dir);
+ playlist_add_dir(dir);
+}
+
+static void
+dirbrowser_on_response(GtkFileChooserDialog * dialog,
+ gint result,
+ gpointer data)
+{
+
+ gchar *pathname;
+
+// gtk_widget_hide(GTK_WIDGET(dialog));
+
+ switch (result) {
+ case GTK_RESPONSE_ACCEPT:
+ pathname = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ dirbrowser_add_dir(pathname);
+ g_free(pathname);
+ break;
+
+ case GTK_RESPONSE_CLOSE:
+ break;
+ }
+
+}
+
+
+static GtkWidget *
+dirbrowser_new(const gchar * path)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_file_chooser_dialog_new(_("Add Folders"),
+ GTK_WINDOW(mainwin),
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ GTK_STOCK_ADD, GTK_RESPONSE_OK,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+ NULL);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
+ path);
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(dirbrowser_on_response),
+ NULL);
+
+ return dialog;
+}
+
+void
+mainwin_run_dirbrowser(void)
+{
+ static GtkWidget *browser = NULL;
+
+ if (!browser) {
+ browser = dirbrowser_new(cfg.filesel_path);
+
+ g_signal_connect(browser, "destroy",
+ G_CALLBACK(gtk_widget_destroyed),
+ &browser);
+
+ gtk_widget_show(GTK_WIDGET(browser));
+ }
+
+ gtk_window_present(GTK_WINDOW(browser));
+}
+
+static void
+on_add_url_add_clicked(GtkWidget * widget,
+ GtkWidget * entry)
+{
+ const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
+ if (text && *text)
+ playlist_add_url(text);
+}
+
+void
+mainwin_show_add_url_window(void)
+{
+ static GtkWidget *url_window = NULL;
+
+ if (!url_window) {
+ url_window =
+ util_add_url_dialog_new(_("Add Internet Address"),
+ G_CALLBACK(on_add_url_add_clicked));
+ gtk_window_set_transient_for(GTK_WINDOW(url_window),
+ GTK_WINDOW(mainwin));
+ g_signal_connect(url_window, "destroy",
+ G_CALLBACK(gtk_widget_destroyed),
+ &url_window);
+ }
+
+ gtk_window_present(GTK_WINDOW(url_window));
+}
+
+static void
+check_set(GtkItemFactory * factory,
+ const gchar * path,
+ gboolean active)
+{
+ GtkWidget *item = gtk_item_factory_get_widget(factory, path);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), active);
+}
+
+void
+mainwin_eject_pushed(void)
+{
+ util_run_filebrowser(PLAY_BUTTON);
+}
+
+void
+mainwin_play_pushed(void)
+{
+ if (bmp_playback_get_paused()) {
+ bmp_playback_pause();
+ return;
+ }
+
+ if (playlist_get_length())
+ {
+ bmp_playback_initiate();
+ }
+ else
+ mainwin_eject_pushed();
+}
+
+void
+mainwin_stop_pushed(void)
+{
+ mainwin_clear_song_info();
+ bmp_playback_stop();
+}
+
+void
+mainwin_shuffle_pushed(gboolean toggled)
+{
+ check_set(mainwin_play_menu, "/Shuffle", toggled);
+}
+
+void
+mainwin_repeat_pushed(gboolean toggled)
+{
+ check_set(mainwin_play_menu, "/Repeat", toggled);
+}
+
+void
+mainwin_pl_pushed(gboolean toggled)
+{
+ if (toggled)
+ playlistwin_show();
+ else
+ playlistwin_hide();
+}
+
+gint
+mainwin_spos_frame_cb(gint pos)
+{
+ if (mainwin_sposition) {
+ if (pos < 6)
+ mainwin_sposition->hs_knob_nx = mainwin_sposition->hs_knob_px =
+ 17;
+ else if (pos < 9)
+ mainwin_sposition->hs_knob_nx = mainwin_sposition->hs_knob_px =
+ 20;
+ else
+ mainwin_sposition->hs_knob_nx = mainwin_sposition->hs_knob_px =
+ 23;
+ }
+ return 1;
+}
+
+void
+mainwin_spos_motion_cb(gint pos)
+{
+ gint time;
+ gchar *time_msg;
+
+ pos--;
+
+ time = ((playlist_get_current_length() / 1000) * pos) / 12;
+
+ if (cfg.timer_mode == TIMER_REMAINING) {
+ time = (playlist_get_current_length() / 1000) - time;
+ time_msg = g_strdup_printf("-%2.2d", time / 60);
+ textbox_set_text(mainwin_stime_min, time_msg);
+ g_free(time_msg);
+ }
+ else {
+ time_msg = g_strdup_printf(" %2.2d", time / 60);
+ textbox_set_text(mainwin_stime_min, time_msg);
+ g_free(time_msg);
+ }
+
+ time_msg = g_strdup_printf("%2.2d", time % 60);
+ textbox_set_text(mainwin_stime_sec, time_msg);
+ g_free(time_msg);
+}
+
+void
+mainwin_spos_release_cb(gint pos)
+{
+ bmp_playback_seek(((playlist_get_current_length() / 1000) *
+ (pos - 1)) / 12);
+}
+
+void
+mainwin_position_motion_cb(gint pos)
+{
+ gint length, time;
+ gchar *seek_msg;
+
+ length = playlist_get_current_length() / 1000;
+ time = (length * pos) / 219;
+ seek_msg = g_strdup_printf(_("SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"),
+ time / 60, time % 60,
+ length / 60, length % 60,
+ (length != 0) ? (time * 100) / length : 0);
+ mainwin_lock_info_text(seek_msg);
+ g_free(seek_msg);
+}
+
+void
+mainwin_position_release_cb(gint pos)
+{
+ gint length, time;
+
+ length = playlist_get_current_length() / 1000;
+ time = (length * pos) / 219;
+ bmp_playback_seek(time);
+ mainwin_release_info_text();
+}
+
+gint
+mainwin_volume_frame_cb(gint pos)
+{
+ return (gint) rint((pos / 52.0) * 28);
+}
+
+void
+mainwin_adjust_volume_motion(gint v)
+{
+ gchar *volume_msg;
+
+ setting_volume = TRUE;
+
+ volume_msg = g_strdup_printf(_("VOLUME: %d%%"), v);
+ mainwin_lock_info_text(volume_msg);
+ g_free(volume_msg);
+
+ if (balance < 0)
+ input_set_volume(v, (v * (100 - abs(balance))) / 100);
+ else if (balance > 0)
+ input_set_volume((v * (100 - abs(balance))) / 100, v);
+ else
+ input_set_volume(v, v);
+}
+
+void
+mainwin_adjust_volume_release(void)
+{
+ mainwin_release_info_text();
+ setting_volume = FALSE;
+ read_volume(VOLUME_ADJUSTED);
+}
+
+void
+mainwin_adjust_balance_motion(gint b)
+{
+ gchar *balance_msg;
+ gint v, pvl, pvr;
+
+ setting_volume = TRUE;
+ balance = b;
+ input_get_volume(&pvl, &pvr);
+ v = MAX(pvl, pvr);
+ if (b < 0) {
+ balance_msg = g_strdup_printf(_("BALANCE: %d%% LEFT"), -b);
+ input_set_volume(v, (gint) rint(((100 + b) / 100.0) * v));
+ }
+ else if (b == 0) {
+ balance_msg = g_strdup_printf(_("BALANCE: CENTER"));
+ input_set_volume(v, v);
+ }
+ else { /* b > 0 */
+ balance_msg = g_strdup_printf(_("BALANCE: %d%% RIGHT"), b);
+ input_set_volume((gint) rint(((100 - b) / 100.0) * v), v);
+ }
+ mainwin_lock_info_text(balance_msg);
+ g_free(balance_msg);
+}
+
+void
+mainwin_adjust_balance_release(void)
+{
+ mainwin_release_info_text();
+ setting_volume = FALSE;
+ read_volume(VOLUME_ADJUSTED);
+}
+
+void
+mainwin_set_volume_slider(gint percent)
+{
+ hslider_set_position(mainwin_volume, (gint) rint((percent * 51) / 100.0));
+}
+
+void
+mainwin_set_balance_slider(gint percent)
+{
+ hslider_set_position(mainwin_balance,
+ (gint) rint(((percent * 12) / 100.0) + 12));
+}
+
+void
+mainwin_volume_motion_cb(gint pos)
+{
+ gint vol = (pos * 100) / 51;
+ mainwin_adjust_volume_motion(vol);
+ equalizerwin_set_volume_slider(vol);
+}
+
+void
+mainwin_volume_release_cb(gint pos)
+{
+ mainwin_adjust_volume_release();
+}
+
+gint
+mainwin_balance_frame_cb(gint pos)
+{
+ return ((abs(pos - 12) * 28) / 13);
+}
+
+void
+mainwin_balance_motion_cb(gint pos)
+{
+ gint bal = ((pos - 12) * 100) / 12;
+ mainwin_adjust_balance_motion(bal);
+ equalizerwin_set_balance_slider(bal);
+}
+
+void
+mainwin_balance_release_cb(gint pos)
+{
+ mainwin_adjust_volume_release();
+}
+
+void
+mainwin_set_volume_diff(gint diff)
+{
+ gint vl, vr, vol;
+
+ input_get_volume(&vl, &vr);
+ vol = MAX(vl, vr);
+ vol = CLAMP(vol + diff, 0, 100);
+
+ mainwin_adjust_volume_motion(vol);
+ setting_volume = FALSE;
+ mainwin_set_volume_slider(vol);
+// equalizerwin_set_volume_slider(vol);
+ read_volume(VOLUME_SET);
+}
+
+void
+mainwin_set_balance_diff(gint diff)
+{
+ gint b;
+ b = CLAMP(balance + diff, -100, 100);
+ mainwin_adjust_balance_motion(b);
+ setting_volume = FALSE;
+ mainwin_set_balance_slider(b);
+ equalizerwin_set_balance_slider(b);
+ read_volume(VOLUME_SET);
+}
+
+void
+mainwin_show(gboolean show)
+{
+ if (show)
+ mainwin_real_show();
+ else
+ mainwin_real_hide();
+}
+
+void
+mainwin_real_show(void)
+{
+ cfg.player_visible = TRUE;
+
+ if (cfg.player_shaded)
+ vis_clear_data(active_vis);
+
+ mainwin_vis_set_active_vis(MAINWIN_VIS_ACTIVE_MAINWIN);
+ mainwin_set_shape_mask();
+ if (cfg.show_wm_decorations) {
+ if (!pposition_broken && cfg.player_x != -1
+ && cfg.save_window_position)
+ gtk_window_move(GTK_WINDOW(mainwin), cfg.player_x, cfg.player_y);
+
+ gtk_widget_show(mainwin);
+
+ if (pposition_broken && cfg.player_x != -1
+ && cfg.save_window_position)
+ gtk_window_move(GTK_WINDOW(mainwin), cfg.player_x, cfg.player_y);
+
+ return;
+ }
+ gtk_widget_show_all(mainwin);
+
+ if (!nullmask)
+ return;
+
+ g_object_unref(nullmask);
+ nullmask = NULL;
+
+ gdk_window_set_hints(mainwin->window, 0, 0,
+ PLAYER_WIDTH, PLAYER_HEIGHT,
+ PLAYER_WIDTH, PLAYER_HEIGHT,
+ GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
+ gtk_window_resize(GTK_WINDOW(mainwin), PLAYER_WIDTH, PLAYER_HEIGHT);
+
+ if (cfg.player_x != -1 && cfg.player_y != -1)
+ gtk_window_move(GTK_WINDOW(mainwin), cfg.player_x, cfg.player_y);
+ draw_main_window(TRUE);
+
+ gtk_window_present(GTK_WINDOW(mainwin));
+}
+
+void
+mainwin_real_hide(void)
+{
+ GdkGC *gc;
+ GdkColor pattern;
+
+ if (cfg.player_shaded) {
+ svis_clear_data(mainwin_svis);
+ vis_clear_data(playlistwin_vis);
+ }
+
+ if (!cfg.show_wm_decorations) {
+ nullmask = gdk_pixmap_new(mainwin->window, 20, 20, 1);
+ gc = gdk_gc_new(nullmask);
+ pattern.pixel = 0;
+ gdk_gc_set_foreground(gc, &pattern);
+ gdk_draw_rectangle(nullmask, gc, TRUE, 0, 0, 20, 20);
+ gdk_gc_destroy(gc);
+ gtk_widget_shape_combine_mask(mainwin, nullmask, 0, 0);
+
+ gdk_window_set_hints(mainwin->window, 0, 0, 0, 0, 0, 0,
+ GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
+ gdk_window_resize(mainwin->window, 0, 0);
+ }
+
+ gtk_widget_hide(mainwin);
+
+ mainwin_vis_set_active_vis(MAINWIN_VIS_ACTIVE_PLAYLISTWIN);
+ cfg.player_visible = FALSE;
+}
+
+static void
+mainwin_songname_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * item)
+{
+ GtkCheckMenuItem *check;
+
+ switch (action) {
+ case MAINWIN_SONGNAME_FILEINFO:
+ playlist_fileinfo_current();
+ break;
+ case MAINWIN_SONGNAME_JTF:
+ mainwin_jump_to_file();
+ break;
+ case MAINWIN_SONGNAME_JTT:
+ mainwin_jump_to_time();
+ break;
+ case MAINWIN_SONGNAME_SCROLL:
+ check = GTK_CHECK_MENU_ITEM(item);
+ mainwin_set_title_scroll(gtk_check_menu_item_get_active(check));
+ break;
+ }
+}
+
+static void
+mainwin_play_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * item)
+{
+ GtkCheckMenuItem *check;
+
+ switch (action) {
+ case MAINWIN_OPT_SHUFFLE:
+ check = GTK_CHECK_MENU_ITEM(item);
+ cfg.shuffle = gtk_check_menu_item_get_active(check);
+ playlist_set_shuffle(cfg.shuffle);
+ tbutton_set_toggled(mainwin_shuffle, cfg.shuffle);
+ break;
+ case MAINWIN_OPT_REPEAT:
+ check = GTK_CHECK_MENU_ITEM(item);
+ cfg.repeat = gtk_check_menu_item_get_active(check);
+ tbutton_set_toggled(mainwin_repeat, cfg.repeat);
+ break;
+ case MAINWIN_OPT_NPA:
+ check = GTK_CHECK_MENU_ITEM(item);
+ cfg.no_playlist_advance = gtk_check_menu_item_get_active(check);
+ break;
+ }
+}
+
+
+static void
+mainwin_view_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * item)
+{
+ switch (action) {
+ case MAINWIN_OPT_TELAPSED:
+ set_timer_mode_menu_cb(TIMER_ELAPSED);
+ break;
+ case MAINWIN_OPT_TREMAINING:
+ set_timer_mode_menu_cb(TIMER_REMAINING);
+ break;
+ case MAINWIN_OPT_ALWAYS:
+ mainwin_menurow->mr_always_selected = GTK_CHECK_MENU_ITEM(item)->active;
+ cfg.always_on_top = mainwin_menurow->mr_always_selected;
+ widget_draw(WIDGET(mainwin_menurow));
+ hint_set_always(cfg.always_on_top);
+ break;
+ case MAINWIN_OPT_STICKY:
+ cfg.sticky = GTK_CHECK_MENU_ITEM(item)->active;
+ hint_set_sticky(cfg.sticky);
+ break;
+ case MAINWIN_OPT_WS:
+ mainwin_set_shade_menu_cb(GTK_CHECK_MENU_ITEM(item)->active);
+ break;
+ case MAINWIN_OPT_PWS:
+ playlistwin_set_shade(GTK_CHECK_MENU_ITEM(item)->active);
+ break;
+ case MAINWIN_OPT_EQWS:
+ equalizerwin_set_shade_menu_cb(GTK_CHECK_MENU_ITEM(item)->active);
+ break;
+ }
+}
+
+void
+mainwin_vis_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * item)
+{
+ switch (action) {
+ case MAINWIN_VIS_ANALYZER:
+ case MAINWIN_VIS_SCOPE:
+ case MAINWIN_VIS_OFF:
+ mainwin_vis_set_type_menu_cb(action - MAINWIN_VIS_ANALYZER);
+ break;
+ case MAINWIN_VIS_ANALYZER_NORMAL:
+ case MAINWIN_VIS_ANALYZER_FIRE:
+ case MAINWIN_VIS_ANALYZER_VLINES:
+ mainwin_vis_set_analyzer_mode(action - MAINWIN_VIS_ANALYZER_NORMAL);
+ break;
+ case MAINWIN_VIS_ANALYZER_LINES:
+ case MAINWIN_VIS_ANALYZER_BARS:
+ mainwin_vis_set_analyzer_type(action - MAINWIN_VIS_ANALYZER_LINES);
+ break;
+ case MAINWIN_VIS_ANALYZER_PEAKS:
+ cfg.analyzer_peaks = GTK_CHECK_MENU_ITEM(item)->active;
+ break;
+ case MAINWIN_VIS_SCOPE_DOT:
+ case MAINWIN_VIS_SCOPE_LINE:
+ case MAINWIN_VIS_SCOPE_SOLID:
+ cfg.scope_mode = action - MAINWIN_VIS_SCOPE_DOT;
+ break;
+ case MAINWIN_VIS_VU_NORMAL:
+ case MAINWIN_VIS_VU_SMOOTH:
+ cfg.vu_mode = action - MAINWIN_VIS_VU_NORMAL;
+ break;
+ case MAINWIN_VIS_REFRESH_FULL:
+ case MAINWIN_VIS_REFRESH_HALF:
+ case MAINWIN_VIS_REFRESH_QUARTER:
+ case MAINWIN_VIS_REFRESH_EIGHTH:
+ mainwin_vis_set_refresh(action - MAINWIN_VIS_REFRESH_FULL);
+ break;
+ case MAINWIN_VIS_AFALLOFF_SLOWEST:
+ case MAINWIN_VIS_AFALLOFF_SLOW:
+ case MAINWIN_VIS_AFALLOFF_MEDIUM:
+ case MAINWIN_VIS_AFALLOFF_FAST:
+ case MAINWIN_VIS_AFALLOFF_FASTEST:
+ mainwin_vis_set_afalloff(action - MAINWIN_VIS_AFALLOFF_SLOWEST);
+ break;
+ case MAINWIN_VIS_PFALLOFF_SLOWEST:
+ case MAINWIN_VIS_PFALLOFF_SLOW:
+ case MAINWIN_VIS_PFALLOFF_MEDIUM:
+ case MAINWIN_VIS_PFALLOFF_FAST:
+ case MAINWIN_VIS_PFALLOFF_FASTEST:
+ mainwin_vis_set_pfalloff(action - MAINWIN_VIS_PFALLOFF_SLOWEST);
+ break;
+ }
+}
+
+void
+mainwin_general_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * item)
+{
+ switch (action) {
+ case MAINWIN_GENERAL_PREFS:
+ show_prefs_window();
+ break;
+ case MAINWIN_GENERAL_ABOUT:
+ show_about_window();
+ break;
+ case MAINWIN_GENERAL_PLAYFILE:
+ util_run_filebrowser(NO_PLAY_BUTTON);
+ break;
+ case MAINWIN_GENERAL_PLAYDIRECTORY:
+ mainwin_run_dirbrowser();
+ break;
+ case MAINWIN_GENERAL_PLAYCD:
+ play_medium();
+ break;
+ case MAINWIN_GENERAL_ADDCD:
+ add_medium();
+ break;
+ case MAINWIN_GENERAL_PLAYLOCATION:
+ mainwin_show_add_url_window();
+ break;
+ case MAINWIN_GENERAL_FILEINFO:
+ playlist_fileinfo_current();
+ break;
+ case MAINWIN_GENERAL_FOCUSPLWIN:
+ gtk_window_present(GTK_WINDOW(playlistwin));
+ break;
+ case MAINWIN_GENERAL_SHOWPLWIN:
+ if (GTK_CHECK_MENU_ITEM(item)->active)
+ playlistwin_show();
+ else
+ playlistwin_hide();
+ break;
+ case MAINWIN_GENERAL_SHOWEQWIN:
+ if (GTK_CHECK_MENU_ITEM(item)->active)
+ equalizerwin_real_show();
+ else
+ equalizerwin_real_hide();
+ break;
+ case MAINWIN_GENERAL_PREV:
+ playlist_prev();
+ break;
+ case MAINWIN_GENERAL_PLAY:
+ mainwin_play_pushed();
+ break;
+ case MAINWIN_GENERAL_PAUSE:
+ bmp_playback_pause();
+ break;
+ case MAINWIN_GENERAL_STOP:
+ mainwin_stop_pushed();
+ break;
+ case MAINWIN_GENERAL_NEXT:
+ playlist_next();
+ break;
+ case MAINWIN_GENERAL_BACK5SEC:
+ if (bmp_playback_get_playing()
+ && playlist_get_current_length() != -1)
+ bmp_playback_seek_relative(-5);
+ break;
+ case MAINWIN_GENERAL_FWD5SEC:
+ if (bmp_playback_get_playing()
+ && playlist_get_current_length() != -1)
+ bmp_playback_seek_relative(5);
+ break;
+ case MAINWIN_GENERAL_START:
+ playlist_set_position(0);
+ break;
+ case MAINWIN_GENERAL_JTT:
+ mainwin_jump_to_time();
+ break;
+ case MAINWIN_GENERAL_JTF:
+ mainwin_jump_to_file();
+ break;
+ case MAINWIN_GENERAL_EXIT:
+ mainwin_quit_cb();
+ break;
+ }
+}
+
+static void
+mainwin_mr_change(MenuRowItem i)
+{
+ switch (i) {
+ case MENUROW_NONE:
+ mainwin_set_info_text();
+ break;
+ case MENUROW_OPTIONS:
+ mainwin_lock_info_text(_("OPTIONS MENU"));
+ break;
+ case MENUROW_ALWAYS:
+ if (!hint_always_on_top_available()) {
+ if (mainwin_menurow->mr_always_selected)
+ mainwin_lock_info_text(_("DISABLE ALWAYS ON TOP (N/A)"));
+ else
+ mainwin_lock_info_text(_("ENABLE ALWAYS ON TOP (N/A)"));
+ }
+ else if (mainwin_menurow->mr_doublesize_selected)
+ mainwin_lock_info_text(_("DISABLE ALWAYS ON TOP"));
+ else
+ mainwin_lock_info_text(_("ENABLE ALWAYS ON TOP"));
+ break;
+ case MENUROW_FILEINFOBOX:
+ mainwin_lock_info_text(_("FILE INFO BOX"));
+ break;
+ case MENUROW_DOUBLESIZE:
+ mainwin_lock_info_text(_("** DOUBLESIZE HAS BEEN REMOVED **"));
+ break;
+ case MENUROW_VISUALIZATION:
+ mainwin_lock_info_text(_("VISUALIZATION MENU"));
+ break;
+ }
+}
+
+static void
+mainwin_mr_release(MenuRowItem i)
+{
+ GdkModifierType modmask;
+ GtkWidget *widget;
+ gint x, y;
+
+ switch (i) {
+ case MENUROW_OPTIONS:
+ gdk_window_get_pointer(NULL, &x, &y, &modmask);
+ util_item_factory_popup(mainwin_view_menu, x, y, 1,
+ GDK_CURRENT_TIME);
+ break;
+ case MENUROW_ALWAYS:
+ widget =
+ gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Always On Top");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget),
+ mainwin_menurow->mr_always_selected);
+ break;
+ case MENUROW_FILEINFOBOX:
+ playlist_fileinfo_current();
+ break;
+ case MENUROW_DOUBLESIZE:
+ /* double size removed, do nothing */
+ break;
+ case MENUROW_VISUALIZATION:
+ gdk_window_get_pointer(NULL, &x, &y, &modmask);
+ util_item_factory_popup(mainwin_vis_menu, x, y, 1, GDK_CURRENT_TIME);
+ break;
+ case MENUROW_NONE:
+ break;
+ }
+ mainwin_release_info_text();
+}
+
+static void
+run_no_audiocd_dialog(void)
+{
+ const gchar *markup =
+ N_("<b><big>No playable CD found.</big></b>\n\n"
+ "No CD inserted, or inserted CD is not an audio CD.\n");
+
+ GtkWidget *dialog =
+ gtk_message_dialog_new_with_markup(GTK_WINDOW(mainwin),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _(markup));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+static void
+run_no_output_device_dialog(void)
+{
+ const gchar *markup =
+ N_("<b><big>Couldn't open audio.</big></b>\n\n"
+ "Please check that:\n"
+ "1. You have the correct output plugin selected.\n"
+ "2. No other programs is blocking the soundcard.\n"
+ "3. Your soundcard is configured properly.\n");
+
+ GtkWidget *dialog =
+ gtk_message_dialog_new_with_markup(GTK_WINDOW(mainwin),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _(markup));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+
+void
+add_medium(void)
+{
+ GList *list, *node;
+ gchar *filename;
+ gchar *path;
+ ConfigDb *db;
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_get_string(db, "CDDA", "directory", &path);
+ bmp_cfg_db_close(db);
+
+ if (!(list = input_scan_dir(path))) {
+ run_no_audiocd_dialog();
+ return;
+ }
+
+ for (node = list; node; node = g_list_next(node)) {
+ filename = g_build_filename(path, node->data, NULL);
+ playlist_add(filename);
+ g_free(filename);
+ g_free(node->data);
+ }
+
+ g_free(path);
+ g_list_free(list);
+
+}
+
+void
+play_medium(void)
+{
+ GList *list, *node;
+ gchar *filename;
+ gchar *path;
+ ConfigDb *db;
+
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_get_string(db, "CDDA", "directory", &path);
+ bmp_cfg_db_close(db);
+
+ if (!(list = input_scan_dir(path))) {
+ run_no_audiocd_dialog();
+ return;
+ }
+
+ playlist_clear();
+
+ for (node = list; node; node = g_list_next(node)) {
+ filename = g_build_filename(path, node->data, NULL);
+ playlist_add(filename);
+ g_free(filename);
+ g_free(node->data);
+ }
+
+ g_free(path);
+ g_list_free(list);
+
+ playlist_set_position(0);
+ bmp_playback_initiate();
+}
+
+void
+read_volume(gint when)
+{
+ static gint pvl = 0, pvr = 0;
+ static gint times = VOLSET_DISP_TIMES;
+ static gboolean changing = FALSE;
+
+ gint vl, vr, b, v;
+
+ input_get_volume(&vl, &vr);
+
+ switch (when) {
+ case VOLSET_STARTUP:
+ vl = CLAMP(vl, 0, 100);
+ vr = CLAMP(vr, 0, 100);
+ pvl = vl;
+ pvr = vr;
+ v = MAX(vl, vr);
+ if (vl > vr)
+ b = (gint) rint(((gdouble) vr / vl) * 100) - 100;
+ else if (vl < vr)
+ b = 100 - (gint) rint(((gdouble) vl / vr) * 100);
+ else
+ b = 0;
+
+ balance = b;
+ mainwin_set_volume_slider(v);
+ // equalizerwin_set_volume_slider(v);
+ mainwin_set_balance_slider(b);
+ // equalizerwin_set_balance_slider(b);
+ return;
+
+ case VOLSET_UPDATE:
+ if (vl == -1 || vr == -1)
+ return;
+
+ if (setting_volume) {
+ pvl = vl;
+ pvr = vr;
+ return;
+ }
+
+ if (pvr == vr && pvl == vl && changing) {
+ if (times < VOLSET_DISP_TIMES)
+ times++;
+ else {
+ mainwin_release_info_text();
+ changing = FALSE;
+ }
+ }
+ else if (pvr != vr || pvl != vl) {
+ gchar *tmp;
+
+ v = MAX(vl, vr);
+ if (vl > vr)
+ b = (gint) rint(((gdouble) vr / vl) * 100) - 100;
+ else if (vl < vr)
+ b = 100 - (gint) rint(((gdouble) vl / vr) * 100);
+ else
+ b = 0;
+
+ if (MAX(vl, vr) != MAX(pvl, pvr))
+ tmp = g_strdup_printf(_("VOLUME: %d%%"), v);
+ else {
+ if (vl > vr) {
+ tmp = g_strdup_printf(_("BALANCE: %d%% LEFT"), -b);
+ }
+ else if (vr == vl)
+ tmp = g_strdup_printf(_("BALANCE: CENTER"));
+ else { /* (vl < vr) */
+ tmp = g_strdup_printf(_("BALANCE: %d%% RIGHT"), b);
+ }
+ }
+ mainwin_lock_info_text(tmp);
+ g_free(tmp);
+
+ pvr = vr;
+ pvl = vl;
+ times = 0;
+ changing = TRUE;
+ mainwin_set_volume_slider(v);
+ // equalizerwin_set_volume_slider(v);
+
+ /* Don't change the balance slider if the volume has been
+ * set to zero. The balance can be anything, and our best
+ * guess is what is was before. */
+ if (v > 0) {
+ balance = b;
+ mainwin_set_balance_slider(b);
+ // equalizerwin_set_balance_slider(b);
+ }
+ }
+ break;
+
+ case VOLUME_ADJUSTED:
+ pvl = vl;
+ pvr = vr;
+ break;
+
+ case VOLUME_SET:
+ times = 0;
+ changing = TRUE;
+ pvl = vl;
+ pvr = vr;
+ break;
+ }
+}
+
+
+/* TODO: HAL! */
+gboolean
+can_play_cd(void)
+{
+ GList *ilist;
+
+ for (ilist = get_input_list(); ilist; ilist = g_list_next(ilist)) {
+ InputPlugin *ip = INPUT_PLUGIN(ilist->data);
+
+ if (!g_ascii_strcasecmp(g_basename(ip->filename),
+ PLUGIN_FILENAME("cdaudio"))) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+static void
+set_timer_mode(TimerMode mode)
+{
+ if (mode == TIMER_ELAPSED)
+ check_set(mainwin_view_menu, "/Time Elapsed", TRUE);
+ else
+ check_set(mainwin_view_menu, "/Time Remaining", TRUE);
+}
+
+static void
+set_timer_mode_menu_cb(TimerMode mode)
+{
+ cfg.timer_mode = mode;
+}
+
+
+void
+mainwin_setup_menus(void)
+{
+ set_timer_mode(cfg.timer_mode);
+
+ /* View menu */
+
+ check_set(mainwin_view_menu, "/Always On Top", cfg.always_on_top);
+ check_set(mainwin_view_menu, "/Put on All Workspaces", cfg.sticky);
+ check_set(mainwin_view_menu, "/Roll up Player", cfg.player_shaded);
+ check_set(mainwin_view_menu, "/Roll up Playlist Editor", cfg.playlist_shaded);
+ check_set(mainwin_view_menu, "/Roll up Equalizer", cfg.equalizer_shaded);
+
+ /* Songname menu */
+
+ check_set(mainwin_songname_menu, "/Autoscroll Songname", cfg.autoscroll);
+
+ /* Playback menu */
+
+ check_set(mainwin_play_menu, "/Repeat", cfg.repeat);
+ check_set(mainwin_play_menu, "/Shuffle", cfg.shuffle);
+
+ /* Visualization menu */
+
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_VIS_MODE +
+ cfg.vis_type].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_ANALYZER_MODE +
+ cfg.analyzer_mode].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_ANALYZER_TYPE +
+ cfg.analyzer_type].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_ANALYZER_PEAKS].
+ path, cfg.analyzer_peaks);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_SCOPE_MODE +
+ cfg.scope_mode].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_WSHADEVU_MODE +
+ cfg.vu_mode].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_REFRESH_RATE +
+ cfg.vis_refresh].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_AFALLOFF +
+ cfg.analyzer_falloff].path, TRUE);
+ check_set(mainwin_vis_menu,
+ mainwin_vis_menu_entries[MAINWIN_VIS_MENU_PFALLOFF +
+ cfg.peaks_falloff].path, TRUE);
+}
+
+static void
+mainwin_create_widgets(void)
+{
+ mainwin_menubtn =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 6, 3, 9, 9,
+ 0, 0, 0, 9, mainwin_menubtn_cb, SKIN_TITLEBAR);
+ mainwin_menubtn->pb_allow_draw = FALSE;
+ mainwin_minimize =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 244, 3, 9,
+ 9, 9, 0, 9, 9, mainwin_minimize_cb, SKIN_TITLEBAR);
+ mainwin_minimize->pb_allow_draw = FALSE;
+ mainwin_shade =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 254, 3, 9,
+ 9, 0, cfg.player_shaded ? 27 : 18, 9,
+ cfg.player_shaded ? 27 : 18, mainwin_shade_toggle,
+ SKIN_TITLEBAR);
+ mainwin_shade->pb_allow_draw = FALSE;
+ mainwin_close =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 264, 3, 9,
+ 9, 18, 0, 18, 9, mainwin_quit_cb, SKIN_TITLEBAR);
+ mainwin_close->pb_allow_draw = FALSE;
+
+ mainwin_rew =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 16, 88, 23,
+ 18, 0, 0, 0, 18, playlist_prev, SKIN_CBUTTONS);
+ mainwin_play =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 39, 88, 23,
+ 18, 23, 0, 23, 18, mainwin_play_pushed, SKIN_CBUTTONS);
+ mainwin_pause =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 62, 88, 23,
+ 18, 46, 0, 46, 18, bmp_playback_pause, SKIN_CBUTTONS);
+ mainwin_stop =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 85, 88, 23,
+ 18, 69, 0, 69, 18, mainwin_stop_pushed, SKIN_CBUTTONS);
+ mainwin_fwd =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 108, 88, 22,
+ 18, 92, 0, 92, 18, playlist_next, SKIN_CBUTTONS);
+ mainwin_eject =
+ create_pbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 136, 89, 22,
+ 16, 114, 0, 114, 16, mainwin_eject_pushed,
+ SKIN_CBUTTONS);
+
+ mainwin_srew =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 169, 4, 8,
+ 7, playlist_prev);
+ mainwin_splay =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 177, 4, 10,
+ 7, mainwin_play_pushed);
+ mainwin_spause =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 187, 4, 10,
+ 7, bmp_playback_pause);
+ mainwin_sstop =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 197, 4, 9,
+ 7, mainwin_stop_pushed);
+ mainwin_sfwd =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 206, 4, 8,
+ 7, playlist_next);
+ mainwin_seject =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 216, 4, 9,
+ 7, mainwin_eject_pushed);
+
+ mainwin_shuffle =
+ create_tbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 164, 89, 46,
+ 15, 28, 0, 28, 15, 28, 30, 28, 45,
+ mainwin_shuffle_pushed, SKIN_SHUFREP);
+
+ mainwin_repeat =
+ create_tbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 210, 89, 28,
+ 15, 0, 0, 0, 15, 0, 30, 0, 45,
+ mainwin_repeat_pushed, SKIN_SHUFREP);
+
+ mainwin_eq =
+ create_tbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 219, 58, 23,
+ 12, 0, 61, 46, 61, 0, 73, 46, 73, equalizerwin_show,
+ SKIN_SHUFREP);
+ tbutton_set_toggled(mainwin_eq, cfg.equalizer_visible);
+ mainwin_pl =
+ create_tbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 242, 58, 23,
+ 12, 23, 61, 69, 61, 23, 73, 69, 73,
+ mainwin_pl_pushed, SKIN_SHUFREP);
+ tbutton_set_toggled(mainwin_pl, cfg.playlist_visible);
+
+ mainwin_info =
+ create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 112, 27,
+ 153, 1, SKIN_TEXT);
+ textbox_set_scroll(mainwin_info, cfg.autoscroll);
+ textbox_set_xfont(mainwin_info, TRUE, cfg.mainwin_font);
+ mainwin_rate_text =
+ create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 111, 43, 15,
+ 0, SKIN_TEXT);
+ mainwin_freq_text =
+ create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 156, 43, 10,
+ 0, SKIN_TEXT);
+
+ mainwin_menurow =
+ create_menurow(&mainwin_wlist, mainwin_bg, mainwin_gc, 10, 22, 304,
+ 0, 304, 44, mainwin_mr_change, mainwin_mr_release,
+ SKIN_TITLEBAR);
+ mainwin_menurow->mr_doublesize_selected = FALSE;
+ mainwin_menurow->mr_always_selected = cfg.always_on_top;
+
+ mainwin_volume =
+ create_hslider(&mainwin_wlist, mainwin_bg, mainwin_gc, 107, 57, 68,
+ 13, 15, 422, 0, 422, 14, 11, 15, 0, 0, 51,
+ mainwin_volume_frame_cb, mainwin_volume_motion_cb,
+ mainwin_volume_release_cb, SKIN_VOLUME);
+ mainwin_balance =
+ create_hslider(&mainwin_wlist, mainwin_bg, mainwin_gc, 177, 57, 38,
+ 13, 15, 422, 0, 422, 14, 11, 15, 9, 0, 24,
+ mainwin_balance_frame_cb, mainwin_balance_motion_cb,
+ mainwin_balance_release_cb, SKIN_BALANCE);
+
+ mainwin_monostereo =
+ create_monostereo(&mainwin_wlist, mainwin_bg, mainwin_gc, 212, 41,
+ SKIN_MONOSTEREO);
+
+ mainwin_playstatus =
+ create_playstatus(&mainwin_wlist, mainwin_bg, mainwin_gc, 24, 28);
+
+ mainwin_minus_num =
+ create_number(&mainwin_wlist, mainwin_bg, mainwin_gc, 36, 26,
+ SKIN_NUMBERS);
+ widget_hide(WIDGET(mainwin_minus_num));
+ mainwin_10min_num =
+ create_number(&mainwin_wlist, mainwin_bg, mainwin_gc, 48, 26,
+ SKIN_NUMBERS);
+ widget_hide(WIDGET(mainwin_10min_num));
+
+ mainwin_min_num =
+ create_number(&mainwin_wlist, mainwin_bg, mainwin_gc, 60, 26,
+ SKIN_NUMBERS);
+ widget_hide(WIDGET(mainwin_min_num));
+
+ mainwin_10sec_num =
+ create_number(&mainwin_wlist, mainwin_bg, mainwin_gc, 78, 26,
+ SKIN_NUMBERS);
+ widget_hide(WIDGET(mainwin_10sec_num));
+
+ mainwin_sec_num =
+ create_number(&mainwin_wlist, mainwin_bg, mainwin_gc, 90, 26,
+ SKIN_NUMBERS);
+ widget_hide(WIDGET(mainwin_sec_num));
+
+ mainwin_about =
+ create_sbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 247, 83, 20,
+ 25, show_about_window);
+
+ mainwin_vis =
+ create_vis(&mainwin_wlist, mainwin_bg, mainwin->window, mainwin_gc,
+ 24, 43, 76);
+ mainwin_svis = create_svis(&mainwin_wlist, mainwin_bg, mainwin_gc, 79, 5);
+ active_vis = mainwin_vis;
+
+ mainwin_position =
+ create_hslider(&mainwin_wlist, mainwin_bg, mainwin_gc, 16, 72, 248,
+ 10, 248, 0, 278, 0, 29, 10, 10, 0, 0, 219, NULL,
+ mainwin_position_motion_cb,
+ mainwin_position_release_cb, SKIN_POSBAR);
+ widget_hide(WIDGET(mainwin_position));
+
+ mainwin_sposition =
+ create_hslider(&mainwin_wlist, mainwin_bg, mainwin_gc, 226, 4, 17,
+ 7, 17, 36, 17, 36, 3, 7, 36, 0, 1, 13,
+ mainwin_spos_frame_cb, mainwin_spos_motion_cb,
+ mainwin_spos_release_cb, SKIN_TITLEBAR);
+ widget_hide(WIDGET(mainwin_sposition));
+
+ mainwin_stime_min =
+ create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 130, 4, 15,
+ FALSE, SKIN_TEXT);
+ mainwin_stime_sec =
+ create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 147, 4, 10,
+ FALSE, SKIN_TEXT);
+
+ if (!cfg.player_shaded) {
+ widget_hide(WIDGET(mainwin_svis));
+ widget_hide(WIDGET(mainwin_srew));
+ widget_hide(WIDGET(mainwin_splay));
+ widget_hide(WIDGET(mainwin_spause));
+ widget_hide(WIDGET(mainwin_sstop));
+ widget_hide(WIDGET(mainwin_sfwd));
+ widget_hide(WIDGET(mainwin_seject));
+ widget_hide(WIDGET(mainwin_stime_min));
+ widget_hide(WIDGET(mainwin_stime_sec));
+ }
+
+}
+
+static void
+mainwin_create_window(void)
+{
+ gint width, height;
+
+ mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(mainwin), _("BMP"));
+ gtk_window_set_role(GTK_WINDOW(mainwin), "player");
+ gtk_window_set_resizable(GTK_WINDOW(mainwin), FALSE);
+
+ width = MAINWIN_WIDTH;
+ height = cfg.player_shaded ? MAINWIN_SHADED_HEIGHT : MAINWIN_HEIGHT;
+
+ gtk_widget_set_size_request(mainwin, width, height);
+ gtk_widget_set_app_paintable(mainwin, TRUE);
+
+ dock_window_list = dock_window_set_decorated(dock_window_list,
+ GTK_WINDOW(mainwin),
+ cfg.show_wm_decorations);
+
+ if (cfg.player_x != -1 && cfg.save_window_position)
+ gtk_window_move(GTK_WINDOW(mainwin), cfg.player_x, cfg.player_y);
+
+ gtk_widget_add_events(mainwin,
+ GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_SCROLL_MASK | GDK_KEY_PRESS_MASK |
+ GDK_VISIBILITY_NOTIFY_MASK);
+ gtk_widget_realize(mainwin);
+
+ util_set_cursor(mainwin);
+
+ g_signal_connect(mainwin, "destroy", G_CALLBACK(mainwin_destroy), NULL);
+ g_signal_connect(mainwin, "button_press_event",
+ G_CALLBACK(mainwin_mouse_button_press), NULL);
+ g_signal_connect(mainwin, "scroll_event",
+ G_CALLBACK(mainwin_scrolled), NULL);
+ g_signal_connect(mainwin, "button_release_event",
+ G_CALLBACK(mainwin_mouse_button_release), NULL);
+ g_signal_connect(mainwin, "motion_notify_event",
+ G_CALLBACK(mainwin_motion), NULL);
+ g_signal_connect_after(mainwin, "focus_in_event",
+ G_CALLBACK(mainwin_focus_in), NULL);
+ g_signal_connect_after(mainwin, "focus_out_event",
+ G_CALLBACK(mainwin_focus_out), NULL);
+ g_signal_connect(mainwin, "configure_event",
+ G_CALLBACK(mainwin_configure), NULL);
+ g_signal_connect(mainwin, "style_set",
+ G_CALLBACK(mainwin_set_back_pixmap), NULL);
+
+ bmp_drag_dest_set(mainwin);
+
+ g_signal_connect(mainwin, "key_press_event",
+ G_CALLBACK(mainwin_keypress), NULL);
+}
+
+static void
+mainwin_create_menus(void)
+{
+ mainwin_general_menu = create_menu(mainwin_general_menu_entries,
+ mainwin_general_menu_entries_num,
+ mainwin_accel);
+
+ mainwin_play_menu = create_menu(mainwin_playback_menu_entries,
+ mainwin_playback_menu_entries_num,
+ mainwin_accel);
+
+ mainwin_view_menu = create_menu(mainwin_view_menu_entries,
+ mainwin_view_menu_entries_num,
+ mainwin_accel);
+
+ mainwin_songname_menu = create_menu(mainwin_songname_menu_entries,
+ mainwin_songname_menu_entries_num,
+ mainwin_accel);
+
+ mainwin_add_menu = create_menu(mainwin_add_menu_entries,
+ mainwin_add_menu_entries_num,
+ mainwin_accel);
+
+ mainwin_vis_menu = create_menu(mainwin_vis_menu_entries,
+ mainwin_vis_menu_entries_num,
+ mainwin_accel);
+
+ make_submenu(mainwin_general_menu, "/View", mainwin_view_menu);
+
+ gtk_window_add_accel_group(GTK_WINDOW(mainwin), mainwin_accel);
+}
+
+void
+mainwin_create(void)
+{
+ mainwin_create_window();
+
+ mainwin_accel = gtk_accel_group_new();
+ mainwin_create_menus();
+
+ mainwin_gc = gdk_gc_new(mainwin->window);
+ mainwin_bg = gdk_pixmap_new(mainwin->window,
+ MAINWIN_WIDTH, MAINWIN_HEIGHT, -1);
+ mainwin_set_back_pixmap();
+ mainwin_create_widgets();
+
+ vis_set_window(mainwin_vis, mainwin->window);
+}
+
+void
+mainwin_attach_idle_func(void)
+{
+ mainwin_timeout_id = g_timeout_add(MAINWIN_UPDATE_INTERVAL,
+ mainwin_idle_func, NULL);
+}
+
+static gboolean
+idle_func_change_song(gboolean waiting)
+{
+ static GTimer *pause_timer = NULL;
+
+ if (!pause_timer)
+ pause_timer = g_timer_new();
+
+ if (cfg.pause_between_songs) {
+ gint timeleft;
+
+ if (!waiting) {
+ g_timer_start(pause_timer);
+ waiting = TRUE;
+ }
+
+ timeleft = cfg.pause_between_songs_time -
+ (gint) g_timer_elapsed(pause_timer, NULL);
+
+// number_set_number(mainwin_10min_num, timeleft / 600);
+// number_set_number(mainwin_min_num, (timeleft / 60) % 10);
+// number_set_number(mainwin_10sec_num, (timeleft / 10) % 6);
+// number_set_number(mainwin_sec_num, timeleft % 10);
+/*
+ if (!mainwin_sposition->hs_pressed) {
+ gchar time_str[5];
+
+ g_snprintf(time_str, sizeof(time_str), "%2.2d", timeleft / 60);
+ textbox_set_text(mainwin_stime_min, time_str);
+
+ g_snprintf(time_str, sizeof(time_str), "%2.2d", timeleft % 60);
+ textbox_set_text(mainwin_stime_sec, time_str);
+ }
+*/
+// playlistwin_set_time(timeleft * 1000, 0, TIMER_ELAPSED);
+ }
+
+ if (!cfg.pause_between_songs ||
+ g_timer_elapsed(pause_timer, NULL) >= cfg.pause_between_songs_time) {
+
+ GDK_THREADS_ENTER();
+ playlist_eof_reached();
+ GDK_THREADS_LEAVE();
+
+ waiting = FALSE;
+ }
+
+ return waiting;
+}
+
+static void
+idle_func_update_song_info(gint time)
+{
+ gint length, t;
+ gchar stime_prefix;
+
+ length = playlist_get_current_length();
+// playlistwin_set_time(time, length, cfg.timer_mode);
+// input_update_vis(time);
+
+ if (cfg.timer_mode == TIMER_REMAINING) {
+ if (length != -1) {
+// number_set_number(mainwin_minus_num, 11);
+ t = length - time;
+// stime_prefix = '-';
+ }
+ else {
+// number_set_number(mainwin_minus_num, 10);
+ t = time;
+// stime_prefix = ' ';
+ }
+ }
+ else {
+// number_set_number(mainwin_minus_num, 10);
+ t = time;
+// stime_prefix = ' ';
+ }
+ t /= 1000;
+
+ /* Show the time in the format HH:MM when we have more than 100
+ * minutes. */
+ if (t >= 100 * 60)
+ t /= 60;
+// number_set_number(mainwin_10min_num, t / 600);
+// number_set_number(mainwin_min_num, (t / 60) % 10);
+// number_set_number(mainwin_10sec_num, (t / 10) % 6);
+// number_set_number(mainwin_sec_num, t % 10);
+/*
+ if (!mainwin_sposition->hs_pressed) {
+ gchar *time_str;
+
+ time_str = g_strdup_printf("%c%2.2d", stime_prefix, t / 60);
+ textbox_set_text(mainwin_stime_min, time_str);
+ g_free(time_str);
+
+ time_str = g_strdup_printf("%2.2d", t % 60);
+ textbox_set_text(mainwin_stime_sec, time_str);
+ g_free(time_str);
+ }
+*/
+ time /= 1000;
+ length /= 1000;
+ if (length > 0) {
+ if (time > length) {
+// hslider_set_position(mainwin_position, 219);
+// hslider_set_position(mainwin_sposition, 13);
+ }
+ else {
+// hslider_set_position(mainwin_position, (time * 219) / length);
+// hslider_set_position(mainwin_sposition,
+// ((time * 12) / length) + 1);
+ }
+ }
+ else {
+// hslider_set_position(mainwin_position, 0);
+// hslider_set_position(mainwin_sposition, 1);
+ }
+}
+
+
+static gboolean
+mainwin_idle_func(gpointer data)
+{
+ static gboolean waiting = FALSE;
+ static gint count = 0;
+
+ gint time;
+
+ if (bmp_playback_get_playing()) {
+// GDK_THREADS_ENTER();
+// vis_playback_start();
+// GDK_THREADS_LEAVE();
+
+ time = bmp_playback_get_time();
+
+ g_print("\n time = %s\n", time);
+
+ switch (time) {
+ case -1:
+ /* no song playing */
+ waiting = idle_func_change_song(waiting);
+ break;
+
+ case -2:
+ /* no usable output device */
+ GDK_THREADS_ENTER();
+ run_no_output_device_dialog();
+ mainwin_stop_pushed();
+ GDK_THREADS_LEAVE();
+ waiting = FALSE;
+ break;
+
+ default:
+ /* song playing, all's well */
+ idle_func_update_song_info(time);
+ waiting = FALSE;
+ }
+ }
+ else {
+// GDK_THREADS_ENTER();
+// vis_playback_stop();
+// GDK_THREADS_LEAVE();
+ }
+
+ GDK_THREADS_ENTER();
+
+// ctrlsocket_check();
+
+// draw_main_window(mainwin_force_redraw);
+
+ if (!count) {
+ read_volume(VOLSET_UPDATE);
+ count = 10;
+ }
+ else
+ count--;
+
+// mainwin_force_redraw = FALSE;
+// draw_playlist_window(FALSE);
+// draw_equalizer_window(FALSE);
+
+// if (mainwin_title_text) {
+// G_LOCK(mainwin_title);
+// gtk_window_set_title(GTK_WINDOW(mainwin), mainwin_title_text);
+// g_free(mainwin_title_text);
+// mainwin_title_text = NULL;
+// G_UNLOCK(mainwin_title);
+
+// mainwin_set_info_text();
+// playlistwin_update_list();
+// }
+
+ GDK_THREADS_LEAVE();
+
+ return TRUE;
+}
+
+static gchar* images_dir = NULL;
+static gchar* image_path = NULL;
+
+static gboolean playorpause = FALSE;
+GtkButton *play_pause_button = NULL;
+GtkWidget* shuffle_button = NULL;
+GtkWidget* repeat_button = NULL;
+GtkWidget *image = NULL;
+GtkWidget *vol_image = NULL;
+GtkWidget* title_label = NULL;
+GtkWidget* artist_label = NULL;
+GtkWidget* track_number_label = NULL;
+GtkWidget* total_number_label = NULL;
+GtkWidget* elapse_time_label = NULL;
+GtkWidget* total_time_label = NULL;
+GtkWidget* volume_label = NULL;
+GtkWidget* vol_img_alignment = NULL;
+GtkWidget* time_hscale = NULL;
+gint timeout_id;
+static gint timeout_time = 0;
+
+GtkWidget* alignment_eq_pos1 = NULL;
+GtkWidget* alignment_eq_pos2 = NULL;
+GtkWidget* alignment_eq_pos3 = NULL;
+GtkWidget* alignment_eq_pos4 = NULL;
+GtkWidget* alignment_eq_pos5 = NULL;
+GtkWidget* alignment_eq_pos6 = NULL;
+GtkWidget* alignment_eq_pos7 = NULL;
+GtkWidget* alignment_eq_pos8 = NULL;
+GtkWidget* alignment_eq_pos9 = NULL;
+GtkWidget* alignment_eq_pos10 = NULL;
+GtkWidget* alignment_eq_pos11 = NULL;
+GtkWidget* alignment_eq_pos12 = NULL;
+
+GtkWidget* image_eq_pos1 = NULL;
+GtkWidget* image_eq_pos2 = NULL;
+GtkWidget* image_eq_pos3 = NULL;
+GtkWidget* image_eq_pos4 = NULL;
+GtkWidget* image_eq_pos5 = NULL;
+GtkWidget* image_eq_pos6 = NULL;
+GtkWidget* image_eq_pos7 = NULL;
+GtkWidget* image_eq_pos8 = NULL;
+GtkWidget* image_eq_pos9 = NULL;
+GtkWidget* image_eq_pos10 = NULL;
+GtkWidget* image_eq_pos11 = NULL;
+GtkWidget* image_eq_pos12 = NULL;
+
+void
+openmoko_player_quit(GtkWidget *widget, gpointer data)
+{
+ g_free(images_dir);
+ mainwin_quit_cb();
+}
+
+void
+openmoko_read_volume_from_start()
+{
+ gint vol_left, vol_right, vol;
+ ConfigDb* db;
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_get_int(db, "ALSA", "volume_left", &vol_left);
+ bmp_cfg_db_get_int(db, "ALSA", "volume_right", &vol_right);
+ vol_left = CLAMP(vol_left, 0, 100);
+ vol_right = CLAMP(vol_right, 0, 100);
+ bmp_cfg_db_close(db);
+ vol = MAX(vol_left, vol_right);
+ gchar* vol_str = g_strdup_printf("%d", vol);
+ gtk_label_set_text(GTK_LABEL(volume_label), vol_str);
+ vol_str = g_strdup_printf("%s/ind-music-volume-%02d.png", images_dir,vol/10);
+ gtk_container_remove(GTK_CONTAINER(vol_img_alignment), vol_image);
+ vol_image = gtk_image_new_from_file(vol_str);
+ gtk_container_add(GTK_CONTAINER(vol_img_alignment), vol_image);
+ g_free(vol_str);
+
+}
+
+void
+openmoko_change_vol_img(gint vol)
+{
+ gchar* vol_str;
+ vol_str = g_strdup_printf("%s/ind-music-volume-%02d.png", images_dir, vol/10);
+ gtk_container_remove(GTK_CONTAINER(vol_img_alignment), vol_image);
+ vol_image = gtk_image_new_from_file(vol_str);
+ gtk_container_add(GTK_CONTAINER(vol_img_alignment), vol_image);
+ gtk_widget_show(vol_image);
+ g_free(vol_str);
+}
+
+void
+openmoko_update_vis_data(gint pos, gint h)
+{
+ if(h < 1 || h > 12)
+ return;
+
+ if(h < 0)
+ return;
+
+ gint eq = 0;
+ gchar* img_path = NULL;
+
+ switch(h)
+ {
+ case 0:
+ case 1:
+ case 2:
+ eq = 1;
+ break;
+ case 3:
+ case 4:
+ eq = 2;
+ break;
+ case 5:
+ case 6:
+ eq = 3;
+ break;
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ eq = h - 3;
+ break;
+ default:
+ eq = 12;
+ break;
+ }
+
+ img_path = g_strdup_printf("%s/ind-music-eq-%02d.png", images_dir, eq);
+
+ switch(pos)
+ {
+ case 1:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos1), image_eq_pos1);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos1), img_path);
+ //image_eq_pos1 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos1), image_eq_pos1);
+ gtk_widget_show(image_eq_pos1);
+ break;
+ case 2:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos2), image_eq_pos2);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos2), img_path);
+ //image_eq_pos2 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos2), image_eq_pos2);
+ gtk_widget_show(image_eq_pos2);
+ break;
+ case 3:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos3), image_eq_pos3);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos3), img_path);
+ //image_eq_pos3 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos3), image_eq_pos3);
+ gtk_widget_show(image_eq_pos3);
+ break;
+ case 4:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos4), image_eq_pos4);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos4), img_path);
+ //image_eq_pos4 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos4), image_eq_pos4);
+ gtk_widget_show(image_eq_pos4);
+ break;
+ case 5:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos5), image_eq_pos5);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos5), img_path);
+ //image_eq_pos5 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos5), image_eq_pos5);
+ gtk_widget_show(image_eq_pos5);
+ break;
+ case 6:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos6), image_eq_pos6);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos6), img_path);
+ //image_eq_pos6 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos6), image_eq_pos6);
+ gtk_widget_show(image_eq_pos6);
+ break;
+ case 7:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos7), image_eq_pos7);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos7), img_path);
+ //image_eq_pos7 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos7), image_eq_pos7);
+ gtk_widget_show(image_eq_pos7);
+ break;
+ case 8:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos8), image_eq_pos8);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos8), img_path);
+ //image_eq_pos8 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos8), image_eq_pos8);
+ gtk_widget_show(image_eq_pos8);
+ break;
+ case 9:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos9), image_eq_pos9);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos9), img_path);
+ //image_eq_pos9 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos9), image_eq_pos9);
+ gtk_widget_show(image_eq_pos9);
+ break;
+ case 10:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos10), image_eq_pos10);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos10), img_path);
+ //image_eq_pos10 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos10), image_eq_pos10);
+ gtk_widget_show(image_eq_pos10);
+ break;
+ case 11:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos11), image_eq_pos11);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos11), img_path);
+ //image_eq_pos11 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos11), image_eq_pos11);
+ gtk_widget_show(image_eq_pos11);
+ break;
+ case 12:
+ //gtk_container_remove(GTK_CONTAINER(alignment_eq_pos12), image_eq_pos12);
+ gtk_image_set_from_file(GTK_IMAGE(image_eq_pos12), img_path);
+ //image_eq_pos12 = gtk_image_new_from_file(img_path);
+ //gtk_container_add(GTK_CONTAINER(alignment_eq_pos12), image_eq_pos12);
+ gtk_widget_show(image_eq_pos12);
+ break;
+ default:
+ break;
+ }
+
+ g_free(img_path);
+}
+
+void
+openmoko_set_tag_info()
+{
+ gint pos;
+ gchar* filename;
+ pos = playlist_get_position();
+ filename = playlist_get_filename(pos);
+
+ char* surfix = strrchr(filename, '.');
+ if(!strcmp(surfix+1, "mp3"))
+ {
+ ID3Tag *id3tag;
+ ID3Frame *frame;
+ ID3Field *text_field;
+
+ id3tag = ID3Tag_New();
+ ID3Tag_Link(id3tag, filename);
+ if(ID3Tag_HasTagType(id3tag, ID3TT_ID3V2))
+ {
+ ID3Tag_Clear(id3tag);
+ ID3Tag_LinkWithFlags(id3tag, filename, ID3TT_ID3V2);
+ }
+
+ frame = ID3Tag_FindFrameWithID(id3tag, ID3FID_TITLE);
+ if(frame)
+ {
+ gchar info[4096];
+ text_field = ID3Frame_GetField(frame, ID3FN_TEXT);
+ ID3Field_GetASCII(text_field, info, 4096);
+ openmoko_set_title(info);
+ }
+ else
+ openmoko_set_title(NULL);
+
+ frame = ID3Tag_FindFrameWithID(id3tag, ID3FID_LEADARTIST);
+ if(frame)
+ {
+ gchar info[4096];
+ text_field = ID3Frame_GetField(frame, ID3FN_TEXT);
+ ID3Field_GetASCII(text_field, info, 4096);
+ openmoko_set_artist(info);
+ }
+ else
+ openmoko_set_artist(NULL);
+
+ return;
+ }
+ else if(!strcmp(surfix+1, "ogg"))
+ {
+ return;
+ }
+ else if(!strcmp(surfix+1, "mp4") || !strcmp(surfix+1, "m4a") || !strcmp(surfix+1, "aac"))
+ {
+ /*
+ MP4FileHandle mp4file;
+ mp4file = MP4Modify(filename, 0, 0);
+ if(mp4file == MP4_INVALID_FILE_HANDLE)
+ {
+ g_print("Can't open %s...aborting\n", filename);
+ openmoko_set_title(NULL);
+ openmoko_set_artist(NULL);
+ return;
+ }
+
+ gchar* title;
+ gchar* artist;
+ MP4GetMetadataName(mp4file, &title);
+ MP4GetMetadataArtist(mp4file, &artist);
+ if(title)
+ openmoko_set_title(title);
+ else
+ openmoko_set_title(NULL);
+ if(artist)
+ openmoko_set_artist(artist);
+ else
+ openmoko_set_artist(NULL);
+
+ g_free(title);
+ g_free(artist);
+ MP4Close(mp4file);
+ */
+ return;
+ }
+ else
+ {
+ g_print("current file is %s file\n", surfix+1);
+ openmoko_set_title(NULL);
+ openmoko_set_artist(NULL);
+ return;
+ }
+}
+
+void
+openmoko_update_ogg_title(const gchar* title)
+{
+ if(title)
+ openmoko_set_title(title);
+ else
+ openmoko_set_title(NULL);
+}
+
+void
+openmoko_update_ogg_artist(const gchar* artist)
+{
+ if(artist)
+ openmoko_set_artist(artist);
+ else
+ openmoko_set_artist(NULL);
+}
+
+void
+openmoko_set_title(gchar *title)
+{
+ if(!title)
+ {
+ gtk_label_set_text(GTK_LABEL(title_label), "Unknown Title");
+ return;
+ }
+ gtk_label_set_text(GTK_LABEL(title_label), title);
+}
+
+void
+openmoko_set_artist(gchar* artist)
+{
+ if(!artist)
+ {
+ gtk_label_set_text(GTK_LABEL(artist_label), "Unknown Artist");
+ return;
+ }
+ gtk_label_set_text(GTK_LABEL(artist_label), artist);
+}
+
+void
+openmoko_set_track_number()
+{
+ gchar* track_number;
+ track_number = g_strdup_printf("%d", playlist_get_position() + 1);
+ gtk_label_set_text(GTK_LABEL(track_number_label), track_number);
+ g_free(track_number);
+}
+
+void
+openmoko_set_total_number()
+{
+ gchar* total_number;
+ total_number = g_strdup_printf("%d", playlist_get_length());
+ gtk_label_set_text(GTK_LABEL(total_number_label), total_number);
+ g_free(total_number);
+}
+
+void
+openmoko_set_elapse_time(gint elapse_time)
+{
+ gint pos, time;
+ pos = playlist_get_position();
+ time = playlist_get_songtime(pos);
+ if(elapse_time > time)
+ return;
+ gchar* elapse_str;
+ elapse_str = g_strdup_printf("%d:%-2.2d", elapse_time/60000, (elapse_time/1000)%60);
+ gtk_label_set_text(GTK_LABEL(elapse_time_label), elapse_str);
+ g_free(elapse_str);
+}
+
+void
+openmoko_set_total_time()
+{
+ gint pos, time;
+ gchar* total_time;
+ pos = playlist_get_position();
+ time = playlist_get_songtime(pos);
+ total_time = g_strdup_printf("%d:%-2.2d", time/60000, (time/1000)%60);
+ gtk_label_set_text(GTK_LABEL(total_time_label), total_time);
+ g_free(total_time);
+}
+
+void
+openmoko_set_info()
+{
+ openmoko_set_track_number();
+ openmoko_set_total_time();
+ openmoko_set_tag_info();
+}
+
+gboolean
+openmoko_update_elapse_time(gpointer data)
+{
+ timeout_time = bmp_playback_get_time();
+
+ if(timeout_time == -1)
+ {
+ g_usleep(500);
+ idle_func_change_song(FALSE);
+ openmoko_set_info();
+ return TRUE;
+ }
+
+ input_update_vis(timeout_time);
+
+ openmoko_set_elapse_time(timeout_time);
+
+ gint length;
+ length = playlist_get_current_length();
+ timeout_time /= 1000;
+ length /= 1000;
+ if(length > 0)
+ {
+ if(timeout_time > length)
+ {
+ gtk_range_set_value(GTK_RANGE(time_hscale), 338.0);
+ }
+ else
+ {
+ gtk_range_set_value(GTK_RANGE(time_hscale), (gdouble)((timeout_time * 338) / length));
+ }
+ }
+ else
+ {
+ gtk_range_set_value(GTK_RANGE(time_hscale), 0.0);
+ }
+
+ return TRUE;
+}
+
+void
+openmoko_play_pause_action()
+{
+ if(!playorpause)
+ {
+ mainwin_play_pushed();
+ image_path = g_build_path("/", images_dir, "ico-pause.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ moko_pixmap_button_set_finger_toolbox_btn_center_image(play_pause_button, image);
+ playorpause = TRUE;
+ timeout_id = g_timeout_add(100, openmoko_update_elapse_time, NULL);
+ openmoko_set_info();
+ }
+ else
+ {
+ bmp_playback_pause();
+ image_path = g_build_path("/", images_dir, "ico-play.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ moko_pixmap_button_set_finger_toolbox_btn_center_image(play_pause_button, image);
+ playorpause = FALSE;
+ g_source_remove(timeout_id);
+ }
+}
+
+void
+openmoko_play_pause_button_pushed(GtkWidget *widget, gpointer data)
+{
+ openmoko_play_pause_action();
+}
+
+void
+openmoko_playlist_prev_action()
+{
+ playlist_prev();
+ openmoko_set_info();
+}
+
+void
+openmoko_playlist_prev(GtkWidget *widget, gpointer data)
+{
+ openmoko_playlist_prev_action();
+}
+
+void
+openmoko_playlist_next_action()
+{
+ playlist_next();
+ openmoko_set_info();
+}
+
+void
+openmoko_playlist_next(GtkWidget *widget, gpointer data)
+{
+ openmoko_playlist_next_action();
+}
+
+void
+openmoko_increase_volume()
+{
+ gint vl, vr, orignal_vol,vol;
+ input_get_volume(&vl, &vr);
+ orignal_vol = MAX(vl, vr);
+ if(vl < 100 && vr < 100)
+ {
+ vl++;
+ vr++;
+ }
+ else
+ return;
+ input_set_volume(vl, vr);
+ vol = MAX(vl, vr);
+ gchar* vol_str = g_strdup_printf("%d", vol);
+ gtk_label_set_text(GTK_LABEL(volume_label), vol_str);
+ if((orignal_vol / 10) != (vol / 10))
+ openmoko_change_vol_img(vol);
+ g_free(vol_str);
+}
+
+void
+openmoko_wheel_press_left_up_cb(GtkWidget *widget, gpointer data)
+{
+ openmoko_increase_volume();
+}
+
+void
+openmoko_decrease_volume()
+{
+ gint vl, vr, orignal_vol, vol;
+ input_get_volume(&vl, &vr);
+ orignal_vol = MAX(vl, vr);
+ if(vl > 0 && vr > 0)
+ {
+ vl--;
+ vr--;
+ }
+ else
+ return;
+ input_set_volume(vl, vr);
+ vol = MAX(vl, vr);
+ gchar* vol_str = g_strdup_printf("%d", vol);
+ gtk_label_set_text(GTK_LABEL(volume_label), vol_str);
+ if((orignal_vol / 10) != (vol / 10))
+ openmoko_change_vol_img(vol);
+ g_free(vol_str);
+}
+
+void
+openmoko_wheel_press_right_down_cb(GtkWidget *widget, gpointer data)
+{
+ openmoko_decrease_volume();
+}
+
+void
+openmoko_quit_musicplayer()
+{
+ if(playorpause)
+ openmoko_play_pause_action();
+
+ gint vl, vr;
+ ConfigDb* db;
+ db = bmp_cfg_db_open();
+ input_get_volume(&vl, &vr);
+ bmp_cfg_db_set_int(db, "ALSA", "volume_left", vl);
+ bmp_cfg_db_set_int(db, "ALSA", "volume_right", vr);
+ bmp_cfg_db_set_bool(db, "beep", "shuffle", cfg.shuffle);
+ bmp_cfg_db_set_bool(db, "beep", "repeat", cfg.repeat);
+ bmp_cfg_db_close(db);
+ mainwin_quit_cb();
+
+ g_free(images_dir);
+
+ gtk_main_quit();
+}
+
+void
+openmoko_main_quit(GtkWidget* widget, gpointer data)
+{
+ openmoko_quit_musicplayer();
+}
+
+void
+openmoko_set_shuffle_state()
+{
+ gboolean shuffle_state;
+ ConfigDb* db;
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_get_bool(db, "beep", "shuffle", &shuffle_state);
+ bmp_cfg_db_close(db);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(shuffle_button), shuffle_state);
+}
+
+void
+openmoko_shuffle_button_callback(GtkWidget* widget, gpointer data)
+{
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
+ {
+ cfg.shuffle = TRUE;
+ playlist_set_shuffle(TRUE);
+ }
+ else
+ {
+ cfg.shuffle= FALSE;
+ playlist_set_shuffle(FALSE);
+ }
+}
+
+void
+openmoko_set_repeat_state()
+{
+ gboolean repeat_state;
+ ConfigDb* db;
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_get_bool(db, "beep", "repeat", &repeat_state);
+ bmp_cfg_db_close(db);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(repeat_button), repeat_state);
+}
+
+void
+openmoko_repeat_button_callback(GtkWidget* widget, gpointer data)
+{
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
+ {
+ cfg.repeat = TRUE;
+ }
+ else
+ {
+ cfg.repeat= FALSE;
+ }
+}
+
+void
+openmoko_playlist_button_callback(GtkWidget* widget, gpointer data)
+{
+ g_print("show play list\n");
+}
+
+gboolean
+openmoko_press_on_slider_cb(GtkRange* range,
+ GtkScrollType scroll,
+ gdouble value,
+ gpointer data)
+{
+ g_source_remove(timeout_id);
+ gint length, time, pos;
+ length = playlist_get_current_length()/1000;
+ pos = (gint)gtk_range_get_value(GTK_RANGE(time_hscale));
+ time = (length * pos ) / 338;
+ bmp_playback_seek(time);
+ timeout_id = g_timeout_add(100, openmoko_update_elapse_time, NULL);
+ return FALSE;
+}
+
+void
+btn_set_center_image(GtkButton* button, GtkImage* image)
+{
+ GtkWidget* btn_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(button), btn_vbox);
+ GtkWidget* alignment = gtk_alignment_new(0.43, 0.43, 0, 0);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), alignment, TRUE, TRUE, 0);
+ gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(image));
+}
+
+static DBusHandlerResult
+signal_filter(DBusConnection *connection, DBusMessage *message, void *user_data)
+{
+ GMainLoop *loop = user_data;
+ if(dbus_message_is_signal(message, DBUS_INTERFACE_ORG_FREEDESKTOP_LOCAL,
+ "Disconnected"))
+ {
+ g_main_loop_quit(loop);
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ else if(dbus_message_is_signal(message, "com.burtonini.dbus.Signal", "Ping"))
+ {
+ DBusError error;
+ char *s;
+ dbus_error_init(&error);
+ if(dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &s,DBUS_TYPE_INVALID))
+ {
+ g_print("Ping received: %s\n", s);
+ if(!g_ascii_strcasecmp(s, "quit"))
+ {
+ openmoko_quit_musicplayer();
+ exit(0);
+ }
+ else if(!g_ascii_strcasecmp(s, "pause"))
+ {
+ openmoko_play_pause_action();
+ }
+ else if(!g_ascii_strcasecmp(s, "play"))
+ {
+ openmoko_play_pause_action();
+ }
+ else if(!g_ascii_strcasecmp(s, "prev"))
+ {
+ openmoko_playlist_prev_action();
+ }
+ else if(!g_ascii_strcasecmp(s, "next"))
+ {
+ openmoko_playlist_next_action();
+ }
+ else if(!g_ascii_strcasecmp(s, "v+"))
+ {
+ openmoko_increase_volume();
+ }
+ else if(!g_ascii_strcasecmp(s, "v-"))
+ {
+ openmoko_decrease_volume();
+ }
+ dbus_free(s);
+ }
+ else
+ {
+ g_print("Ping received, but error getting message: %s\n", error.message);
+ dbus_error_free(&error);
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+void init_image_dir()
+{
+ gchar* skin_path;
+ ConfigDb* db;
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_get_string(db, "beep", "skin", &skin_path);
+ bmp_cfg_db_close(db);
+
+ gchar* share_string = g_strrstr(skin_path, "share");
+
+ int len = strlen(skin_path);
+ int len1= strlen(share_string);
+ gchar* prefix = g_strndup(skin_path, len-len1 +5);
+ images_dir = g_strdup(g_strconcat(prefix, "/images", NULL));
+
+ g_free(skin_path);
+ g_free(prefix);
+}
+
+void
+openmoko_mainwin_create()
+{
+ MokoFingerToolBox *tools = NULL;
+ GtkButton *prev_button = NULL;
+ GtkButton *next_button = NULL;
+ GtkWidget* playlist_button = NULL;
+ MokoFixed *fixed = NULL;
+ GtkWidget *alignment = NULL;
+ GtkWidget *mainvbox = NULL;
+ GtkWidget* background_vbox = NULL;
+ GtkWidget* up_hbox = NULL;
+ GtkWidget* middle_hbox = NULL;
+ GtkWidget* down_hbox = NULL;
+
+ GdkColor color;
+ PangoFontDescription *font_desc;
+
+ init_image_dir();
+
+ MokoApplication *app = MOKO_APPLICATION(moko_application_get_instance());
+
+ MokoFingerWindow *window = MOKO_FINGER_WINDOW(moko_finger_window_new());
+ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(openmoko_main_quit), NULL);
+ gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
+
+ fixed = MOKO_FIXED(moko_fixed_new());
+ moko_finger_window_set_contents(window, GTK_WIDGET(fixed));
+
+/*******************************************/
+ background_vbox = gtk_vbox_new(FALSE, 0);
+
+ GtkWidget* app_name = gtk_label_new("Music Player");
+ gtk_misc_set_alignment(GTK_MISC(app_name), 0.5, 0.5);
+ gtk_widget_set_size_request(GTK_WIDGET(app_name), 480, 30);
+ GtkWidget* app_name_eventbox = gtk_event_box_new();
+ gtk_widget_set_name(GTK_WIDGET(app_name_eventbox), "gtkeventbox-black");
+ gtk_container_add(GTK_CONTAINER(app_name_eventbox), app_name);
+ gtk_box_pack_start(GTK_BOX(background_vbox), app_name_eventbox, TRUE, TRUE, 0);
+
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 35, 0, 15, 0);
+ gtk_box_pack_start(GTK_BOX(background_vbox), alignment, TRUE, TRUE, 0);
+ image_path = g_build_path("/", images_dir, "bg-music-player.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment), image);
+
+ moko_fixed_set_cargo(MOKO_FIXED(fixed), background_vbox);
+/*******************************************/
+
+ alignment = gtk_alignment_new(0.5, 0.25, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 65, 0, 20, 0);
+ moko_fixed_set_cargo(MOKO_FIXED(fixed), alignment);
+ mainvbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(alignment), mainvbox);
+
+/*******************************************/
+ //set title label
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 30, 0, 50, 30);
+ gtk_box_pack_start(GTK_BOX(mainvbox), alignment, TRUE, TRUE, 0);
+ title_label = gtk_label_new("");
+ font_desc = pango_font_description_from_string("Times 22");
+ gtk_widget_modify_font(title_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_label_set_width_chars(GTK_LABEL(title_label), 23);
+ gtk_misc_set_alignment(GTK_MISC(title_label), 0, 0.5);
+ gtk_label_set_ellipsize(GTK_LABEL(title_label), PANGO_ELLIPSIZE_END);
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(title_label), GTK_STATE_NORMAL, &color);
+ gtk_container_add(GTK_CONTAINER(alignment), title_label);
+/*******************************************/
+
+/*******************************************/
+ //set artist label
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 5, 0, 50, 30);
+ gtk_box_pack_start(GTK_BOX(mainvbox), alignment, TRUE, TRUE, 0);
+ artist_label = gtk_label_new("");
+ font_desc = pango_font_description_from_string("Times 12");
+ gtk_widget_modify_font(artist_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_misc_set_alignment(GTK_MISC(artist_label), 0, 0.5);
+ gtk_label_set_width_chars(GTK_LABEL(artist_label), 40);
+ gtk_label_set_ellipsize(GTK_LABEL(artist_label), PANGO_ELLIPSIZE_END);
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(artist_label), GTK_STATE_NORMAL, &color);
+ openmoko_set_tag_info();
+ gtk_container_add(GTK_CONTAINER(alignment), artist_label);
+/*******************************************/
+
+/*******************************************/
+ //set up_hbox to show track number and time
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 20, 0, 50, 30);
+ gtk_box_pack_start(GTK_BOX(mainvbox), alignment, TRUE, TRUE, 0);
+ up_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(alignment), up_hbox);
+
+ //set song image
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 2, 0, 10, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ image_path = g_build_path("/", images_dir, "icon-musicplayer-song.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment), image);
+
+ //set track number
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 10, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ track_number_label = gtk_label_new("");
+ openmoko_set_track_number();
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(track_number_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times 13");
+ gtk_widget_modify_font(track_number_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_container_add(GTK_CONTAINER(alignment), track_number_label);
+
+ //set separator
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 6, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ GtkWidget* separate_label = gtk_label_new("/");
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(separate_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times 13");
+ gtk_widget_modify_font(separate_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_container_add(GTK_CONTAINER(alignment), separate_label);
+
+ //set total number label
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 6, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ total_number_label = gtk_label_new("");
+ openmoko_set_total_number();
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(total_number_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times 13");
+ gtk_widget_modify_font(total_number_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_container_add(GTK_CONTAINER(alignment), total_number_label);
+
+ //set time image
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 2, 0, 120, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ image_path = g_build_path("/", images_dir, "icon-musicplayer-time.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment), image);
+
+ //set elapse time
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 10, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ elapse_time_label = gtk_label_new("0:00");
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(elapse_time_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times 13");
+ gtk_widget_modify_font(elapse_time_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_container_add(GTK_CONTAINER(alignment), elapse_time_label);
+
+ //set separator
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 6, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ separate_label = gtk_label_new("/");
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(separate_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times 13");
+ gtk_widget_modify_font(separate_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_container_add(GTK_CONTAINER(alignment), separate_label);
+
+ //set total number label
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 6, 0);
+ gtk_box_pack_start(GTK_BOX(up_hbox), alignment, TRUE, TRUE, 0);
+ total_time_label = gtk_label_new("");
+ openmoko_set_total_time();
+ gdk_color_parse("black", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(total_time_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times 13");
+ gtk_widget_modify_font(total_time_label, font_desc);
+ pango_font_description_free(font_desc);
+ gtk_container_add(GTK_CONTAINER(alignment), total_time_label);
+/*******************************************/
+
+/*******************************************/
+ //set time hscale
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 5, 0, 48, 0);
+ gtk_box_pack_start(GTK_BOX(mainvbox), alignment, TRUE, TRUE, 0);
+ time_hscale = gtk_hscale_new_with_range(0.0, 338.0, 1.0);
+ gtk_scale_set_draw_value(GTK_SCALE(time_hscale), FALSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(time_hscale), GTK_CAN_FOCUS);
+ gtk_widget_set_size_request(GTK_WIDGET(time_hscale), 338, 35);
+ gtk_range_set_value(GTK_RANGE(time_hscale), 0.0);
+ g_signal_connect(G_OBJECT(time_hscale), "change_value",
+ G_CALLBACK(openmoko_press_on_slider_cb), NULL);
+ gtk_container_add(GTK_CONTAINER(alignment), time_hscale);
+/*******************************************/
+
+/*******************************************/
+ //set middle_hbox
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 42, 0, 70, 0);
+ gtk_box_pack_start(GTK_BOX(mainvbox), alignment, TRUE, TRUE, 0);
+ middle_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(alignment), middle_hbox);
+
+ //set vis
+ alignment_eq_pos1 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos1), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos1, TRUE, TRUE, 0);
+ image_path = g_build_path("/", images_dir, "ind-music-eq-01.png", NULL);
+ image_eq_pos1 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos1), image_eq_pos1);
+
+ alignment_eq_pos2 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos2), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos2, TRUE, TRUE, 0);
+ image_eq_pos2 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos2), image_eq_pos2);
+
+ alignment_eq_pos3 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos3), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos3, TRUE, TRUE, 0);
+ image_eq_pos3 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos3), image_eq_pos3);
+
+ alignment_eq_pos4 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos4), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos4, TRUE, TRUE, 0);
+ image_eq_pos4 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos4), image_eq_pos4);
+
+ alignment_eq_pos5 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos5), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos5, TRUE, TRUE, 0);
+ image_eq_pos5 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos5), image_eq_pos5);
+
+ alignment_eq_pos6 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos6), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos6, TRUE, TRUE, 0);
+ image_eq_pos6 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos6), image_eq_pos6);
+
+ alignment_eq_pos7 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos7), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos7, TRUE, TRUE, 0);
+ image_eq_pos7 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos7), image_eq_pos7);
+
+ alignment_eq_pos8 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos8), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos8, TRUE, TRUE, 0);
+ image_eq_pos8 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos8), image_eq_pos8);
+
+ alignment_eq_pos9 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos9), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos9, TRUE, TRUE, 0);
+ image_eq_pos9 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos9), image_eq_pos9);
+
+ alignment_eq_pos10 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos10), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos10, TRUE, TRUE, 0);
+ image_eq_pos10 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos10), image_eq_pos10);
+
+ alignment_eq_pos11 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos11), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos11, TRUE, TRUE, 0);
+ image_eq_pos11 = gtk_image_new_from_file(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos11), image_eq_pos11);
+
+ alignment_eq_pos12 = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_eq_pos12), 0, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), alignment_eq_pos12, TRUE, TRUE, 0);
+ image_eq_pos12 = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment_eq_pos12), image_eq_pos12);
+
+ //set middle right vbox
+ GtkWidget* middle_right_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(middle_hbox), middle_right_vbox, TRUE, TRUE, 0);
+
+ //set volume hbox
+ GtkWidget* volume_box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(middle_right_vbox), volume_box, TRUE, TRUE, 0);
+
+ //set volume image
+ vol_img_alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(vol_img_alignment), 0, 0, 30, 0);
+ gtk_box_pack_start(GTK_BOX(volume_box), vol_img_alignment, TRUE, TRUE, 0);
+ image_path = g_build_path("/", images_dir, "ind-music-volume-00.png", NULL);
+ vol_image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ gtk_container_add(GTK_CONTAINER(vol_img_alignment), vol_image);
+
+ //set volume label
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 2, 0, 6, 0);
+ gtk_box_pack_start(GTK_BOX(volume_box), alignment, TRUE, TRUE, 0);
+ volume_label = gtk_label_new("");
+ gdk_color_parse("darkorange", &color);
+ gtk_widget_modify_fg(GTK_WIDGET(volume_label), GTK_STATE_NORMAL, &color);
+ font_desc = pango_font_description_from_string("Times Bold 13");
+ gtk_widget_modify_font(volume_label, font_desc);
+ pango_font_description_free(font_desc);
+ openmoko_read_volume_from_start();
+ gtk_container_add(GTK_CONTAINER(alignment), volume_label);
+
+ //set balance image
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 10, 0, 30, 0);
+ gtk_box_pack_start(GTK_BOX(middle_right_vbox), alignment, TRUE, TRUE, 0);
+ image_path = g_build_path("/", images_dir, "ind-music-pan-0.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ gtk_container_add(GTK_CONTAINER(alignment), image);
+/*******************************************/
+
+/*******************************************/
+ //set down hbox
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 30, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(mainvbox), alignment, TRUE, TRUE, 0);
+ down_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(alignment), down_hbox);
+
+ //set shuffle toggle button
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 120, 0);
+ gtk_box_pack_start(GTK_BOX(down_hbox), alignment, TRUE, TRUE, 0);
+ shuffle_button = gtk_toggle_button_new();
+ gtk_widget_set_size_request(GTK_WIDGET(shuffle_button), 63, 62);
+ gtk_widget_set_name(GTK_WIDGET(shuffle_button), "mokofingerbutton-white");
+ openmoko_set_shuffle_state();
+ g_signal_connect(G_OBJECT(shuffle_button), "clicked",
+ G_CALLBACK(openmoko_shuffle_button_callback), NULL);
+ GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(shuffle_button), GTK_CAN_FOCUS);
+ gtk_container_add(GTK_CONTAINER(alignment), shuffle_button);
+ image_path = g_build_path("/", images_dir, "ico-shuffle.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ btn_set_center_image(GTK_BUTTON(shuffle_button), GTK_IMAGE(image));
+
+ //set repeat toggle button
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 10, 0);
+ gtk_box_pack_start(GTK_BOX(down_hbox), alignment, TRUE, TRUE, 0);
+ repeat_button = gtk_toggle_button_new();
+ gtk_widget_set_size_request(GTK_WIDGET(repeat_button), 63, 62);
+ gtk_widget_set_name(GTK_WIDGET(repeat_button), "mokofingerbutton-white");
+ openmoko_set_repeat_state();
+ g_signal_connect(G_OBJECT(repeat_button), "clicked",
+ G_CALLBACK(openmoko_repeat_button_callback), NULL);
+ GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(repeat_button), GTK_CAN_FOCUS);
+ gtk_container_add(GTK_CONTAINER(alignment), repeat_button);
+ image_path = g_build_path("/", images_dir, "ico-repeat.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ btn_set_center_image(GTK_BUTTON(repeat_button), GTK_IMAGE(image));
+
+ //set playlist button
+ alignment = gtk_alignment_new(0, 0, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 10, 0);
+ gtk_box_pack_start(GTK_BOX(down_hbox), alignment, TRUE, TRUE, 0);
+ playlist_button = gtk_button_new();
+ gtk_widget_set_size_request(GTK_WIDGET(playlist_button), 63, 62);
+ gtk_widget_set_name(GTK_WIDGET(playlist_button), "mokofingerbutton-white");
+ GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(playlist_button), GTK_CAN_FOCUS);
+ gtk_container_add(GTK_CONTAINER(alignment), playlist_button);
+ g_signal_connect(G_OBJECT(playlist_button), "clicked",
+ G_CALLBACK(openmoko_playlist_button_callback), NULL);
+ image_path = g_build_path("/", images_dir, "ico-list.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ btn_set_center_image(GTK_BUTTON(playlist_button), GTK_IMAGE(image));
+/*******************************************/
+
+ gtk_widget_show_all(GTK_WIDGET(window));
+
+ gtk_widget_show(GTK_WIDGET(moko_finger_window_get_wheel(window)));
+
+ g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
+ "press_left_up",
+ G_CALLBACK(openmoko_wheel_press_left_up_cb),
+ NULL);
+ g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
+ "long_press_left_up",
+ G_CALLBACK(openmoko_wheel_press_left_up_cb),
+ NULL);
+ g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
+ "press_right_down",
+ G_CALLBACK(openmoko_wheel_press_right_down_cb),
+ NULL);
+ g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
+ "long_press_right_down",
+ G_CALLBACK(openmoko_wheel_press_right_down_cb),
+ NULL);
+ g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
+ "press_bottom",
+ G_CALLBACK(openmoko_main_quit),
+ NULL);
+
+ if(!tools)
+ {
+ tools = moko_finger_window_get_toolbox(window);
+
+ prev_button = moko_finger_tool_box_add_button_without_label(tools);
+ image_path = g_build_path("/", images_dir, "ico-previoustrack.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ moko_pixmap_button_set_finger_toolbox_btn_center_image(prev_button, image);
+ g_signal_connect(G_OBJECT(prev_button), "clicked",
+ G_CALLBACK(openmoko_playlist_prev), NULL);
+
+ play_pause_button = moko_finger_tool_box_add_button_without_label(tools);
+ image_path = g_build_path("/", images_dir, "ico-play.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ moko_pixmap_button_set_finger_toolbox_btn_center_image(play_pause_button, image);
+ g_signal_connect(G_OBJECT(play_pause_button), "clicked",
+ G_CALLBACK(openmoko_play_pause_button_pushed), NULL);
+
+ next_button = moko_finger_tool_box_add_button_without_label(tools);
+ image_path = g_build_path("/", images_dir, "ico-nexttrack.png", NULL);
+ image = gtk_image_new_from_file(image_path);
+ g_free(image_path);
+ moko_pixmap_button_set_finger_toolbox_btn_center_image(next_button, image);
+ g_signal_connect(G_OBJECT(next_button), "clicked",
+ G_CALLBACK(openmoko_playlist_next), NULL);
+
+ gtk_widget_show(GTK_WIDGET(tools));
+ }
+
+ //added by lijiang
+ DBusConnection *bus;
+ DBusError error;
+
+ dbus_error_init(&error);
+ bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
+ if(!bus)
+ {
+ g_print("Failed to connect to the D-Bus daemon: %s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ dbus_connection_setup_with_g_main(bus, NULL);
+ dbus_bus_add_match(bus, "type='signal',interface='com.burtonini.dbus.Signal'", &error);
+ dbus_connection_add_filter(bus, signal_filter, mainwin, NULL);
+ //added end
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mainwin.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,201 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef MAINWIN_H
+#define MAINWIN_H
+
+#include <gtk/gtk.h>
+
+#include "number.h"
+#include "pbutton.h"
+#include "playstatus.h"
+#include "tbutton.h"
+#include "textbox.h"
+#include "svis.h"
+#include "vis.h"
+
+/* yes, main window size is fixed */
+#define MAINWIN_WIDTH (gint)275
+#define MAINWIN_HEIGHT (gint)116
+#define MAINWIN_TITLEBAR_HEIGHT (gint)14
+#define MAINWIN_SHADED_HEIGHT MAINWIN_TITLEBAR_HEIGHT
+
+#define MAINWIN_UPDATE_INTERVAL 10
+
+#define MAINWIN_DEFAULT_POS_X 20
+#define MAINWIN_DEFAULT_POS_Y 20
+
+#define MAINWIN_DEFAULT_FONT "Sans Bold 9"
+
+
+typedef enum {
+ TIMER_ELAPSED,
+ TIMER_REMAINING
+} TimerMode;
+
+enum {
+ MAINWIN_GENERAL_ABOUT,
+
+ MAINWIN_GENERAL_PLAYFILE,
+ MAINWIN_GENERAL_PLAYDIRECTORY,
+ MAINWIN_GENERAL_PLAYLOCATION,
+
+ MAINWIN_GENERAL_FILEINFO,
+ MAINWIN_GENERAL_PREFS,
+
+ MAINWIN_GENERAL_SHOWMWIN,
+ MAINWIN_GENERAL_SHOWPLWIN,
+
+ MAINWIN_GENERAL_FOCUSMWIN,
+ MAINWIN_GENERAL_FOCUSPLWIN,
+
+ MAINWIN_GENERAL_SHOWEQWIN,
+ MAINWIN_GENERAL_PLAYCD,
+ MAINWIN_GENERAL_EXIT,
+
+ MAINWIN_GENERAL_ADDCD,
+
+ MAINWIN_GENERAL_PREV,
+ MAINWIN_GENERAL_PLAY,
+ MAINWIN_GENERAL_PAUSE,
+ MAINWIN_GENERAL_STOP,
+ MAINWIN_GENERAL_NEXT,
+ MAINWIN_GENERAL_STOPFADE,
+ MAINWIN_GENERAL_BACK5SEC,
+ MAINWIN_GENERAL_FWD5SEC,
+ MAINWIN_GENERAL_START,
+ MAINWIN_GENERAL_BACK10,
+ MAINWIN_GENERAL_FWD10,
+ MAINWIN_GENERAL_JTT,
+ MAINWIN_GENERAL_JTF,
+ MAINWIN_GENERAL_QUEUE,
+ MAINWIN_GENERAL_CQUEUE,
+ MAINWIN_GENERAL_VOLUP,
+ MAINWIN_GENERAL_VOLDOWN
+};
+
+extern GtkWidget *mainwin;
+extern GdkGC *mainwin_gc;
+
+extern GtkAccelGroup *mainwin_accel;
+
+extern gboolean mainwin_moving;
+extern gboolean mainwin_focus;
+
+extern GtkWidget *mainwin_jtf;
+
+extern GtkItemFactory *mainwin_general_menu;
+extern GtkItemFactory *mainwin_vis_menu;
+extern GtkItemFactory *mainwin_play_menu, *mainwin_view_menu;
+
+extern TextBox *mainwin_info;
+extern TButton *mainwin_shuffle, *mainwin_repeat, *mainwin_eq, *mainwin_pl;
+
+extern Vis *active_vis;
+extern Vis *mainwin_vis;
+extern SVis *mainwin_svis;
+
+extern PlayStatus *mainwin_playstatus;
+
+
+void mainwin_create(void);
+void read_volume(gint when);
+void play_medium(void);
+void add_medium(void);
+
+void draw_main_window(gboolean);
+
+void mainwin_quit_cb(void);
+void mainwin_lock_info_text(const gchar * text);
+void mainwin_release_info_text(void);
+void mainwin_play_pushed(void);
+void mainwin_stop_pushed(void);
+void mainwin_eject_pushed(void);
+
+void mainwin_set_back_pixmap(void);
+
+void mainwin_adjust_volume_motion(gint v);
+void mainwin_adjust_volume_release(void);
+void mainwin_adjust_balance_motion(gint b);
+void mainwin_adjust_balance_release(void);
+void mainwin_set_volume_slider(gint percent);
+void mainwin_set_balance_slider(gint percent);
+
+void mainwin_vis_set_type(VisType mode);
+
+void mainwin_set_info_text(void);
+void mainwin_set_song_info(gint rate, gint freq, gint nch);
+void mainwin_clear_song_info(void);
+
+void mainwin_set_always_on_top(gboolean always);
+void mainwin_set_volume_diff(gint diff);
+void mainwin_set_balance_diff(gint diff);
+
+void mainwin_show(gboolean);
+void mainwin_real_show(void);
+void mainwin_real_hide(void);
+void mainwin_move(gint x, gint y);
+void mainwin_shuffle_pushed(gboolean toggled);
+void mainwin_repeat_pushed(gboolean toggled);
+void mainwin_disable_seekbar(void);
+void mainwin_set_title(const gchar * text);
+void mainwin_run_dirbrowser(void);
+void mainwin_show_add_url_window(void);
+void mainwin_minimize_cb(void);
+void mainwin_general_menu_callback(gpointer cb_data,
+ guint action,
+ GtkWidget * widget);
+
+void mainwin_attach_idle_func(void);
+void mainwin_drag_data_received(GtkWidget * widget,
+ GdkDragContext * context,
+ gint x,
+ gint y,
+ GtkSelectionData * selection_data,
+ guint info,
+ guint time,
+ gpointer user_data);
+
+void mainwin_setup_menus(void);
+
+void mainwin_jump_to_file(void);
+void mainwin_jump_to_time(void);
+
+void mainwin_ewmh_activate(void);
+
+/* FIXME: placed here for now */
+void playback_get_sample_params(gint * bitrate,
+ gint * frequency,
+ gint * numchannels);
+
+//added by lijiang
+void openmoko_set_title();
+void openmoko_set_artist(gchar* artist);
+void openmoko_set_track_number();
+void openmoko_set_total_number();
+void openmoko_set_elapse_time(gint elapse_time);
+void openmoko_set_total_time();
+void openmoko_update_vis_data(gint pos, gint h);
+void openmoko_update_ogg_title(const gchar* title);
+void openmoko_update_ogg_artist(const gchar* artist);
+//added end
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,186 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "menurow.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "main.h"
+#include "menurow.h"
+#include "widget.h"
+
+void
+menurow_draw(Widget * widget)
+{
+ MenuRow *mr = MENU_ROW(widget);
+
+ GdkPixmap *obj = mr->mr_widget.parent;
+
+ if (mr->mr_selected == MENUROW_NONE) {
+ if (cfg.always_show_cb || mr->mr_bpushed)
+ skin_draw_pixmap(bmp_active_skin, obj,
+ mr->mr_widget.gc,
+ mr->mr_skin_index,
+ mr->mr_nx, mr->mr_ny,
+ mr->mr_widget.x, mr->mr_widget.y, 8, 43);
+ else
+ skin_draw_pixmap(bmp_active_skin, obj,
+ mr->mr_widget.gc,
+ mr->mr_skin_index,
+ mr->mr_nx + 8, mr->mr_ny,
+ mr->mr_widget.x, mr->mr_widget.y, 8, 43);
+ }
+ else {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ mr->mr_widget.gc,
+ mr->mr_skin_index,
+ mr->mr_sx + ((mr->mr_selected - 1) * 8),
+ mr->mr_sy, mr->mr_widget.x, mr->mr_widget.y, 8, 43);
+ }
+ if (cfg.always_show_cb || mr->mr_bpushed) {
+ if (mr->mr_always_selected)
+ skin_draw_pixmap(bmp_active_skin, obj,
+ mr->mr_widget.gc,
+ mr->mr_skin_index,
+ mr->mr_sx + 8, mr->mr_sy + 10,
+ mr->mr_widget.x, mr->mr_widget.y + 10, 8, 8);
+ if (mr->mr_doublesize_selected)
+ skin_draw_pixmap(bmp_active_skin, obj,
+ mr->mr_widget.gc,
+ mr->mr_skin_index,
+ mr->mr_sx + 24, mr->mr_sy + 26,
+ mr->mr_widget.x, mr->mr_widget.y + 26, 8, 8);
+ }
+
+}
+
+MenuRowItem
+menurow_find_selected(MenuRow * mr, gint x, gint y)
+{
+ MenuRowItem ret = MENUROW_NONE;
+
+ x -= mr->mr_widget.x;
+ y -= mr->mr_widget.y;
+ if (x > 0 && x < 8) {
+ if (y >= 0 && y <= 10)
+ ret = MENUROW_OPTIONS;
+ if (y >= 10 && y <= 17)
+ ret = MENUROW_ALWAYS;
+ if (y >= 18 && y <= 25)
+ ret = MENUROW_FILEINFOBOX;
+ if (y >= 26 && y <= 33)
+ ret = MENUROW_DOUBLESIZE;
+ if (y >= 34 && y <= 42)
+ ret = MENUROW_VISUALIZATION;
+ }
+ return ret;
+}
+
+void
+menurow_button_press(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer data)
+{
+ MenuRow *mr = MENU_ROW(data);
+
+ if (event->button != 1)
+ return;
+
+ if (widget_contains(&mr->mr_widget, event->x, event->y)) {
+ mr->mr_bpushed = TRUE;
+ mr->mr_selected = menurow_find_selected(mr, event->x, event->y);
+
+ widget_draw(WIDGET(mr));
+
+ if (mr->mr_change_callback)
+ mr->mr_change_callback(mr->mr_selected);
+ }
+}
+
+void
+menurow_motion(GtkWidget * widget,
+ GdkEventMotion * event,
+ gpointer data)
+{
+ MenuRow *mr = MENU_ROW(data);
+
+ if (mr->mr_bpushed) {
+ mr->mr_selected = menurow_find_selected(mr, event->x, event->y);
+
+ widget_draw(WIDGET(mr));
+
+ if (mr->mr_change_callback)
+ mr->mr_change_callback(mr->mr_selected);
+ }
+}
+
+void
+menurow_button_release(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer data)
+{
+ MenuRow *mr = MENU_ROW(data);
+
+ if (mr->mr_bpushed) {
+ mr->mr_bpushed = FALSE;
+
+ if (mr->mr_selected == MENUROW_ALWAYS)
+ mr->mr_always_selected = !mr->mr_always_selected;
+
+ if (mr->mr_selected == MENUROW_DOUBLESIZE)
+ mr->mr_doublesize_selected = !mr->mr_doublesize_selected;
+
+ if (mr->mr_selected != -1 && mr->mr_release_callback)
+ mr->mr_release_callback(mr->mr_selected);
+
+ mr->mr_selected = MENUROW_NONE;
+
+ widget_draw(WIDGET(mr));
+ }
+}
+
+MenuRow *
+create_menurow(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint nx, gint ny, gint sx, gint sy,
+ void (*ccb) (MenuRowItem),
+ void (*rcb) (MenuRowItem), SkinPixmapId si)
+{
+ MenuRow *mr;
+
+ mr = g_new0(MenuRow, 1);
+ widget_init(&mr->mr_widget, parent, gc, x, y, 8, 43, 1);
+ mr->mr_widget.draw = menurow_draw;
+ mr->mr_widget.button_press_cb = menurow_button_press;
+ mr->mr_widget.motion_cb = menurow_motion;
+ mr->mr_widget.button_release_cb = menurow_button_release;
+ mr->mr_nx = nx;
+ mr->mr_ny = ny;
+ mr->mr_sx = sx;
+ mr->mr_sy = sy;
+ mr->mr_selected = MENUROW_NONE;
+ mr->mr_change_callback = ccb;
+ mr->mr_release_callback = rcb;
+ mr->mr_skin_index = si;
+
+ widget_list_add(wlist, WIDGET(mr));
+ return mr;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/menurow.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,56 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef MENUROW_H
+#define MENUROW_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+#include "widget.h"
+
+typedef enum {
+ MENUROW_NONE, MENUROW_OPTIONS, MENUROW_ALWAYS, MENUROW_FILEINFOBOX,
+ MENUROW_DOUBLESIZE, MENUROW_VISUALIZATION
+} MenuRowItem;
+
+#define MENU_ROW(x) ((MenuRow *)(x))
+struct _MenuRow {
+ Widget mr_widget;
+ gint mr_nx, mr_ny;
+ gint mr_sx, mr_sy;
+ MenuRowItem mr_selected;
+ gboolean mr_bpushed;
+ gboolean mr_always_selected;
+ gboolean mr_doublesize_selected;
+ void (*mr_change_callback) (MenuRowItem);
+ void (*mr_release_callback) (MenuRowItem);
+ SkinPixmapId mr_skin_index;
+};
+
+typedef struct _MenuRow MenuRow;
+
+MenuRow *create_menurow(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint nx, gint ny, gint sx, gint sy,
+ void (*ccb) (MenuRowItem),
+ void (*rcb) (MenuRowItem), SkinPixmapId si);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mkdtemp.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mkdtemp.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/mkdtemp.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 1987, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * This has been derived from the implementation in the FreeBSD libc.
+ *
+ * 2000-12-28 Håvard Kvålen <havardk at xmms.org>:
+ * Stripped down to only mkdtemp() and made more portable
+ *
+ */
+
+#ifndef HAVE_MKDTEMP
+
+#if 0
+static const char rcsid[] =
+ "$FreeBSD: /c/ncvs/src/lib/libc/stdio/mktemp.c,v 1.20 2000/11/10 23:27:55 kris Exp $";
+#endif
+
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <glib.h>
+
+static const char padchar[] =
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+char *
+mkdtemp(char *path)
+{
+ register char *start, *trv, *suffp;
+ char *pad;
+ struct stat sbuf;
+ int rval;
+
+ for (trv = path; *trv; ++trv);
+ suffp = trv;
+ --trv;
+ if (trv < path) {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ /* Fill space with random characters */
+ /*
+ * I hope this is random enough. The orginal implementation
+ * uses arc4random(3) which is not available everywhere.
+ */
+ while (*trv == 'X') {
+ int randv = g_random_int_range(0, sizeof(padchar) - 1);
+ *trv-- = padchar[randv];
+ }
+ start = trv + 1;
+
+ /*
+ * check the target directory.
+ */
+ for (;; --trv) {
+ if (trv <= path)
+ break;
+ if (*trv == '/') {
+ *trv = '\0';
+ rval = stat(path, &sbuf);
+ *trv = '/';
+ if (rval != 0)
+ return NULL;
+ if (!S_ISDIR(sbuf.st_mode)) {
+ errno = ENOTDIR;
+ return NULL;
+ }
+ break;
+ }
+ }
+
+ for (;;) {
+ if (mkdir(path, 0700) == 0)
+ return path;
+ if (errno != EEXIST)
+ return NULL;
+
+ /* If we have a collision, cycle through the space of filenames */
+ for (trv = start;;) {
+ if (*trv == '\0' || trv == suffp)
+ return NULL;
+ pad = strchr(padchar, *trv);
+ if (pad == NULL || !*++pad)
+ *trv++ = padchar[0];
+ else {
+ *trv++ = *pad;
+ break;
+ }
+ }
+ }
+ /*NOTREACHED*/}
+
+#endif /* HAVE_MKDTEMP */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,90 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "monostereo.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+#include "widget.h"
+
+void
+monostereo_draw(Widget * widget)
+{
+ MonoStereo *ms = (MonoStereo *) widget;
+ GdkPixmap *obj;
+
+ obj = ms->ms_widget.parent;
+
+ switch (ms->ms_num_channels) {
+ case 0:
+ skin_draw_pixmap(bmp_active_skin, obj, ms->ms_widget.gc,
+ ms->ms_skin_index, 29, 12,
+ ms->ms_widget.x, ms->ms_widget.y, 27, 12);
+ skin_draw_pixmap(bmp_active_skin, obj, ms->ms_widget.gc,
+ ms->ms_skin_index, 0, 12,
+ ms->ms_widget.x + 27, ms->ms_widget.y, 29, 12);
+ break;
+ case 1:
+ skin_draw_pixmap(bmp_active_skin, obj, ms->ms_widget.gc,
+ ms->ms_skin_index, 29, 0,
+ ms->ms_widget.x, ms->ms_widget.y, 27, 12);
+ skin_draw_pixmap(bmp_active_skin, obj, ms->ms_widget.gc,
+ ms->ms_skin_index, 0, 12,
+ ms->ms_widget.x + 27, ms->ms_widget.y, 29, 12);
+ break;
+ case 2:
+ skin_draw_pixmap(bmp_active_skin, obj, ms->ms_widget.gc,
+ ms->ms_skin_index, 29, 12,
+ ms->ms_widget.x, ms->ms_widget.y, 27, 12);
+ skin_draw_pixmap(bmp_active_skin, obj, ms->ms_widget.gc,
+ ms->ms_skin_index, 0, 0,
+ ms->ms_widget.x + 27, ms->ms_widget.y, 29, 12);
+ break;
+ }
+}
+
+void
+monostereo_set_num_channels(MonoStereo * ms,
+ gint nch)
+{
+ ms->ms_num_channels = nch;
+ widget_draw(WIDGET(ms));
+}
+
+MonoStereo *
+create_monostereo(GList ** wlist,
+ GdkPixmap * parent,
+ GdkGC * gc,
+ gint x, gint y,
+ SkinPixmapId si)
+{
+ MonoStereo *ms;
+
+ ms = g_new0(MonoStereo, 1);
+ widget_init(&ms->ms_widget, parent, gc, x, y, 56, 12, 1);
+ ms->ms_widget.draw = monostereo_draw;
+ ms->ms_skin_index = si;
+
+ widget_list_add(wlist, WIDGET(ms));
+ return ms;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/monostereo.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef MONOSTEREO_H
+#define MONOSTEREO_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+#include "widget.h"
+
+#define MONO_STEREO(x) ((MonoStereo *)(x))
+struct _MonoStereo {
+ Widget ms_widget;
+ gint ms_num_channels;
+ SkinPixmapId ms_skin_index;
+};
+
+typedef struct _MonoStereo MonoStereo;
+
+MonoStereo *create_monostereo(GList ** wlist, GdkPixmap * parent,
+ GdkGC * gc, gint x, gint y, SkinPixmapId si);
+void monostereo_set_num_channels(MonoStereo * ms, gint nch);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,75 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "number.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+
+void
+number_set_number(Number * nu,
+ gint number)
+{
+ if (number == nu->nu_number)
+ return;
+
+ nu->nu_number = number;
+ widget_draw(WIDGET(nu));
+}
+
+void
+number_draw(Widget * w)
+{
+ Number *nu = NUMBER(w);
+ GdkPixmap *obj;
+
+ obj = nu->nu_widget.parent;
+
+ if (nu->nu_number <= 11)
+ skin_draw_pixmap(bmp_active_skin, obj, nu->nu_widget.gc,
+ nu->nu_skin_index, nu->nu_number * 9, 0,
+ nu->nu_widget.x, nu->nu_widget.y, 9, 13);
+ else
+ skin_draw_pixmap(bmp_active_skin, obj, nu->nu_widget.gc,
+ nu->nu_skin_index, 90, 0, nu->nu_widget.x,
+ nu->nu_widget.y, 9, 13);
+}
+
+Number *
+create_number(GList ** wlist,
+ GdkPixmap * parent,
+ GdkGC * gc,
+ gint x, gint y,
+ SkinPixmapId si)
+{
+ Number *nu;
+
+ nu = g_new0(Number, 1);
+ widget_init(&nu->nu_widget, parent, gc, x, y, 9, 13, 1);
+ nu->nu_widget.draw = number_draw;
+ nu->nu_number = 10;
+ nu->nu_skin_index = si;
+
+ widget_list_add(wlist, WIDGET(nu));
+ return nu;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/number.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef NUMBER_H
+#define NUMBER_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+#include "skin.h"
+
+#define NUMBER(x) ((Number *)(x))
+struct _Number {
+ Widget nu_widget;
+ gint nu_number;
+ SkinPixmapId nu_skin_index;
+};
+
+typedef struct _Number Number;
+
+void number_set_number(Number * nu, gint number);
+Number *create_number(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, SkinPixmapId si);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,236 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "output.h"
+#include "iir.h"
+#include "main.h"
+#include "input.h"
+
+#include "playlist.h"
+#include "libbeep/util.h"
+
+OutputPluginData op_data = {
+ NULL,
+ NULL
+};
+
+OutputPlugin *
+get_current_output_plugin(void)
+{
+ return op_data.current_output_plugin;
+}
+
+void
+set_current_output_plugin(gint i)
+{
+#if 0
+ gint time;
+ gint pos;
+ gboolean playing;
+#endif
+
+ GList *node = g_list_nth(op_data.output_list, i);
+ if (!node) {
+ op_data.current_output_plugin = NULL;
+ return;
+ }
+
+ op_data.current_output_plugin = node->data;
+
+
+#if 0
+ playing = bmp_playback_get_playing();
+ if (playing) {
+
+ /* FIXME: we do all on our own here */
+
+ guint min = 0, sec = 0, params, time, pos;
+ gchar timestr[10];
+
+ bmp_playback_pause();
+ pos = get_playlist_position();
+ time = bmp_playback_get_time() / 1000;
+ g_snprintf(timestr, sizeof(timestr), "%u:%2.2u",
+ time / 60, time % 60);
+
+ params = sscanf(timestr, "%u:%u", &min, &sec);
+ if (params == 2)
+ time = (min * 60) + sec;
+ else if (params == 1)
+ time = min;
+ else
+ return;
+
+ bmp_playback_stop();
+ playlist_set_position(pos);
+ bmp_playback_play_file(playlist_get_filename(pos));
+
+ while (!bmp_playback_get_playing())
+ g_message("waiting...");
+
+ if (playlist_get_current_length() > -1 &&
+ time <= (playlist_get_current_length() / 1000)) {
+ /* Some time for things to cool down and heat up */
+ g_usleep(1000000);
+ bmp_playback_seek(time);
+ }
+ }
+#endif
+}
+
+GList *
+get_output_list(void)
+{
+ return op_data.output_list;
+}
+
+void
+output_about(gint i)
+{
+ OutputPlugin *out = g_list_nth(op_data.output_list, i)->data;
+ if (out && out->about)
+ out->about();
+}
+
+void
+output_configure(gint i)
+{
+ OutputPlugin *out = g_list_nth(op_data.output_list, i)->data;
+ if (out && out->configure)
+ out->configure();
+}
+
+void
+output_get_volume(gint * l, gint * r)
+{
+ *l = *r = -1;
+
+ if (!op_data.current_output_plugin)
+ return;
+
+ if (!op_data.current_output_plugin->get_volume)
+ return;
+
+ op_data.current_output_plugin->get_volume(l, r);
+}
+
+void
+output_set_volume(gint l, gint r)
+{
+ if (!op_data.current_output_plugin)
+ return;
+
+ if (!op_data.current_output_plugin->set_volume)
+ return;
+
+ op_data.current_output_plugin->set_volume(l, r);
+}
+
+void
+output_set_eq(gboolean active, gfloat pre, gfloat * bands)
+{
+ int i;
+ preamp = 1.0 + 0.0932471 * pre + 0.00279033 * pre * pre;
+ for (i = 0; i < 10; ++i)
+ gain[i] = 0.03 * bands[i] + 0.000999999 * bands[i] * bands[i];
+}
+
+/* this should be in BYTES, NOT gint16s */
+static void
+byteswap(size_t size,
+ gint16 * buf)
+{
+ gint16 *it;
+ size &= ~1; /* must be multiple of 2 */
+ for (it = buf; it < buf + size / 2; ++it)
+ *(guint16 *) it = GUINT16_SWAP_LE_BE(*(guint16 *) it);
+}
+
+static void
+output_to_plugin(gint time,
+ AFormat format,
+ gint n_channels,
+ gint length,
+ gpointer sample,
+ int *going)
+{
+ OutputPlugin *op = get_current_output_plugin();
+
+ /* do vis plugin(s) */
+ input_add_vis_pcm(time, format, n_channels, length, sample);
+
+ while (op->buffer_free() < length) { /* wait output buf */
+ if (going && !*going) /* thread stopped? */
+ return; /* so finish */
+
+ g_usleep(10000); /* else sleep for retry */
+ }
+
+ op->write_audio(sample, length); /* do output */
+}
+
+
+
+/* called by input plugin when data is ready */
+void
+produce_audio(gint time, /* position */
+ AFormat fmt, /* output format */
+ gint nch, /* channels */
+ gint length, /* length of sample */
+ gpointer ptr, /* data */
+ int *going /* 0 when time to stop */
+ )
+{
+#ifndef XMMS_EQ
+
+ static int init = 0;
+ int swapped = 0;
+ int myorder = G_BYTE_ORDER == G_LITTLE_ENDIAN ? FMT_S16_LE : FMT_S16_BE;
+ int caneq = (fmt == FMT_S16_NE || fmt == myorder);
+
+ if (!caneq && cfg.equalizer_active) { /* wrong byte order */
+ byteswap(length, ptr); /* so convert */
+ ++swapped;
+ ++caneq;
+ } /* can eq now, mark swapd */
+ else if (caneq && !cfg.equalizer_active) /* right order but no eq */
+ caneq = 0; /* so don't eq */
+
+ if (caneq) { /* if eq enab */
+ if (!init) { /* if first run */
+ init_iir(); /* then init eq */
+ ++init;
+ }
+
+ iir(&ptr, length); /* do iir */
+
+ if (swapped) /* if was swapped */
+ byteswap(length, ptr); /* swap back for output */
+ }
+
+#endif
+
+ output_to_plugin(time, fmt, nch, length, ptr, going);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/output.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,48 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef OUTPUT_H
+#define OUTPUT_H
+
+#include <glib.h>
+
+#include "plugin.h"
+
+typedef struct _OutputPluginData OutputPluginData;
+
+struct _OutputPluginData {
+ GList *output_list;
+ OutputPlugin *current_output_plugin;
+};
+
+GList *get_output_list(void);
+OutputPlugin *get_current_output_plugin(void);
+void set_current_output_plugin(gint i);
+void output_about(gint i);
+void output_configure(gint i);
+void output_get_volume(gint * l, gint * r);
+void output_set_volume(gint l, gint r);
+void output_set_eq(gboolean, gfloat, gfloat *);
+void produce_audio(gint, AFormat, gint, gint, gpointer, int *);
+
+extern OutputPluginData op_data;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,189 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "pbutton.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+#include "widget.h"
+
+void
+pbutton_draw(PButton * button)
+{
+ GdkPixmap *obj;
+
+ if (button->pb_allow_draw) {
+ obj = button->pb_widget.parent;
+
+ if (button->pb_pressed && button->pb_inside) {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ button->pb_widget.gc,
+ button->pb_skin_index2, button->pb_px,
+ button->pb_py, button->pb_widget.x,
+ button->pb_widget.y,
+ button->pb_widget.width,
+ button->pb_widget.height);
+ }
+ else {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ button->pb_widget.gc,
+ button->pb_skin_index1,
+ button->pb_nx, button->pb_ny,
+ button->pb_widget.x, button->pb_widget.y,
+ button->pb_widget.width,
+ button->pb_widget.height);
+ }
+ }
+}
+
+void
+pbutton_button_press_cb(GtkWidget * widget,
+ GdkEventButton * event,
+ PButton * button)
+{
+ if (event->button != 1)
+ return;
+
+ if (widget_contains(&button->pb_widget, event->x, event->y)) {
+ button->pb_pressed = 1;
+ button->pb_inside = 1;
+ widget_draw(WIDGET(button));
+ }
+}
+
+void
+pbutton_button_release_cb(GtkWidget * widget,
+ GdkEventButton * event,
+ PButton * button)
+{
+ if (event->button != 1)
+ return;
+ if (button->pb_inside && button->pb_pressed) {
+ button->pb_inside = 0;
+ widget_draw(WIDGET(button));
+ if (button->pb_push_cb)
+ button->pb_push_cb();
+ }
+ if (button->pb_pressed)
+ button->pb_pressed = 0;
+}
+
+void
+pbutton_motion_cb(GtkWidget * widget, GdkEventMotion * event,
+ PButton * button)
+{
+ gint inside;
+
+ if (!button->pb_pressed)
+ return;
+
+ inside = widget_contains(&button->pb_widget, event->x, event->y);
+
+ if (inside != button->pb_inside) {
+ button->pb_inside = inside;
+ widget_draw(WIDGET(button));
+ }
+}
+
+void
+pbutton_set_skin_index(PButton * b, SkinPixmapId si)
+{
+ b->pb_skin_index1 = b->pb_skin_index2 = si;
+}
+
+void
+pbutton_set_skin_index1(PButton * b, SkinPixmapId si)
+{
+ b->pb_skin_index1 = si;
+}
+
+void
+pbutton_set_skin_index2(PButton * b, SkinPixmapId si)
+{
+ b->pb_skin_index2 = si;
+}
+
+void
+pbutton_set_button_data(PButton * b, gint nx, gint ny, gint px, gint py)
+{
+ if (nx > -1)
+ b->pb_nx = nx;
+ if (ny > -1)
+ b->pb_ny = ny;
+ if (px > -1)
+ b->pb_px = px;
+ if (py > -1)
+ b->pb_py = py;
+}
+
+
+PButton *
+create_pbutton_ex(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint nx,
+ gint ny, gint px, gint py, void (*cb) (void),
+ SkinPixmapId si1, SkinPixmapId si2)
+{
+ PButton *b;
+
+ b = g_new0(PButton, 1);
+ widget_init(&b->pb_widget, parent, gc, x, y, w, h, 1);
+ b->pb_widget.button_press_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ pbutton_button_press_cb;
+ b->pb_widget.button_release_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ pbutton_button_release_cb;
+ b->pb_widget.motion_cb =
+ (void (*)(GtkWidget *, GdkEventMotion *, gpointer))
+ pbutton_motion_cb;
+
+ b->pb_widget.draw = (void (*)(Widget *)) pbutton_draw;
+ b->pb_nx = nx;
+ b->pb_ny = ny;
+ b->pb_px = px;
+ b->pb_py = py;
+ b->pb_push_cb = cb;
+ b->pb_skin_index1 = si1;
+ b->pb_skin_index2 = si2;
+ b->pb_allow_draw = TRUE;
+ b->pb_inside = 0;
+ b->pb_pressed = 0;
+ widget_list_add(wlist, WIDGET(b));
+ return b;
+}
+
+PButton *
+create_pbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint nx, gint ny,
+ gint px, gint py, void (*cb) (void), SkinPixmapId si)
+{
+ return create_pbutton_ex(wlist, parent, gc, x, y, w, h, nx, ny, px, py,
+ cb, si, si);
+}
+
+void
+free_pbutton(PButton * b)
+{
+ g_free(b);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pbutton.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,57 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef PBUTTON_H
+#define PBUTTON_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+#include "skin.h"
+
+#define PBUTTON(x) ((PButton *)(x))
+struct _PButton {
+ Widget pb_widget;
+ gint pb_nx, pb_ny;
+ gint pb_px, pb_py;
+ gboolean pb_pressed;
+ gboolean pb_inside;
+ gboolean pb_allow_draw;
+ void (*pb_push_cb) (void);
+ SkinPixmapId pb_skin_index1, pb_skin_index2;
+};
+
+typedef struct _PButton PButton;
+
+PButton *create_pbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint nx, gint ny,
+ gint px, gint py, void (*cb) (void), SkinPixmapId si);
+PButton *create_pbutton_ex(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint nx,
+ gint ny, gint px, gint py, void (*cb) (void),
+ SkinPixmapId si1, SkinPixmapId si2);
+void free_pbutton(PButton * b);
+void pbutton_set_skin_index(PButton * b, SkinPixmapId si);
+void pbutton_set_skin_index1(PButton * b, SkinPixmapId si);
+void pbutton_set_skin_index2(PButton * b, SkinPixmapId si);
+void pbutton_set_button_data(PButton * b, gint nx, gint ny, gint px, gint py);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pixmaps.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pixmaps.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pixmaps.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,204 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (my_pixbuf)
+#endif
+#ifdef __GNUC__
+static const guint8 my_pixbuf[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 my_pixbuf[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (932) */
+ "\0\0\3\274"
+ /* pixdata_type (0x2010002) */
+ "\2\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\204\0\0\0\0\10O\234\351,^\246\356\256S\240\357\333P\241\362\367G\234"
+ "\361\367I\233\356\331/\214\352\240\34\177\342$\206\0\0\0\0\4\0f\314\3"
+ "L\231\350\237b\255\372\3764\231\377\377\2053\231\377\377\3""6\227\371"
+ "\375+\206\343\224\0f\314\3\203\0\0\0\0\16\0f\314\2L\233\352\342J\243"
+ "\373\377/\225\374\377c\251\360\377\230\306\363\377\260\324\372\377\245"
+ "\320\372\377\207\275\363\377S\242\360\377/\225\374\377/\225\373\377\27"
+ "~\344\332\0f\314\2\202\0\0\0\0\177B\222\343\226H\240\370\3776\225\363"
+ "\377\251\316\362\377\345\362\377\377\327\353\377\377\40\177\336\377\12"
+ "p\325\377\254\325\376\377\271\334\377\377\177\270\362\3770\222\363\377"
+ ",\222\370\377\20u\334\207\0\0\0\0\"z\331$]\250\363\376)\217\365\377\243"
+ "\311\360\377\355\366\377\377\345\362\377\377\331\353\377\377\40~\336"
+ "\377\13p\325\377\260\327\376\377\271\334\377\377\261\330\377\377q\257"
+ "\360\377+\220\365\377#\211\357\375\7j\325!P\234\346\263-\220\363\377"
+ "S\236\351\377\366\372\377\377\355\366\377\377\345\362\377\377\334\355"
+ "\377\377\314\345\377\377\300\337\377\377\302\340\377\377\271\334\377"
+ "\377\261\330\377\377\250\323\377\377A\225\351\377'\215\363\377\21x\336"
+ "\241M\232\347\337$\212\360\377\230\302\355\377\366\372\377\377\355\366"
+ "\377\377\345\362\377\377Y\246\363\377+\204\335\377*\203\335\377\247\322"
+ "\377\377\271\334\377\377\261\330\377\377\250\323\377\377f\251\355\377"
+ "%\212\360\377\25{\340\327I\232\351\371\40\206\355\377\307\335\364\377"
+ "\366\372\377\377\355\366\377\377\345\362\377\377\314\344\377\377\20s"
+ "\325\377\0f\314\377\247\322\377\377\271\334\377\377\261\330\377\377\250"
+ "\323\377\377}\270\364\377)\213\355\377\27~\343\3678\220\345\370\35\203"
+ "\352\377\307\335\364\377\366\372\377\377\355\366\377\377\345\362\377"
+ "\377\321\350\377\377\30x\330\377\0f\314\377\247\322\377\377\271\334\377"
+ "\377\261\330\377\377\250\323\377\377}\270\364\377*\212\353\377\25|\341"
+ "\3671\211\340\334\33\201\347\377\227\301\354\377\366\372\377\377\355"
+ "\366\377\377\345\362\377\377\321\350\377\377\30x\330\377\0f\314\377\247"
+ "\322\377\377\271\334\377\377\261\330\377\377\250\323\377\377f\251\354"
+ "\377\40\203\347\377\20v\334\327%\200\332\250\30~\344\377M\230\343\377"
+ "\366\372\377\377\355\366\377\377\345\362\377\377\321\350\377\377\30x"
+ "\330\377\0f\314\377\247\322\377\377\271\334\377\377\261\330\377\377\250"
+ "\323\377\377E\225\345\377\30~\344\377\13q\326\241\37\0j\315!\21w\335"
+ "\375\24z\340\377\242\310\356\377\355\366\377\377\345\362\377\377\315"
+ "\345\377\377\27v\325\377\0f\314\377\224\307\373\377\271\334\377\377\261"
+ "\330\377\377t\261\356\377!\201\341\377\21w\335\375\0j\315!\0\0\0\0\5"
+ "l\323\207\22x\336\377\40\177\335\377\250\314\361\377\345\362\377\377"
+ "g\255\364\3770\213\345\377+\210\345\377@\227\357\377\271\334\377\377"
+ "\203\271\361\377*\205\337\377\22x\336\377\5l\323\207\202\0\0\0\0\16\0"
+ "f\314\2\7m\323\332\17u\332\377\16t\333\377V\234\343\377\226\302\357\377"
+ "\275\332\371\377\267\327\371\377\212\274\357\377S\234\344\377\27y\334"
+ "\377\17u\332\377\7m\323\332\0f\314\2\203\0\0\0\0\3\0f\314\3\5j\321\216"
+ "\13p\326\375\202\14r\330\377\2\20t\330\377\24v\331\377\202\14r\330\377"
+ "\3\13p\326\375\5j\321\216\0f\314\3\206\0\0\0\0\3\7m\323#\4k\321\232\6"
+ "k\321\322\202\6k\322\365\3\6k\321\322\4k\321\232\7m\323#\204\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (playlist_pixbuf)
+#endif
+#ifdef __GNUC__
+static const guint8 playlist_pixbuf[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 playlist_pixbuf[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (261) */
+ "\0\0\1\35"
+ /* pixdata_type (0x2010002) */
+ "\2\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\221\0\0\0\0\2eee\377\0\0\0\0\210eee\377\2eee\0\0\0\0\0\202eee\377\222"
+ "\0\0\0\0\2eee\377\0\0\0\0\210eee\377\2eee\0\0\0\0\0\202eee\377\222\0"
+ "\0\0\0\2eee\377\0\0\0\0\210eee\377\2eee\0\0\0\0\0\202eee\377\222\0\0"
+ "\0\0\2eee\377\0\0\0\0\210eee\377\2eee\0\0\0\0\0\202eee\377\222\0\0\0"
+ "\0\2eee\377\0\0\0\0\210eee\377\2eee\0\0\0\0\0\202eee\377\222\0\0\0\0"
+ "\2eee\377\0\0\0\0\210eee\377\2eee\0\0\0\0\0\202eee\377\222\0\0\0\0\2"
+ "eee\377\0\0\0\0\210eee\377\202\0\0\0\0\202eee\377\222\0\0\0\0\2eee\377"
+ "\0\0\0\0\210eee\377\202\0\0\0\0\202eee\377\1\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (play_pixbuf)
+#endif
+#ifdef __GNUC__
+static const guint8 play_pixbuf[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 play_pixbuf[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (533) */
+ "\0\0\2-"
+ /* pixdata_type (0x2010002) */
+ "\2\1\0\2"
+ /* rowstride (60) */
+ "\0\0\0<"
+ /* width (15) */
+ "\0\0\0\17"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\204\0\0\0\0\202\0\0\0\1\214\0\0\0\0\4\0\0\0\3\0\0\0\31\0\0\0$\0\0\0"
+ "\10\213\0\0\0\0\5\0\0\0\5\0\0\0D\0\0\0\212\0\0\0D\0\0\0\4\212\0\0\0\0"
+ "\6\0\0\0\5\0\0\0M\7\6\6\320\15\15\15\275\2\2\2<\0\0\0\2\211\0\0\0\0\7"
+ "\0\0\0\5\0\0\0M\36\35\35\322KJJ\377!!!\276\1\1\1>\0\0\0\6\210\0\0\0\0"
+ "\10\0\0\0\5\0\0\0M\35\35\35\322nnl\377kji\375&&&\270\4\4\4C\0\0\0\7\207"
+ "\0\0\0\0\11\0\0\0\5\0\0\0M\36\35\35\322vut\377\237\235\234\377{zy\370"
+ "//.\265\4\4\4B\0\0\0\6\206\0\0\0\0\12\0\0\0\5\0\0\0M\36\36\36\322xxv"
+ "\377\254\253\250\377\260\257\255\377\213\212\210\370221\267MMMx\24\24"
+ "\24\24\205\0\0\0\0\12\0\0\0\5\0\0\0M\40\37\37\322}|z\377\261\261\255"
+ "\377\300\277\274\377\240\236\234\377zzy\366\332\332\332\233222\26\205"
+ "\0\0\0\0\12\0\0\0\5\0\0\0M!!\40\322\203\202\200\377\274\272\267\377\253"
+ "\251\247\377\204\203\202\364\313\313\313\242\214\214\214#\22\22\22\0"
+ "\205\0\0\0\0\11\0\0\0\5\0\0\0M##\"\322\217\216\215\377\244\243\241\377"
+ "\205\205\204\365\305\305\305\240\210\210\210+\23\23\23\1\206\0\0\0\0"
+ "\10\0\0\0\5\0\0\0M(('\322qon\377\201\201\200\373\312\312\312\243\211"
+ "\211\211+\23\23\23\2\207\0\0\0\0\7\0\0\0\5\0\0\0M\13\12\12\322YXX\377"
+ "\317\316\316\251\217\217\217\"\21\21\21\1\210\0\0\0\0\6\0\0\0\5\5\5\5"
+ "MEEE\315\304\304\304\246\224\224\224\"\16\16\16\0\211\0\0\0\0\5\0\0\0"
+ "\1""555,\322\322\322f\227\227\227,\13\13\13\0\213\0\0\0\0\3\7\7\7\4\32"
+ "\32\32\10\17\17\17\2\210\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (queue_pixbuf)
+#endif
+#ifdef __GNUC__
+static const guint8 queue_pixbuf[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 queue_pixbuf[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (586) */
+ "\0\0\2b"
+ /* pixdata_type (0x2010002) */
+ "\2\1\0\2"
+ /* rowstride (64) */
+ "\0\0\0@"
+ /* width (16) */
+ "\0\0\0\20"
+ /* height (16) */
+ "\0\0\0\20"
+ /* pixel_data: */
+ "\222\300\300\300\0\4\0f3\377\231\377\314\377f\314f\377\0\0\0\377\204"
+ "\300\300\300\0\2\231f\0\377\0\0\0\377\206\300\300\300\0\4\0f3\377\231"
+ "\377\314\377f\314f\377\0\0\0\377\203\300\300\300\0\4\231f\0\377\377\377"
+ "f\377\377\314\0\377\0\0\0\377\205\300\300\300\0\4\0f3\377\231\377\314"
+ "\377f\314f\377\0\0\0\377\202\300\300\300\0\6\231f\0\377\377\377f\377"
+ "\377\314\0\377\377\377f\377\377\314\0\377\0\0\0\377\204\300\300\300\0"
+ "\6\0f3\377\231\377\314\377f\314f\377\0\0\0\377\300\300\300\0\231f\0\377"
+ "\202\377\314\0\377\1\377\377f\377\203\377\314\0\377\1\0\0\0\377\203\300"
+ "\300\300\0\4\0f3\377\231\377\314\377f\314f\377\0\0\0\377\203\300\300"
+ "\300\0\4\231f\0\377\377\377f\377\377\314\0\377\0\0\0\377\203\300\300"
+ "\300\0\3\0f3\377f\314f\377\231\377\314\377\204f\314f\377\6\0\0\0\377"
+ "\300\300\300\0\231f\0\377\377\377f\377\377\314\0\377\0\0\0\377\204\300"
+ "\300\300\0\3\0f3\377f\314f\377\231\377\314\377\202f\314f\377\203\0\0"
+ "\0\377\3\231f\0\377\377\377f\377\377\314\0\377\204\0\0\0\377\202\300"
+ "\300\300\0\1\0f3\377\202f\314f\377\1\0\0\0\377\203\314\314\231\377\4"
+ "\231f\0\377\377\377f\377\377\314\0\377\0\0\0\377\202\314\314\231\377"
+ "\1\0\0\0\377\202\300\300\300\0\3\0\0\0\377f\314f\377\0\0\0\377\204\231"
+ "\231f\377\12\231f\0\377\377\377f\377\377\314\0\377\0\0\0\377\231\231"
+ "f\377\377\377\377\377\0\0\0\377\300\300\300\0\0\0\0\377\314\314\231\377"
+ "\202\231\231f\377\207\314\314\231\377\3\231\231f\377\377\377\377\377"
+ "\231\231f\377\202\0\0\0\377\1\377\377\377\377\202\231\231f\377\207\314"
+ "\314\231\377\202\377\377\377\377\2\231\231f\377ff3\377\202\0\0\0\377"
+ "\2\314\314\231\377\377\377\377\377\207\314\314\231\377\11\377\377\377"
+ "\377\231\231f\377\314\314\231\377ff3\377\0\0\0\377\300\300\300\0\0\0"
+ "\0\377\231\231f\377\314\314\231\377\207\377\377\377\377\4\231\231f\377"
+ "\314\314\231\377\231\231f\377\0\0\0\377\202\300\300\300\0\215\0\0\0\377"
+ "\223\300\300\300\0"};
+
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,284 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+#include "libbeep/util.h"
+#include "libbeep/configdb.h"
+
+#include "input.h"
+#include "main.h"
+#include "mainwin.h"
+#include "equalizer.h"
+#include "output.h"
+#include "playlist.h"
+#include "playlistwin.h"
+#include "playlist_list.h"
+#include "skin.h"
+#include "skinwin.h"
+#include "urldecode.h"
+#include "util.h"
+
+
+#include "playback.h"
+
+
+/* FIXME: yuck!! this shouldn't be here... */
+void
+bmp_playback_set_random_skin(void)
+{
+ SkinNode *node;
+ guint32 randval;
+
+ /* Get a random value to select the skin to use */
+ randval = g_random_int_range(0, g_list_length(skinlist));
+ node = g_list_nth(skinlist, randval)->data;
+ bmp_active_skin_load(node->path);
+}
+
+gint
+bmp_playback_get_time(void)
+{
+ if (!bmp_playback_get_playing())
+ return -1;
+
+ if (!get_current_input_plugin())
+ return -1;
+
+ return get_current_input_plugin()->get_time();
+}
+
+void
+bmp_playback_initiate(void)
+{
+ const gchar *filename = NULL;
+
+ if (playlist_get_length() == 0)
+ return;
+
+ if (bmp_playback_get_playing())
+ bmp_playback_stop();
+
+// vis_clear_data(mainwin_vis);
+// vis_clear_data(playlistwin_vis);
+// svis_clear_data(mainwin_svis);
+// mainwin_disable_seekbar();
+ filename = playlist_get_filename_to_play();
+
+ if (!filename)
+ return;
+ if (!bmp_playback_play_file(filename))
+ return;
+
+// if (bmp_playback_get_time() != -1) {
+// equalizerwin_load_auto_preset(filename);
+// input_set_eq(cfg.equalizer_active, cfg.equalizer_preamp,
+// cfg.equalizer_bands);
+// output_set_eq(cfg.equalizer_active, cfg.equalizer_preamp,
+// cfg.equalizer_bands);
+// }
+
+ //playlist_check_pos_current();
+// mainwin_set_info_text();
+}
+
+void
+bmp_playback_pause(void)
+{
+ if (!bmp_playback_get_playing())
+ return;
+
+ if (!get_current_input_plugin())
+ return;
+
+ ip_data.paused = !ip_data.paused;
+/*
+ if (ip_data.paused)
+ playstatus_set_status(mainwin_playstatus, STATUS_PAUSE);
+ else
+ playstatus_set_status(mainwin_playstatus, STATUS_PLAY);
+*/
+ get_current_input_plugin()->pause(ip_data.paused);
+}
+
+void
+bmp_playback_stop(void)
+{
+ if (ip_data.playing && get_current_input_plugin()) {
+ ip_data.playing = FALSE;
+
+ if (bmp_playback_get_paused())
+ bmp_playback_pause();
+
+ if (get_current_input_plugin()->stop)
+ get_current_input_plugin()->stop();
+
+ free_vis_data();
+ ip_data.paused = FALSE;
+
+ if (input_info_text) {
+ g_free(input_info_text);
+ input_info_text = NULL;
+ mainwin_set_info_text();
+ }
+ }
+
+ ip_data.playing = FALSE;
+}
+
+
+static void
+run_no_output_plugin_dialog(void)
+{
+ const gchar *markup =
+ N_("<b><big>No output plugin selected.</big></b>\n"
+ "You have not selected an output plugin.");
+
+ GtkWidget *dialog =
+ gtk_message_dialog_new_with_markup(GTK_WINDOW(mainwin),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _(markup));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+gboolean
+bmp_playback_play_file(const gchar * filename)
+{
+ GList *node;
+ InputPlugin *ip;
+ gchar *filename_proxy;
+
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ if (!get_current_output_plugin()) {
+ run_no_output_plugin_dialog();
+// mainwin_stop_pushed();
+ return FALSE;
+ }
+
+// if (cfg.random_skin_on_play)
+// bmp_playback_set_random_skin();
+
+ filename_proxy = g_strdup(filename);
+
+ node = get_input_list();
+ node = g_list_first(node);
+
+ while (node) {
+
+ ip = node->data;
+
+ if (!ip)
+ break;
+
+ if (ip && input_is_enabled(ip->filename) &&
+ ip->is_our_file(filename_proxy)) {
+ set_current_input_plugin(ip);
+ ip->output = get_current_output_plugin();
+ ip->play_file(filename_proxy);
+ /* FIXME: Why the hell (yes,hell!) doesn't the input
+ plugin set this itself???? -mderezynski */
+ ip_data.playing = TRUE;
+
+ g_free(filename_proxy);
+ return TRUE;
+ }
+ node = g_list_next(node);
+ }
+
+ input_file_not_playable(filename);
+ set_current_input_plugin(NULL);
+
+// mainwin_set_info_text();
+
+ g_free(filename_proxy);
+ return FALSE;
+}
+
+gboolean
+bmp_playback_get_playing(void)
+{
+ return ip_data.playing;
+}
+
+gboolean
+bmp_playback_get_paused(void)
+{
+ return ip_data.paused;
+}
+
+void
+bmp_playback_seek(gint time)
+{
+ gboolean restore_pause = FALSE;
+ gint l=0, r=0;
+
+ if (!ip_data.playing)
+ return;
+
+ if (!get_current_input_plugin())
+ return;
+
+ /* FIXME WORKAROUND...that should work with all plugins
+ * mute the volume, start playback again, do the seek, then pause again
+ * -Patrick Sudowe */
+ if(ip_data.paused)
+ {
+ restore_pause = TRUE;
+ output_get_volume(&l, &r);
+ output_set_volume(0,0);
+ bmp_playback_pause();
+ }
+
+ free_vis_data();
+ get_current_input_plugin()->seek(time);
+
+ if(restore_pause)
+ {
+ bmp_playback_pause();
+ output_set_volume(l, r);
+ }
+}
+
+void
+bmp_playback_seek_relative(gint offset)
+{
+ gint time = CLAMP(bmp_playback_get_time() / 1000 + offset,
+ 0, playlist_get_current_length() / 1000 - 1);
+ bmp_playback_seek(time);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playback.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,35 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLAYBACK_H
+#define PLAYBACK_H
+
+#include <glib.h>
+
+void bmp_playback_set_random_skin(void);
+gint bmp_playback_get_time(void);
+void bmp_playback_initiate(void);
+void bmp_playback_pause(void);
+void bmp_playback_stop(void);
+gboolean bmp_playback_play_file(const gchar * filename);
+gboolean bmp_playback_get_playing(void);
+gboolean bmp_playback_get_paused(void);
+void bmp_playback_seek(gint time);
+void bmp_playback_seek_relative(gint offset);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,2384 @@
+/* BMP (C) GPL 2003 $top_src_dir/AUTHORS
+ *
+ * based on:
+ *
+ * XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2003 Haavard Kvaalen
+ *
+ *
+ * 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., 59 Tmple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "playlist.h"
+
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/errno.h>
+
+#include "input.h"
+#include "main.h"
+#include "mainwin.h"
+#include "libbeep/util.h"
+#include "libbeep/configdb.h"
+#include "libbeep/vfs.h"
+#include "equalizer.h"
+#include "playback.h"
+#include "playlist.h"
+#include "playlistwin.h"
+#include "playlist_list.h"
+#include "skin.h"
+#include "urldecode.h"
+#include "util.h"
+
+#include "debug.h"
+
+typedef gint (*PlaylistCompareFunc) (const PlaylistEntry * a, const PlaylistEntry * b);
+typedef void (*PlaylistSaveFunc) (FILE * file);
+
+PlaylistEntry *playlist_position;
+G_LOCK_DEFINE(playlist);
+
+/* NOTE: match the order listed in PlaylistFormat enum */
+static const gchar *playlist_format_suffixes[] = {
+ ".m3u", ".pls", NULL
+};
+
+static GList *playlist = NULL;
+static GList *shuffle_list = NULL;
+static GList *queued_list = NULL;
+
+
+G_LOCK_DEFINE(playlist_get_info_going);
+
+static gchar *playlist_current_name = NULL;
+
+static gboolean playlist_get_info_scan_active = FALSE;
+static gboolean playlist_get_info_going = FALSE;
+static GThread *playlist_get_info_thread;
+
+
+static gint path_compare(const gchar * a, const gchar * b);
+static gint playlist_compare_path(const PlaylistEntry * a, const PlaylistEntry * b);
+static gint playlist_compare_filename(const PlaylistEntry * a, const PlaylistEntry * b);
+static gint playlist_compare_title(const PlaylistEntry * a, const PlaylistEntry * b);
+static gint playlist_compare_date(const PlaylistEntry * a, const PlaylistEntry * b);
+
+static PlaylistCompareFunc playlist_compare_func_table[] = {
+ playlist_compare_path,
+ playlist_compare_filename,
+ playlist_compare_title,
+ playlist_compare_date
+};
+
+static void playlist_save_m3u(FILE * file);
+static void playlist_save_pls(FILE * file);
+
+static PlaylistSaveFunc playlist_save_func_table[] = {
+ playlist_save_m3u,
+ playlist_save_pls
+};
+
+
+static guint playlist_load_ins(const gchar * filename, gint pos);
+
+static void playlist_load_ins_file(const gchar * filename,
+ const gchar * playlist_name, gint pos,
+ const gchar * title, gint len);
+
+static void playlist_generate_shuffle_list(void);
+static void playlist_generate_shuffle_list_nolock(void);
+
+static void playlist_recalc_total_time_nolock(void);
+static void playlist_recalc_total_time(void);
+
+
+PlaylistEntry *
+playlist_entry_new(const gchar * filename,
+ const gchar * title,
+ const gint length)
+{
+ PlaylistEntry *entry;
+
+ entry = g_new0(PlaylistEntry, 1);
+ entry->filename = g_strdup(filename);
+ entry->title = str_to_utf8(title);
+ entry->length = length;
+ entry->selected = FALSE;
+
+ return entry;
+}
+
+void
+playlist_entry_free(PlaylistEntry * entry)
+{
+ if (!entry)
+ return;
+
+ g_free(entry->filename);
+ g_free(entry->title);
+ g_free(entry);
+}
+
+static gboolean
+playlist_entry_get_info(PlaylistEntry * entry)
+{
+ gchar *title = NULL;
+ gint length = -1;
+
+ g_return_val_if_fail(entry != NULL, FALSE);
+
+ input_get_song_info(entry->filename, &title, &length);
+ if (!title && length == -1)
+ return FALSE;
+
+ /* entry is still around */
+ entry->title = title;
+ entry->length = length;
+
+ return TRUE;
+}
+
+
+const gchar *
+playlist_get_current_name(void)
+{
+ return playlist_current_name;
+}
+
+gboolean
+playlist_set_current_name(const gchar * filename)
+{
+ g_free(playlist_current_name);
+
+ if (!filename) {
+ playlist_current_name = NULL;
+ return FALSE;
+ }
+
+ playlist_current_name = g_strdup(filename);
+ return TRUE;
+}
+
+static GList *
+find_playlist_position_list(void)
+{
+ REQUIRE_STATIC_LOCK(playlist);
+
+ if (!playlist_position) {
+ if (cfg.shuffle)
+ return shuffle_list;
+ else
+ return playlist;
+ }
+
+ if (cfg.shuffle)
+ return g_list_find(shuffle_list, playlist_position);
+ else
+ return g_list_find(playlist, playlist_position);
+}
+
+static void
+play_queued(void)
+{
+ GList *tmp = queued_list;
+
+ REQUIRE_STATIC_LOCK(playlist);
+
+ playlist_position = queued_list->data;
+ queued_list = g_list_remove_link(queued_list, queued_list);
+ g_list_free_1(tmp);
+}
+
+void
+playlist_clear(void)
+{
+ if (bmp_playback_get_playing())
+ bmp_playback_stop();
+
+ PLAYLIST_LOCK();
+
+ if (playlist) {
+ g_list_foreach(playlist, (GFunc) playlist_entry_free, NULL);
+ g_list_free(playlist);
+
+ playlist = NULL;
+ playlist_position = NULL;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+ playlist_recalc_total_time();
+}
+
+void
+playlist_delete_node(GList * node, gboolean * set_info_text,
+ gboolean * restart_playing)
+{
+ PlaylistEntry *entry;
+ GList *playing_song = NULL;
+
+ REQUIRE_STATIC_LOCK(playlist);
+
+ /* We call g_list_find manually here because we don't want an item
+ * in the shuffle_list */
+
+ if (playlist_position)
+ playing_song = g_list_find(playlist, playlist_position);
+
+ entry = PLAYLIST_ENTRY(node->data);
+
+ if (playing_song == node) {
+ *set_info_text = TRUE;
+
+ if (bmp_playback_get_playing()) {
+ PLAYLIST_UNLOCK();
+ bmp_playback_stop();
+ PLAYLIST_LOCK();
+ *restart_playing = TRUE;
+ }
+
+ playing_song = find_playlist_position_list();
+
+ if (g_list_next(playing_song))
+ playlist_position = g_list_next(playing_song)->data;
+ else if (g_list_previous(playing_song))
+ playlist_position = g_list_previous(playing_song)->data;
+ else
+ playlist_position = NULL;
+
+ /* Make sure the entry did not disappear under us */
+ if (g_list_index(playlist_get(), entry) == -1)
+ return;
+
+ }
+ else if (g_list_position(playlist, playing_song) >
+ g_list_position(playlist, node)) {
+ *set_info_text = TRUE;
+ }
+
+ shuffle_list = g_list_remove(shuffle_list, entry);
+ playlist = g_list_remove_link(playlist, node);
+ playlist_entry_free(entry);
+ g_list_free_1(node);
+
+ playlist_recalc_total_time_nolock();
+}
+
+void
+playlist_delete_index(guint pos)
+{
+ gboolean restart_playing = FALSE, set_info_text = FALSE;
+ GList *node;
+
+ PLAYLIST_LOCK();
+
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ node = g_list_nth(playlist, pos);
+
+ if (!node) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ playlist_delete_node(node, &set_info_text, &restart_playing);
+
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+
+ playlistwin_update_list();
+ if (restart_playing) {
+ if (playlist_position) {
+ bmp_playback_initiate();
+ }
+ else {
+ mainwin_clear_song_info();
+ }
+ }
+ else if (set_info_text) {
+ mainwin_set_info_text();
+ }
+}
+
+void
+playlist_delete_filenames(GList * filenames)
+{
+ GList *node, *fnode;
+ gboolean set_info_text = FALSE, restart_playing = FALSE;
+
+ PLAYLIST_LOCK();
+
+ for (fnode = filenames; fnode; fnode = g_list_next(fnode)) {
+ node = playlist;
+
+ while (node) {
+ GList *next = g_list_next(node);
+ PlaylistEntry *entry = node->data;
+
+ if (!strcmp(entry->filename, fnode->data))
+ playlist_delete_node(node, &set_info_text, &restart_playing);
+
+ node = next;
+ }
+ }
+
+ playlist_recalc_total_time();
+ PLAYLIST_UNLOCK();
+
+ playlistwin_update_list();
+
+ if (restart_playing) {
+ if (playlist_position) {
+ bmp_playback_initiate();
+ }
+ else {
+ mainwin_clear_song_info();
+ }
+ }
+ else if (set_info_text) {
+ mainwin_set_info_text();
+ }
+
+}
+
+void
+playlist_delete(gboolean crop)
+{
+ gboolean restart_playing = FALSE, set_info_text = FALSE;
+ GList *node, *next_node;
+ PlaylistEntry *entry;
+
+ PLAYLIST_LOCK();
+
+ node = playlist;
+
+ while (node) {
+ entry = PLAYLIST_ENTRY(node->data);
+
+ next_node = g_list_next(node);
+
+ if ((entry->selected && !crop) || (!entry->selected && crop)) {
+ playlist_delete_node(node, &set_info_text, &restart_playing);
+ }
+
+ node = next_node;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+
+ if (set_info_text) {
+ mainwin_set_info_text();
+ }
+
+ if (restart_playing) {
+ if (playlist_position) {
+ bmp_playback_initiate();
+ }
+ else {
+ mainwin_clear_song_info();
+ }
+ }
+
+ playlistwin_update_list();
+}
+
+static void
+__playlist_ins_with_info(const gchar * filename,
+ gint pos,
+ const gchar * title,
+ gint len)
+{
+ g_return_if_fail(filename != NULL);
+
+ PLAYLIST_LOCK();
+ playlist = g_list_insert(playlist,
+ playlist_entry_new(filename, title, len),
+ pos);
+ PLAYLIST_UNLOCK();
+
+ playlist_get_info_scan_active = TRUE;
+}
+
+static void
+__playlist_ins(const gchar * filename, gint pos)
+{
+ __playlist_ins_with_info(filename, pos, NULL, -1);
+ playlist_recalc_total_time();
+}
+
+
+PlaylistFormat
+playlist_format_get_from_name(const gchar * filename)
+{
+ int i;
+
+ for (i = 0; i < PLAYLIST_FORMAT_COUNT; i++)
+ {
+ if (str_has_suffix_nocase(filename, playlist_format_suffixes[i]))
+ return i;
+ }
+
+ return PLAYLIST_FORMAT_UNKNOWN;
+}
+
+gboolean
+is_playlist_name(const gchar * filename)
+{
+ g_return_val_if_fail(filename != NULL, FALSE);
+ return playlist_format_get_from_name(filename) != PLAYLIST_FORMAT_UNKNOWN;
+}
+
+
+gboolean
+playlist_ins(const gchar * filename, gint pos)
+{
+ gchar buf[64], *p;
+ gint r;
+ VFSFile *file;
+
+ if (is_playlist_name(filename)) {
+ playlist_load_ins(filename, pos);
+ return TRUE;
+ }
+
+ if (input_check_file(filename, TRUE)) {
+ __playlist_ins(filename, pos);
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+ return TRUE;
+ }
+
+ /* Some files (typically produced by some cgi-scripts) don't have
+ * the correct extension. Try to recognize these files by looking
+ * at their content. We only check for http entries since it does
+ * not make sense to have file entries in a playlist fetched from
+ * the net. */
+
+ /* Some strange people put fifo's with the .mp3 extension, so we
+ * need to make sure it's a real file (otherwise fread() may block
+ * and stall the entire program) */
+
+ /* FIXME: bah, FIFOs actually pass this regular file test */
+ if (!vfs_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ return FALSE;
+
+ if (!(file = vfs_fopen(filename, "rb")))
+ return FALSE;
+
+ r = vfs_fread(buf, 1, sizeof(buf), file);
+ vfs_fclose(file);
+
+ for (p = buf; r-- > 0 && (*p == '\r' || *p == '\n'); p++);
+
+ if (r > 5 && str_has_prefix_nocase(p, "http:")) {
+ playlist_load_ins(filename, pos);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* FIXME: The next few functions are specific to Unix
+ * filesystems. Either abstract it away, or don't even bother checking
+ * at such low level */
+
+typedef struct {
+ dev_t dev;
+ ino_t ino;
+} DeviceInode;
+
+static DeviceInode *
+devino_new(dev_t device,
+ ino_t inode)
+{
+ DeviceInode *devino = g_new0(DeviceInode, 1);
+
+ if (devino)
+ {
+ devino->dev = device;
+ devino->ino = inode;
+ }
+
+ return devino;
+}
+
+static guint
+devino_hash(gconstpointer key)
+{
+ const DeviceInode *d = key;
+ return d->ino;
+}
+
+static gint
+devino_compare(gconstpointer a,
+ gconstpointer b)
+{
+ const DeviceInode *da = a, *db = b;
+ return (da->dev == db->dev && da->ino == db->ino);
+}
+
+static gboolean
+devino_destroy(gpointer key,
+ gpointer value,
+ gpointer data)
+{
+ g_free(key);
+ return TRUE;
+}
+
+static gboolean
+file_is_hidden(const gchar * filename)
+{
+ // FIXME: remove the const cast
+ g_return_val_if_fail(filename != NULL, FALSE);
+ return (g_basename((gchar *) filename)[0] == '.');
+}
+
+static GList *
+playlist_dir_find_files(const gchar * path,
+ gboolean background,
+ GHashTable * htab)
+{
+ GDir *dir;
+ GList *list = NULL, *ilist;
+ const gchar *dir_entry;
+
+ struct stat statbuf;
+ DeviceInode *devino;
+
+ if (!g_file_test(path, G_FILE_TEST_IS_DIR))
+ return NULL;
+
+ stat(path, &statbuf);
+ devino = devino_new(statbuf.st_dev, statbuf.st_ino);
+
+ if (g_hash_table_lookup(htab, devino)) {
+ g_free(devino);
+ return NULL;
+ }
+
+ g_hash_table_insert(htab, devino, GINT_TO_POINTER(1));
+
+ if ((ilist = input_scan_dir(path))) {
+ GList *node;
+ for (node = ilist; node; node = g_list_next(node)) {
+ gchar *name = g_build_filename(path, node->data, NULL);
+ list = g_list_prepend(list, name);
+ g_free(node->data);
+ }
+ g_list_free(ilist);
+ return list;
+ }
+
+ if (!(dir = g_dir_open(path, 0, NULL)))
+ return NULL;
+
+ while ((dir_entry = g_dir_read_name(dir))) {
+ gchar *filename;
+
+ if (file_is_hidden(dir_entry))
+ continue;
+
+ filename = g_build_filename(path, dir_entry, NULL);
+
+ if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
+ GList *sub;
+ sub = playlist_dir_find_files(filename, background, htab);
+ g_free(filename);
+ list = g_list_concat(list, sub);
+ }
+ else if (input_check_file(filename, TRUE))
+ list = g_list_prepend(list, filename);
+ else
+ g_free(filename);
+
+ while (background && gtk_events_pending())
+ gtk_main_iteration();
+ }
+ g_dir_close(dir);
+
+ return list;
+}
+
+gboolean
+playlist_add(const gchar * filename)
+{
+ return playlist_ins(filename, -1);
+}
+
+guint
+playlist_add_dir(const gchar * directory)
+{
+ return playlist_ins_dir(directory, -1, TRUE);
+}
+
+guint
+playlist_add_url(const gchar * url)
+{
+ return playlist_ins_url(url, -1);
+}
+
+guint
+playlist_ins_dir(const gchar * path,
+ gint pos,
+ gboolean background)
+{
+ guint entries = 0;
+ GList *list, *node;
+ GHashTable *htab;
+
+ htab = g_hash_table_new(devino_hash, devino_compare);
+
+ list = playlist_dir_find_files(path, background, htab);
+ list = g_list_sort(list, (GCompareFunc) path_compare);
+
+ g_hash_table_foreach_remove(htab, devino_destroy, NULL);
+
+ for (node = list; node; node = g_list_next(node)) {
+ __playlist_ins(node->data, pos);
+ g_free(node->data);
+ entries++;
+ if (pos >= 0)
+ pos++;
+ }
+
+ g_list_free(list);
+
+ playlist_recalc_total_time();
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+ return entries;
+}
+
+guint
+playlist_ins_url(const gchar * string,
+ gint pos)
+{
+ gchar *tmp;
+ gint i = 1, entries = 0;
+ gboolean first = TRUE;
+ guint firstpos = 0;
+ gboolean success = FALSE;
+ gchar *decoded = NULL;
+
+ g_return_val_if_fail(string != NULL, 0);
+
+ playlistwin_update_list();
+
+ while (*string) {
+ GList *node;
+ tmp = strchr(string, '\n');
+ if (tmp) {
+ if (*(tmp - 1) == '\r')
+ *(tmp - 1) = '\0';
+ *tmp = '\0';
+ }
+
+ if (!(decoded = xmms_urldecode_path(string)))
+ decoded = g_strdup(string);
+
+ if (g_file_test(decoded, G_FILE_TEST_IS_DIR)) {
+ i = playlist_ins_dir(decoded, pos, FALSE);
+ }
+ else {
+ if (is_playlist_name(decoded)) {
+ i = playlist_load_ins(decoded, pos);
+ }
+ else {
+ success = playlist_ins(decoded, pos);
+ i = 1;
+ }
+ }
+
+ g_free(decoded);
+
+ PLAYLIST_LOCK();
+ node = g_list_nth(playlist_get(), pos);
+ PLAYLIST_UNLOCK();
+
+ entries += i;
+
+ if (first) {
+ first = FALSE;
+ firstpos = pos;
+ }
+
+ if (pos >= 0)
+ pos += i;
+ if (!tmp)
+ break;
+
+ string = tmp + 1;
+ }
+
+ playlist_recalc_total_time();
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+
+ return entries;
+}
+
+void
+playlist_set_info(const gchar * title, gint length, gint rate,
+ gint freq, gint nch)
+{
+ PLAYLIST_LOCK();
+
+ if (playlist_position) {
+ g_free(playlist_position->title);
+ playlist_position->title = g_strdup(title);
+ playlist_position->length = length;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+
+ mainwin_set_song_info(rate, freq, nch);
+}
+
+void
+playlist_check_pos_current(void)
+{
+ gint pos, row, bottom;
+
+ PLAYLIST_LOCK();
+ if (!playlist || !playlist_position || !playlistwin_list) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ pos = g_list_index(playlist, playlist_position);
+
+ if (playlistwin_item_visible(pos)) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ bottom = MAX(0, playlist_get_length_nolock() -
+ playlistwin_list->pl_num_visible);
+ row = CLAMP(pos - playlistwin_list->pl_num_visible / 2, 0, bottom);
+ PLAYLIST_UNLOCK();
+ playlistwin_set_toprow(row);
+}
+
+void
+playlist_next(void)
+{
+ GList *plist_pos_list;
+ gboolean restart_playing = FALSE;
+
+ PLAYLIST_LOCK();
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ plist_pos_list = find_playlist_position_list();
+
+ if (!cfg.repeat && !g_list_next(plist_pos_list)) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ if (bmp_playback_get_playing()) {
+ /* We need to stop before changing playlist_position */
+ PLAYLIST_UNLOCK();
+ bmp_playback_stop();
+ PLAYLIST_LOCK();
+ restart_playing = TRUE;
+ }
+
+ plist_pos_list = find_playlist_position_list();
+ if (queued_list)
+ play_queued();
+ else if (g_list_next(plist_pos_list))
+ playlist_position = g_list_next(plist_pos_list)->data;
+ else if (cfg.repeat) {
+ playlist_position = NULL;
+ playlist_generate_shuffle_list_nolock();
+ if (cfg.shuffle)
+ playlist_position = shuffle_list->data;
+ else
+ playlist_position = playlist->data;
+ }
+ PLAYLIST_UNLOCK();
+ playlist_check_pos_current();
+
+ if (restart_playing)
+ bmp_playback_initiate();
+ else {
+ mainwin_set_info_text();
+ playlistwin_update_list();
+ }
+}
+
+void
+playlist_prev(void)
+{
+ GList *plist_pos_list;
+ gboolean restart_playing = FALSE;
+
+ PLAYLIST_LOCK();
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ plist_pos_list = find_playlist_position_list();
+
+ if (!cfg.repeat && !g_list_previous(plist_pos_list)) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ if (bmp_playback_get_playing()) {
+ /* We need to stop before changing playlist_position */
+ PLAYLIST_UNLOCK();
+ bmp_playback_stop();
+ PLAYLIST_LOCK();
+ restart_playing = TRUE;
+ }
+
+ plist_pos_list = find_playlist_position_list();
+ if (g_list_previous(plist_pos_list)) {
+ playlist_position = g_list_previous(plist_pos_list)->data;
+ }
+ else if (cfg.repeat) {
+ GList *node;
+ playlist_position = NULL;
+ playlist_generate_shuffle_list_nolock();
+ if (cfg.shuffle)
+ node = g_list_last(shuffle_list);
+ else
+ node = g_list_last(playlist);
+ if (node)
+ playlist_position = node->data;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlist_check_pos_current();
+
+ if (restart_playing)
+ bmp_playback_initiate();
+ else {
+ mainwin_set_info_text();
+ playlistwin_update_list();
+ }
+}
+
+void
+playlist_queue(void)
+{
+ GList *list = playlist_get_selected();
+ GList *it = list;
+
+ PLAYLIST_LOCK();
+
+ while (it) {
+ GList *next = g_list_next(it);
+ GList *tmp;
+
+ it->data = g_list_nth_data(playlist, GPOINTER_TO_INT(it->data));
+ if ((tmp = g_list_find(queued_list, it->data))) {
+ queued_list = g_list_remove_link(queued_list, tmp);
+ g_list_free_1(tmp);
+ list = g_list_remove_link(list, it);
+ g_list_free_1(it);
+ }
+
+ it = next;
+ }
+
+ queued_list = g_list_concat(queued_list, list);
+
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+ playlistwin_update_list();
+}
+
+void
+playlist_queue_position(guint pos)
+{
+ GList *tmp;
+ PlaylistEntry *entry;
+
+ PLAYLIST_LOCK();
+ entry = g_list_nth_data(playlist, pos);
+ if ((tmp = g_list_find(queued_list, entry))) {
+ queued_list = g_list_remove_link(queued_list, tmp);
+ g_list_free_1(tmp);
+ }
+ else
+ queued_list = g_list_append(queued_list, entry);
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+ playlistwin_update_list();
+}
+
+gboolean
+playlist_is_position_queued(guint pos)
+{
+ PlaylistEntry *entry;
+ GList *tmp;
+
+ PLAYLIST_LOCK();
+ entry = g_list_nth_data(playlist, pos);
+ tmp = g_list_find(queued_list, entry);
+ PLAYLIST_UNLOCK();
+
+ return tmp != NULL;
+}
+
+void
+playlist_clear_queue(void)
+{
+ PLAYLIST_LOCK();
+ g_list_free(queued_list);
+ queued_list = NULL;
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+ playlistwin_update_list();
+}
+
+void
+playlist_queue_remove(guint pos)
+{
+ void *entry;
+
+ PLAYLIST_LOCK();
+ entry = g_list_nth_data(playlist, pos);
+ queued_list = g_list_remove(queued_list, entry);
+ PLAYLIST_UNLOCK();
+
+ playlistwin_update_list();
+}
+
+gint
+playlist_get_queue_position(PlaylistEntry * entry)
+{
+ return g_list_index(queued_list, entry);
+}
+
+void
+playlist_set_position(guint pos)
+{
+ GList *node;
+ gboolean restart_playing = FALSE;
+
+ PLAYLIST_LOCK();
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ node = g_list_nth(playlist, pos);
+ if (!node) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ if (bmp_playback_get_playing()) {
+ /* We need to stop before changing playlist_position */
+ PLAYLIST_UNLOCK();
+ bmp_playback_stop();
+ PLAYLIST_LOCK();
+ restart_playing = TRUE;
+ }
+
+ playlist_position = node->data;
+ PLAYLIST_UNLOCK();
+ playlist_check_pos_current();
+
+ if (restart_playing)
+ bmp_playback_initiate();
+ else {
+ mainwin_set_info_text();
+ playlistwin_update_list();
+ }
+
+ /*
+ * Regenerate the shuffle list when the user set a position
+ * manually
+ */
+ playlist_generate_shuffle_list();
+ playlist_recalc_total_time();
+}
+
+void
+playlist_eof_reached(void)
+{
+ GList *plist_pos_list;
+
+ bmp_playback_stop();
+
+ PLAYLIST_LOCK();
+ plist_pos_list = find_playlist_position_list();
+
+ if (cfg.no_playlist_advance) {
+ PLAYLIST_UNLOCK();
+// mainwin_clear_song_info();
+ if (cfg.repeat)
+ bmp_playback_initiate();
+ return;
+ }
+
+ if (queued_list) {
+ play_queued();
+ }
+ else if (!g_list_next(plist_pos_list)) {
+ if (cfg.shuffle) {
+ playlist_position = NULL;
+ playlist_generate_shuffle_list_nolock();
+ }
+ else
+ playlist_position = playlist->data;
+
+ if (!cfg.repeat) {
+ PLAYLIST_UNLOCK();
+// mainwin_clear_song_info();
+// mainwin_set_info_text();
+ return;
+ }
+ }
+ else
+ playlist_position = g_list_next(plist_pos_list)->data;
+
+ PLAYLIST_UNLOCK();
+
+ playlist_check_pos_current();
+ bmp_playback_initiate();
+ mainwin_set_info_text();
+// playlistwin_update_list();
+}
+
+gint
+playlist_get_length(void)
+{
+ gint retval;
+
+ PLAYLIST_LOCK();
+ retval = playlist_get_length_nolock();
+ PLAYLIST_UNLOCK();
+
+ return retval;
+}
+
+gint
+playlist_queue_get_length(void)
+{
+ gint length;
+
+ PLAYLIST_LOCK();
+ length = g_list_length(queued_list);
+ PLAYLIST_UNLOCK();
+
+ return length;
+}
+
+gint
+playlist_get_length_nolock(void)
+{
+ REQUIRE_STATIC_LOCK(playlist);
+ return g_list_length(playlist);
+}
+
+gchar *
+playlist_get_info_text(void)
+{
+ gchar *text, *title, *numbers, *length;
+
+ PLAYLIST_LOCK();
+ if (!playlist_position) {
+ PLAYLIST_UNLOCK();
+ return NULL;
+ }
+
+ /* FIXME: there should not be a need to do additional conversion,
+ * if playlist is properly maintained */
+ if (playlist_position->title) {
+ title = str_to_utf8(playlist_position->title);
+ }
+ else {
+ gchar *basename = g_path_get_basename(playlist_position->filename);
+ title = filename_to_utf8(basename);
+ g_free(basename);
+ }
+
+ /*
+ * If the user don't want numbers in the playlist, don't
+ * display them in other parts of XMMS
+ */
+
+ if (cfg.show_numbers_in_pl)
+ numbers = g_strdup_printf("%d. ", playlist_get_position_nolock() + 1);
+ else
+ numbers = g_strdup("");
+
+ if (playlist_position->length != -1)
+ length = g_strdup_printf(" (%d:%-2.2d)",
+ playlist_position->length / 60000,
+ (playlist_position->length / 1000) % 60);
+ else
+ length = g_strdup("");
+
+ PLAYLIST_UNLOCK();
+
+ text = convert_title_text(g_strconcat(numbers, title, length, NULL));
+
+ g_free(numbers);
+ g_free(title);
+ g_free(length);
+
+ return text;
+}
+
+gint
+playlist_get_current_length(void)
+{
+ gint len = 0;
+
+ PLAYLIST_LOCK();
+ if (playlist && playlist_position)
+ len = playlist_position->length;
+ PLAYLIST_UNLOCK();
+
+ return len;
+}
+
+static void
+playlist_save_m3u(FILE * file)
+{
+ GList *node;
+
+ g_return_if_fail(file != NULL);
+
+ if (cfg.use_pl_metadata)
+ g_fprintf(file, "#EXTM3U\n");
+
+ PLAYLIST_LOCK();
+
+ for (node = playlist; node; node = g_list_next(node)) {
+ PlaylistEntry *entry = PLAYLIST_ENTRY(node->data);
+
+ if (entry->title && cfg.use_pl_metadata) {
+ gint seconds;
+
+ if (entry->length > 0)
+ seconds = (entry->length) / 1000;
+ else
+ seconds = -1;
+
+ g_fprintf(file, "#EXTINF:%d,%s\n", seconds, entry->title);
+ }
+
+ g_fprintf(file, "%s\n", entry->filename);
+ }
+
+ PLAYLIST_UNLOCK();
+}
+
+static void
+playlist_save_pls(FILE * file)
+{
+ GList *node;
+
+ g_return_if_fail(file != NULL);
+
+ g_fprintf(file, "[playlist]\n");
+ g_fprintf(file, "NumberOfEntries=%d\n", playlist_get_length());
+
+ PLAYLIST_LOCK();
+
+ for (node = playlist; node; node = g_list_next(node)) {
+ PlaylistEntry *entry = PLAYLIST_ENTRY(node->data);
+
+ g_fprintf(file, "File%d=%s\n", g_list_position(playlist, node) + 1,
+ entry->filename);
+ }
+
+ PLAYLIST_UNLOCK();
+}
+
+gboolean
+playlist_save(const gchar * filename,
+ PlaylistFormat format)
+{
+ FILE *file;
+
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ playlist_set_current_name(filename);
+
+ if ((file = fopen(filename, "w")) == NULL)
+ return FALSE;
+
+ playlist_save_func_table[format](file);
+
+ return (fclose(file) == 0);
+}
+
+gboolean
+playlist_load(const gchar * filename)
+{
+ return playlist_load_ins(filename, -1);
+}
+
+
+static void
+playlist_load_ins_file(const gchar * filename_p,
+ const gchar * playlist_name, gint pos,
+ const gchar * title, gint len)
+{
+ gchar *filename;
+ gchar *tmp, *path;
+
+ g_return_if_fail(filename_p != NULL);
+ g_return_if_fail(playlist_name != NULL);
+
+ filename = g_strstrip(g_strdup(filename_p));
+
+ if (cfg.use_backslash_as_dir_delimiter) {
+ while ((tmp = strchr(filename, '\\')) != NULL)
+ *tmp = '/';
+ }
+
+ if (filename[0] != '/' && !strstr(filename, "://")) {
+ path = g_strdup(playlist_name);
+ if ((tmp = strrchr(path, '/')))
+ *tmp = '\0';
+ else {
+ __playlist_ins_with_info(filename, pos, title, len);
+ return;
+ }
+ tmp = g_build_filename(path, filename, NULL);
+ __playlist_ins_with_info(tmp, pos, title, len);
+ g_free(tmp);
+ g_free(path);
+ }
+ else
+ __playlist_ins_with_info(filename, pos, title, len);
+
+ g_free(filename);
+}
+
+static void
+parse_extm3u_info(const gchar * info, gchar ** title, gint * length)
+{
+ gchar *str;
+
+ g_return_if_fail(info != NULL);
+ g_return_if_fail(title != NULL);
+ g_return_if_fail(length != NULL);
+
+ *title = NULL;
+ *length = -1;
+
+ if (!str_has_prefix_nocase(info, "#EXTINF:")) {
+ g_message("Invalid m3u metadata (%s)", info);
+ return;
+ }
+
+ info += 8;
+
+ *length = atoi(info);
+ if (*length <= 0)
+ *length = -1;
+ else
+ *length *= 1000;
+
+ if ((str = strchr(info, ','))) {
+ *title = g_strstrip(g_strdup(str + 1));
+ if (strlen(*title) < 1) {
+ g_free(*title);
+ *title = NULL;
+ }
+ }
+}
+
+static guint
+playlist_load_pls(const gchar * filename, gint pos)
+{
+ guint i, count, added_count = 0;
+ gchar key[10];
+ gchar *line;
+
+ g_return_val_if_fail(filename != NULL, 0);
+
+ if (!str_has_suffix_nocase(filename, ".pls"))
+ return 0;
+
+ if (!(line = read_ini_string(filename, "playlist", "NumberOfEntries")))
+ return 0;
+
+ count = atoi(line);
+ g_free(line);
+
+ for (i = 1; i <= count; i++) {
+ g_snprintf(key, sizeof(key), "File%d", i);
+ if ((line = read_ini_string(filename, "playlist", key))) {
+ playlist_load_ins_file(line, filename, pos, NULL, -1);
+ added_count++;
+
+ if (pos >= 0)
+ pos++;
+
+ g_free(line);
+ }
+ }
+
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+
+ return added_count;
+}
+
+static guint
+playlist_load_m3u(const gchar * filename, gint pos)
+{
+ FILE *file;
+ gchar *line;
+ gchar *ext_info = NULL, *ext_title = NULL;
+ gsize line_len = 1024;
+ gint ext_len = -1;
+ gboolean is_extm3u = FALSE;
+ guint added_count = 0;
+
+ if (!(file = fopen(filename, "r")))
+ return 0;
+
+ line = g_malloc(line_len);
+ while (fgets(line, line_len, file)) {
+ while (strlen(line) == line_len - 1 && line[strlen(line) - 1] != '\n') {
+ line_len += 1024;
+ line = g_realloc(line, line_len);
+ fgets(&line[strlen(line)], 1024, file);
+ }
+
+ while (line[strlen(line) - 1] == '\r' ||
+ line[strlen(line) - 1] == '\n')
+ line[strlen(line) - 1] = '\0';
+
+ if (str_has_prefix_nocase(line, "#EXTM3U")) {
+ is_extm3u = TRUE;
+ continue;
+ }
+
+ if (is_extm3u && str_has_prefix_nocase(line, "#EXTINF:")) {
+ str_replace_in(&ext_info, g_strdup(line));
+ continue;
+ }
+
+ if (line[0] == '#' || strlen(line) == 0) {
+ if (ext_info) {
+ g_free(ext_info);
+ ext_info = NULL;
+ }
+ continue;
+ }
+
+ if (is_extm3u) {
+ if (cfg.use_pl_metadata && ext_info)
+ parse_extm3u_info(ext_info, &ext_title, &ext_len);
+ g_free(ext_info);
+ ext_info = NULL;
+ }
+
+ playlist_load_ins_file(line, filename, pos, ext_title, ext_len);
+
+ str_replace_in(&ext_title, NULL);
+ ext_len = -1;
+
+ added_count++;
+ if (pos >= 0)
+ pos++;
+ }
+
+ fclose(file);
+ g_free(line);
+
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+
+ if (g_ascii_strcasecmp(filename, BMP_PLAYLIST_BASENAME))
+ playlist_set_current_name(NULL);
+ else
+ playlist_set_current_name(filename);
+
+ return added_count;
+}
+
+static guint
+playlist_load_ins(const gchar * filename, gint pos)
+{
+ guint added_count;
+
+ g_return_val_if_fail(filename != NULL, 0);
+
+ /* .pls ? */
+ if ((added_count = playlist_load_pls(filename, pos)) > 0)
+ return added_count;
+
+ /* Assume .m3u */
+ return playlist_load_m3u(filename, pos);
+}
+
+GList *
+get_playlist_nth(guint nth)
+{
+ REQUIRE_STATIC_LOCK(playlist);
+ return g_list_nth(playlist, nth);
+}
+
+
+GList *
+playlist_get(void)
+{
+ REQUIRE_STATIC_LOCK(playlist);
+ return playlist;
+}
+
+gint
+playlist_get_position_nolock(void)
+{
+ REQUIRE_STATIC_LOCK(playlist);
+
+ if (playlist && playlist_position)
+ return g_list_index(playlist, playlist_position);
+ return 0;
+}
+
+gint
+playlist_get_position(void)
+{
+ gint pos;
+
+ PLAYLIST_LOCK();
+ pos = playlist_get_position_nolock();
+ PLAYLIST_UNLOCK();
+
+ return pos;
+}
+
+gchar *
+playlist_get_filename(guint pos)
+{
+ gchar *filename;
+ PlaylistEntry *entry;
+ GList *node;
+
+ PLAYLIST_LOCK();
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return NULL;
+ }
+ node = g_list_nth(playlist, pos);
+ if (!node) {
+ PLAYLIST_UNLOCK();
+ return NULL;
+ }
+ entry = node->data;
+
+ filename = g_strdup(entry->filename);
+ PLAYLIST_UNLOCK();
+
+ return filename;
+}
+
+gchar *
+playlist_get_songtitle(guint pos)
+{
+ gchar *title = NULL;
+ PlaylistEntry *entry;
+ GList *node;
+
+ PLAYLIST_LOCK();
+
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return NULL;
+ }
+
+ if (!(node = g_list_nth(playlist, pos))) {
+ PLAYLIST_UNLOCK();
+ return NULL;
+ }
+
+ entry = node->data;
+
+ /* FIXME: simplify this logic */
+ if (!entry->title && entry->length == -1) {
+ if (playlist_entry_get_info(entry))
+ title = entry->title;
+ }
+ else {
+ title = entry->title;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ if (!title) {
+ title = g_path_get_basename(entry->filename);
+ return str_replace(title, filename_to_utf8(title));
+ }
+
+ return str_to_utf8(title);
+}
+
+gint
+playlist_get_songtime(guint pos)
+{
+ gint song_time = -1;
+ PlaylistEntry *entry;
+ GList *node;
+
+ PLAYLIST_LOCK();
+
+ if (!playlist) {
+ PLAYLIST_UNLOCK();
+ return -1;
+ }
+
+ if (!(node = g_list_nth(playlist, pos))) {
+ PLAYLIST_UNLOCK();
+ return -1;
+ }
+
+ entry = node->data;
+
+ if (!entry->title && entry->length == -1) {
+ if (playlist_entry_get_info(entry))
+ song_time = entry->length;
+
+ PLAYLIST_UNLOCK();
+ }
+ else {
+ song_time = entry->length;
+ PLAYLIST_UNLOCK();
+ }
+
+ return song_time;
+}
+
+static gint
+playlist_compare_title(const PlaylistEntry * a,
+ const PlaylistEntry * b)
+{
+ const gchar *a_title, *b_title;
+
+ g_return_val_if_fail(a != NULL, 0);
+ g_return_val_if_fail(b != NULL, 0);
+
+ if (a->title)
+ a_title = a->title;
+ else {
+ if (strrchr(a->filename, '/'))
+ a_title = strrchr(a->filename, '/') + 1;
+ else
+ a_title = a->filename;
+ }
+
+ if (b->title)
+ b_title = b->title;
+ else {
+ if (strrchr(a->filename, '/'))
+ b_title = strrchr(b->filename, '/') + 1;
+ else
+ b_title = b->filename;
+ }
+
+ return strcasecmp(a_title, b_title);
+}
+
+static gint
+playlist_compare_filename(const PlaylistEntry * a,
+ const PlaylistEntry * b)
+{
+ gchar *a_filename, *b_filename;
+
+ g_return_val_if_fail(a != NULL, 0);
+ g_return_val_if_fail(b != NULL, 0);
+
+ if (strrchr(a->filename, '/'))
+ a_filename = strrchr(a->filename, '/') + 1;
+ else
+ a_filename = a->filename;
+
+ if (strrchr(b->filename, '/'))
+ b_filename = strrchr(b->filename, '/') + 1;
+ else
+ b_filename = b->filename;
+
+
+ return strcasecmp(a_filename, b_filename);
+}
+
+static gint
+path_compare(const gchar * a, const gchar * b)
+{
+ gchar *posa, *posb;
+ gint len, ret;
+
+ posa = strrchr(a, '/');
+ posb = strrchr(b, '/');
+
+ /*
+ * Sort directories before files
+ */
+ if (posa && posb && (posa - a != posb - b)) {
+ if (posa - a > posb - b) {
+ len = posb - b;
+ ret = -1;
+ }
+ else {
+ len = posa - a;
+ ret = 1;
+ }
+ if (!strncasecmp(a, b, len))
+ return ret;
+ }
+ return strcasecmp(a, b);
+}
+
+static gint
+playlist_compare_path(const PlaylistEntry * a,
+ const PlaylistEntry * b)
+{
+ return path_compare(a->filename, b->filename);
+}
+
+static gint
+playlist_compare_date(const PlaylistEntry * a,
+ const PlaylistEntry * b)
+{
+ struct stat buf;
+ time_t modtime;
+
+ gint rv;
+
+
+ rv = stat(a->filename, &buf);
+
+ if (rv == 0) {
+ modtime = buf.st_mtime;
+ rv = stat(b->filename, &buf);
+
+ if (stat(b->filename, &buf) == 0) {
+ if (buf.st_mtime == modtime)
+ return 0;
+ else
+ return (buf.st_mtime - modtime) > 0 ? -1 : 1;
+ }
+ else
+ return -1;
+ }
+ else if (!lstat(b->filename, &buf))
+ return 1;
+ else
+ return playlist_compare_filename(a, b);
+}
+
+
+void
+playlist_sort(PlaylistSortType type)
+{
+ playlist_remove_dead_files();
+ PLAYLIST_LOCK();
+ playlist =
+ g_list_sort(playlist,
+ (GCompareFunc) playlist_compare_func_table[type]);
+ PLAYLIST_UNLOCK();
+}
+
+static GList *
+playlist_sort_selected_generic(GList * list, GCompareFunc cmpfunc)
+{
+ GList *list1, *list2;
+ GList *tmp_list = NULL;
+ GList *index_list = NULL;
+
+ /*
+ * We take all the selected entries out of the playlist,
+ * sorts them, and then put them back in again.
+ */
+
+ list1 = g_list_last(list);
+
+ while (list1) {
+ list2 = g_list_previous(list1);
+ if (PLAYLIST_ENTRY(list1->data)->selected) {
+ gpointer idx;
+ idx = GINT_TO_POINTER(g_list_position(list, list1));
+ index_list = g_list_prepend(index_list, idx);
+ list = g_list_remove_link(list, list1);
+ tmp_list = g_list_concat(list1, tmp_list);
+ }
+ list1 = list2;
+ }
+
+ tmp_list = g_list_sort(tmp_list, cmpfunc);
+ list1 = tmp_list;
+ list2 = index_list;
+
+ while (list2) {
+ if (!list1) {
+ g_critical(G_STRLOC ": Error during list sorting. "
+ "Possibly dropped some playlist-entries.");
+ break;
+ }
+
+ list = g_list_insert(list, list1->data, GPOINTER_TO_INT(list2->data));
+
+ list2 = g_list_next(list2);
+ list1 = g_list_next(list1);
+ }
+
+ g_list_free(index_list);
+ g_list_free(tmp_list);
+
+ return list;
+}
+
+void
+playlist_sort_selected(PlaylistSortType type)
+{
+ PLAYLIST_LOCK();
+ playlist = playlist_sort_selected_generic(playlist, (GCompareFunc)
+ playlist_compare_func_table
+ [type]);
+ PLAYLIST_UNLOCK();
+}
+
+void
+playlist_reverse(void)
+{
+ PLAYLIST_LOCK();
+ playlist = g_list_reverse(playlist);
+ PLAYLIST_UNLOCK();
+}
+
+static GList *
+playlist_shuffle_list(GList * list)
+{
+ /*
+ * Note that this doesn't make a copy of the original list.
+ * The pointer to the original list is not valid after this
+ * fuction is run.
+ */
+ gint len = g_list_length(list);
+ gint i, j;
+ GList *node, **ptrs;
+
+ REQUIRE_STATIC_LOCK(playlist);
+
+ if (!len)
+ return NULL;
+
+ ptrs = g_new(GList *, len);
+
+ for (node = list, i = 0; i < len; node = g_list_next(node), i++)
+ ptrs[i] = node;
+
+ j = g_random_int_range(0, len);
+ list = ptrs[j];
+ ptrs[j]->next = NULL;
+ ptrs[j] = ptrs[0];
+
+ for (i = 1; i < len; i++) {
+ j = g_random_int_range(0, len - i);
+ list->prev = ptrs[i + j];
+ ptrs[i + j]->next = list;
+ list = ptrs[i + j];
+ ptrs[i + j] = ptrs[i];
+ }
+ list->prev = NULL;
+
+ g_free(ptrs);
+
+ return list;
+}
+
+void
+playlist_random(void)
+{
+ PLAYLIST_LOCK();
+ playlist = playlist_shuffle_list(playlist);
+ PLAYLIST_UNLOCK();
+}
+
+GList *
+playlist_get_selected(void)
+{
+ GList *node, *list = NULL;
+ gint i = 0;
+
+ PLAYLIST_LOCK();
+ for (node = playlist_get(); node; node = g_list_next(node), i++) {
+ PlaylistEntry *entry = node->data;
+ if (entry->selected)
+ list = g_list_prepend(list, GINT_TO_POINTER(i));
+ }
+ PLAYLIST_UNLOCK();
+ return g_list_reverse(list);
+}
+
+void
+playlist_clear_selected(void)
+{
+ GList *node = NULL;
+ gint i = 0;
+
+ PLAYLIST_LOCK();
+ for (node = playlist_get(); node; node = g_list_next(node), i++) {
+ PLAYLIST_ENTRY(node->data)->selected = FALSE;
+ }
+ PLAYLIST_UNLOCK();
+ playlist_recalc_total_time();
+}
+
+gint
+playlist_get_num_selected(void)
+{
+ GList *node;
+ gint num = 0;
+
+ PLAYLIST_LOCK();
+ for (node = playlist_get(); node; node = g_list_next(node)) {
+ PlaylistEntry *entry = node->data;
+ if (entry->selected)
+ num++;
+ }
+ PLAYLIST_UNLOCK();
+ return num;
+}
+
+
+static void
+playlist_generate_shuffle_list(void)
+{
+ PLAYLIST_LOCK();
+ playlist_generate_shuffle_list_nolock();
+ PLAYLIST_UNLOCK();
+}
+
+static void
+playlist_generate_shuffle_list_nolock(void)
+{
+ GList *node;
+ gint numsongs;
+
+ REQUIRE_STATIC_LOCK(playlist);
+
+ if (shuffle_list) {
+ g_list_free(shuffle_list);
+ shuffle_list = NULL;
+ }
+
+ if (!cfg.shuffle || !playlist)
+ return;
+
+ shuffle_list = playlist_shuffle_list(g_list_copy(playlist));
+ numsongs = g_list_length(shuffle_list);
+
+ if (playlist_position) {
+ gint i = g_list_index(shuffle_list, playlist_position);
+ node = g_list_nth(shuffle_list, i);
+ shuffle_list = g_list_remove_link(shuffle_list, node);
+ shuffle_list = g_list_prepend(shuffle_list, node->data);
+ }
+}
+
+void
+playlist_fileinfo(guint pos)
+{
+ gchar *path = NULL;
+ GList *node;
+
+ PLAYLIST_LOCK();
+ if ((node = g_list_nth(playlist_get(), pos))) {
+ PlaylistEntry *entry = node->data;
+ path = g_strdup(entry->filename);
+ }
+ PLAYLIST_UNLOCK();
+ if (path) {
+ input_file_info_box(path);
+ g_free(path);
+ }
+}
+
+void
+playlist_fileinfo_current(void)
+{
+ gchar *path = NULL;
+
+ PLAYLIST_LOCK();
+ if (playlist_get() && playlist_position)
+ path = g_strdup(playlist_position->filename);
+ PLAYLIST_UNLOCK();
+
+ if (path) {
+ input_file_info_box(path);
+ g_free(path);
+ }
+}
+
+
+static gboolean
+playlist_get_info_is_going(void)
+{
+ gboolean result;
+
+ G_LOCK(playlist_get_info_going);
+ result = playlist_get_info_going;
+ G_UNLOCK(playlist_get_info_going);
+
+ return result;
+}
+
+static gpointer
+playlist_get_info_func(gpointer arg)
+{
+ GList *node;
+ gboolean update_playlistwin = FALSE;
+ gboolean update_mainwin = FALSE;
+
+ while (playlist_get_info_is_going()) {
+ PlaylistEntry *entry;
+
+ if (cfg.use_pl_metadata &&
+ cfg.get_info_on_load &&
+ playlist_get_info_scan_active) {
+
+ PLAYLIST_LOCK();
+ for (node = playlist_get(); node; node = g_list_next(node)) {
+ entry = node->data;
+
+ if (entry->title || entry->length != -1)
+ continue;
+
+ if (!playlist_entry_get_info(entry)) {
+ if (g_list_index(playlist_get(), entry) == -1)
+ /* Entry disappeared while we looked it up.
+ Restart. */
+ node = playlist_get();
+ }
+ else if (entry->title || entry->length != -1) {
+ update_playlistwin = TRUE;
+ if (entry == playlist_position)
+ update_mainwin = TRUE;
+ break;
+ }
+ }
+ PLAYLIST_UNLOCK();
+
+ if (!node)
+ playlist_get_info_scan_active = FALSE;
+ }
+/*
+ else if (!cfg.get_info_on_load &&
+ cfg.get_info_on_demand &&
+ cfg.playlist_visible &&
+ !cfg.playlist_shaded &&
+ cfg.use_pl_metadata) {
+
+ gboolean found = FALSE;
+
+ PLAYLIST_LOCK();
+
+ if (!playlist_get()) {
+ PLAYLIST_UNLOCK();
+ g_usleep(1000000);
+ continue;
+ }
+
+ for (node =
+ g_list_nth(playlist_get(), playlistwin_get_toprow());
+ node
+ &&
+ playlistwin_item_visible(g_list_position
+ (playlist_get(), node));
+ node = g_list_next(node)) {
+ entry = node->data;
+ if (entry->title || entry->length != -1)
+ continue;
+
+ if (!playlist_entry_get_info(entry)) {
+ if (g_list_index(playlist_get(), entry) == -1)
+ // Entry disapeared while we
+ // looked it up. Restart.
+ node =
+ g_list_nth(playlist_get(),
+ playlistwin_get_toprow());
+ }
+ else if (entry->title || entry->length != -1) {
+ update_playlistwin = TRUE;
+ if (entry == playlist_position)
+ update_mainwin = TRUE;
+ found = TRUE;
+ break;
+ }
+ }
+
+ PLAYLIST_UNLOCK();
+
+ if (!found) {
+ g_usleep(500000);
+ continue;
+ }
+ }
+*/
+ else
+ g_usleep(500000);
+/*
+ if (update_playlistwin) {
+ playlistwin_update_list();
+ update_playlistwin = FALSE;
+ }
+
+ if (update_mainwin) {
+ mainwin_set_info_text();
+ update_mainwin = FALSE;
+ }
+*/
+ }
+
+ g_thread_exit(NULL);
+ return NULL;
+}
+
+void
+playlist_start_get_info_thread(void)
+{
+ playlist_get_info_going = TRUE;
+ playlist_get_info_thread = g_thread_create(playlist_get_info_func,
+ NULL, TRUE, NULL);
+}
+
+void
+playlist_stop_get_info_thread(void)
+{
+ G_LOCK(playlist_get_info_going);
+ playlist_get_info_going = FALSE;
+ G_UNLOCK(playlist_get_info_going);
+ g_thread_join(playlist_get_info_thread);
+}
+
+void
+playlist_start_get_info_scan(void)
+{
+ playlist_get_info_scan_active = TRUE;
+}
+
+void
+playlist_remove_dead_files(void)
+{
+ GList *node, *next_node;
+
+ PLAYLIST_LOCK();
+
+ for (node = playlist; node; node = next_node) {
+ PlaylistEntry *entry = PLAYLIST_ENTRY(node->data);
+ next_node = g_list_next(node);
+
+ if (!entry || !entry->filename) {
+ g_message(G_STRLOC ": Playlist entry is invalid!");
+ continue;
+ }
+
+ /* FIXME: What about 'file:///'? */
+ /* Don't kill URLs */
+ if (strstr(entry->filename, "://"))
+ continue;
+
+ /* FIXME: Should test for readability */
+ if (vfs_file_test(entry->filename, G_FILE_TEST_EXISTS))
+ continue;
+
+ if (entry == playlist_position) {
+ /* Don't remove the currently playing song */
+ if (bmp_playback_get_playing())
+ continue;
+
+ if (next_node)
+ playlist_position = PLAYLIST_ENTRY(next_node->data);
+ else
+ playlist_position = NULL;
+ }
+
+ playlist_entry_free(entry);
+ playlist = g_list_delete_link(playlist, node);
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlist_generate_shuffle_list();
+ playlistwin_update_list();
+ playlist_recalc_total_time();
+}
+
+static gulong pl_total_time = 0, pl_selection_time = 0;
+static gboolean pl_total_more = FALSE, pl_selection_more = FALSE;
+
+void
+playlist_get_total_time(gulong * total_time,
+ gulong * selection_time,
+ gboolean * total_more,
+ gboolean * selection_more)
+{
+ PLAYLIST_LOCK();
+ *total_time = pl_total_time;
+ *selection_time = pl_selection_time;
+ *total_more = pl_total_more;
+ *selection_more = pl_selection_more;
+ PLAYLIST_UNLOCK();
+}
+
+
+static void
+playlist_recalc_total_time_nolock(void)
+{
+ GList *list;
+ PlaylistEntry *entry;
+
+ REQUIRE_STATIC_LOCK(playlist);
+
+ pl_total_time = 0;
+ pl_selection_time = 0;
+ pl_total_more = FALSE;
+ pl_selection_more = FALSE;
+
+ for (list = playlist_get(); list; list = g_list_next(list)) {
+ entry = list->data;
+
+ if (entry->length != -1)
+ pl_total_time += entry->length / 1000;
+ else
+ pl_total_more = TRUE;
+
+ if (entry->selected) {
+ if (entry->length != -1)
+ pl_selection_time += entry->length / 1000;
+ else
+ pl_selection_more = TRUE;
+ }
+ }
+}
+
+static void
+playlist_recalc_total_time(void)
+{
+ PLAYLIST_LOCK();
+ playlist_recalc_total_time_nolock();
+ PLAYLIST_UNLOCK();
+}
+
+
+void
+playlist_select_all(gboolean set)
+{
+ GList *list;
+
+ PLAYLIST_LOCK();
+
+ for (list = playlist_get(); list; list = g_list_next(list)) {
+ PlaylistEntry *entry = list->data;
+ entry->selected = set;
+ }
+
+ PLAYLIST_UNLOCK();
+ playlist_recalc_total_time();
+}
+
+void
+playlist_select_invert_all(void)
+{
+ GList *list;
+
+ PLAYLIST_LOCK();
+
+ for (list = playlist_get(); list; list = g_list_next(list)) {
+ PlaylistEntry *entry = list->data;
+ entry->selected = !entry->selected;
+ }
+
+ PLAYLIST_UNLOCK();
+ playlist_recalc_total_time();
+}
+
+gboolean
+playlist_select_invert(guint pos)
+{
+ GList *list;
+ gboolean invert_ok = FALSE;
+
+ PLAYLIST_LOCK();
+
+ if ((list = g_list_nth(playlist_get(), pos))) {
+ PlaylistEntry *entry = list->data;
+ entry->selected = !entry->selected;
+ invert_ok = TRUE;
+ }
+
+ PLAYLIST_UNLOCK();
+ playlist_recalc_total_time();
+
+ return invert_ok;
+}
+
+
+void
+playlist_select_range(gint min_pos, gint max_pos, gboolean select)
+{
+ GList *list;
+ gint i;
+
+ if (min_pos > max_pos)
+ SWAP(min_pos, max_pos);
+
+ PLAYLIST_LOCK();
+
+ list = g_list_nth(playlist_get(), min_pos);
+ for (i = min_pos; i <= max_pos && list; i++) {
+ PlaylistEntry *entry = list->data;
+ entry->selected = select;
+ list = g_list_next(list);
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlist_recalc_total_time();
+}
+
+gboolean
+playlist_read_info_selection(void)
+{
+ GList *node;
+ gboolean retval = FALSE;
+
+ PLAYLIST_LOCK();
+
+ for (node = playlist_get(); node; node = g_list_next(node)) {
+ PlaylistEntry *entry = node->data;
+ if (!entry->selected)
+ continue;
+
+ retval = TRUE;
+
+ str_replace_in(&entry->title, NULL);
+ entry->length = -1;
+
+ if (!playlist_entry_get_info(entry)) {
+ if (g_list_index(playlist_get(), entry) == -1)
+ /* Entry disappeared while we looked it up. Restart. */
+ node = playlist_get();
+ }
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlistwin_update_list();
+ playlist_recalc_total_time();
+
+ return retval;
+}
+
+void
+playlist_read_info(guint pos)
+{
+ GList *node;
+
+ PLAYLIST_LOCK();
+
+ if ((node = g_list_nth(playlist_get(), pos))) {
+ PlaylistEntry *entry = node->data;
+ str_replace_in(&entry->title, NULL);
+ entry->length = -1;
+ playlist_entry_get_info(entry);
+ }
+
+ PLAYLIST_UNLOCK();
+
+ playlistwin_update_list();
+ playlist_recalc_total_time();
+}
+
+void
+playlist_set_shuffle(gboolean shuffle)
+{
+ PLAYLIST_LOCK();
+
+ cfg.shuffle = shuffle;
+ playlist_generate_shuffle_list_nolock();
+
+ PLAYLIST_UNLOCK();
+}
+
+void
+playlist_new(void)
+{
+ playlist_set_current_name(NULL);
+ playlist_clear();
+ mainwin_clear_song_info();
+ mainwin_set_info_text();
+}
+
+
+const gchar *
+playlist_get_filename_to_play(void)
+{
+ const gchar *filename = NULL;
+
+ PLAYLIST_LOCK();
+
+ if (playlist) {
+ if (!playlist_position) {
+ if (cfg.shuffle)
+ playlist_position = shuffle_list->data;
+ else
+ playlist_position = playlist->data;
+ }
+
+ filename = playlist_position->filename;
+ }
+
+ PLAYLIST_UNLOCK();
+
+ return filename;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,148 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2003 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef PLAYLIST_H
+#define PLAYLIST_H
+
+#include <glib.h>
+
+
+typedef enum {
+ PLAYLIST_SORT_PATH,
+ PLAYLIST_SORT_FILENAME,
+ PLAYLIST_SORT_TITLE,
+ PLAYLIST_SORT_DATE
+} PlaylistSortType;
+
+typedef enum {
+ PLAYLIST_FORMAT_UNKNOWN = -1,
+ PLAYLIST_FORMAT_M3U,
+ PLAYLIST_FORMAT_PLS,
+ PLAYLIST_FORMAT_COUNT
+} PlaylistFormat;
+
+
+#define PLAYLIST_ENTRY(x) ((PlaylistEntry*)(x))
+struct _PlaylistEntry {
+ gchar *filename;
+ gchar *title;
+ gint length;
+ gboolean selected;
+};
+
+typedef struct _PlaylistEntry PlaylistEntry;
+
+PlaylistEntry *playlist_entry_new(const gchar * filename,
+ const gchar * title, const gint len);
+void playlist_entry_free(PlaylistEntry * entry);
+
+void playlist_init(void);
+void playlist_clear(void);
+void playlist_delete(gboolean crop);
+
+gboolean playlist_add(const gchar * filename);
+gboolean playlist_ins(const gchar * filename, gint pos);
+guint playlist_add_dir(const gchar * dir);
+guint playlist_ins_dir(const gchar * dir, gint pos, gboolean background);
+guint playlist_add_url(const gchar * url);
+guint playlist_ins_url(const gchar * string, gint pos);
+
+void playlist_play(void);
+void playlist_set_info(const gchar * title, gint length, gint rate,
+ gint freq, gint nch);
+void playlist_check_pos_current(void);
+void playlist_next(void);
+void playlist_prev(void);
+void playlist_queue(void);
+void playlist_queue_position(guint pos);
+void playlist_queue_remove(guint pos);
+gint playlist_queue_get_length(void);
+gboolean playlist_is_position_queued(guint pos);
+void playlist_clear_queue(void);
+gint playlist_get_queue_position(PlaylistEntry * entry);
+void playlist_eof_reached(void);
+void playlist_set_position(guint pos);
+gint playlist_get_length(void);
+gint playlist_get_length_nolock(void);
+gint playlist_get_position(void);
+gint playlist_get_position_nolock(void);
+gchar *playlist_get_info_text(void);
+gint playlist_get_current_length(void);
+
+gboolean playlist_save(const gchar * filename, PlaylistFormat format);
+gboolean playlist_load(const gchar * filename);
+
+GList *playlist_get(void);
+
+void playlist_start_get_info_thread(void);
+void playlist_stop_get_info_thread();
+void playlist_start_get_info_scan(void);
+
+void playlist_sort(PlaylistSortType type);
+void playlist_sort_selected(PlaylistSortType type);
+
+void playlist_reverse(void);
+void playlist_random(void);
+void playlist_remove_dead_files(void);
+
+void playlist_fileinfo_current(void);
+void playlist_fileinfo(guint pos);
+
+void playlist_delete_index(guint pos);
+void playlist_delete_filenames(GList * filenames);
+
+const gchar *playlist_get_filename_to_play();
+gchar *playlist_get_filename(guint pos);
+gchar *playlist_get_songtitle(guint pos);
+gint playlist_get_songtime(guint pos);
+
+GList *playlist_get_selected(void);
+GList *playlist_get_selected_list(void);
+int playlist_get_num_selected(void);
+
+void playlist_get_total_time(gulong * total_time, gulong * selection_time,
+ gboolean * total_more,
+ gboolean * selection_more);
+
+void playlist_select_all(gboolean set);
+void playlist_select_range(gint min, gint max, gboolean sel);
+void playlist_select_invert_all(void);
+gboolean playlist_select_invert(guint pos);
+
+gboolean playlist_read_info_selection(void);
+void playlist_read_info(guint pos);
+
+void playlist_set_shuffle(gboolean shuffle);
+
+void playlist_clear_selected(void);
+
+GList *get_playlist_nth(guint);
+gboolean playlist_set_current_name(const gchar * filename);
+const gchar *playlist_get_current_name(void);
+void playlist_new(void);
+
+PlaylistFormat playlist_format_get_from_name(const gchar * filename);
+gboolean is_playlist_name(const gchar * filename);
+
+#define PLAYLIST_LOCK() G_LOCK(playlist)
+#define PLAYLIST_UNLOCK() G_UNLOCK(playlist)
+
+G_LOCK_EXTERN(playlist);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,832 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * A note about Pango and some funky spacey fonts: Weirdly baselined
+ * fonts, or fonts with weird ascents or descents _will_ display a
+ * little bit weird in the playlist widget, but the display engine
+ * won't make it look too bad, just a little deranged. I honestly
+ * don't think it's worth fixing (around...), it doesn't have to be
+ * perfectly fitting, just the general look has to be ok, which it
+ * IMHO is.
+ *
+ * A second note: The numbers aren't perfectly aligned, but in the
+ * end it looks better when using a single Pango layout for each
+ * number.
+ */
+
+#include "playlist_list.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "main.h"
+#include "input.h"
+#include "playback.h"
+#include "playlist.h"
+#include "playlistwin.h"
+#include "util.h"
+
+#include "debug.h"
+
+static PangoFontDescription *playlist_list_font = NULL;
+static gint ascent, descent, width_delta_digit_one;
+static gboolean has_slant;
+static guint padding;
+
+/* FIXME: the following globals should not be needed. */
+static gint width_approx_letters;
+static gint width_colon, width_colon_third;
+static gint width_approx_digits, width_approx_digits_half;
+
+static gboolean
+playlist_list_auto_drag_down_func(gpointer data)
+{
+ PlayList_List *pl = data;
+
+ if (pl->pl_auto_drag_down) {
+ playlist_list_move_down(pl);
+ pl->pl_first++;
+ playlistwin_update_list();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+playlist_list_auto_drag_up_func(gpointer data)
+{
+ PlayList_List *pl = data;
+
+ if (pl->pl_auto_drag_up) {
+ playlist_list_move_up(pl);
+ pl->pl_first--;
+ playlistwin_update_list();
+ return TRUE;
+
+ }
+ return FALSE;
+}
+
+void
+playlist_list_move_up(PlayList_List * pl)
+{
+ GList *list;
+
+ PLAYLIST_LOCK();
+ if ((list = playlist_get()) == NULL) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+ if (PLAYLIST_ENTRY(list->data)->selected) {
+ /* We are at the top */
+ PLAYLIST_UNLOCK();
+ return;
+ }
+ while (list) {
+ if (PLAYLIST_ENTRY(list->data)->selected)
+ glist_moveup(list);
+ list = g_list_next(list);
+ }
+ PLAYLIST_UNLOCK();
+ if (pl->pl_prev_selected != -1)
+ pl->pl_prev_selected--;
+ if (pl->pl_prev_min != -1)
+ pl->pl_prev_min--;
+ if (pl->pl_prev_max != -1)
+ pl->pl_prev_max--;
+}
+
+void
+playlist_list_move_down(PlayList_List * pl)
+{
+ GList *list;
+
+ PLAYLIST_LOCK();
+
+ if (!(list = g_list_last(playlist_get()))) {
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ if (PLAYLIST_ENTRY(list->data)->selected) {
+ /* We are at the bottom */
+ PLAYLIST_UNLOCK();
+ return;
+ }
+
+ while (list) {
+ if (PLAYLIST_ENTRY(list->data)->selected)
+ glist_movedown(list);
+ list = g_list_previous(list);
+ }
+
+ PLAYLIST_UNLOCK();
+
+ if (pl->pl_prev_selected != -1)
+ pl->pl_prev_selected++;
+ if (pl->pl_prev_min != -1)
+ pl->pl_prev_min++;
+ if (pl->pl_prev_max != -1)
+ pl->pl_prev_max++;
+}
+
+static void
+playlist_list_button_press_cb(GtkWidget * widget,
+ GdkEventButton * event,
+ PlayList_List * pl)
+{
+ gint nr, y;
+
+ if (event->button == 1 && pl->pl_fheight &&
+ widget_contains(&pl->pl_widget, event->x, event->y)) {
+
+ y = event->y - pl->pl_widget.y;
+ nr = (y / pl->pl_fheight) + pl->pl_first;
+
+ if (nr >= playlist_get_length())
+ nr = playlist_get_length() - 1;
+
+ if (!(event->state & GDK_CONTROL_MASK))
+ playlist_select_all(FALSE);
+
+ if (event->state & GDK_SHIFT_MASK && pl->pl_prev_selected != -1) {
+ playlist_select_range(pl->pl_prev_selected, nr, TRUE);
+ pl->pl_prev_min = pl->pl_prev_selected;
+ pl->pl_prev_max = nr;
+ pl->pl_drag_pos = nr - pl->pl_first;
+ }
+ else {
+ if (playlist_select_invert(nr)) {
+ if (event->state & GDK_CONTROL_MASK) {
+ if (pl->pl_prev_min == -1) {
+ pl->pl_prev_min = pl->pl_prev_selected;
+ pl->pl_prev_max = pl->pl_prev_selected;
+ }
+ if (nr < pl->pl_prev_min)
+ pl->pl_prev_min = nr;
+ else if (nr > pl->pl_prev_max)
+ pl->pl_prev_max = nr;
+ }
+ else
+ pl->pl_prev_min = -1;
+ pl->pl_prev_selected = nr;
+ pl->pl_drag_pos = nr - pl->pl_first;
+ }
+ }
+ if (event->type == GDK_2BUTTON_PRESS) {
+ /*
+ * Ungrab the pointer to prevent us from
+ * hanging on to it during the sometimes slow
+ * bmp_playback_initiate().
+ */
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ gdk_flush();
+ playlist_set_position(nr);
+ if (!bmp_playback_get_playing())
+ bmp_playback_initiate();
+ }
+
+ pl->pl_dragging = TRUE;
+ playlistwin_update_list();
+ }
+}
+
+gint
+playlist_list_get_playlist_position(PlayList_List * pl,
+ gint x,
+ gint y)
+{
+ gint iy, length;
+
+ if (!widget_contains(WIDGET(pl), x, y) || !pl->pl_fheight)
+ return -1;
+
+ if ((length = playlist_get_length()) == 0)
+ return -1;
+ iy = y - pl->pl_widget.y;
+
+ return (MIN((iy / pl->pl_fheight) + pl->pl_first, length - 1));
+}
+
+static void
+playlist_list_motion_cb(GtkWidget * widget,
+ GdkEventMotion * event,
+ PlayList_List * pl)
+{
+ gint nr, y, off, i;
+
+ if (pl->pl_dragging) {
+ y = event->y - pl->pl_widget.y;
+ nr = (y / pl->pl_fheight);
+ if (nr < 0) {
+ nr = 0;
+ if (!pl->pl_auto_drag_up) {
+ pl->pl_auto_drag_up = TRUE;
+ pl->pl_auto_drag_up_tag =
+ gtk_timeout_add(100, playlist_list_auto_drag_up_func, pl);
+ }
+ }
+ else if (pl->pl_auto_drag_up)
+ pl->pl_auto_drag_up = FALSE;
+
+ if (nr >= pl->pl_num_visible) {
+ nr = pl->pl_num_visible - 1;
+ if (!pl->pl_auto_drag_down) {
+ pl->pl_auto_drag_down = TRUE;
+ pl->pl_auto_drag_down_tag =
+ gtk_timeout_add(100, playlist_list_auto_drag_down_func,
+ pl);
+ }
+ }
+ else if (pl->pl_auto_drag_down)
+ pl->pl_auto_drag_down = FALSE;
+
+ off = nr - pl->pl_drag_pos;
+ if (off) {
+ for (i = 0; i < abs(off); i++) {
+ if (off < 0)
+ playlist_list_move_up(pl);
+ else
+ playlist_list_move_down(pl);
+
+ }
+ playlistwin_update_list();
+ }
+ pl->pl_drag_pos = nr;
+ }
+}
+
+static void
+playlist_list_button_release_cb(GtkWidget * widget,
+ GdkEventButton * event,
+ PlayList_List * pl)
+{
+ pl->pl_dragging = FALSE;
+ pl->pl_auto_drag_down = FALSE;
+ pl->pl_auto_drag_up = FALSE;
+}
+
+static void
+playlist_list_draw_string(PlayList_List * pl,
+ PangoFontDescription * font,
+ gint line,
+ gint width,
+ const gchar * text,
+ guint ppos)
+{
+
+ gint len;
+ gint len_pixmap;
+ guint plist_length_int;
+ PangoLayout *layout;
+ gchar *text_clipped;
+
+ REQUIRE_STATIC_LOCK(playlist);
+
+ len = g_utf8_strlen(text, -1);
+ len_pixmap = (width_approx_letters * len);
+
+ while (len_pixmap > width && len > 4) {
+ len--;
+ len_pixmap -= width_approx_letters;
+ }
+
+ /* FIXME: Is it possible to overflow text_clipped when text is non
+ UTF-8? - descender */
+
+ text_clipped = g_new0(gchar, strlen(text)+1);
+ g_utf8_strncpy(text_clipped, text, len);
+
+ if (cfg.show_numbers_in_pl) {
+ gchar *pos_string = g_strdup_printf("%d", ppos);
+ plist_length_int =
+ gint_count_digits(playlist_get_length_nolock()) + 1;
+
+ padding = plist_length_int;
+ padding = ((padding + 1) * width_approx_digits);
+
+ layout = gtk_widget_create_pango_layout(playlistwin, pos_string);
+ pango_layout_set_font_description(layout, playlist_list_font);
+ pango_layout_set_width(layout, plist_length_int * 100);
+
+ pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
+ gdk_draw_layout(pl->pl_widget.parent, pl->pl_widget.gc,
+ pl->pl_widget.x +
+ (width_approx_digits *
+ (-1 + plist_length_int - strlen(pos_string))) +
+ (width_approx_digits / 4),
+ pl->pl_widget.y + (line - 1) * pl->pl_fheight +
+ ascent + abs(descent), layout);
+ g_free(pos_string);
+ g_object_unref(layout);
+ }
+ else {
+ padding = 3;
+ }
+
+ layout = gtk_widget_create_pango_layout(playlistwin, text_clipped);
+
+ pango_layout_set_font_description(layout, playlist_list_font);
+ gdk_draw_layout(pl->pl_widget.parent, pl->pl_widget.gc,
+ pl->pl_widget.x + padding + (width_approx_letters / 4),
+ pl->pl_widget.y + (line - 1) * pl->pl_fheight +
+ ascent + abs(descent), layout);
+
+ g_object_unref(layout);
+ g_free(text_clipped);
+}
+
+void
+playlist_list_draw(Widget * w)
+{
+ PlayList_List *pl = PLAYLIST_LIST(w);
+ GList *list;
+ GdkGC *gc;
+ GdkPixmap *obj;
+ PangoLayout *layout;
+ gchar *title;
+ gint width, height;
+ gint i, max_first;
+ guint padding, padding_dwidth, padding_plength;
+ guint max_time_len = 0;
+ gint queue_tailpadding = 0;
+
+ gchar tail[100];
+ gchar queuepos[255]; /* FIXME CRITICAL: Allows for a limited number of queue positions only */
+ gchar length[40];
+
+ gchar **frags;
+ gchar *frag0;
+
+ gint plw_w, plw_h;
+
+ GdkRectangle *playlist_rect;
+
+ gc = pl->pl_widget.gc;
+
+ width = pl->pl_widget.width;
+ height = pl->pl_widget.height;
+
+ obj = pl->pl_widget.parent;
+
+ gtk_window_get_size(GTK_WINDOW(playlistwin), &plw_w, &plw_h);
+
+ playlist_rect = g_new0(GdkRectangle, 1);
+
+ playlist_rect->x = 0;
+ playlist_rect->y = 0;
+ playlist_rect->width = plw_w - 17;
+ playlist_rect->height = plw_h - 36;
+
+ gdk_gc_set_clip_origin(gc, 31, 58);
+ gdk_gc_set_clip_rectangle(gc, playlist_rect);
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMALBG));
+ gdk_draw_rectangle(obj, gc, TRUE, pl->pl_widget.x, pl->pl_widget.y,
+ width, height);
+
+ if (!playlist_list_font) {
+ g_critical("Couldn't open playlist font");
+ return;
+ }
+
+ pl->pl_fheight = (ascent + abs(descent));
+ pl->pl_num_visible = height / pl->pl_fheight;
+
+ max_first = playlist_get_length() - pl->pl_num_visible;
+ max_first = MAX(max_first, 0);
+
+ pl->pl_first = CLAMP(pl->pl_first, 0, max_first);
+
+ PLAYLIST_LOCK();
+ list = playlist_get();
+
+ for (i = 0; i < pl->pl_first; i++)
+ list = g_list_next(list);
+
+ for (i = pl->pl_first;
+ list && i < pl->pl_first + pl->pl_num_visible;
+ list = g_list_next(list), i++) {
+ gint pos;
+ PlaylistEntry *entry = list->data;
+
+ if (entry->selected) {
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_SELECTEDBG));
+ gdk_draw_rectangle(obj, gc, TRUE, pl->pl_widget.x,
+ pl->pl_widget.y +
+ ((i - pl->pl_first) * pl->pl_fheight),
+ width, pl->pl_fheight);
+ }
+ if (i == playlist_get_position_nolock())
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+ else
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMAL));
+
+ /* FIXME: entry->title should NEVER be NULL, and there should
+ NEVER be a need to do a UTF-8 conversion. Playlist title
+ strings should be kept properly. */
+
+ if (!entry->title) {
+ gchar *basename = g_path_get_basename(entry->filename);
+ title = filename_to_utf8(basename);
+ g_free(basename);
+ }
+ else
+ title = str_to_utf8(entry->title);
+
+ pos = playlist_get_queue_position(entry);
+
+ tail[0] = 0;
+ queuepos[0] = 0;
+ length[0] = 0;
+
+ if (pos != -1)
+ g_snprintf(queuepos, sizeof(queuepos), "%d", pos + 1);
+
+ if (entry->length != -1)
+ g_snprintf(length, sizeof(length), "%d:%-2.2d",
+ entry->length / 60000, (entry->length / 1000) % 60);
+
+ if (pos != -1 || entry->length != -1) {
+ gint x, y;
+ guint tail_width;
+ guint tail_len;
+
+ strncat(tail, length, sizeof(tail));
+ tail_len = strlen(tail);
+
+ max_time_len = MAX(max_time_len, tail_len);
+
+ /* FIXME: This is just an approximate alignment, maybe
+ something still fast, but exact could be done */
+
+ tail_width = width - (tail_len * width_approx_digits) +
+ (width_approx_digits_half) - 3;
+
+ if (i == playlist_get_position_nolock())
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+ else
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMAL));
+ playlist_list_draw_string(pl, playlist_list_font,
+ i - pl->pl_first, tail_width, title,
+ i + 1);
+
+ x = pl->pl_widget.x + width - width_approx_digits * 2;
+ y = pl->pl_widget.y + ((i - pl->pl_first) -
+ 1) * pl->pl_fheight + ascent;
+
+ if (entry->selected) {
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_SELECTEDBG));
+ }
+ else {
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMALBG));
+ }
+
+ /* This isn't very cool, but i don't see a way to
+ * calculate row widths with Pango fast enough here */
+
+ gdk_draw_rectangle(obj, gc, TRUE,
+ pl->pl_widget.x + pl->pl_widget.width -
+ (width_approx_digits * 6),
+ y + abs(descent),
+ (width_approx_digits * 6), pl->pl_fheight - 1);
+
+ if (i == playlist_get_position_nolock())
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+ else
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMAL));
+
+ frags = NULL;
+ frag0 = NULL;
+
+ if ( (strlen(tail)>0) && (tail != NULL) ) {
+
+ frags = g_strsplit(tail, ":", 0);
+ frag0 = g_strconcat(frags[0], ":", NULL);
+
+ layout = gtk_widget_create_pango_layout(playlistwin, frags[1]);
+ pango_layout_set_font_description(layout, playlist_list_font);
+ pango_layout_set_width(layout, tail_len * 100);
+ pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
+ gdk_draw_layout(obj, gc, x - (0.5 * width_approx_digits),
+ y + abs(descent), layout);
+ g_object_unref(layout);
+
+ layout = gtk_widget_create_pango_layout(playlistwin, frag0);
+ pango_layout_set_font_description(layout, playlist_list_font);
+ pango_layout_set_width(layout, tail_len * 100);
+ pango_layout_set_alignment(layout, PANGO_ALIGN_RIGHT);
+ gdk_draw_layout(obj, gc, x - (0.75 * width_approx_digits),
+ y + abs(descent), layout);
+ g_object_unref(layout);
+
+ g_free(frag0);
+ g_strfreev(frags);
+
+ }
+
+ if (pos != -1) {
+
+ if (i == playlist_get_position_nolock())
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+ else
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMAL));
+
+ /* DON'T remove the commented code yet please -- Milosz */
+
+ queue_tailpadding = 5;
+
+ gdk_draw_rectangle(obj, gc, FALSE,
+ x -
+ (((queue_tailpadding +
+ strlen(queuepos)) *
+ width_approx_digits) +
+ (width_approx_digits / 4)),
+ y + abs(descent) + 1,
+ (strlen(queuepos)) *
+ width_approx_digits +
+ (width_approx_digits / 2),
+ pl->pl_fheight - 2);
+
+ layout =
+ gtk_widget_create_pango_layout(playlistwin, queuepos);
+ pango_layout_set_font_description(layout, playlist_list_font);
+ pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER);
+
+ gdk_draw_layout(obj, gc,
+ x -
+ ((queue_tailpadding +
+ strlen(queuepos)) * width_approx_digits),
+ y + abs(descent), layout);
+ g_object_unref(layout);
+
+ }
+
+
+
+ }
+ else {
+ if (i == playlist_get_position_nolock())
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+ else
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMAL));
+
+ playlist_list_draw_string(pl, playlist_list_font,
+ i - pl->pl_first, width, title, i + 1);
+ }
+
+ g_free(title);
+ }
+
+
+ /*
+ * Drop target hovering over the playlist, so draw some hint where the
+ * drop will occur.
+ *
+ * This is (currently? unfixably?) broken when dragging files from Qt/KDE apps,
+ * probably due to DnD signaling problems (actually i have no clue).
+ *
+ */
+
+ if (pl->pl_drag_motion) {
+ guint pos, x, y, plx, ply, plength, lpadding;
+
+ if (cfg.show_numbers_in_pl) {
+ lpadding = gint_count_digits(playlist_get_length_nolock()) + 1;
+ lpadding = ((lpadding + 1) * width_approx_digits);
+ }
+ else {
+ lpadding = 3;
+ };
+
+ /* We already hold the mutex and have the playlist locked, so call
+ the non-locking function. */
+ plength = playlist_get_length_nolock();
+
+ x = pl->drag_motion_x;
+ y = pl->drag_motion_y;
+
+ plx = pl->pl_widget.x;
+ ply = pl->pl_widget.y;
+
+ if ((x > pl->pl_widget.x) && !(x > pl->pl_widget.width)) {
+
+ if ((y > pl->pl_widget.y)
+ && !(y > (pl->pl_widget.height + ply))) {
+
+ pos = ((y - ((Widget *) pl)->y) / pl->pl_fheight) +
+ pl->pl_first;
+
+ if (pos > (plength)) {
+ pos = plength;
+ }
+
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+
+ gdk_draw_line(obj, gc, pl->pl_widget.x,
+/* pl->pl_widget.x + lpadding + (width_approx_letters / 4),*/
+ pl->pl_widget.y +
+ ((pos - pl->pl_first) * pl->pl_fheight),
+ pl->pl_widget.width + pl->pl_widget.x - 1,
+ pl->pl_widget.y +
+ ((pos - pl->pl_first) * pl->pl_fheight));
+ }
+
+ }
+
+ /* When dropping on the borders of the playlist, outside the text area,
+ * files get appended at the end of the list. Show that too.
+ */
+
+ if ((y < ply) || (y > pl->pl_widget.height + ply)) {
+ if ((y >= 0) || (y <= (pl->pl_widget.height + ply))) {
+ pos = plength;
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_CURRENT));
+
+ gdk_draw_line(obj, gc, pl->pl_widget.x,
+/* pl->pl_widget.x + lpadding + (width_approx_letters / 4), */
+ pl->pl_widget.y +
+ ((pos - pl->pl_first) * pl->pl_fheight),
+ pl->pl_widget.width + pl->pl_widget.x - 1,
+ pl->pl_widget.y +
+ ((pos - pl->pl_first) * pl->pl_fheight));
+
+ }
+ }
+
+
+ }
+
+ gdk_gc_set_foreground(gc,
+ skin_get_color(bmp_active_skin,
+ SKIN_PLEDIT_NORMAL));
+
+ if (cfg.show_numbers_in_pl) {
+
+ padding_plength = playlist_get_length_nolock();
+
+ if (padding_plength == 0) {
+ padding_dwidth = 0;
+ }
+ else {
+ padding_dwidth = gint_count_digits(playlist_get_length_nolock());
+ }
+
+ padding =
+ (padding_dwidth *
+ width_approx_digits) + width_approx_digits;
+
+
+ /* For italic or oblique fonts we add another half of the
+ * approximate width */
+ if (has_slant)
+ padding += width_approx_digits_half;
+
+ gdk_draw_line(obj, gc,
+ pl->pl_widget.x + padding,
+ pl->pl_widget.y,
+ pl->pl_widget.x + padding,
+ (pl->pl_widget.y + pl->pl_widget.height));
+ }
+
+ playlist_rect->x = 0;
+ playlist_rect->y = 0;
+ playlist_rect->width = plw_w;
+ playlist_rect->height = plw_h;
+
+ gdk_gc_set_clip_origin(gc, 0, 0);
+ gdk_gc_set_clip_rectangle(gc, NULL);
+
+ PLAYLIST_UNLOCK();
+}
+
+
+PlayList_List *
+create_playlist_list(GList ** wlist,
+ GdkPixmap * parent,
+ GdkGC * gc,
+ gint x, gint y,
+ gint w, gint h)
+{
+ PlayList_List *pl;
+
+ pl = g_new0(PlayList_List, 1);
+ widget_init(&pl->pl_widget, parent, gc, x, y, w, h, TRUE);
+
+ pl->pl_widget.button_press_cb =
+ (WidgetButtonPressFunc) playlist_list_button_press_cb;
+ pl->pl_widget.button_release_cb =
+ (WidgetButtonReleaseFunc) playlist_list_button_release_cb;
+ pl->pl_widget.motion_cb = (WidgetMotionFunc) playlist_list_motion_cb;
+ pl->pl_widget.draw = playlist_list_draw;
+
+ pl->pl_prev_selected = -1;
+ pl->pl_prev_min = -1;
+ pl->pl_prev_max = -1;
+
+ widget_list_add(wlist, WIDGET(pl));
+
+ return pl;
+}
+
+void
+playlist_list_set_font(const gchar * font)
+{
+
+ /* Welcome to bad hack central 2k3 */
+
+ gchar *font_lower;
+ gint width_temp;
+ gint width_temp_0;
+
+ playlist_list_font = pango_font_description_from_string(font);
+
+ text_get_extents(font,
+ "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz ",
+ &width_approx_letters, NULL, &ascent, &descent);
+
+ width_approx_letters = (width_approx_letters / 53);
+
+ /* Experimental: We don't weigh the 1 into total because it's width is almost always
+ * very different from the rest
+ */
+ text_get_extents(font, "023456789", &width_approx_digits, NULL, NULL,
+ NULL);
+ width_approx_digits = (width_approx_digits / 9);
+
+ /* Precache some often used calculations */
+ width_approx_digits_half = width_approx_digits / 2;
+
+ /* FIXME: We assume that any other number is broader than the "1" */
+ text_get_extents(font, "1", &width_temp, NULL, NULL, NULL);
+ text_get_extents(font, "2", &width_temp_0, NULL, NULL, NULL);
+
+ if (abs(width_temp_0 - width_temp) < 2) {
+ width_delta_digit_one = 0;
+ }
+ else {
+ width_delta_digit_one = ((width_temp_0 - width_temp) / 2) + 2;
+ }
+
+ text_get_extents(font, ":", &width_colon, NULL, NULL, NULL);
+ width_colon_third = width_colon / 4;
+
+ font_lower = g_utf8_strdown(font, strlen(font));
+ /* This doesn't take any i18n into account, but i think there is none with TTF fonts
+ * FIXME: This can probably be retrieved trough Pango too
+ */
+ has_slant = g_strstr_len(font_lower, strlen(font_lower), "oblique")
+ || g_strstr_len(font_lower, strlen(font_lower), "italic");
+
+ g_free(font_lower);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_list.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,52 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLAYLIST_LIST_H
+#define PLAYLIST_LIST_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+
+#define PLAYLIST_LIST(x) ((PlayList_List *)(x))
+struct _PlayList_List {
+ Widget pl_widget;
+ gint pl_first, pl_fheight, pl_prev_selected, pl_prev_min, pl_prev_max;
+ gint pl_num_visible, pl_drag_pos;
+ gboolean pl_dragging, pl_auto_drag_down, pl_auto_drag_up;
+ gint pl_auto_drag_up_tag, pl_auto_drag_down_tag;
+ gboolean pl_drag_motion;
+ gint drag_motion_x, drag_motion_y;
+};
+
+typedef struct _PlayList_List PlayList_List;
+
+PlayList_List *create_playlist_list(GList ** wlist, GdkPixmap * parent,
+ GdkGC * gc, gint x, gint y, gint w,
+ gint h);
+void playlist_list_move_up(PlayList_List * pl);
+void playlist_list_move_down(PlayList_List * pl);
+int playlist_list_get_playlist_position(PlayList_List * pl, gint x, gint y);
+void playlist_list_set_font(const gchar * font);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,174 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "playlist_popup.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <string.h>
+
+#include "skin.h"
+#include "util.h"
+
+typedef struct {
+ GtkWidget *window;
+ GdkGC *gc;
+ gint num_items;
+ gint *nx, *ny;
+ gint *sx, *sy;
+ gint barx, bary;
+ gint active, base;
+ void (*handler) (gint item);
+} PlaylistPopup;
+
+static PlaylistPopup *popup = NULL;
+
+static void
+playlist_popup_draw(PlaylistPopup * popup)
+{
+ gint i;
+
+ skin_draw_pixmap(bmp_active_skin, popup->window->window, popup->gc,
+ SKIN_PLEDIT, popup->barx, popup->bary, 0, 0, 3,
+ popup->num_items * 18);
+ for (i = 0; i < popup->num_items; i++) {
+ if (i == popup->active)
+ skin_draw_pixmap(bmp_active_skin, popup->window->window,
+ popup->gc, SKIN_PLEDIT, popup->sx[i],
+ popup->sy[i], 3, i * 18, 22, 18);
+ else
+ skin_draw_pixmap(bmp_active_skin, popup->window->window,
+ popup->gc, SKIN_PLEDIT, popup->nx[i],
+ popup->ny[i], 3, i * 18, 22, 18);
+ }
+ /* FIXME: What is this flush doing here? */
+ gdk_flush();
+}
+
+void
+playlist_popup_destroy(void)
+{
+ if (popup) {
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ gdk_flush();
+ gtk_widget_destroy(popup->window);
+ g_object_unref(popup->gc);
+ g_free(popup->nx);
+ g_free(popup->ny);
+ g_free(popup->sx);
+ g_free(popup->sy);
+ if (popup->handler && popup->active != -1)
+ popup->handler(popup->active + popup->base);
+ g_free(popup);
+ popup = NULL;
+ }
+}
+
+static void
+playlist_popup_expose(GtkWidget * widget, GdkEvent * event,
+ gpointer callback_data)
+{
+ playlist_popup_draw(popup);
+}
+
+static void
+playlist_popup_motion(GtkWidget * widget,
+ GdkEventMotion * event, gpointer callback_data)
+{
+ gint active;
+
+ if (event->x >= 0 && event->x < 25 && event->y >= 0
+ && event->y < popup->num_items * 18) {
+ active = event->y / 18;
+ if (popup->active != active) {
+ popup->active = active;
+ playlist_popup_draw(popup);
+ }
+ }
+ else if (popup->active != -1) {
+ popup->active = -1;
+ playlist_popup_draw(popup);
+ }
+}
+
+static void
+playlist_popup_release(GtkWidget * widget,
+ GdkEventButton * event, gpointer callback_data)
+{
+ playlist_popup_destroy();
+}
+
+void
+playlist_popup(gint x, gint y, gint num_items, gint * nx, gint * ny,
+ gint * sx, gint * sy, gint barx, gint bary, gint base,
+ void (*handler) (gint item))
+{
+ if (popup)
+ playlist_popup_destroy();
+ popup = g_new0(PlaylistPopup, 1);
+ popup->num_items = num_items;
+ popup->nx = g_new0(gint, num_items);
+ memcpy(popup->nx, nx, sizeof(gint) * num_items);
+ popup->ny = g_new0(gint, num_items);
+ memcpy(popup->ny, ny, sizeof(gint) * num_items);
+ popup->sx = g_new0(gint, num_items);
+ memcpy(popup->sx, sx, sizeof(gint) * num_items);
+ popup->sy = g_new0(gint, num_items);
+ memcpy(popup->sy, sy, sizeof(gint) * num_items);
+ popup->barx = barx;
+ popup->bary = bary;
+ popup->handler = handler;
+ popup->active = num_items - 1;
+ popup->base = base;
+
+ popup->window = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_window_set_default_size(GTK_WINDOW(popup->window), 25,
+ num_items * 18);
+ gtk_widget_set_app_paintable(popup->window, TRUE);
+ gtk_widget_set_events(popup->window,
+ GDK_BUTTON_MOTION_MASK | GDK_BUTTON_RELEASE_MASK
+ | GDK_EXPOSURE_MASK);
+ gtk_widget_realize(popup->window);
+
+ popup->gc = gdk_gc_new(popup->window->window);
+
+ g_signal_connect(popup->window, "expose_event",
+ G_CALLBACK(playlist_popup_expose), NULL);
+ g_signal_connect(popup->window, "motion_notify_event",
+ G_CALLBACK(playlist_popup_motion), NULL);
+ g_signal_connect(popup->window, "button_release_event",
+ G_CALLBACK(playlist_popup_release), NULL);
+
+ util_set_cursor(popup->window);
+
+ gtk_window_move(GTK_WINDOW(popup->window), x - 1, y - 1);
+ gtk_widget_show(popup->window);
+ gdk_window_raise(popup->window->window);
+ gdk_flush();
+
+ playlist_popup_draw(popup);
+
+ gdk_pointer_grab(popup->window->window, FALSE,
+ GDK_BUTTON_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
+ NULL, NULL, GDK_CURRENT_TIME);
+ gdk_flush();
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_popup.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,32 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLAYLIST_POPUP_H
+#define PLAYLIST_POPUP_H
+
+#include <glib.h>
+
+void playlist_popup_destroy(void);
+void playlist_popup(gint x, gint y, gint num_items, gint * nx, gint * ny,
+ gint * sx, gint * sy, gint barx, gint bary, gint base,
+ void (*handler) (gint item));
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,168 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "playlist_slider.h"
+
+#include <glib.h>
+
+#include "playlist.h"
+#include "playlistwin.h"
+#include "skin.h"
+#include "widget.h"
+
+void
+playlistslider_draw(Widget * w)
+{
+ PlaylistSlider *ps = (PlaylistSlider *) w;
+ GdkPixmap *obj;
+ gint y, skinx;
+
+ g_return_if_fail(ps != NULL);
+ g_return_if_fail(ps->ps_list != NULL);
+
+ if (playlist_get_length() > ps->ps_list->pl_num_visible)
+ y = (ps->ps_list->pl_first * (ps->ps_widget.height - 19)) /
+ (playlist_get_length() - ps->ps_list->pl_num_visible);
+ else
+ y = 0;
+
+ obj = ps->ps_widget.parent;
+
+ if (ps->ps_back_image) {
+ if (skin_get_id() != ps->ps_skin_id)
+ ps->ps_skin_id = skin_get_id();
+ else if (ps->ps_widget.height == ps->ps_prev_height)
+ gdk_draw_image(obj, ps->ps_widget.gc,
+ ps->ps_back_image, 0, 0,
+ ps->ps_widget.x,
+ ps->ps_widget.y + ps->ps_prev_y, 8, 18);
+ gdk_image_destroy(ps->ps_back_image);
+ }
+
+ ps->ps_prev_y = y;
+ ps->ps_prev_height = ps->ps_widget.height;
+ ps->ps_back_image = gdk_drawable_get_image(obj, ps->ps_widget.x,
+ ps->ps_widget.y + y, 8, 18);
+ if (ps->ps_is_draging)
+ skinx = 61;
+ else
+ skinx = 52;
+
+ skin_draw_pixmap(bmp_active_skin, obj, ps->ps_widget.gc, SKIN_PLEDIT,
+ skinx, 53, ps->ps_widget.x, ps->ps_widget.y + y, 8, 18);
+}
+
+static void
+playlistslider_set_pos(PlaylistSlider * ps, gint y)
+{
+ gint pos;
+
+ y = CLAMP(y, 0, ps->ps_widget.height - 19);
+
+ pos = (y * (playlist_get_length() - ps->ps_list->pl_num_visible)) /
+ (ps->ps_widget.height - 19);
+ playlistwin_set_toprow(pos);
+}
+
+
+void
+playlistslider_button_press_cb(GtkWidget * widget,
+ GdkEventButton * event, PlaylistSlider * ps)
+{
+ gint y = event->y - ps->ps_widget.y;
+
+ if (!widget_contains(&ps->ps_widget, event->x, event->y))
+ return;
+
+ if (event->button != 1 && event->button != 2)
+ return;
+
+ if ((y >= ps->ps_prev_y && y < ps->ps_prev_y + 18)) {
+ ps->ps_is_draging |= event->button;
+ ps->ps_drag_y = y - ps->ps_prev_y;
+ widget_draw(WIDGET(ps));
+ }
+ else if (event->button == 2) {
+ playlistslider_set_pos(ps, y);
+ ps->ps_is_draging |= event->button;
+ ps->ps_drag_y = 0;
+ widget_draw(WIDGET(ps));
+ }
+ else {
+ gint n = ps->ps_list->pl_num_visible / 2;
+ if (y < ps->ps_prev_y)
+ n *= -1;
+ playlistwin_scroll(n);
+ }
+}
+
+void
+playlistslider_button_release_cb(GtkWidget * widget,
+ GdkEventButton * event,
+ PlaylistSlider * ps)
+{
+ if (ps->ps_is_draging) {
+ ps->ps_is_draging &= ~event->button;
+ widget_draw(WIDGET(ps));
+ }
+}
+
+void
+playlistslider_motion_cb(GtkWidget * widget, GdkEventMotion * event,
+ PlaylistSlider * ps)
+{
+ gint y;
+
+ if (!ps->ps_is_draging)
+ return;
+
+ y = event->y - ps->ps_widget.y - ps->ps_drag_y;
+ playlistslider_set_pos(ps, y);
+}
+
+PlaylistSlider *
+create_playlistslider(GList ** wlist, GdkPixmap * parent,
+ GdkGC * gc, gint x, gint y, gint h,
+ PlayList_List * list)
+{
+ PlaylistSlider *ps;
+
+ ps = g_new0(PlaylistSlider, 1);
+ widget_init(&ps->ps_widget, parent, gc, x, y, 8, h, 1);
+
+ ps->ps_widget.button_press_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ playlistslider_button_press_cb;
+
+ ps->ps_widget.button_release_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ playlistslider_button_release_cb;
+
+ ps->ps_widget.motion_cb =
+ (void (*)(GtkWidget *, GdkEventMotion *, gpointer))
+ playlistslider_motion_cb;
+
+ ps->ps_widget.draw = playlistslider_draw;
+ ps->ps_list = list;
+
+ widget_list_add(wlist, WIDGET(ps));
+ return ps;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlist_slider.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,47 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLAYLIST_SLIDER_H
+#define PLAYLIST_SLIDER_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "playlist_list.h"
+#include "widget.h"
+
+#define PLAYLIST_SLIDER(x) ((PlayerlistSlider *)(x))
+struct _PlaylistSlider {
+ Widget ps_widget;
+ PlayList_List *ps_list;
+ gboolean ps_is_draging;
+ gint ps_drag_y, ps_prev_y, ps_prev_height;
+ GdkImage *ps_back_image;
+ gint ps_skin_id;
+};
+
+typedef struct _PlaylistSlider PlaylistSlider;
+
+PlaylistSlider *create_playlistslider(GList ** wlist, GdkPixmap * parent,
+ GdkGC * gc, gint x, gint y, gint h,
+ PlayList_List * list);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1975 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "playlistwin.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+#include <string.h>
+
+#include <gdk/gdkx.h>
+
+#include <X11/Xlib.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "libbeep/util.h"
+
+#include "dnd.h"
+#include "dock.h"
+#include "equalizer.h"
+#include "hints.h"
+#include "input.h"
+#include "main.h"
+#include "mainwin.h"
+#include "playback.h"
+#include "playlist.h"
+#include "playlist_list.h"
+#include "playlist_slider.h"
+#include "playlist_popup.h"
+#include "pbutton.h"
+#include "sbutton.h"
+#include "skin.h"
+#include "textbox.h"
+#include "util.h"
+
+#include "pixmaps.h"
+//#include "images/bmp_playlist.xpm"
+
+
+#define ITEM_SEPARATOR {"/-", NULL, NULL, 0, "<Separator>"}
+
+
+enum {
+ ADD_URL, ADD_DIR, ADD_FILES,
+ SUB_MISC, SUB_ALL, SUB_CROP, SUB_SELECTED,
+ SEL_INV, SEL_ZERO, SEL_ALL,
+ MISC_SORT, MISC_FILEINFO, MISC_MISCOPTS,
+ PLIST_NEW, PLIST_SAVE_AS, PLIST_LOAD,
+ SEL_LOOKUP, CLOSE_PL_WINDOW, MOVE_UP, PLIST_SAVE,
+ MISC_QUEUE, PLIST_CQUEUE, PLIST_JTF, PLIST_JTT,
+ PLAYLISTWIN_REMOVE_DEAD_FILES,
+ PLAYLISTWIN_REFRESH
+};
+
+enum {
+ PLAYLISTWIN_SORT_BYTITLE, PLAYLISTWIN_SORT_BYFILENAME,
+ PLAYLISTWIN_SORT_BYPATH, PLAYLISTWIN_SORT_BYDATE,
+ PLAYLISTWIN_SORT_SEL_BYTITLE, PLAYLISTWIN_SORT_SEL_BYFILENAME,
+ PLAYLISTWIN_SORT_SEL_BYPATH, PLAYLISTWIN_SORT_SEL_BYDATE,
+ PLAYLISTWIN_SORT_RANDOMIZE, PLAYLISTWIN_SORT_REVERSE
+};
+
+GtkWidget *playlistwin;
+
+PlayList_List *playlistwin_list = NULL;
+PButton *playlistwin_shade, *playlistwin_close;
+Vis *playlistwin_vis;
+
+static gboolean playlistwin_resizing = FALSE;
+
+static GtkItemFactory *playlistwin_popup_menu;
+static GtkItemFactory *pladd_menu, *pldel_menu;
+static GtkItemFactory *plsel_menu, *plsort_menu;
+static GtkItemFactory *pllist_menu;
+
+static GdkPixmap *playlistwin_bg;
+static GdkBitmap *playlistwin_mask = NULL;
+static GdkGC *playlistwin_gc;
+
+static GtkAccelGroup *playlistwin_accel;
+
+static gboolean playlistwin_hint_flag = FALSE;
+
+static PlaylistSlider *playlistwin_slider = NULL;
+static TextBox *playlistwin_time_min, *playlistwin_time_sec;
+static TextBox *playlistwin_info, *playlistwin_sinfo;
+static SButton *playlistwin_srew, *playlistwin_splay;
+static SButton *playlistwin_spause, *playlistwin_sstop;
+static SButton *playlistwin_sfwd, *playlistwin_seject;
+static SButton *playlistwin_sscroll_up, *playlistwin_sscroll_down;
+
+static GList *playlistwin_wlist = NULL;
+static gboolean playlistwin_vis_enabled = FALSE;
+
+
+static void plsort_menu_callback(gpointer cb_data, guint action,
+ GtkWidget * w);
+static void playlistwin_sub_menu_callback(gpointer cb_data, guint action,
+ GtkWidget * w);
+static void playlistwin_popup_menu_callback(gpointer cb_data, guint action,
+ GtkWidget * w);
+
+static GtkItemFactoryEntry playlistwin_popup_menu_entries[] = {
+ {N_("/View Track Details"), NULL,
+ playlistwin_popup_menu_callback,
+ MISC_FILEINFO, "<ImageItem>", my_pixbuf},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Remove Selected"), "Delete",
+ playlistwin_sub_menu_callback,
+ SUB_SELECTED, "<Item>", GTK_STOCK_DELETE},
+
+ {N_("/Remove Unselected"), NULL,
+ playlistwin_sub_menu_callback,
+ SUB_CROP, "<Item>", GTK_STOCK_CUT},
+
+ {N_("/Remove All"), NULL,
+ playlistwin_sub_menu_callback,
+ SUB_ALL, "<Item>", GTK_STOCK_DELETE},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Queue Toggle"), "q",
+ playlistwin_popup_menu_callback,
+ MISC_QUEUE, "<Item>", NULL},
+};
+
+static GtkItemFactoryEntry pladd_menu_entries[] = {
+ {N_("/Add CD..."), "<shift>c",
+ mainwin_general_menu_callback,
+ MAINWIN_GENERAL_ADDCD, "<StockItem>", GTK_STOCK_CDROM},
+
+ {N_("/Add Internet Address..."), "<control>h",
+ mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYLOCATION, "<StockItem>", GTK_STOCK_NETWORK},
+
+ /* GtkFileChooser in SELECT_FOLDER mode is currently BROKEN! */
+#if 0
+ {N_("/Add Folders..."), "d",
+ mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYDIRECTORY, "<StockItem>", GTK_STOCK_OPEN},
+#endif
+
+ {N_("/Add Files..."), "f",
+ mainwin_general_menu_callback,
+ MAINWIN_GENERAL_PLAYFILE, "<StockItem>", GTK_STOCK_OPEN},
+};
+
+static GtkItemFactoryEntry pldel_menu_entries[] = {
+ {N_("/Clear Queue"), "<shift>Q",
+ playlistwin_popup_menu_callback,
+ PLIST_CQUEUE, "<Item>"},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Remove Unavailable Files"), NULL,
+ playlistwin_sub_menu_callback,
+ PLAYLISTWIN_REMOVE_DEAD_FILES, "<Item>", GTK_STOCK_DELETE},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Remove All"), NULL,
+ playlistwin_sub_menu_callback,
+ SUB_ALL, "<Item>", GTK_STOCK_DELETE},
+
+ {N_("/Remove Unselected"), NULL,
+ playlistwin_sub_menu_callback,
+ SUB_CROP, "<Item>", GTK_STOCK_DELETE},
+
+ {N_("/Remove Selected"), "Delete",
+ playlistwin_sub_menu_callback,
+ SUB_SELECTED, "<Item>", GTK_STOCK_DELETE}
+};
+
+static GtkItemFactoryEntry pllist_menu_entries[] = {
+ {N_("/New List"), NULL,
+ playlistwin_sub_menu_callback,
+ PLIST_NEW, "<StockItem>", GTK_STOCK_NEW},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Load List"), "o",
+ playlistwin_sub_menu_callback,
+ PLIST_LOAD, "<StockItem>", GTK_STOCK_OPEN},
+
+ {N_("/Save List"), "s",
+ playlistwin_sub_menu_callback,
+ PLIST_SAVE, "<StockItem>", GTK_STOCK_SAVE},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Update View"), "F5",
+ playlistwin_sub_menu_callback,
+ PLAYLISTWIN_REFRESH, "<StockItem>", GTK_STOCK_REFRESH}
+};
+
+static GtkItemFactoryEntry plsel_menu_entries[] = {
+ {N_("/Invert Selection"), NULL,
+ playlistwin_sub_menu_callback,
+ SEL_INV, "<Item>", GTK_STOCK_NETWORK},
+
+ ITEM_SEPARATOR,
+
+ {N_("/Select None"),"<Ctrl><Shift>A",
+ playlistwin_sub_menu_callback,
+ SEL_ZERO, "<Item>", GTK_STOCK_OPEN},
+
+ {N_("/Select All"), "<Ctrl>A",
+ playlistwin_sub_menu_callback,
+ SEL_ALL, "<Item>", GTK_STOCK_OPEN},
+};
+
+static GtkItemFactoryEntry plsort_menu_entries[] = {
+ {N_("/Randomize List"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_RANDOMIZE, "<Item>"},
+ {N_("/Reverse List"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_REVERSE, "<Item>"},
+ ITEM_SEPARATOR,
+ {N_("/Sort List"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Sort List/By Title"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_BYTITLE, "<Item>"},
+ {N_("/Sort List/By Filename"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_BYFILENAME, "<Item>"},
+ {N_("/Sort List/By Path + Filename"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_BYPATH, "<Item>"},
+ {N_("/Sort List/By Date"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_BYDATE, "<Item>"},
+ {N_("/Sort Selection"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Sort Selection/By Title"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_SEL_BYTITLE, "<Item>"},
+ {N_("/Sort Selection/By Filename"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_SEL_BYFILENAME, "<Item>"},
+ {N_("/Sort Selection/By Path + Filename"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_SEL_BYPATH, "<Item>"},
+ {N_("/Sort Selection/By Date"), NULL, plsort_menu_callback,
+ PLAYLISTWIN_SORT_SEL_BYDATE, "<Item>"}
+};
+
+
+static void playlistwin_draw_frame(void);
+
+
+gboolean
+playlistwin_is_shaded(void)
+{
+ return cfg.playlist_shaded;
+}
+
+gint
+playlistwin_get_width(void)
+{
+ return cfg.playlist_width;
+}
+
+gint
+playlistwin_get_height_unshaded(void)
+{
+ gint height = cfg.playlist_height;
+ return height;
+}
+
+gint
+playlistwin_get_height_shaded(void)
+{
+ return PLAYLISTWIN_SHADED_HEIGHT;
+}
+
+gint
+playlistwin_get_height(void)
+{
+ if (playlistwin_is_shaded())
+ return playlistwin_get_height_shaded();
+ else
+ return playlistwin_get_height_unshaded();
+}
+
+void
+playlistwin_get_size(gint * width, gint * height)
+{
+ if (width)
+ *width = playlistwin_get_width();
+
+ if (height)
+ *height = playlistwin_get_height();
+}
+
+static void
+playlistwin_update_info(void)
+{
+ gchar *text, *sel_text, *tot_text;
+ gulong selection, total;
+ gboolean selection_more, total_more;
+
+ playlist_get_total_time(&total, &selection, &total_more, &selection_more);
+
+ if (selection > 0 || (selection == 0 && !selection_more)) {
+ if (selection > 3600)
+ sel_text =
+ g_strdup_printf("%lu:%-2.2lu:%-2.2lu%s", selection / 3600,
+ (selection / 60) % 60, selection % 60,
+ (selection_more ? "+" : ""));
+ else
+ sel_text =
+ g_strdup_printf("%lu:%-2.2lu%s", selection / 60,
+ selection % 60, (selection_more ? "+" : ""));
+ }
+ else
+ sel_text = g_strdup("?");
+ if (total > 0 || (total == 0 && !total_more)) {
+ if (total > 3600)
+ tot_text =
+ g_strdup_printf("%lu:%-2.2lu:%-2.2lu%s", total / 3600,
+ (total / 60) % 60, total % 60,
+ total_more ? "+" : "");
+ else
+ tot_text =
+ g_strdup_printf("%lu:%-2.2lu%s", total / 60, total % 60,
+ total_more ? "+" : "");
+ }
+ else
+ tot_text = g_strdup("?");
+ text = g_strconcat(sel_text, "/", tot_text, NULL);
+ textbox_set_text(playlistwin_info, text);
+ g_free(text);
+ g_free(tot_text);
+ g_free(sel_text);
+}
+
+static void
+playlistwin_update_sinfo(void)
+{
+ gchar *posstr, *timestr, *title, *info, *dots;
+ gint pos, time, max_len;
+
+ pos = playlist_get_position();
+ title = playlist_get_songtitle(pos);
+ time = playlist_get_songtime(pos);
+
+ if (!title) {
+ textbox_set_text(playlistwin_sinfo, "");
+ return;
+ }
+
+ if (cfg.show_numbers_in_pl)
+ posstr = g_strdup_printf("%d. ", pos + 1);
+ else
+ posstr = g_strdup("");
+
+ max_len = (playlistwin_get_width() - 35) / 5 - strlen(posstr);
+
+ if (time != -1) {
+ timestr = g_strdup_printf(" %d:%-2.2d", time / 60000,
+ (time / 1000) % 60);
+ max_len -= strlen(timestr);
+ }
+ else
+ timestr = g_strdup("");
+
+ convert_title_text(title);
+
+ if (strlen(title) > max_len) {
+ max_len -= 3;
+ dots = "...";
+ }
+ else
+ dots = "";
+
+ info = g_strdup_printf("%s%-*.*s%s%s", posstr, max_len, max_len,
+ title, dots, timestr);
+ g_free(posstr);
+ g_free(title);
+ g_free(timestr);
+
+ textbox_set_text(playlistwin_sinfo, info);
+ g_free(info);
+}
+
+gboolean
+playlistwin_item_visible(gint index)
+{
+ if (index >= playlistwin_list->pl_first
+ && index <
+ (playlistwin_list->pl_first + playlistwin_list->pl_num_visible))
+ return TRUE;
+ return FALSE;
+}
+
+gint
+playlistwin_get_toprow(void)
+{
+ if (playlistwin_list)
+ return (playlistwin_list->pl_first);
+ return (-1);
+}
+
+void
+playlistwin_set_toprow(gint toprow)
+{
+ if (playlistwin_list)
+ playlistwin_list->pl_first = toprow;
+ playlistwin_update_list();
+}
+
+void
+playlistwin_update_list(void)
+{
+ g_return_if_fail(playlistwin_list != NULL);
+
+ widget_draw(WIDGET(playlistwin_list));
+ widget_draw(WIDGET(playlistwin_slider));
+ playlistwin_update_info();
+ playlistwin_update_sinfo();
+ /* mainwin_update_jtf(); */
+}
+
+#if 0
+static void
+playlistwin_redraw_list(void)
+{
+ g_return_if_fail(playlistwin_list != NULL);
+
+ draw_widget(playlistwin_list);
+ draw_widget(playlistwin_slider);
+}
+#endif
+
+static void
+playlistwin_set_mask(void)
+{
+ GdkGC *gc;
+ GdkColor pattern;
+
+ if (playlistwin_mask)
+ g_object_unref(playlistwin_mask);
+
+ playlistwin_mask =
+ gdk_pixmap_new(playlistwin->window, playlistwin_get_width(),
+ playlistwin_get_height(), 1);
+ gc = gdk_gc_new(playlistwin_mask);
+ pattern.pixel = 1;
+ gdk_gc_set_foreground(gc, &pattern);
+ gdk_draw_rectangle(playlistwin_mask, gc, TRUE, 0, 0,
+ playlistwin_get_width(), playlistwin_get_height());
+ gdk_gc_destroy(gc);
+
+ gtk_widget_shape_combine_mask(playlistwin, playlistwin_mask, 0, 0);
+}
+
+static void
+playlistwin_set_geometry_hints(gboolean shaded)
+{
+ GdkGeometry geometry;
+ GdkWindowHints mask;
+
+ geometry.min_width = PLAYLISTWIN_MIN_WIDTH;
+ geometry.max_width = G_MAXUINT16;
+ geometry.base_width = cfg.playlist_width;
+
+ geometry.width_inc = PLAYLISTWIN_WIDTH_SNAP;
+ geometry.height_inc = PLAYLISTWIN_HEIGHT_SNAP;
+
+ if (shaded) {
+ geometry.min_height = PLAYLISTWIN_SHADED_HEIGHT;
+ geometry.max_height = PLAYLISTWIN_SHADED_HEIGHT;
+ geometry.base_height = PLAYLISTWIN_SHADED_HEIGHT;
+ }
+ else {
+ geometry.min_height = PLAYLISTWIN_MIN_HEIGHT;
+ geometry.max_height = G_MAXUINT16;
+ geometry.base_height = cfg.playlist_height;
+ }
+
+ mask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE | GDK_HINT_RESIZE_INC |
+ GDK_HINT_BASE_SIZE;
+
+ gtk_window_set_geometry_hints(GTK_WINDOW(playlistwin),
+ playlistwin, &geometry, mask);
+}
+
+void
+playlistwin_set_shade(gboolean shaded)
+{
+ if (cfg.playlist_shaded == shaded)
+ return;
+
+ cfg.playlist_shaded = shaded;
+
+ if (shaded) {
+ widget_show(WIDGET(playlistwin_sinfo));
+ playlistwin_shade->pb_nx = 128;
+ playlistwin_shade->pb_ny = 45;
+ playlistwin_shade->pb_px = 150;
+ playlistwin_shade->pb_py = 42;
+ playlistwin_close->pb_nx = 138;
+ playlistwin_close->pb_ny = 45;
+ }
+ else {
+ widget_hide(WIDGET(playlistwin_sinfo));
+ playlistwin_shade->pb_nx = 157;
+ playlistwin_shade->pb_ny = 3;
+ playlistwin_shade->pb_px = 62;
+ playlistwin_shade->pb_py = 42;
+ playlistwin_close->pb_nx = 167;
+ playlistwin_close->pb_ny = 3;
+ }
+
+ dock_shade(dock_window_list, GTK_WINDOW(playlistwin),
+ playlistwin_get_height());
+
+ playlistwin_set_geometry_hints(cfg.playlist_shaded);
+
+ gtk_window_resize(GTK_WINDOW(playlistwin),
+ cfg.playlist_width,
+ playlistwin_get_height());
+
+ draw_playlist_window(TRUE);
+}
+
+static void
+playlistwin_set_shade_menu(gboolean shaded)
+{
+ GtkWidget *item;
+
+ item = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Roll up Playlist Editor");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), shaded);
+
+ playlistwin_set_shade(shaded);
+}
+
+void
+playlistwin_shade_toggle(void)
+{
+ playlistwin_set_shade_menu(!cfg.playlist_shaded);
+}
+
+static void
+playlistwin_release(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer callback_data)
+{
+ if (event->button == 3)
+ return;
+
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ playlistwin_resizing = FALSE;
+ gdk_flush();
+
+ if (dock_is_moving(GTK_WINDOW(playlistwin))) {
+ dock_move_release(GTK_WINDOW(playlistwin));
+#if 0
+ if (cfg.playlist_transparent)
+ playlistwin_update_list();
+#endif
+ }
+ else {
+ handle_release_cb(playlistwin_wlist, widget, event);
+ playlist_popup_destroy();
+ draw_playlist_window(FALSE);
+ }
+}
+
+void
+playlistwin_scroll(gint num)
+{
+ playlistwin_list->pl_first += num;
+ playlistwin_update_list();
+}
+
+void
+playlistwin_scroll_up_pushed(void)
+{
+ playlistwin_list->pl_first -= 3;
+ playlistwin_update_list();
+}
+
+void
+playlistwin_scroll_down_pushed(void)
+{
+ playlistwin_list->pl_first += 3;
+ playlistwin_update_list();
+}
+
+static void
+playlistwin_select_all(void)
+{
+ playlist_select_all(TRUE);
+ playlistwin_list->pl_prev_selected = 0;
+ playlistwin_list->pl_prev_min = 0;
+ playlistwin_list->pl_prev_max = playlist_get_length() - 1;
+ playlistwin_update_list();
+}
+
+static void
+playlistwin_select_none(void)
+{
+ playlist_select_all(FALSE);
+ playlistwin_list->pl_prev_selected = -1;
+ playlistwin_list->pl_prev_min = -1;
+ playlistwin_update_list();
+}
+
+static void
+playlistwin_inverse_selection(void)
+{
+ playlist_select_invert_all();
+ playlistwin_list->pl_prev_selected = -1;
+ playlistwin_list->pl_prev_min = -1;
+ playlistwin_update_list();
+}
+
+static void
+playlistwin_resize(gint width, gint height)
+{
+ gboolean redraw;
+
+ g_return_if_fail(width > 0 && height > 0);
+
+ cfg.playlist_width = width;
+
+ if (!cfg.playlist_shaded)
+ cfg.playlist_height = height;
+ else
+ height = cfg.playlist_height;
+
+ /* FIXME: why the fsck are we doing this manually? */
+ /* adjust widget positions and sizes */
+
+ widget_resize(WIDGET(playlistwin_list), width - 31, height - 58);
+
+ widget_move(WIDGET(playlistwin_slider), width - 15, 20);
+ widget_resize(WIDGET(playlistwin_slider), 8, height - 58);
+
+ widget_resize(WIDGET(playlistwin_sinfo), width - 35, 14);
+ playlistwin_update_sinfo();
+
+ widget_move(WIDGET(playlistwin_shade), width - 21, 3);
+ widget_move(WIDGET(playlistwin_close), width - 11, 3);
+ widget_move(WIDGET(playlistwin_time_min), width - 82, height - 15);
+ widget_move(WIDGET(playlistwin_time_sec), width - 64, height - 15);
+ widget_move(WIDGET(playlistwin_info), width - 143, height - 28);
+ widget_move(WIDGET(playlistwin_srew), width - 144, height - 16);
+ widget_move(WIDGET(playlistwin_splay), width - 138, height - 16);
+ widget_move(WIDGET(playlistwin_spause), width - 128, height - 16);
+ widget_move(WIDGET(playlistwin_sstop), width - 118, height - 16);
+ widget_move(WIDGET(playlistwin_sfwd), width - 109, height - 16);
+ widget_move(WIDGET(playlistwin_seject), width - 100, height - 16);
+ widget_move(WIDGET(playlistwin_sscroll_up), width - 14, height - 35);
+ widget_move(WIDGET(playlistwin_sscroll_down), width - 14, height - 30);
+
+ /* decide if we should show the mini visualizer */
+ if (playlistwin_get_width() >= 350) {
+ widget_move(WIDGET(playlistwin_vis), width - 223, height - 26);
+
+ if (playlistwin_vis_enabled)
+ widget_show(WIDGET(playlistwin_vis));
+ }
+ else
+ widget_hide(WIDGET(playlistwin_vis));
+
+ g_object_unref(playlistwin_bg);
+ playlistwin_bg = gdk_pixmap_new(playlistwin->window, width, height, -1);
+ playlistwin_set_mask();
+
+ widget_list_lock(playlistwin_wlist);
+
+ widget_list_change_pixmap(playlistwin_wlist, playlistwin_bg);
+ playlistwin_draw_frame();
+ widget_list_draw(playlistwin_wlist, &redraw, TRUE);
+ widget_list_clear_redraw(playlistwin_wlist);
+
+ widget_list_unlock(playlistwin_wlist);
+
+ gdk_window_set_back_pixmap(playlistwin->window, playlistwin_bg, 0);
+ gdk_window_clear(playlistwin->window);
+}
+
+
+
+static void
+playlistwin_motion(GtkWidget * widget,
+ GdkEventMotion * event,
+ gpointer callback_data)
+{
+ XEvent ev;
+
+ if (dock_is_moving(GTK_WINDOW(playlistwin))) {
+ dock_move_motion(GTK_WINDOW(playlistwin), event);
+ }
+ else {
+ handle_motion_cb(playlistwin_wlist, widget, event);
+ draw_playlist_window(FALSE);
+ }
+ gdk_flush();
+ while (XCheckMaskEvent(GDK_DISPLAY(), ButtonMotionMask, &ev));
+}
+
+static void
+playlistwin_show_filebrowser(void)
+{
+ util_run_filebrowser(NO_PLAY_BUTTON);
+}
+
+#if 0
+static void
+playlistwin_add_dir_handler(const gchar * dir)
+{
+ g_free(cfg.filesel_path);
+ cfg.filesel_path = g_strdup(dir);
+ playlist_add_dir(dir);
+}
+#endif
+
+static void
+playlistwin_fileinfo(void)
+{
+ /* Show the first selected file, or the current file if nothing is
+ * selected */
+ GList *list = playlist_get_selected();
+ if (list) {
+ playlist_fileinfo(GPOINTER_TO_INT(list->data));
+ g_list_free(list);
+ }
+ else
+ playlist_fileinfo_current();
+}
+
+static void
+menu_set_item_sensitive(GtkItemFactory * item_factory,
+ const gchar * path,
+ gboolean sensitive)
+{
+ GtkWidget *item = gtk_item_factory_get_widget(item_factory, path);
+ gtk_widget_set_sensitive(item, sensitive);
+}
+
+/* FIXME: broken */
+static void
+playlistwin_set_sensitive_sortmenu(void)
+{
+ gboolean set = playlist_get_num_selected() > 1;
+ menu_set_item_sensitive(plsort_menu, "/Sort Selection/By Title", set);
+ menu_set_item_sensitive(plsort_menu, "/Sort Selection/By Filename", set);
+ menu_set_item_sensitive(plsort_menu, "/Sort Selection/By Path + Filename", set);
+ menu_set_item_sensitive(plsort_menu, "/Sort Selection/By Date", set);
+}
+
+static void
+show_playlist_save_error(GtkWindow * parent,
+ const gchar * filename)
+{
+ GtkWidget *dialog;
+
+ g_return_if_fail(GTK_IS_WINDOW(parent));
+ g_return_if_fail(filename != NULL);
+
+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Error writing playlist \"%s\": %s"),
+ filename, strerror(errno));
+
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+static gboolean
+show_playlist_overwrite_prompt(GtkWindow * parent,
+ const gchar * filename)
+{
+ GtkWidget *dialog;
+ gint result;
+
+ g_return_val_if_fail(GTK_IS_WINDOW(parent), FALSE);
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ _("%s already exist. Continue?"),
+ filename);
+
+ result = gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+
+ return (result == GTK_RESPONSE_YES);
+}
+
+static void
+show_playlist_save_format_error(GtkWindow * parent,
+ const gchar * filename)
+{
+ const gchar *markup =
+ N_("<b><big>Unable to save playlist.</big></b>\n\n"
+ "Unknown file type for '%s'.\n");
+
+ GtkWidget *dialog;
+
+ g_return_if_fail(GTK_IS_WINDOW(parent));
+ g_return_if_fail(filename != NULL);
+
+ dialog =
+ gtk_message_dialog_new_with_markup(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _(markup),
+ filename);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+static void
+playlistwin_save_playlist(const gchar * filename)
+{
+ PlaylistFormat format;
+
+ format = playlist_format_get_from_name(filename);
+ if (format == PLAYLIST_FORMAT_UNKNOWN) {
+ show_playlist_save_format_error(GTK_WINDOW(playlistwin), filename);
+ return;
+ }
+
+ str_replace_in(&cfg.playlist_path, g_path_get_dirname(filename));
+
+ if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ if (!show_playlist_overwrite_prompt(GTK_WINDOW(playlistwin), filename))
+ return;
+
+ if (!playlist_save(filename, format))
+ show_playlist_save_error(GTK_WINDOW(playlistwin), filename);
+}
+
+#if 0
+static void
+playlistwin_save_current(void)
+{
+ const gchar *filename;
+
+ if (!(filename = playlist_get_current_name()))
+ return;
+
+ playlistwin_save_playlist(filename);
+}
+#endif
+
+static void
+playlistwin_load_playlist(const gchar * filename)
+{
+ g_return_if_fail(filename != NULL);
+
+ str_replace_in(&cfg.playlist_path, g_strdup(filename));
+
+ playlist_clear();
+ mainwin_clear_song_info();
+ mainwin_set_info_text();
+
+ playlist_load(filename);
+ playlist_set_current_name(filename);
+}
+
+static gchar *
+playlist_file_selection(const gchar * title,
+ gboolean save,
+ const gchar * default_filename)
+{
+ GtkWidget *dialog, *button;
+ gchar *filename;
+
+ g_return_val_if_fail(title != NULL, NULL);
+
+ dialog = gtk_file_chooser_dialog_new(title, GTK_WINDOW(mainwin),
+ save ? GTK_FILE_CHOOSER_ACTION_SAVE :
+ GTK_FILE_CHOOSER_ACTION_OPEN, NULL);
+ if (default_filename)
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
+ default_filename);
+
+ button = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT);
+ gtk_button_set_use_stock(GTK_BUTTON(button), TRUE);
+ GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+
+ button = gtk_dialog_add_button(GTK_DIALOG(dialog),
+ save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN,
+ GTK_RESPONSE_ACCEPT);
+ gtk_button_set_use_stock(GTK_BUTTON(button), TRUE);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ else
+ filename = NULL;
+
+ gtk_widget_destroy(dialog);
+
+ return filename;
+}
+
+void
+playlistwin_select_playlist_to_load(const gchar * default_filename)
+{
+ gchar *filename =
+ playlist_file_selection(_("Load Playlist"), FALSE, default_filename);
+
+ if (filename) {
+ playlistwin_load_playlist(filename);
+ g_free(filename);
+ }
+}
+
+static void
+playlistwin_select_playlist_to_save(const gchar * default_filename)
+{
+ gchar *filename =
+ playlist_file_selection(_("Save Playlist"), TRUE, default_filename);
+
+ if (filename) {
+ /* Default to M3U if no filename has extension */
+
+ /* NOTE: This doesn't work correctly for hidden files
+ - descender */
+ if (!strchr(filename, '.')) {
+ gchar *tmpstr = filename;
+ filename = g_strconcat(filename, ".m3u", NULL);
+ g_free(tmpstr);
+ }
+
+ playlistwin_save_playlist(filename);
+ g_free(filename);
+ }
+}
+
+static void
+playlistwin_run_dirbrowser(void)
+{
+ mainwin_run_dirbrowser();
+}
+
+static gboolean
+inside_sensitive_widgets(gint x, gint y)
+{
+ return (widget_contains(WIDGET(playlistwin_list), x, y) ||
+ widget_contains(WIDGET(playlistwin_slider), x, y) ||
+ widget_contains(WIDGET(playlistwin_close), x, y) ||
+ widget_contains(WIDGET(playlistwin_shade), x, y) ||
+ widget_contains(WIDGET(playlistwin_time_min), x, y) ||
+ widget_contains(WIDGET(playlistwin_time_sec), x, y) ||
+ widget_contains(WIDGET(playlistwin_info), x, y) ||
+ widget_contains(WIDGET(playlistwin_vis), x, y) ||
+ widget_contains(WIDGET(playlistwin_srew), x, y) ||
+ widget_contains(WIDGET(playlistwin_splay), x, y) ||
+ widget_contains(WIDGET(playlistwin_spause), x, y) ||
+ widget_contains(WIDGET(playlistwin_sstop), x, y) ||
+ widget_contains(WIDGET(playlistwin_sfwd), x, y) ||
+ widget_contains(WIDGET(playlistwin_seject), x, y) ||
+ widget_contains(WIDGET(playlistwin_sscroll_up), x, y) ||
+ widget_contains(WIDGET(playlistwin_sscroll_down), x, y));
+}
+
+#define REGION_L(x1,x2,y1,y2) \
+ (event->x >= (x1) && event->x < (x2) && \
+ event->y >= cfg.playlist_height - (y1) && \
+ event->y < cfg.playlist_height - (y2))
+
+#define REGION_R(x1,x2,y1,y2) \
+ (event->x >= playlistwin_get_width() - (x1) && \
+ event->x < playlistwin_get_width() - (x2) && \
+ event->y >= cfg.playlist_height - (y1) && \
+ event->y < cfg.playlist_height - (y2))
+
+static void
+playlistwin_scrolled(GtkWidget * widget,
+ GdkEventScroll * event,
+ gpointer callback_data)
+{
+
+ if (event->direction == GDK_SCROLL_DOWN)
+ playlistwin_scroll(cfg.scroll_pl_by);
+
+ if (event->direction == GDK_SCROLL_UP)
+ playlistwin_scroll(-cfg.scroll_pl_by);
+
+}
+
+
+
+
+static gboolean
+playlistwin_press(GtkWidget * widget,
+ GdkEventButton * event,
+ gpointer callback_data)
+{
+ gboolean grab = TRUE;
+ gint xpos, ypos;
+ GtkWidget *_menu;
+ GtkRequisition req;
+
+ gtk_window_get_position(GTK_WINDOW(playlistwin), &xpos, &ypos);
+
+ if (event->button == 1 && !cfg.show_wm_decorations &&
+ ((!cfg.playlist_shaded &&
+ event->x > playlistwin_get_width() - 20 &&
+ event->y > cfg.playlist_height - 20) ||
+ (cfg.playlist_shaded &&
+ event->x >= playlistwin_get_width() - 31 &&
+ event->x < playlistwin_get_width() - 22))) {
+
+ /* NOTE: Workaround for bug #214 */
+ if (event->type != GDK_2BUTTON_PRESS &&
+ event->type != GDK_3BUTTON_PRESS) {
+ /* resize area */
+ playlistwin_resizing = TRUE;
+ gtk_window_begin_resize_drag(GTK_WINDOW(widget),
+ GDK_WINDOW_EDGE_SOUTH_EAST,
+ event->button,
+ event->x + xpos, event->y + ypos,
+ event->time);
+ }
+ grab = FALSE;
+ }
+ else if (event->button == 1 && REGION_L(12, 37, 29, 11)) {
+ /* ADD button menu */
+
+ _menu = GTK_WIDGET(pladd_menu->widget);
+ if (!GTK_WIDGET_REALIZED(_menu)) gtk_widget_realize(_menu);
+ gtk_widget_size_request(_menu, &req);
+ gtk_item_factory_popup_with_data(pladd_menu,
+ NULL, NULL,
+ xpos+12,
+ (ypos + playlistwin_get_height()) - 8 - req.height, 1, event->time);
+ grab = FALSE;
+ }
+ else if (event->button == 1 && REGION_L(41, 66, 29, 11)) {
+ /* SUB button menu */
+ _menu = GTK_WIDGET(pldel_menu->widget);
+ if (!GTK_WIDGET_REALIZED(_menu)) gtk_widget_realize(_menu);
+ gtk_widget_size_request(_menu, &req);
+ gtk_item_factory_popup_with_data(pldel_menu,
+ NULL, NULL,
+ xpos+40,
+ (ypos + playlistwin_get_height()) - 8 - req.height, 1, event->time);
+ grab = FALSE;
+ }
+ else if (event->button == 1 && REGION_L(70, 95, 29, 11)) {
+ /* SEL button menu */
+ _menu = GTK_WIDGET(plsel_menu->widget);
+ if (!GTK_WIDGET_REALIZED(_menu)) gtk_widget_realize(_menu);
+ gtk_widget_size_request(_menu, &req);
+ gtk_item_factory_popup_with_data(plsel_menu,
+ NULL, NULL,
+ xpos+68,
+ (ypos + playlistwin_get_height()) - 8 - req.height, 1, event->time);
+
+ grab = FALSE;
+ }
+ else if (event->button == 1 && REGION_L(99, 124, 29, 11)) {
+ /* MISC button menu */
+ _menu = GTK_WIDGET(plsort_menu->widget);
+ if (!GTK_WIDGET_REALIZED(_menu)) gtk_widget_realize(_menu);
+ gtk_widget_size_request(_menu, &req);
+ gtk_item_factory_popup_with_data(plsort_menu,
+ NULL, NULL,
+ xpos+100,
+ (ypos + playlistwin_get_height()) - 8 - req.height, 1, event->time);
+ grab = FALSE;
+ }
+ else if (event->button == 1 && REGION_R(46, 23, 29, 11)) {
+ /* LIST button menu */
+ _menu = GTK_WIDGET(pllist_menu->widget);
+ if (!GTK_WIDGET_REALIZED(_menu)) gtk_widget_realize(_menu);
+ gtk_widget_size_request(_menu, &req);
+ gtk_item_factory_popup_with_data(pllist_menu,
+ NULL, NULL,
+ xpos + playlistwin_get_width() - req.width - 12,
+ (ypos + playlistwin_get_height()) - 8 - req.height, 1, event->time);
+ grab = FALSE;
+ }
+ else if (event->button == 1 && REGION_R(82, 54, 15, 9)) {
+ if (cfg.timer_mode == TIMER_ELAPSED)
+ cfg.timer_mode = TIMER_REMAINING;
+ else
+ cfg.timer_mode = TIMER_ELAPSED;
+ }
+ else if (event->button == 2 && (event->type == GDK_BUTTON_PRESS) &&
+ widget_contains(WIDGET(playlistwin_list), event->x, event->y)) {
+ gtk_selection_convert(widget, GDK_SELECTION_PRIMARY,
+ GDK_TARGET_STRING, event->time);
+ }
+ else if (playlistwin_get_width() >= 350 && REGION_R(223, 151, 26, 10)) {
+ if (event->button == 1) {
+ cfg.vis_type++;
+ if (cfg.vis_type > VIS_OFF)
+ cfg.vis_type = VIS_ANALYZER;
+ mainwin_vis_set_type(cfg.vis_type);
+ }
+ else if (event->button == 3) {
+ gint mx, my;
+ GdkModifierType modmask;
+
+ gdk_window_get_pointer(NULL, &mx, &my, &modmask);
+ util_item_factory_popup(mainwin_vis_menu, mx, my, 3, event->time);
+ grab = FALSE;
+ }
+ }
+ else if (event->button == 1 && event->type == GDK_BUTTON_PRESS &&
+ !inside_sensitive_widgets(event->x, event->y) && event->y < 14) {
+ gdk_window_raise(playlistwin->window);
+ dock_move_press(dock_window_list, GTK_WINDOW(playlistwin), event,
+ FALSE);
+ }
+ else if (event->button == 1 && event->type == GDK_2BUTTON_PRESS &&
+ !inside_sensitive_widgets(event->x, event->y)
+ && event->y < 14) {
+ /* double click on title bar */
+ playlistwin_shade_toggle();
+ if (dock_is_moving(GTK_WINDOW(playlistwin)))
+ dock_move_release(GTK_WINDOW(playlistwin));
+ return TRUE;
+ }
+ else if (event->button == 3 &&
+ !(widget_contains(WIDGET(playlistwin_list), event->x, event->y) ||
+ (event->y >= cfg.playlist_height - 29 &&
+ event->y < cfg.playlist_height - 11 &&
+ ((event->x >= 12 && event->x < 37) ||
+ (event->x >= 41 && event->x < 66) ||
+ (event->x >= 70 && event->x < 95) ||
+ (event->x >= 99 && event->x < 124) ||
+ (event->x >= playlistwin_get_width() - 46 &&
+ event->x < playlistwin_get_width() - 23))))) {
+ /*
+ * Pop up the main menu a few pixels down to avoid
+ * anything to be selected initially.
+ */
+ util_item_factory_popup(mainwin_general_menu, event->x_root,
+ event->y_root + 2, 3, event->time);
+ grab = FALSE;
+ }
+ else if (event->button == 3 &&
+ widget_contains(WIDGET(playlistwin_list), event->x, event->y)) {
+ /* popup menu */
+ playlistwin_set_sensitive_sortmenu();
+ gtk_item_factory_popup(playlistwin_popup_menu,
+ event->x_root, event->y_root + 5,
+ 3, event->time);
+ grab = FALSE;
+ }
+ else {
+ handle_press_cb(playlistwin_wlist, widget, event);
+ draw_playlist_window(FALSE);
+ }
+
+ if (grab)
+ gdk_pointer_grab(playlistwin->window, FALSE,
+ GDK_BUTTON_MOTION_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_BUTTON1_MOTION_MASK, NULL, NULL,
+ GDK_CURRENT_TIME);
+
+ return FALSE;
+}
+
+static gboolean
+playlistwin_focus_in(GtkWidget * widget, GdkEvent * event, gpointer data)
+{
+ playlistwin_close->pb_allow_draw = TRUE;
+ playlistwin_shade->pb_allow_draw = TRUE;
+ draw_playlist_window(TRUE);
+ return FALSE;
+}
+
+static gboolean
+playlistwin_focus_out(GtkWidget * widget,
+ GdkEventButton * event, gpointer data)
+{
+ playlistwin_close->pb_allow_draw = FALSE;
+ playlistwin_shade->pb_allow_draw = FALSE;
+ draw_playlist_window(TRUE);
+ return FALSE;
+}
+
+static gboolean
+playlistwin_configure(GtkWidget * window,
+ GdkEventConfigure * event, gpointer data)
+{
+ if (!GTK_WIDGET_VISIBLE(window))
+ return FALSE;
+
+ cfg.playlist_x = event->x;
+ cfg.playlist_y = event->y;
+
+ if (playlistwin_resizing) {
+ if (event->width != playlistwin_get_width() ||
+ event->height != playlistwin_get_height())
+ playlistwin_resize(event->width, event->height);
+ }
+ return TRUE;
+}
+
+void
+playlistwin_set_back_pixmap(void)
+{
+ gdk_window_set_back_pixmap(playlistwin->window, playlistwin_bg, 0);
+ gdk_window_clear(playlistwin->window);
+}
+
+static gboolean
+playlistwin_delete(GtkWidget * w, gpointer data)
+{
+ playlistwin_hide();
+ return TRUE;
+}
+
+static void
+playlistwin_keypress_up_down_handler(PlayList_List * pl,
+ gboolean up, guint state)
+{
+ if ((state & GDK_MOD1_MASK) && (state & GDK_SHIFT_MASK))
+ return;
+ if (!(state & GDK_MOD1_MASK))
+ playlist_select_all(FALSE);
+
+ if (pl->pl_prev_selected == -1 ||
+ (!playlistwin_item_visible(pl->pl_prev_selected) &&
+ !(state & GDK_SHIFT_MASK && pl->pl_prev_min != -1))) {
+ pl->pl_prev_selected = pl->pl_first;
+ }
+ else if (state & GDK_SHIFT_MASK) {
+ if (pl->pl_prev_min == -1) {
+ pl->pl_prev_max = pl->pl_prev_selected;
+ pl->pl_prev_min = pl->pl_prev_selected;
+ }
+ pl->pl_prev_max += (up ? -1 : 1);
+ pl->pl_prev_max =
+ CLAMP(pl->pl_prev_max, 0, playlist_get_length() - 1);
+
+ pl->pl_first = MIN(pl->pl_first, pl->pl_prev_max);
+ pl->pl_first = MAX(pl->pl_first, pl->pl_prev_max -
+ pl->pl_num_visible + 1);
+ playlist_select_range(pl->pl_prev_min, pl->pl_prev_max, TRUE);
+ return;
+ }
+ else if (state & GDK_MOD1_MASK) {
+ if (up)
+ playlist_list_move_up(pl);
+ else
+ playlist_list_move_down(pl);
+ if (pl->pl_prev_min < pl->pl_first)
+ pl->pl_first = pl->pl_prev_min;
+ else if (pl->pl_prev_max >= (pl->pl_first + pl->pl_num_visible))
+ pl->pl_first = pl->pl_prev_max - pl->pl_num_visible + 1;
+ return;
+ }
+ else if (up)
+ pl->pl_prev_selected--;
+ else
+ pl->pl_prev_selected++;
+
+ pl->pl_prev_selected =
+ CLAMP(pl->pl_prev_selected, 0, playlist_get_length() - 1);
+
+ if (pl->pl_prev_selected < pl->pl_first)
+ pl->pl_first--;
+ else if (pl->pl_prev_selected >= (pl->pl_first + pl->pl_num_visible))
+ pl->pl_first++;
+
+ playlist_select_range(pl->pl_prev_selected, pl->pl_prev_selected, TRUE);
+ pl->pl_prev_min = -1;
+
+}
+
+/* FIXME: Handle the keys through menu */
+
+static gboolean
+playlistwin_keypress(GtkWidget * w, GdkEventKey * event, gpointer data)
+{
+ guint keyval;
+ gboolean refresh = FALSE;
+
+ if (cfg.playlist_shaded)
+ return FALSE;
+
+ switch (keyval = event->keyval) {
+ case GDK_KP_Up:
+ case GDK_KP_Down:
+ case GDK_Up:
+ case GDK_Down:
+ playlistwin_keypress_up_down_handler(playlistwin_list,
+ keyval == GDK_Up
+ || keyval == GDK_KP_Up,
+ event->state);
+ refresh = TRUE;
+ break;
+ case GDK_Page_Up:
+ playlistwin_scroll(-playlistwin_list->pl_num_visible);
+ refresh = TRUE;
+ break;
+ case GDK_Page_Down:
+ playlistwin_scroll(playlistwin_list->pl_num_visible);
+ refresh = TRUE;
+ break;
+ case GDK_Home:
+ playlistwin_list->pl_first = 0;
+ refresh = TRUE;
+ break;
+ case GDK_End:
+ playlistwin_list->pl_first =
+ playlist_get_length() - playlistwin_list->pl_num_visible;
+ refresh = TRUE;
+ break;
+ case GDK_Return:
+ if (playlistwin_list->pl_prev_selected > -1
+ && playlistwin_item_visible(playlistwin_list->pl_prev_selected)) {
+ playlist_set_position(playlistwin_list->pl_prev_selected);
+ if (!bmp_playback_get_playing())
+ bmp_playback_initiate();
+ }
+ break;
+ case GDK_3:
+ if (event->state & GDK_CONTROL_MASK)
+ playlistwin_fileinfo();
+ break;
+ case GDK_Delete:
+ if (event->state & GDK_CONTROL_MASK)
+ playlist_delete(TRUE);
+ else
+ playlist_delete(FALSE);
+ break;
+ case GDK_Insert:
+ if (event->state & GDK_SHIFT_MASK)
+ playlistwin_run_dirbrowser();
+ else if (event->state & GDK_MOD1_MASK)
+ mainwin_show_add_url_window();
+ else
+ playlistwin_show_filebrowser();
+ break;
+ case GDK_Escape:
+ mainwin_minimize_cb();
+ break;
+ default:
+ return FALSE;
+ }
+
+ if (refresh)
+ playlistwin_update_list();
+
+ return TRUE;
+}
+
+static void
+playlistwin_draw_frame(void)
+{
+ gboolean focus =
+ gtk_window_has_toplevel_focus(GTK_WINDOW(playlistwin)) ||
+ !cfg.dim_titlebar;
+
+ if (cfg.playlist_shaded) {
+ skin_draw_playlistwin_shaded(bmp_active_skin,
+ playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width(), focus);
+ }
+ else {
+ skin_draw_playlistwin_frame(bmp_active_skin,
+ playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width(),
+ cfg.playlist_height, focus);
+ }
+}
+
+void
+draw_playlist_window(gboolean force)
+{
+ gboolean redraw;
+ GList *wl;
+ Widget *w;
+
+ if (force)
+ playlistwin_draw_frame();
+
+ widget_list_lock(playlistwin_wlist);
+ widget_list_draw(playlistwin_wlist, &redraw, force);
+
+ if (redraw || force) {
+ if (force) {
+ gdk_window_clear(playlistwin->window);
+ }
+ else {
+ for (wl = playlistwin_wlist; wl; wl = g_list_next(wl)) {
+ w = WIDGET(wl->data);
+ if (w->redraw && w->visible) {
+ gdk_window_clear_area(playlistwin->window, w->x, w->y,
+ w->width, w->height);
+ w->redraw = FALSE;
+ }
+ }
+ }
+
+ gdk_flush();
+ }
+
+ widget_list_unlock(playlistwin_wlist);
+}
+
+
+void
+playlistwin_hide_timer(void)
+{
+ textbox_set_text(playlistwin_time_min, " ");
+ textbox_set_text(playlistwin_time_sec, " ");
+}
+
+void
+playlistwin_vis_enable(void)
+{
+ playlistwin_vis_enabled = TRUE;
+
+ if (playlistwin_get_width() >= 350)
+ widget_show(WIDGET(playlistwin_vis));
+}
+
+void
+playlistwin_vis_disable(void)
+{
+ playlistwin_vis_enabled = FALSE;
+ widget_hide(WIDGET(playlistwin_vis));
+ draw_playlist_window(TRUE);
+}
+
+void
+playlistwin_set_time(gint time, gint length, TimerMode mode)
+{
+ gchar *text, sign;
+
+ if (mode == TIMER_REMAINING && length != -1) {
+ time = length - time;
+ sign = '-';
+ }
+ else
+ sign = ' ';
+
+ time /= 1000;
+
+ if (time < 0)
+ time = 0;
+ if (time > 99 * 60)
+ time /= 60;
+
+ text = g_strdup_printf("%c%-2.2d", sign, time / 60);
+ textbox_set_text(playlistwin_time_min, text);
+ g_free(text);
+
+ text = g_strdup_printf("%-2.2d", time % 60);
+ textbox_set_text(playlistwin_time_sec, text);
+ g_free(text);
+}
+
+static void
+playlistwin_drag_motion(GtkWidget * widget,
+ GdkDragContext * context,
+ gint x, gint y,
+ GtkSelectionData * selection_data,
+ guint info, guint time, gpointer user_data)
+{
+ playlistwin_list->pl_drag_motion = TRUE;
+ playlistwin_list->drag_motion_x = x;
+ playlistwin_list->drag_motion_y = y;
+ playlistwin_update_list();
+ playlistwin_hint_flag = TRUE;
+}
+
+static void
+playlistwin_drag_end(GtkWidget * widget,
+ GdkDragContext * context, gpointer user_data)
+{
+ playlistwin_list->pl_drag_motion = FALSE;
+ playlistwin_hint_flag = FALSE;
+ playlistwin_update_list();
+}
+
+static void
+playlistwin_drag_data_received(GtkWidget * widget,
+ GdkDragContext * context,
+ gint x, gint y,
+ GtkSelectionData *
+ selection_data, guint info,
+ guint time, gpointer user_data)
+{
+ guint pos;
+
+ g_return_if_fail(selection_data != NULL);
+
+ if (!selection_data->data) {
+ g_message("Received no DND data!");
+ return;
+ }
+
+ if (widget_contains(WIDGET(playlistwin_list), x, y)) {
+ pos = (y - WIDGET(playlistwin_list)->y) /
+ playlistwin_list->pl_fheight + playlistwin_list->pl_first;
+
+ pos = MIN(pos, playlist_get_length());
+ playlist_ins_url((gchar *) selection_data->data, pos);
+ }
+ else
+ playlist_add_url((gchar *) selection_data->data);
+}
+
+static void
+playlistwin_create_widgets(void)
+{
+ /* This function creates the custom widgets used by the playlist editor */
+
+ /* text box for displaying song title in shaded mode */
+ playlistwin_sinfo =
+ create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ 4, 4, playlistwin_get_width() - 35, FALSE, SKIN_TEXT);
+
+ if (!cfg.playlist_shaded)
+ widget_hide(WIDGET(playlistwin_sinfo));
+
+ /* shade/unshade window push button */
+ if (cfg.playlist_shaded)
+ playlistwin_shade =
+ create_pbutton(&playlistwin_wlist, playlistwin_bg,
+ playlistwin_gc, playlistwin_get_width() - 21, 3,
+ 9, 9, 128, 45, 150, 42,
+ playlistwin_shade_toggle, SKIN_PLEDIT);
+ else
+ playlistwin_shade =
+ create_pbutton(&playlistwin_wlist, playlistwin_bg,
+ playlistwin_gc, playlistwin_get_width() - 21, 3,
+ 9, 9, 157, 3, 62, 42, playlistwin_shade_toggle,
+ SKIN_PLEDIT);
+
+ playlistwin_shade->pb_allow_draw = FALSE;
+
+ /* close window push button */
+ playlistwin_close =
+ create_pbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 11, 3, 9, 9,
+ cfg.playlist_shaded ? 138 : 167,
+ cfg.playlist_shaded ? 45 : 3, 52, 42,
+ playlistwin_hide, SKIN_PLEDIT);
+ playlistwin_close->pb_allow_draw = FALSE;
+
+ /* playlist list box */
+ playlistwin_list =
+ create_playlist_list(&playlistwin_wlist, playlistwin_bg,
+ playlistwin_gc, 12, 20,
+ playlistwin_get_width() - 31,
+ cfg.playlist_height - 58);
+ playlist_list_set_font(cfg.playlist_font);
+
+ /* playlist list box slider */
+ playlistwin_slider =
+ create_playlistslider(&playlistwin_wlist, playlistwin_bg,
+ playlistwin_gc, playlistwin_get_width() - 15,
+ 20, cfg.playlist_height - 58, playlistwin_list);
+ /* track time (minute) */
+ playlistwin_time_min =
+ create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 82,
+ cfg.playlist_height - 15, 15, FALSE, SKIN_TEXT);
+
+ /* track time (second) */
+ playlistwin_time_sec =
+ create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 64,
+ cfg.playlist_height - 15, 10, FALSE, SKIN_TEXT);
+
+ /* playlist information (current track length / total track length) */
+ playlistwin_info =
+ create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 143,
+ cfg.playlist_height - 28, 85, FALSE, SKIN_TEXT);
+
+ /* mini visualizer */
+ playlistwin_vis =
+ create_vis(&playlistwin_wlist, playlistwin_bg, playlistwin->window,
+ playlistwin_gc, playlistwin_get_width() - 223,
+ cfg.playlist_height - 26, 72);
+ widget_hide(WIDGET(playlistwin_vis));
+
+ /* mini play control buttons at right bottom corner */
+
+ /* rewind button */
+ playlistwin_srew =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 144,
+ cfg.playlist_height - 16, 8, 7, playlist_prev);
+
+ /* play button */
+ playlistwin_splay =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 138,
+ cfg.playlist_height - 16, 10, 7, mainwin_play_pushed);
+
+ /* pause button */
+ playlistwin_spause =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 128,
+ cfg.playlist_height - 16, 10, 7, bmp_playback_pause);
+
+ /* stop button */
+ playlistwin_sstop =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 118,
+ cfg.playlist_height - 16, 9, 7, mainwin_stop_pushed);
+
+ /* forward button */
+ playlistwin_sfwd =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 109,
+ cfg.playlist_height - 16, 8, 7, playlist_next);
+
+ /* eject button */
+ playlistwin_seject =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 100,
+ cfg.playlist_height - 16, 9, 7, mainwin_eject_pushed);
+
+
+ playlistwin_sscroll_up =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 14,
+ cfg.playlist_height - 35, 8, 5,
+ playlistwin_scroll_up_pushed);
+ playlistwin_sscroll_down =
+ create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc,
+ playlistwin_get_width() - 14,
+ cfg.playlist_height - 30, 8, 5,
+ playlistwin_scroll_down_pushed);
+
+}
+
+static void
+selection_received(GtkWidget * widget,
+ GtkSelectionData * selection_data, gpointer data)
+{
+ if (selection_data->type == GDK_SELECTION_TYPE_STRING &&
+ selection_data->length > 0)
+ playlist_add_url((gchar *) selection_data->data);
+}
+
+static void
+playlistwin_create_window(void)
+{
+ GdkPixbuf *icon;
+
+ playlistwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(playlistwin), _("BMP Playlist Editor"));
+ gtk_window_set_role(GTK_WINDOW(playlistwin), "playlist");
+ gtk_window_set_default_size(GTK_WINDOW(playlistwin),
+ playlistwin_get_width(),
+ playlistwin_get_height());
+ gtk_window_set_resizable(GTK_WINDOW(playlistwin), TRUE);
+ playlistwin_set_geometry_hints(cfg.playlist_shaded);
+ dock_window_list = dock_window_set_decorated(dock_window_list,
+ GTK_WINDOW(playlistwin),
+ cfg.show_wm_decorations);
+
+ gtk_window_set_transient_for(GTK_WINDOW(playlistwin),
+ GTK_WINDOW(mainwin));
+ gtk_window_set_skip_taskbar_hint(GTK_WINDOW(playlistwin), TRUE);
+
+ //icon = gdk_pixbuf_new_from_xpm_data((const gchar **) bmp_playlist_icon);
+ //gtk_window_set_icon(GTK_WINDOW(playlistwin), icon);
+ //g_object_unref(icon);
+
+ gtk_widget_set_app_paintable(playlistwin, TRUE);
+
+ if (cfg.playlist_x != -1 && cfg.save_window_position)
+ gtk_window_move(GTK_WINDOW(playlistwin),
+ cfg.playlist_x, cfg.playlist_y);
+
+ gtk_widget_add_events(playlistwin,
+ GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_SCROLL_MASK | GDK_VISIBILITY_NOTIFY_MASK);
+ gtk_widget_realize(playlistwin);
+
+ util_set_cursor(playlistwin);
+
+ g_signal_connect(playlistwin, "delete_event",
+ G_CALLBACK(playlistwin_delete), NULL);
+ g_signal_connect(playlistwin, "button_press_event",
+ G_CALLBACK(playlistwin_press), NULL);
+ g_signal_connect(playlistwin, "button_release_event",
+ G_CALLBACK(playlistwin_release), NULL);
+ g_signal_connect(playlistwin, "scroll_event",
+ G_CALLBACK(playlistwin_scrolled), NULL);
+ g_signal_connect(playlistwin, "motion_notify_event",
+ G_CALLBACK(playlistwin_motion), NULL);
+ g_signal_connect_after(playlistwin, "focus_in_event",
+ G_CALLBACK(playlistwin_focus_in), NULL);
+ g_signal_connect_after(playlistwin, "focus_out_event",
+ G_CALLBACK(playlistwin_focus_out), NULL);
+ g_signal_connect(playlistwin, "configure_event",
+ G_CALLBACK(playlistwin_configure), NULL);
+ g_signal_connect(playlistwin, "style_set",
+ G_CALLBACK(playlistwin_set_back_pixmap), NULL);
+
+ bmp_drag_dest_set(playlistwin);
+
+ /* DnD stuff */
+ g_signal_connect(playlistwin, "drag-leave",
+ G_CALLBACK(playlistwin_drag_end), NULL);
+ g_signal_connect(playlistwin, "drag-data-delete",
+ G_CALLBACK(playlistwin_drag_end), NULL);
+ g_signal_connect(playlistwin, "drag-end",
+ G_CALLBACK(playlistwin_drag_end), NULL);
+ g_signal_connect(playlistwin, "drag-drop",
+ G_CALLBACK(playlistwin_drag_end), NULL);
+ g_signal_connect(playlistwin, "drag-data-received",
+ G_CALLBACK(playlistwin_drag_data_received), NULL);
+ g_signal_connect(playlistwin, "drag-motion",
+ G_CALLBACK(playlistwin_drag_motion), NULL);
+
+ g_signal_connect(playlistwin, "key_press_event",
+ G_CALLBACK(playlistwin_keypress), NULL);
+ g_signal_connect(playlistwin, "selection_received",
+ G_CALLBACK(selection_received), NULL);
+
+ playlistwin_set_mask();
+}
+
+void
+playlistwin_create_popup_menus(void)
+{
+ playlistwin_accel = gtk_accel_group_new();
+
+ /* playlist window popup menu */
+ playlistwin_popup_menu = create_menu(playlistwin_popup_menu_entries,
+ G_N_ELEMENTS(playlistwin_popup_menu_entries),
+ playlistwin_accel);
+
+ pladd_menu = create_menu(pladd_menu_entries, G_N_ELEMENTS(pladd_menu_entries),
+ playlistwin_accel);
+ pldel_menu = create_menu(pldel_menu_entries, G_N_ELEMENTS(pldel_menu_entries),
+ playlistwin_accel);
+ plsel_menu = create_menu(plsel_menu_entries, G_N_ELEMENTS(plsel_menu_entries),
+ playlistwin_accel);
+ plsort_menu = create_menu(plsort_menu_entries,
+ G_N_ELEMENTS(plsort_menu_entries),
+ playlistwin_accel);
+ pllist_menu = create_menu(pllist_menu_entries, G_N_ELEMENTS(pllist_menu_entries),
+ playlistwin_accel);
+
+#if 0
+ make_submenu(playlistwin_popup_menu, "/Playlist",
+ playlistwin_playlist_menu);
+ make_submenu(playlistwin_popup_menu, "/Playback",
+ playlistwin_playback_menu);
+ make_submenu(playlistwin_popup_menu, "/Add",
+ pladd_menu);
+#endif
+}
+
+void
+playlistwin_create(void)
+{
+ playlistwin_create_window();
+ playlistwin_create_popup_menus();
+
+ /* create GC and back pixmap for custom widget to draw on */
+ playlistwin_gc = gdk_gc_new(playlistwin->window);
+ playlistwin_bg = gdk_pixmap_new(playlistwin->window,
+ playlistwin_get_width(),
+ playlistwin_get_height_unshaded(), -1);
+ gdk_window_set_back_pixmap(playlistwin->window, playlistwin_bg, 0);
+
+ playlistwin_create_widgets();
+ playlistwin_update_info();
+
+ gtk_window_add_accel_group(GTK_WINDOW(playlistwin), playlistwin_accel);
+ gtk_window_add_accel_group(GTK_WINDOW(playlistwin), mainwin_accel);
+}
+
+
+void
+playlistwin_show(void)
+{
+ GtkWidget *item;
+
+ item = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Show Playlist Editor");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);
+
+ tbutton_set_toggled(mainwin_pl, TRUE);
+ cfg.playlist_visible = TRUE;
+
+ playlistwin_set_toprow(0);
+ playlist_check_pos_current();
+
+ gtk_widget_show(playlistwin);
+}
+
+void
+playlistwin_hide(void)
+{
+ GtkWidget *item;
+
+ item = gtk_item_factory_get_widget(mainwin_view_menu,
+ "/Show Playlist Editor");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), FALSE);
+
+ gtk_widget_hide(playlistwin);
+ tbutton_set_toggled(mainwin_pl, FALSE);
+ cfg.playlist_visible = FALSE;
+
+ gtk_window_present(GTK_WINDOW(mainwin));
+ gtk_widget_grab_focus(mainwin);
+}
+
+
+static void
+plsort_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * widget)
+{
+ switch (action) {
+ case PLAYLISTWIN_SORT_BYTITLE:
+ playlist_sort(PLAYLIST_SORT_TITLE);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_BYPATH:
+ playlist_sort(PLAYLIST_SORT_PATH);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_BYDATE:
+ playlist_sort(PLAYLIST_SORT_DATE);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_BYFILENAME:
+ playlist_sort(PLAYLIST_SORT_FILENAME);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_SEL_BYTITLE:
+ playlist_sort_selected(PLAYLIST_SORT_TITLE);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_SEL_BYFILENAME:
+ playlist_sort_selected(PLAYLIST_SORT_FILENAME);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_SEL_BYPATH:
+ playlist_sort_selected(PLAYLIST_SORT_PATH);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_SEL_BYDATE:
+ playlist_sort_selected(PLAYLIST_SORT_DATE);
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_REVERSE:
+ playlist_reverse();
+ playlistwin_update_list();
+ break;
+ case PLAYLISTWIN_SORT_RANDOMIZE:
+ playlist_random();
+ playlistwin_update_list();
+ break;
+ }
+}
+
+static void
+playlistwin_sub_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * widget)
+{
+ switch (action) {
+ case PLIST_NEW:
+ playlist_set_current_name(NULL);
+ playlist_clear();
+ mainwin_clear_song_info();
+ mainwin_set_info_text();
+ break;
+ case PLIST_SAVE:
+ playlistwin_select_playlist_to_save(playlist_get_current_name());
+ break;
+ case PLIST_SAVE_AS:
+ playlistwin_select_playlist_to_save(playlist_get_current_name());
+ break;
+ case PLIST_LOAD:
+ playlistwin_select_playlist_to_load(playlist_get_current_name());
+ break;
+ case SEL_INV:
+ playlistwin_inverse_selection();
+ break;
+ case SEL_ZERO:
+ playlistwin_select_none();
+ break;
+ case SEL_ALL:
+ playlistwin_select_all();
+ break;
+ case SUB_ALL:
+ playlist_clear();
+ mainwin_clear_song_info();
+ mainwin_set_info_text();
+ break;
+ case SUB_CROP:
+ playlist_delete(TRUE);
+ break;
+ case SUB_SELECTED:
+ playlist_delete(FALSE);
+ break;
+ case PLAYLISTWIN_REMOVE_DEAD_FILES:
+ playlist_remove_dead_files();
+ break;
+ case PLAYLISTWIN_REFRESH:
+ playlist_read_info_selection();
+ playlistwin_update_list();
+ textbox_set_xfont(mainwin_info, TRUE, cfg.mainwin_font);
+ break;
+ }
+}
+
+static void
+playlistwin_popup_menu_callback(gpointer data,
+ guint action,
+ GtkWidget * widget)
+{
+ switch (action) {
+ case ADD_FILES:
+ playlistwin_show_filebrowser();
+ break;
+ case ADD_DIR:
+ playlistwin_run_dirbrowser();
+ break;
+ case CLOSE_PL_WINDOW:
+ playlistwin_hide();
+ break;
+ case MISC_FILEINFO:
+ playlistwin_fileinfo();
+ break;
+ case SEL_LOOKUP:
+ playlist_read_info_selection();
+ break;
+ case MISC_QUEUE:
+ playlist_queue();
+ break;
+ case PLIST_CQUEUE:
+ playlist_clear_queue();
+ break;
+ case PLIST_JTT:
+ mainwin_jump_to_time();
+ break;
+ case PLIST_JTF:
+ mainwin_jump_to_file();
+ break;
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playlistwin.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,83 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLAYLISTWIN_H
+#define PLAYLISTWIN_H
+
+#include <glib.h>
+
+#include "mainwin.h"
+#include "pbutton.h"
+#include "playlist_list.h"
+
+
+#define PLAYLISTWIN_FRAME_TOP_HEIGHT 20
+#define PLAYLISTWIN_FRAME_BOTTOM_HEIGHT 38
+#define PLAYLISTWIN_FRAME_LEFT_WIDTH 12
+#define PLAYLISTWIN_FRAME_RIGHT_WIDTH 19
+
+#define PLAYLISTWIN_MIN_WIDTH MAINWIN_WIDTH
+#define PLAYLISTWIN_MIN_HEIGHT MAINWIN_HEIGHT
+#define PLAYLISTWIN_WIDTH_SNAP 25
+#define PLAYLISTWIN_HEIGHT_SNAP 29
+#define PLAYLISTWIN_SHADED_HEIGHT MAINWIN_SHADED_HEIGHT
+#define PLAYLISTWIN_WIDTH cfg.playlist_width
+#define PLAYLISTWIN_HEIGHT \
+ (cfg.playlist_shaded ? PLAYLISTWIN_SHADED_HEIGHT : cfg.playlist_height)
+
+#define PLAYLISTWIN_DEFAULT_WIDTH 275
+#define PLAYLISTWIN_DEFAULT_HEIGHT 232
+#define PLAYLISTWIN_DEFAULT_POS_X 295
+#define PLAYLISTWIN_DEFAULT_POS_Y 20
+
+#define PLAYLISTWIN_DEFAULT_FONT "Sans Bold 10"
+
+
+void playlistwin_update_list(void);
+gboolean playlistwin_item_visible(gint index);
+gint playlistwin_get_toprow(void);
+void playlistwin_set_toprow(gint top);
+void playlistwin_set_shade_menu_cb(gboolean shaded);
+void playlistwin_set_shade(gboolean shaded);
+void playlistwin_shade_toggle(void);
+void playlistwin_create(void);
+void draw_playlist_window(gboolean force);
+void playlistwin_hide_timer(void);
+void playlistwin_set_time(gint time, gint length, TimerMode mode);
+void playlistwin_show(void);
+void playlistwin_hide(void);
+void playlistwin_set_back_pixmap(void);
+void playlistwin_scroll(gint num);
+void playlistwin_scroll_up_pushed(void);
+void playlistwin_scroll_down_pushed(void);
+void playlistwin_vis_disable(void);
+void playlistwin_vis_enable(void);
+void playlistwin_select_playlist_to_load(const gchar * default_filename);
+
+extern GtkWidget *playlistwin;
+extern Vis *playlistwin_vis;
+extern PlayList_List *playlistwin_list;
+
+extern PButton *playlistwin_shade, *playlistwin_close;
+
+extern gboolean playlistwin_focus;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,81 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "playstatus.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "skin.h"
+#include "widget.h"
+
+void
+playstatus_draw(Widget * w)
+{
+ PlayStatus *ps = PLAY_STATUS(w);
+ GdkPixmap *obj;
+
+ obj = ps->ps_widget.parent;
+
+ if (ps->ps_status == STATUS_PLAY)
+ skin_draw_pixmap(bmp_active_skin, obj, ps->ps_widget.gc,
+ SKIN_PLAYPAUSE, 36, 0, ps->ps_widget.x,
+ ps->ps_widget.y, 3, 9);
+ else
+ skin_draw_pixmap(bmp_active_skin, obj, ps->ps_widget.gc,
+ SKIN_PLAYPAUSE, 27, 0, ps->ps_widget.x,
+ ps->ps_widget.y, 2, 9);
+ switch (ps->ps_status) {
+ case STATUS_STOP:
+ skin_draw_pixmap(bmp_active_skin, obj, ps->ps_widget.gc,
+ SKIN_PLAYPAUSE, 18, 0,
+ ps->ps_widget.x + 2, ps->ps_widget.y, 9, 9);
+ break;
+ case STATUS_PAUSE:
+ skin_draw_pixmap(bmp_active_skin, obj, ps->ps_widget.gc,
+ SKIN_PLAYPAUSE, 9, 0,
+ ps->ps_widget.x + 2, ps->ps_widget.y, 9, 9);
+ break;
+ case STATUS_PLAY:
+ skin_draw_pixmap(bmp_active_skin, obj, ps->ps_widget.gc,
+ SKIN_PLAYPAUSE, 1, 0,
+ ps->ps_widget.x + 3, ps->ps_widget.y, 8, 9);
+ break;
+ }
+}
+
+void
+playstatus_set_status(PlayStatus * ps, PStatus status)
+{
+ ps->ps_status = status;
+ //widget_draw(WIDGET(ps));
+}
+
+PlayStatus *
+create_playstatus(GList ** wlist, GdkPixmap * parent,
+ GdkGC * gc, gint x, gint y)
+{
+ PlayStatus *ps;
+
+ ps = g_new0(PlayStatus, 1);
+ widget_init(&ps->ps_widget, parent, gc, x, y, 11, 9, TRUE);
+ ps->ps_widget.draw = playstatus_draw;
+
+ widget_list_add(wlist, WIDGET(ps));
+ return ps;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/playstatus.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,39 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef PLAYSTATUS_H
+#define PLAYSTATUS_H
+
+#include "widget.h"
+
+typedef enum {
+ STATUS_STOP, STATUS_PAUSE, STATUS_PLAY
+} PStatus;
+
+#define PLAY_STATUS(x) ((PlayStatus *)(x))
+struct _PlayStatus {
+ Widget ps_widget;
+ PStatus ps_status;
+};
+
+typedef struct _PlayStatus PlayStatus;
+
+void playstatus_set_status(PlayStatus * ps, PStatus status);
+PlayStatus *create_playstatus(GList ** wlist, GdkPixmap * parent,
+ GdkGC * gc, gint x, gint y);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/plugin.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/plugin.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/plugin.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,201 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. 2.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* Please see the BMP Wiki for information about the plugin interface */
+
+#ifndef BMP_PLUGIN_H
+#define BMP_PLUGIN_H
+
+
+#include <glib.h>
+
+
+#define INPUT_PLUGIN(x) ((InputPlugin *)(x))
+#define OUTPUT_PLUGIN(x) ((OutputPlugin *)(x))
+#define EFFECT_PLUGIN(x) ((EffectPlugin *)(x))
+#define GENERAL_PLUGIN(x) ((GeneralPlugin *)(x))
+#define VIS_PLUGIN(x) ((VisPlugin *)(x))
+
+
+typedef enum {
+ FMT_U8,
+ FMT_S8,
+ FMT_U16_LE,
+ FMT_U16_BE,
+ FMT_U16_NE,
+ FMT_S16_LE,
+ FMT_S16_BE,
+ FMT_S16_NE
+} AFormat;
+
+typedef enum {
+ INPUT_VIS_ANALYZER,
+ INPUT_VIS_SCOPE,
+ INPUT_VIS_VU,
+ INPUT_VIS_OFF
+} InputVisType;
+
+
+typedef struct _Plugin Plugin;
+typedef struct _InputPlugin InputPlugin;
+typedef struct _OutputPlugin OutputPlugin;
+typedef struct _EffectPlugin EffectPlugin;
+typedef struct _GeneralPlugin GeneralPlugin;
+typedef struct _VisPlugin VisPlugin;
+
+/* Sadly, this is the most we can generalize out of the disparate
+ plugin structs usable with typecasts - descender */
+struct _Plugin {
+ gpointer handle;
+ gchar *filename;
+};
+
+struct _OutputPlugin {
+ gpointer handle;
+ gchar *filename;
+
+ gchar *description;
+
+ void (*init) (void);
+ void (*about) (void);
+ void (*configure) (void);
+ void (*get_volume) (gint * l, gint * r);
+ void (*set_volume) (gint l, gint r);
+
+ gint (*open_audio) (AFormat fmt, gint rate, gint nch);
+ void (*write_audio) (gpointer ptr, gint length);
+ void (*close_audio) (void);
+
+ void (*flush) (gint time);
+ void (*pause) (gshort paused);
+ gint (*buffer_free) (void);
+ gint (*buffer_playing) (void);
+ gint (*output_time) (void);
+ gint (*written_time) (void);
+};
+
+struct _EffectPlugin {
+ gpointer handle;
+ gchar *filename;
+
+ gchar *description;
+
+ void (*init) (void);
+ void (*cleanup) (void);
+ void (*about) (void);
+ void (*configure) (void);
+
+ gint (*mod_samples) (gpointer * data, gint length, AFormat fmt, gint srate, gint nch);
+ void (*query_format) (AFormat * fmt, gint * rate, gint * nch);
+};
+
+struct _InputPlugin {
+ gpointer handle;
+ gchar *filename;
+
+ gchar *description;
+
+ void (*init) (void);
+ void (*about) (void);
+ void (*configure) (void);
+
+ gint (*is_our_file) (gchar * filename);
+ GList *(*scan_dir) (gchar * dirname);
+
+ void (*play_file) (gchar * filename);
+ void (*stop) (void);
+ void (*pause) (gshort paused);
+ void (*seek) (gint time);
+
+ void (*set_eq) (gint on, gfloat preamp, gfloat * bands);
+
+ gint (*get_time) (void);
+
+ void (*get_volume) (gint * l, gint * r);
+ void (*set_volume) (gint l, gint r);
+
+ void (*cleanup) (void);
+
+ InputVisType (*get_vis_type) (void);
+ void (*add_vis_pcm) (gint time, AFormat fmt, gint nch, gint length, gpointer ptr);
+
+ void (*set_info) (gchar * title, gint length, gint rate, gint freq, gint nch);
+ void (*set_info_text) (gchar * text);
+ void (*get_song_info) (gchar * filename, gchar ** title, gint * length);
+ void (*file_info_box) (gchar * filename);
+
+ OutputPlugin *output;
+};
+
+struct _GeneralPlugin {
+ gpointer handle;
+ gchar *filename;
+
+ gint xmms_session;
+ gchar *description;
+
+ void (*init) (void);
+ void (*about) (void);
+ void (*configure) (void);
+ void (*cleanup) (void);
+};
+
+struct _VisPlugin {
+ gpointer handle;
+ gchar *filename;
+
+ gint xmms_session;
+ gchar *description;
+
+ gint num_pcm_chs_wanted;
+ gint num_freq_chs_wanted;
+
+ void (*init) (void);
+ void (*cleanup) (void);
+ void (*about) (void);
+ void (*configure) (void);
+ void (*disable_plugin) (struct _VisPlugin *);
+ void (*playback_start) (void);
+ void (*playback_stop) (void);
+ void (*render_pcm) (gint16 pcm_data[2][512]);
+ void (*render_freq) (gint16 freq_data[2][256]);
+};
+
+
+G_BEGIN_DECLS
+
+/* So that input plugins can get the title formatting information */
+G_CONST_RETURN gchar * xmms_get_gentitle_format(void);
+
+/* So that output plugins can communicate with effect plugins */
+EffectPlugin *get_current_effect_plugin(void);
+gboolean effects_enabled(void);
+gboolean plugin_set_errortext(const gchar * text);
+
+G_END_DECLS
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,440 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "pluginenum.h"
+
+#include <glib.h>
+#include <gmodule.h>
+#include <glib/gprintf.h>
+#include <string.h>
+
+#include "controlsocket.h"
+#include "main.h"
+#include "playback.h"
+#include "playlist.h"
+#include "util.h"
+
+#include "effect.h"
+#include "general.h"
+#include "input.h"
+#include "output.h"
+#include "visualization.h"
+
+const gchar *plugin_dir_list[] = {
+ PLUGINSUBS,
+ NULL
+};
+
+GHashTable *plugin_matrix = NULL;
+
+static gint
+inputlist_compare_func(gconstpointer a, gconstpointer b)
+{
+ const InputPlugin *ap = a, *bp = b;
+ return strcasecmp(ap->description, bp->description);
+}
+
+static gint
+outputlist_compare_func(gconstpointer a, gconstpointer b)
+{
+ const OutputPlugin *ap = a, *bp = b;
+ return strcasecmp(ap->description, bp->description);
+}
+
+static gint
+effectlist_compare_func(gconstpointer a, gconstpointer b)
+{
+ const EffectPlugin *ap = a, *bp = b;
+ return strcasecmp(ap->description, bp->description);
+}
+
+static gint
+generallist_compare_func(gconstpointer a, gconstpointer b)
+{
+ const GeneralPlugin *ap = a, *bp = b;
+ return strcasecmp(ap->description, bp->description);
+}
+
+static gint
+vislist_compare_func(gconstpointer a, gconstpointer b)
+{
+ const VisPlugin *ap = a, *bp = b;
+ return strcasecmp(ap->description, bp->description);
+}
+
+static gboolean
+plugin_is_duplicate(const gchar * filename)
+{
+ GList *l;
+ const gchar *basename = g_basename(filename);
+
+ /* FIXME: messy stuff */
+
+ for (l = ip_data.input_list; l; l = g_list_next(l))
+ if (!strcmp(basename, g_basename(INPUT_PLUGIN(l->data)->filename)))
+ return TRUE;
+
+ for (l = op_data.output_list; l; l = g_list_next(l))
+ if (!strcmp(basename, g_basename(OUTPUT_PLUGIN(l->data)->filename)))
+ return TRUE;
+
+ for (l = ep_data.effect_list; l; l = g_list_next(l))
+ if (!strcmp(basename, g_basename(EFFECT_PLUGIN(l->data)->filename)))
+ return TRUE;
+
+ for (l = gp_data.general_list; l; l = g_list_next(l))
+ if (!strcmp(basename, g_basename(GENERAL_PLUGIN(l->data)->filename)))
+ return TRUE;
+
+ for (l = vp_data.vis_list; l; l = g_list_next(l))
+ if (!strcmp(basename, g_basename(VIS_PLUGIN(l->data)->filename)))
+ return TRUE;
+
+ return FALSE;
+}
+
+
+#define PLUGIN_GET_INFO(x) ((PluginGetInfoFunc)(x))()
+typedef Plugin * (*PluginGetInfoFunc) (void);
+
+static void
+input_plugin_init(Plugin * plugin)
+{
+ InputPlugin *p = INPUT_PLUGIN(plugin);
+
+ p->get_vis_type = input_get_vis_type;
+ p->add_vis_pcm = input_add_vis_pcm;
+
+ /* Pretty const casts courtesy of XMMS's plugin.h legacy. Anyone
+ else thinks we could use a CONST macro to solve the warnings?
+ - descender */
+ p->set_info = (void (*)(gchar *, gint, gint, gint, gint)) playlist_set_info;
+ p->set_info_text = (void (*)(gchar *)) input_set_info_text;
+
+ ip_data.input_list = g_list_append(ip_data.input_list, p);
+
+ g_hash_table_replace(plugin_matrix, g_path_get_basename(p->filename),
+ GINT_TO_POINTER(1));
+}
+
+static void
+output_plugin_init(Plugin * plugin)
+{
+ OutputPlugin *p = OUTPUT_PLUGIN(plugin);
+ op_data.output_list = g_list_append(op_data.output_list, p);
+}
+
+static void
+effect_plugin_init(Plugin * plugin)
+{
+ EffectPlugin *p = EFFECT_PLUGIN(plugin);
+ ep_data.effect_list = g_list_append(ep_data.effect_list, p);
+}
+
+static void
+general_plugin_init(Plugin * plugin)
+{
+ GeneralPlugin *p = GENERAL_PLUGIN(plugin);
+ p->xmms_session = ctrlsocket_get_session_id();
+ gp_data.general_list = g_list_append(gp_data.general_list, p);
+}
+
+static void
+vis_plugin_init(Plugin * plugin)
+{
+ VisPlugin *p = VIS_PLUGIN(plugin);
+ p->xmms_session = ctrlsocket_get_session_id();
+ p->disable_plugin = vis_disable_plugin;
+ vp_data.vis_list = g_list_append(vp_data.vis_list, p);
+}
+
+
+/* FIXME: Placed here (hopefully) temporarily - descender */
+
+typedef struct {
+ const gchar *name;
+ const gchar *id;
+ void (*init)(Plugin *);
+} PluginType;
+
+static PluginType plugin_types[] = {
+ { "input" , "get_iplugin_info", input_plugin_init },
+ { "output" , "get_oplugin_info", output_plugin_init },
+ { "effect" , "get_eplugin_info", effect_plugin_init },
+ { "general" , "get_gplugin_info", general_plugin_init },
+ { "visualization", "get_vplugin_info", vis_plugin_init },
+ { NULL, NULL, NULL }
+};
+
+static void
+add_plugin(const gchar * filename)
+{
+ PluginType *type;
+ GModule *module;
+ gpointer func;
+
+ if (plugin_is_duplicate(filename))
+ return;
+
+ if (!(module = g_module_open(filename, 0))) {
+ g_warning("Failed to load plugin (%s): %s",
+ filename, g_module_error());
+ return;
+ }
+
+ for (type = plugin_types; type->name; type++)
+ {
+ if (g_module_symbol(module, type->id, &func)) {
+ Plugin *plugin = PLUGIN_GET_INFO(func);
+
+ plugin->handle = module;
+ plugin->filename = g_strdup(filename);
+ type->init(PLUGIN_GET_INFO(func));
+
+ g_message("Loaded %s plugin (%s)", type->name, filename);
+ return;
+ }
+ }
+
+ g_warning("Invalid plugin (%s)", filename);
+ g_module_close(module);
+}
+
+static gboolean
+scan_plugin_func(const gchar * path, const gchar * basename, gpointer data)
+{
+ if (!str_has_suffix_nocase(basename, G_MODULE_SUFFIX))
+ return FALSE;
+
+ if (!g_file_test(path, G_FILE_TEST_IS_REGULAR))
+ return FALSE;
+
+ add_plugin(path);
+
+ return FALSE;
+}
+
+static void
+scan_plugins(const gchar * path)
+{
+ dir_foreach(path, scan_plugin_func, NULL, NULL);
+}
+
+void
+plugin_system_init(void)
+{
+ gchar *dir, **disabled;
+ GList *node;
+ OutputPlugin *op;
+ InputPlugin *ip;
+ gint dirsel = 0, i = 0;
+
+ if (!g_module_supported()) {
+ /* FIXME: We should open an error dialog for this. BMP is
+ practically useless without plugins */
+ g_warning("Module loading not supported! Plugins will not be loaded.");
+ return;
+ }
+
+ plugin_matrix = g_hash_table_new_full(g_str_hash, g_int_equal, g_free,
+ NULL);
+
+#ifndef DISABLE_USER_PLUGIN_DIR
+ scan_plugins(bmp_paths[BMP_PATH_USER_PLUGIN_DIR]);
+ /*
+ * This is in a separate loop so if the user puts them in the
+ * wrong dir we'll still get them in the right order (home dir
+ * first) - Zinx
+ */
+ while (plugin_dir_list[dirsel]) {
+ dir = g_build_filename(bmp_paths[BMP_PATH_USER_PLUGIN_DIR],
+ plugin_dir_list[dirsel++], NULL);
+ scan_plugins(dir);
+ g_free(dir);
+ }
+ dirsel = 0;
+#endif
+
+ while (plugin_dir_list[dirsel]) {
+ dir = g_build_filename(PLUGIN_DIR, plugin_dir_list[dirsel++], NULL);
+ scan_plugins(dir);
+ g_free(dir);
+ }
+
+ op_data.output_list = g_list_sort(op_data.output_list, outputlist_compare_func);
+ if (!op_data.current_output_plugin
+ && g_list_length(op_data.output_list)) {
+ op_data.current_output_plugin = op_data.output_list->data;
+ }
+
+ ip_data.input_list = g_list_sort(ip_data.input_list, inputlist_compare_func);
+
+ ep_data.effect_list = g_list_sort(ep_data.effect_list, effectlist_compare_func);
+ ep_data.enabled_list = NULL;
+
+ gp_data.general_list = g_list_sort(gp_data.general_list, generallist_compare_func);
+ gp_data.enabled_list = NULL;
+
+ vp_data.vis_list = g_list_sort(vp_data.vis_list, vislist_compare_func);
+ vp_data.enabled_list = NULL;
+
+ general_enable_from_stringified_list(cfg.enabled_gplugins);
+ vis_enable_from_stringified_list(cfg.enabled_vplugins);
+ effect_enable_from_stringified_list(cfg.enabled_eplugins);
+
+ g_free(cfg.enabled_gplugins);
+ cfg.enabled_gplugins = NULL;
+
+ g_free(cfg.enabled_vplugins);
+ cfg.enabled_vplugins = NULL;
+
+ g_free(cfg.enabled_eplugins);
+ cfg.enabled_eplugins = NULL;
+
+ for (node = op_data.output_list; node; node = g_list_next(node)) {
+ op = OUTPUT_PLUGIN(node->data);
+ /*
+ * Only test basename to avoid problems when changing
+ * prefix. We will only see one plugin with the same
+ * basename, so this is usually what the user want.
+ */
+ if (!strcmp(g_basename(cfg.outputplugin), g_basename(op->filename)))
+ op_data.current_output_plugin = op;
+ if (op->init)
+ op->init();
+ }
+
+ for (node = ip_data.input_list; node; node = g_list_next(node)) {
+ ip = INPUT_PLUGIN(node->data);
+ if (ip->init)
+ ip->init();
+ }
+
+ if (cfg.disabled_iplugins) {
+ disabled = g_strsplit(cfg.disabled_iplugins, ":", 0);
+ while (disabled[i]) {
+ g_hash_table_replace(plugin_matrix, disabled[i],
+ GINT_TO_POINTER(FALSE));
+ i++;
+ }
+
+ g_free(disabled);
+
+ g_free(cfg.disabled_iplugins);
+ cfg.disabled_iplugins = NULL;
+ }
+}
+
+void
+plugin_system_cleanup(void)
+{
+ InputPlugin *ip;
+ OutputPlugin *op;
+ EffectPlugin *ep;
+ GeneralPlugin *gp;
+ VisPlugin *vp;
+ GList *node;
+
+ g_message("Shutting down plugin system");
+
+ if (bmp_playback_get_playing())
+ bmp_playback_stop();
+
+ for (node = get_input_list(); node; node = g_list_next(node)) {
+ ip = INPUT_PLUGIN(node->data);
+ if (ip && ip->cleanup) {
+ ip->cleanup();
+ GDK_THREADS_LEAVE();
+ while (g_main_iteration(FALSE));
+ GDK_THREADS_ENTER();
+ }
+ g_module_close(ip->handle);
+ }
+
+ if (ip_data.input_list)
+ g_list_free(ip_data.input_list);
+
+ for (node = get_output_list(); node; node = g_list_next(node)) {
+ op = OUTPUT_PLUGIN(node->data);
+ g_module_close(op->handle);
+ }
+
+ if (op_data.output_list)
+ g_list_free(op_data.output_list);
+
+ for (node = get_effect_list(); node; node = g_list_next(node)) {
+ ep = EFFECT_PLUGIN(node->data);
+ if (ep && ep->cleanup) {
+ ep->cleanup();
+ GDK_THREADS_LEAVE();
+ while (g_main_iteration(FALSE));
+ GDK_THREADS_ENTER();
+ }
+ g_module_close(ep->handle);
+ }
+
+ if (ep_data.effect_list)
+ g_list_free(ep_data.effect_list);
+
+ for (node = get_general_enabled_list(); node; node = g_list_next(node)) {
+ gp = GENERAL_PLUGIN(node->data);
+ enable_general_plugin(g_list_index(gp_data.general_list, gp), FALSE);
+ }
+
+ if (gp_data.enabled_list)
+ g_list_free(gp_data.enabled_list);
+
+ GDK_THREADS_LEAVE();
+ while (g_main_iteration(FALSE));
+ GDK_THREADS_ENTER();
+
+ for (node = get_general_list(); node; node = g_list_next(node)) {
+ gp = GENERAL_PLUGIN(node->data);
+ g_module_close(gp->handle);
+ }
+
+ if (gp_data.general_list)
+ g_list_free(gp_data.general_list);
+
+ for (node = get_vis_enabled_list(); node; node = g_list_next(node)) {
+ vp = VIS_PLUGIN(node->data);
+ enable_vis_plugin(g_list_index(vp_data.vis_list, vp), FALSE);
+ }
+
+ if (vp_data.enabled_list)
+ g_list_free(vp_data.enabled_list);
+
+ GDK_THREADS_LEAVE();
+ while (g_main_iteration(FALSE));
+ GDK_THREADS_ENTER();
+
+ for (node = get_vis_list(); node; node = g_list_next(node)) {
+ vp = VIS_PLUGIN(node->data);
+ g_module_close(vp->handle);
+ }
+
+ if (vp_data.vis_list)
+ g_list_free(vp_data.vis_list);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/pluginenum.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,34 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef PLUGINENUM_H
+#define PLUGINENUM_H
+
+#include <glib.h>
+
+#define PLUGIN_FILENAME(name) ("lib" name "." G_MODULE_SUFFIX)
+
+void plugin_system_init(void);
+void plugin_system_cleanup(void);
+
+extern const gchar *plugin_dir_list[];
+extern GHashTable *plugin_matrix;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1819 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+//#include <glade/glade.h>
+#include <string.h>
+
+#include "glade.h"
+
+#include "plugin.h"
+#include "pluginenum.h"
+#include "input.h"
+#include "effect.h"
+#include "general.h"
+#include "output.h"
+#include "visualization.h"
+
+#include "main.h"
+#include "skin.h"
+#include "urldecode.h"
+#include "util.h"
+#include "dnd.h"
+#include "libbeep/configdb.h"
+
+#include "mainwin.h"
+#include "playlistwin.h"
+#include "skinwin.h"
+#include "playlist_list.h"
+
+
+enum CategoryViewCols {
+ CATEGORY_VIEW_COL_ICON,
+ CATEGORY_VIEW_COL_NAME,
+ CATEGORY_VIEW_COL_ID,
+ CATEGORY_VIEW_N_COLS
+};
+
+enum PluginViewCols {
+ PLUGIN_VIEW_COL_ACTIVE,
+ PLUGIN_VIEW_COL_DESC,
+ PLUGIN_VIEW_COL_FILENAME,
+ PLUGIN_VIEW_COL_ID,
+ PLUGIN_VIEW_N_COLS
+};
+
+
+typedef struct {
+ const gchar *icon_path;
+ const gchar *name;
+ gint id;
+} Category;
+
+typedef struct {
+ const gchar *name;
+ const gchar *tag;
+}
+TitleFieldTag;
+
+static GtkWidget *prefswin = NULL;
+
+static Category categories[] = {
+ {DATA_DIR "/images/appearance.png", N_("Appearance"), 1},
+ {DATA_DIR "/images/eq.png", N_("Equalizer"), 4},
+ {DATA_DIR "/images/mouse.png", N_("Mouse"), 2},
+ {DATA_DIR "/images/playlist.png", N_("Playlist"), 3},
+ {DATA_DIR "/images/plugins.png", N_("Plugins"), 0},
+};
+
+static gint n_categories = G_N_ELEMENTS(categories);
+
+static TitleFieldTag title_field_tags[] = {
+ { N_("Artist") , "%p" },
+ { N_("Album") , "%a" },
+ { N_("Title") , "%t" },
+ { N_("Tracknumber"), "%n" },
+ { N_("Genre") , "%g" },
+ { N_("Filename") , "%f" },
+ { N_("Filepath") , "%F" },
+ { N_("Date") , "%d" },
+ { N_("Year") , "%y" },
+ { N_("Comment") , "%c" }
+};
+
+static const guint n_title_field_tags = G_N_ELEMENTS(title_field_tags);
+
+/*
+static GladeXML *
+prefswin_get_xml(void)
+{
+ return GLADE_XML(g_object_get_data(G_OBJECT(prefswin), "glade-xml"));
+}
+*/
+static void
+change_category(GtkNotebook * notebook,
+ GtkTreeSelection * selection)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint index;
+
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, CATEGORY_VIEW_COL_ID, &index, -1);
+ gtk_notebook_set_current_page(notebook, index);
+}
+
+void
+prefswin_set_category(gint index)
+{
+// GladeXML *xml;
+// GtkWidget *notebook;
+
+ g_return_if_fail(index >= 0 && index < n_categories);
+
+// xml = prefswin_get_xml();
+// notebook = glade_xml_get_widget(xml, "category_view");
+// gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), index);
+}
+
+
+static void
+input_plugin_open_prefs(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ input_configure(id);
+}
+
+static void
+input_plugin_open_info(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ input_about(id);
+}
+
+static void
+output_plugin_open_prefs(GtkComboBox * cbox,
+ gpointer data)
+{
+ output_configure(gtk_combo_box_get_active(cbox));
+}
+
+static void
+output_plugin_open_info(GtkComboBox * cbox,
+ gpointer data)
+{
+ output_about(gtk_combo_box_get_active(cbox));
+}
+
+static void
+general_plugin_open_prefs(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ general_configure(id);
+}
+
+static void
+general_plugin_open_info(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ general_about(id);
+}
+
+static void
+input_plugin_toggle(GtkCellRendererToggle * cell,
+ const gchar * path_str,
+ gpointer data)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(data);
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+ gboolean fixed;
+ gint pluginnr;
+ gchar *filename, *basename;
+ /*GList *diplist, *tmplist; */
+
+ /* get toggled iter */
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, &fixed,
+ PLUGIN_VIEW_COL_ID, &pluginnr,
+ PLUGIN_VIEW_COL_FILENAME, &filename,
+ -1);
+
+ basename = g_path_get_basename(filename);
+ g_free(filename);
+
+ /* do something with the value */
+ fixed ^= 1;
+
+ g_hash_table_replace(plugin_matrix, basename, GINT_TO_POINTER(fixed));
+ /* g_hash_table_foreach(pluginmatrix, (GHFunc) disp_matrix, NULL); */
+
+ /* set new value */
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+ PLUGIN_VIEW_COL_ACTIVE, fixed, -1);
+
+ /* clean up */
+ gtk_tree_path_free(path);
+}
+
+
+static void
+vis_plugin_toggle(GtkCellRendererToggle * cell,
+ const gchar * path_str,
+ gpointer data)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(data);
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+ gboolean fixed;
+ gint pluginnr;
+
+ /* get toggled iter */
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, &fixed,
+ PLUGIN_VIEW_COL_ID, &pluginnr, -1);
+
+ /* do something with the value */
+ fixed ^= 1;
+
+ enable_vis_plugin(pluginnr, fixed);
+
+ /* set new value */
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+ PLUGIN_VIEW_COL_ACTIVE, fixed, -1);
+
+ /* clean up */
+ gtk_tree_path_free(path);
+}
+
+static void
+effect_plugin_toggle(GtkCellRendererToggle * cell,
+ const gchar * path_str,
+ gpointer data)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(data);
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+ gboolean fixed;
+ gint pluginnr;
+
+ /* get toggled iter */
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, &fixed,
+ PLUGIN_VIEW_COL_ID, &pluginnr, -1);
+
+ /* do something with the value */
+ fixed ^= 1;
+
+ enable_effect_plugin(pluginnr, fixed);
+
+ /* set new value */
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+ PLUGIN_VIEW_COL_ACTIVE, fixed, -1);
+
+ /* clean up */
+ gtk_tree_path_free(path);
+}
+static void
+general_plugin_toggle(GtkCellRendererToggle * cell,
+ const gchar * path_str,
+ gpointer data)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(data);
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+ gboolean fixed;
+ gint pluginnr;
+
+ /* get toggled iter */
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, &fixed,
+ PLUGIN_VIEW_COL_ID, &pluginnr, -1);
+
+ /* do something with the value */
+ fixed ^= 1;
+
+ enable_general_plugin(pluginnr, fixed);
+
+ /* set new value */
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+ PLUGIN_VIEW_COL_ACTIVE, fixed, -1);
+
+ /* clean up */
+ gtk_tree_path_free(path);
+}
+
+static void
+on_output_plugin_cbox_changed(GtkComboBox * combobox,
+ gpointer data)
+{
+ gint selected;
+ selected = gtk_combo_box_get_active(combobox);
+
+ /* Force playback to stop. There is NO way to change the output
+ plugin in the middle of a playback, and NO way to know when the
+ user closes the output plugin settings dialog. */
+ mainwin_stop_pushed();
+ set_current_output_plugin(selected);
+}
+
+static void
+on_output_plugin_cbox_realize(GtkComboBox * cbox,
+ gpointer data)
+{
+ GList *olist = get_output_list();
+ OutputPlugin *op, *cp = get_current_output_plugin();
+ gint i = 0, selected = 0;
+
+ if (!olist) {
+ gtk_widget_set_sensitive(GTK_WIDGET(cbox), FALSE);
+ return;
+ }
+
+ for (i = 0; olist; i++, olist = g_list_next(olist)) {
+ op = OUTPUT_PLUGIN(olist->data);
+
+ if (olist->data == cp)
+ selected = i;
+
+ gtk_combo_box_append_text(cbox, op->description);
+ }
+
+ gtk_combo_box_set_active(cbox, selected);
+ g_signal_connect(cbox, "changed",
+ G_CALLBACK(on_output_plugin_cbox_changed), NULL);
+}
+
+
+static void
+on_input_plugin_view_realize(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ GList *ilist;
+ gchar *description[2];
+ InputPlugin *ip;
+ gint id = 0;
+
+ gboolean enabled;
+
+ store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
+ G_TYPE_BOOLEAN, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_INT);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Enabled"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, FALSE);
+ gtk_tree_view_column_set_fixed_width(column, 50);
+
+ renderer = gtk_cell_renderer_toggle_new();
+ g_signal_connect(renderer, "toggled",
+ G_CALLBACK(input_plugin_toggle), store);
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "active",
+ PLUGIN_VIEW_COL_ACTIVE, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Description"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer,
+ "text", PLUGIN_VIEW_COL_DESC, NULL);
+ gtk_tree_view_append_column(treeview, column);
+
+ column = gtk_tree_view_column_new();
+
+ gtk_tree_view_column_set_title(column, _("Filename"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text",
+ PLUGIN_VIEW_COL_FILENAME, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ for (ilist = get_input_list(); ilist; ilist = g_list_next(ilist)) {
+ ip = INPUT_PLUGIN(ilist->data);
+
+ description[0] = g_strdup(ip->description);
+ description[1] = g_strdup(ip->filename);
+
+ enabled = input_is_enabled(description[1]);
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, enabled,
+ PLUGIN_VIEW_COL_DESC, description[0],
+ PLUGIN_VIEW_COL_FILENAME, description[1],
+ PLUGIN_VIEW_COL_ID, id++, -1);
+
+ g_free(description[1]);
+ g_free(description[0]);
+ }
+
+ gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+}
+
+
+static void
+on_general_plugin_view_realize(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ GList *ilist /*, *diplist */ ;
+ gchar *description[2];
+ GeneralPlugin *gp;
+ gint id = 0;
+
+ gboolean enabled;
+
+ store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
+ G_TYPE_BOOLEAN, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_INT);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Enabled"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, FALSE);
+ gtk_tree_view_column_set_fixed_width(column, 50);
+
+ renderer = gtk_cell_renderer_toggle_new();
+ g_signal_connect(renderer, "toggled",
+ G_CALLBACK(general_plugin_toggle), store);
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "active",
+ PLUGIN_VIEW_COL_ACTIVE, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Description"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer,
+ "text", PLUGIN_VIEW_COL_DESC, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Filename"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text",
+ PLUGIN_VIEW_COL_FILENAME, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ for (ilist = get_general_list(); ilist; ilist = g_list_next(ilist)) {
+ gp = GENERAL_PLUGIN(ilist->data);
+
+ description[0] = g_strdup(gp->description);
+ description[1] = g_strdup(gp->filename);
+
+ enabled = general_enabled(id);
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, enabled,
+ PLUGIN_VIEW_COL_DESC, description[0],
+ PLUGIN_VIEW_COL_FILENAME, description[1],
+ PLUGIN_VIEW_COL_ID, id++, -1);
+
+ g_free(description[1]);
+ g_free(description[0]);
+ }
+
+ gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+}
+
+
+static void
+on_vis_plugin_view_realize(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ GList *vlist;
+ gchar *description[2];
+ VisPlugin *vp;
+ gint id = 0;
+
+ gboolean enabled;
+
+
+ store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
+ G_TYPE_BOOLEAN, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_INT);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Enabled"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, FALSE);
+ gtk_tree_view_column_set_fixed_width(column, 50);
+
+ renderer = gtk_cell_renderer_toggle_new();
+ g_signal_connect(renderer, "toggled",
+ G_CALLBACK(vis_plugin_toggle), store);
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "active",
+ PLUGIN_VIEW_COL_ACTIVE, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Description"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer,
+ "text", PLUGIN_VIEW_COL_DESC, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Filename"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text",
+ PLUGIN_VIEW_COL_FILENAME, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ for (vlist = get_vis_list(); vlist; vlist = g_list_next(vlist)) {
+ vp = VIS_PLUGIN(vlist->data);
+
+ description[0] = g_strdup(vp->description);
+ description[1] = g_strdup(vp->filename);
+
+ enabled = vis_enabled(id);
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, enabled,
+ PLUGIN_VIEW_COL_DESC, description[0],
+ PLUGIN_VIEW_COL_FILENAME, description[1],
+ PLUGIN_VIEW_COL_ID, id++, -1);
+
+ g_free(description[1]);
+ g_free(description[0]);
+ }
+
+ gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+}
+
+static void
+editable_insert_text(GtkEditable * editable,
+ const gchar * text,
+ gint * pos)
+{
+ gtk_editable_insert_text(editable, text, strlen(text), pos);
+}
+
+
+static void
+on_effect_plugin_view_realize(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ GList *elist;
+ gchar *description[2];
+ gint id = 0;
+
+ gboolean enabled;
+
+
+ store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
+ G_TYPE_BOOLEAN, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_INT);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Enabled"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, FALSE);
+ gtk_tree_view_column_set_fixed_width(column, 50);
+
+ renderer = gtk_cell_renderer_toggle_new();
+ g_signal_connect(renderer, "toggled",
+ G_CALLBACK(effect_plugin_toggle), store);
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "active",
+ PLUGIN_VIEW_COL_ACTIVE, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Description"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer,
+ "text", PLUGIN_VIEW_COL_DESC, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Filename"));
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 4);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text",
+ PLUGIN_VIEW_COL_FILENAME, NULL);
+
+ gtk_tree_view_append_column(treeview, column);
+
+ for (elist = get_effect_list(); elist; elist = g_list_next(elist)) {
+ EffectPlugin *ep = EFFECT_PLUGIN(elist->data);
+
+ description[0] = g_strdup(ep->description);
+ description[1] = g_strdup(ep->filename);
+
+ enabled = effect_enabled(id);
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ PLUGIN_VIEW_COL_ACTIVE, enabled,
+ PLUGIN_VIEW_COL_DESC, description[0],
+ PLUGIN_VIEW_COL_FILENAME, description[1],
+ PLUGIN_VIEW_COL_ID, id++, -1);
+
+ g_free(description[1]);
+ g_free(description[0]);
+ }
+
+ gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+}
+
+static void
+titlestring_tag_menu_callback(GtkMenuItem * menuitem,
+ gpointer data)
+{
+ const gchar *separator = " - ";
+ //GladeXML *xml;
+ GtkWidget *entry;
+ gint item = GPOINTER_TO_INT(data);
+ gint pos;
+
+ //xml = prefswin_get_xml();
+ //entry = glade_xml_get_widget(xml, "titlestring_entry");
+
+ pos = gtk_editable_get_position(GTK_EDITABLE(entry));
+
+ /* insert separator as needed */
+ if (g_utf8_strlen(gtk_entry_get_text(GTK_ENTRY(entry)), -1) > 0)
+ editable_insert_text(GTK_EDITABLE(entry), separator, &pos);
+
+ editable_insert_text(GTK_EDITABLE(entry), _(title_field_tags[item].tag),
+ &pos);
+
+ gtk_editable_set_position(GTK_EDITABLE(entry), pos);
+}
+
+static void
+on_titlestring_help_button_clicked(GtkButton * button,
+ gpointer data)
+{
+
+ GtkMenu *menu;
+ MenuPos *pos = g_new0(MenuPos, 1);
+ GdkWindow *parent;
+
+ gint x_ro, y_ro;
+ gint x_widget, y_widget;
+ gint x_size, y_size;
+
+ g_return_if_fail (button != NULL);
+ g_return_if_fail (GTK_IS_MENU (data));
+
+ parent = gtk_widget_get_parent_window(GTK_WIDGET(button));
+
+ gdk_drawable_get_size(parent, &x_size, &y_size);
+ gdk_window_get_root_origin(GTK_WIDGET(button)->window, &x_ro, &y_ro);
+ gdk_window_get_position(GTK_WIDGET(button)->window, &x_widget, &y_widget);
+
+ pos->x = x_size + x_ro;
+ pos->y = y_size + y_ro - 100;
+
+ menu = GTK_MENU(data);
+ gtk_menu_popup (menu, NULL, NULL, util_menu_position, pos,
+ 0, GDK_CURRENT_TIME);
+}
+
+
+static void
+on_titlestring_entry_realize(GtkWidget * entry,
+ gpointer data)
+{
+ gtk_entry_set_text(GTK_ENTRY(entry), cfg.gentitle_format);
+}
+
+static void
+on_titlestring_entry_changed(GtkWidget * entry,
+ gpointer data)
+{
+ g_free(cfg.gentitle_format);
+ cfg.gentitle_format = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+}
+
+static void
+on_titlestring_cbox_realize(GtkWidget * cbox,
+ gpointer data)
+{
+ gtk_combo_box_set_active(GTK_COMBO_BOX(cbox), cfg.titlestring_preset);
+ gtk_widget_set_sensitive(GTK_WIDGET(data),
+ (cfg.titlestring_preset == n_titlestring_presets));
+}
+
+static void
+on_titlestring_cbox_changed(GtkWidget * cbox,
+ gpointer data)
+{
+ gint position = gtk_combo_box_get_active(GTK_COMBO_BOX(cbox));
+
+ cfg.titlestring_preset = position;
+ gtk_widget_set_sensitive(GTK_WIDGET(data), (position == 4));
+}
+
+static void
+on_mainwin_font_button_font_set(GtkFontButton * button,
+ gpointer data)
+{
+ g_free(cfg.mainwin_font);
+ cfg.mainwin_font = g_strdup(gtk_font_button_get_font_name(button));
+
+ textbox_set_xfont(mainwin_info, TRUE, cfg.mainwin_font);
+ mainwin_set_info_text();
+ draw_main_window(TRUE);
+}
+
+static void
+on_mainwin_font_button_realize(GtkFontButton * button,
+ gpointer data)
+{
+ gtk_font_button_set_font_name(button, cfg.mainwin_font);
+}
+
+static void
+on_playlist_font_button_font_set(GtkFontButton * button,
+ gpointer data)
+{
+ g_free(cfg.playlist_font);
+ cfg.playlist_font = g_strdup(gtk_font_button_get_font_name(button));
+
+ playlist_list_set_font(cfg.playlist_font);
+ playlistwin_update_list();
+ draw_playlist_window(TRUE);
+}
+
+static void
+on_playlist_font_button_realize(GtkFontButton * button,
+ gpointer data)
+{
+ gtk_font_button_set_font_name(button, cfg.playlist_font);
+}
+
+static void
+on_playlist_show_pl_numbers_realize(GtkToggleButton * button,
+ gpointer data)
+{
+ gtk_toggle_button_set_active(button, cfg.show_numbers_in_pl);
+}
+
+static void
+on_playlist_show_pl_numbers_toggled(GtkToggleButton * button,
+ gpointer data)
+{
+ cfg.show_numbers_in_pl = gtk_toggle_button_get_active(button);
+ playlistwin_update_list();
+ draw_playlist_window(TRUE);
+}
+
+static void
+input_plugin_enable_prefs(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_input_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ INPUT_PLUGIN(plist->data)->configure != NULL);
+}
+
+static void
+input_plugin_enable_info(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_input_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ INPUT_PLUGIN(plist->data)->about != NULL);
+}
+
+
+static void
+output_plugin_enable_info(GtkComboBox * cbox, GtkButton * button)
+{
+ GList *plist;
+
+ gint id = gtk_combo_box_get_active(cbox);
+
+ plist = get_output_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ OUTPUT_PLUGIN(plist->data)->about != NULL);
+}
+
+static void
+output_plugin_enable_prefs(GtkComboBox * cbox, GtkButton * button)
+{
+ GList *plist;
+ gint id = gtk_combo_box_get_active(cbox);
+
+ plist = get_output_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ OUTPUT_PLUGIN(plist->data)->configure != NULL);
+}
+
+
+static void
+general_plugin_enable_info(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_general_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ GENERAL_PLUGIN(plist->data)->about != NULL);
+}
+
+static void
+general_plugin_enable_prefs(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_general_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ GENERAL_PLUGIN(plist->data)->configure != NULL);
+}
+
+
+
+static void
+vis_plugin_enable_prefs(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_vis_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ VIS_PLUGIN(plist->data)->configure != NULL);
+}
+
+static void
+vis_plugin_enable_info(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_vis_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ VIS_PLUGIN(plist->data)->about != NULL);
+}
+
+static void
+vis_plugin_open_prefs(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ vis_configure(id);
+}
+
+
+static void
+vis_plugin_open_info(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ vis_about(id);
+}
+
+
+
+
+
+
+static void
+effect_plugin_enable_prefs(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_effect_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ EFFECT_PLUGIN(plist->data)->configure != NULL);
+}
+
+static void
+effect_plugin_enable_info(GtkTreeView * treeview,
+ GtkButton * button)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GList *plist;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+
+ plist = get_effect_list();
+ plist = g_list_nth(plist, id);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(button),
+ EFFECT_PLUGIN(plist->data)->about != NULL);
+}
+
+static void
+effect_plugin_open_prefs(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ effect_configure(id);
+}
+
+
+static void
+effect_plugin_open_info(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint id;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_VIEW_COL_ID, &id, -1);
+ effect_about(id);
+}
+
+
+
+
+
+static void
+on_mouse_wheel_volume_realize(GtkSpinButton * button,
+ gpointer data)
+{
+ gtk_spin_button_set_value(button, cfg.mouse_change);
+}
+
+static void
+on_mouse_wheel_volume_changed(GtkSpinButton * button,
+ gpointer data)
+{
+ cfg.mouse_change = gtk_spin_button_get_value_as_int(button);
+}
+
+static void
+on_pause_between_songs_time_realize(GtkSpinButton * button,
+ gpointer data)
+{
+ gtk_spin_button_set_value(button, cfg.pause_between_songs_time);
+}
+
+static void
+on_pause_between_songs_time_changed(GtkSpinButton * button,
+ gpointer data)
+{
+ cfg.pause_between_songs_time = gtk_spin_button_get_value_as_int(button);
+}
+
+static void
+on_mouse_wheel_scroll_pl_realize(GtkSpinButton * button,
+ gpointer data)
+{
+ gtk_spin_button_set_value(button, cfg.scroll_pl_by);
+}
+
+static void
+on_mouse_wheel_scroll_pl_changed(GtkSpinButton * button,
+ gpointer data)
+{
+ cfg.scroll_pl_by = gtk_spin_button_get_value_as_int(button);
+}
+
+static void
+on_playlist_convert_underscore_realize(GtkToggleButton * button,
+ gpointer data)
+{
+ gtk_toggle_button_set_active(button, cfg.convert_underscore);
+}
+
+static void
+on_playlist_convert_underscore_toggled(GtkToggleButton * button,
+ gpointer data)
+{
+ cfg.convert_underscore = gtk_toggle_button_get_active(button);
+}
+
+static void
+on_playlist_no_advance_realize(GtkToggleButton * button, gpointer data)
+{
+ gtk_toggle_button_set_active(button, cfg.no_playlist_advance);
+}
+
+static void
+on_playlist_no_advance_toggled(GtkToggleButton * button, gpointer data)
+{
+ cfg.no_playlist_advance = gtk_toggle_button_get_active(button);
+}
+
+static void
+on_playlist_convert_twenty_realize(GtkToggleButton * button, gpointer data)
+{
+ gtk_toggle_button_set_active(button, cfg.convert_twenty);
+}
+
+static void
+on_playlist_convert_twenty_toggled(GtkToggleButton * button, gpointer data)
+{
+ cfg.convert_twenty = gtk_toggle_button_get_active(button);
+}
+
+#if 0
+static void
+on_playlist_update_clicked(GtkButton * button,
+ gpointer data)
+{
+ playlistwin_update_list();
+ draw_playlist_window(TRUE);
+}
+#endif
+
+static void
+on_use_pl_metadata_realize(GtkToggleButton * button,
+ gpointer data)
+{
+ gboolean state = cfg.use_pl_metadata;
+ gtk_toggle_button_set_active(button, state);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), state);
+}
+
+static void
+on_use_pl_metadata_toggled(GtkToggleButton * button,
+ gpointer data)
+{
+ gboolean state = gtk_toggle_button_get_active(button);
+ cfg.use_pl_metadata = state;
+ gtk_widget_set_sensitive(GTK_WIDGET(data), state);
+}
+
+static void
+on_pause_between_songs_realize(GtkToggleButton * button,
+ gpointer data)
+{
+ gboolean state = cfg.pause_between_songs;
+ gtk_toggle_button_set_active(button, state);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), state);
+}
+
+static void
+on_pause_between_songs_toggled(GtkToggleButton * button,
+ gpointer data)
+{
+ gboolean state = gtk_toggle_button_get_active(button);
+ cfg.pause_between_songs = state;
+ gtk_widget_set_sensitive(GTK_WIDGET(data), state);
+}
+
+static void
+on_pl_metadata_on_load_realize(GtkRadioButton * button,
+ gpointer data)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
+ cfg.get_info_on_load);
+}
+
+static void
+on_pl_metadata_on_display_realize(GtkRadioButton * button,
+ gpointer data)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
+ cfg.get_info_on_demand);
+}
+
+static void
+on_pl_metadata_on_load_toggled(GtkRadioButton * button,
+ gpointer data)
+{
+ cfg.get_info_on_load =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+}
+
+static void
+on_pl_metadata_on_display_toggled(GtkRadioButton * button,
+ gpointer data)
+{
+ cfg.get_info_on_demand =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+}
+
+static void
+on_custom_cursors_realize(GtkToggleButton * button,
+ gpointer data)
+{
+ gtk_toggle_button_set_active(button, cfg.custom_cursors);
+}
+
+static void
+on_custom_cursors_toggled(GtkToggleButton *togglebutton,
+ gpointer data)
+{
+ cfg.custom_cursors = gtk_toggle_button_get_active(togglebutton);
+ skin_reload_forced();
+}
+
+static void
+on_eq_dir_preset_entry_realize(GtkEntry * entry,
+ gpointer data)
+{
+ gtk_entry_set_text(entry, cfg.eqpreset_default_file);
+}
+
+static void
+on_eq_dir_preset_entry_changed(GtkEntry * entry,
+ gpointer data)
+{
+ g_free(cfg.eqpreset_default_file);
+ cfg.eqpreset_default_file = g_strdup(gtk_entry_get_text(entry));
+}
+
+static void
+on_eq_file_preset_entry_realize(GtkEntry * entry,
+ gpointer data)
+{
+ gtk_entry_set_text(entry, cfg.eqpreset_extension);
+}
+
+static void
+on_eq_file_preset_entry_changed(GtkEntry * entry, gpointer data)
+{
+ const gchar *text = gtk_entry_get_text(entry);
+
+ while (*text == '.')
+ text++;
+
+ g_free(cfg.eqpreset_extension);
+ cfg.eqpreset_extension = g_strdup(text);
+}
+
+
+/* FIXME: implement these */
+
+static void
+on_eq_preset_view_realize(GtkTreeView * treeview,
+ gpointer data)
+{}
+
+static void
+on_eq_preset_add_clicked(GtkButton * button,
+ gpointer data)
+{}
+
+static void
+on_eq_preset_remove_clicked(GtkButton * button,
+ gpointer data)
+{}
+
+
+static void
+prefswin_set_skin_update(gboolean state)
+{
+ g_object_set_data(G_OBJECT(prefswin), "update-skins",
+ GINT_TO_POINTER(state));
+}
+
+static gboolean
+prefswin_get_skin_update(void)
+{
+ return (gboolean) g_object_get_data(G_OBJECT(prefswin), "update-skins");
+}
+
+static gboolean
+on_skin_view_visibility_notify(GtkTreeView * treeview,
+ GdkEvent * event,
+ gpointer data)
+{
+ if (event->visibility.state == GDK_VISIBILITY_FULLY_OBSCURED)
+ return FALSE;
+
+ if (!prefswin_get_skin_update())
+ return FALSE;
+
+ prefswin_set_skin_update(FALSE);
+ skin_view_update(treeview);
+
+ return TRUE;
+}
+
+static void
+on_category_view_realize(GtkTreeView * treeview,
+ GtkNotebook * notebook)
+{
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ GdkPixbuf *img;
+ gint i;
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, _("Category"));
+ gtk_tree_view_append_column(treeview, column);
+ gtk_tree_view_column_set_spacing(column, 2);
+
+ renderer = gtk_cell_renderer_pixbuf_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer, "pixbuf", 0, NULL);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text", 1, NULL);
+
+ store = gtk_list_store_new(CATEGORY_VIEW_N_COLS,
+ GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
+ gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+
+ for (i = 0; i < n_categories; i++) {
+ img = gdk_pixbuf_new_from_file(categories[i].icon_path, NULL);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ CATEGORY_VIEW_COL_ICON, img,
+ CATEGORY_VIEW_COL_NAME,
+ gettext(categories[i].name), CATEGORY_VIEW_COL_ID,
+ categories[i].id, -1);
+ g_object_unref(img);
+ }
+
+ selection = gtk_tree_view_get_selection(treeview);
+
+ g_signal_connect_swapped(selection, "changed",
+ G_CALLBACK(change_category), notebook);
+}
+
+static void
+mainwin_drag_data_received1(GtkWidget * widget,
+ GdkDragContext * context,
+ gint x, gint y,
+ GtkSelectionData * selection_data,
+ guint info, guint time,
+ gpointer user_data)
+{
+ gchar *path, *decoded;
+
+ if (!selection_data->data) {
+ g_warning("DND data string is NULL");
+ return;
+ }
+
+ path = (gchar *) selection_data->data;
+
+ /* FIXME: use a real URL validator/parser */
+
+ if (!str_has_prefix_nocase(path, "fonts:///"))
+ return;
+
+ path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */
+ path += 8;
+
+ /* plain, since we already stripped the first URI part */
+ decoded = xmms_urldecode_plain(path);
+
+ /* Get the old font's size, and add it to the dropped
+ * font's name */
+ cfg.playlist_font = g_strconcat(decoded+1,
+ strrchr(cfg.playlist_font, ' '),
+ NULL);
+ playlist_list_set_font(cfg.playlist_font);
+ playlistwin_update_list();
+ gtk_font_button_set_font_name(user_data, cfg.playlist_font);
+
+ g_free(decoded);
+}
+
+static void
+on_skin_view_drag_data_received(GtkWidget * widget,
+ GdkDragContext * context,
+ gint x, gint y,
+ GtkSelectionData * selection_data,
+ guint info, guint time,
+ gpointer user_data)
+{
+ ConfigDb *db;
+ gchar *path;
+
+ if (!selection_data->data) {
+ g_warning("DND data string is NULL");
+ return;
+ }
+
+ path = (gchar *) selection_data->data;
+
+ /* FIXME: use a real URL validator/parser */
+
+ if (str_has_prefix_nocase(path, "file:///")) {
+ path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */
+ path += 7;
+ }
+ else if (str_has_prefix_nocase(path, "file:")) {
+ path += 5;
+ }
+
+ if (file_is_archive(path)) {
+ bmp_active_skin_load(path);
+ skin_install_skin(path);
+ skin_view_update(GTK_TREE_VIEW(widget));
+ /* Change skin name in the config file */
+ db = bmp_cfg_db_open();
+ bmp_cfg_db_set_string(db, NULL, "skin", path);
+ bmp_cfg_db_close(db);
+ }
+
+}
+
+/* FIXME: complete the map */
+FUNC_MAP_BEGIN(prefswin_func_map)
+ FUNC_MAP_ENTRY(on_input_plugin_view_realize)
+ FUNC_MAP_ENTRY(on_output_plugin_cbox_realize)
+ FUNC_MAP_ENTRY(on_general_plugin_view_realize)
+ FUNC_MAP_ENTRY(on_vis_plugin_view_realize)
+ FUNC_MAP_ENTRY(on_effect_plugin_view_realize)
+ FUNC_MAP_ENTRY(on_custom_cursors_realize)
+ FUNC_MAP_ENTRY(on_custom_cursors_toggled)
+ FUNC_MAP_ENTRY(on_mainwin_font_button_realize)
+ FUNC_MAP_ENTRY(on_mainwin_font_button_font_set)
+ FUNC_MAP_ENTRY(on_mouse_wheel_volume_realize)
+ FUNC_MAP_ENTRY(on_mouse_wheel_volume_changed)
+ FUNC_MAP_ENTRY(on_mouse_wheel_scroll_pl_realize)
+ FUNC_MAP_ENTRY(on_mouse_wheel_scroll_pl_changed)
+ FUNC_MAP_ENTRY(on_pause_between_songs_time_realize)
+ FUNC_MAP_ENTRY(on_pause_between_songs_time_changed)
+ FUNC_MAP_ENTRY(on_pl_metadata_on_load_realize)
+ FUNC_MAP_ENTRY(on_pl_metadata_on_load_toggled)
+ FUNC_MAP_ENTRY(on_pl_metadata_on_display_realize)
+ FUNC_MAP_ENTRY(on_pl_metadata_on_display_toggled)
+ FUNC_MAP_ENTRY(on_playlist_show_pl_numbers_realize)
+ FUNC_MAP_ENTRY(on_playlist_show_pl_numbers_toggled)
+ FUNC_MAP_ENTRY(on_playlist_convert_twenty_realize)
+ FUNC_MAP_ENTRY(on_playlist_convert_twenty_toggled)
+ FUNC_MAP_ENTRY(on_playlist_convert_underscore_realize)
+ FUNC_MAP_ENTRY(on_playlist_convert_underscore_toggled)
+ FUNC_MAP_ENTRY(on_playlist_font_button_realize)
+ FUNC_MAP_ENTRY(on_playlist_font_button_font_set)
+ FUNC_MAP_ENTRY(on_playlist_no_advance_realize)
+ FUNC_MAP_ENTRY(on_playlist_no_advance_toggled)
+ FUNC_MAP_ENTRY(on_skin_view_visibility_notify)
+ FUNC_MAP_ENTRY(on_titlestring_entry_realize)
+ FUNC_MAP_ENTRY(on_titlestring_entry_changed)
+ FUNC_MAP_ENTRY(on_eq_dir_preset_entry_realize)
+ FUNC_MAP_ENTRY(on_eq_dir_preset_entry_changed)
+ FUNC_MAP_ENTRY(on_eq_file_preset_entry_realize)
+ FUNC_MAP_ENTRY(on_eq_file_preset_entry_changed)
+ FUNC_MAP_ENTRY(on_eq_preset_view_realize)
+ FUNC_MAP_ENTRY(on_eq_preset_add_clicked)
+ FUNC_MAP_ENTRY(on_eq_preset_remove_clicked)
+FUNC_MAP_END
+
+void
+create_prefs_window(void)
+{
+ //const gchar *glade_file = DATA_DIR "/glade/prefswin.glade";
+
+ //GladeXML *xml;
+ GtkWidget *widget, *widget2;
+
+ GtkWidget *titlestring_tag_menu, *menu_item;
+ gint i;
+
+ /* load the interface */
+ //xml = glade_xml_new_or_die(_("Preferences Window"), glade_file, NULL,
+ // NULL);
+
+
+ /* connect the signals in the interface */
+ //glade_xml_signal_autoconnect_map(xml, prefswin_func_map);
+
+ //prefswin = glade_xml_get_widget(xml, "prefswin");
+ //g_object_set_data(G_OBJECT(prefswin), "glade-xml", xml);
+ //gtk_window_set_transient_for(GTK_WINDOW(prefswin), GTK_WINDOW(mainwin));
+
+ /* create category view */
+ //widget = glade_xml_get_widget(xml, "category_view");
+ //widget2 = glade_xml_get_widget(xml, "category_notebook");
+ //g_signal_connect_after(G_OBJECT(widget), "realize",
+ // G_CALLBACK(on_category_view_realize),
+ // widget2);
+
+ /* plugin->input page */
+
+ //widget = glade_xml_get_widget(xml, "input_plugin_view");
+ //widget2 = glade_xml_get_widget(xml, "input_plugin_prefs");
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(input_plugin_enable_prefs),
+ // widget2);
+
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(input_plugin_open_prefs),
+ // widget);
+ //widget2 = glade_xml_get_widget(xml, "input_plugin_info");
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(input_plugin_enable_info),
+ // widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(input_plugin_open_info),
+ // widget);
+
+ /* plugin->output page */
+
+ //widget = glade_xml_get_widget(xml, "output_plugin_cbox");
+
+ //widget2 = glade_xml_get_widget(xml, "output_plugin_prefs");
+ //g_signal_connect(G_OBJECT(widget), "changed",
+ // G_CALLBACK(output_plugin_enable_prefs),
+ // widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(output_plugin_open_prefs),
+ // widget);
+
+ //widget2 = glade_xml_get_widget(xml, "output_plugin_info");
+ //g_signal_connect(G_OBJECT(widget), "changed",
+ // G_CALLBACK(output_plugin_enable_info),
+ // widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(output_plugin_open_info),
+ // widget);
+
+ /* plugin->general page */
+
+ //widget = glade_xml_get_widget(xml, "general_plugin_view");
+
+ //widget2 = glade_xml_get_widget(xml, "general_plugin_prefs");
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(general_plugin_enable_prefs),
+ // widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(general_plugin_open_prefs),
+ // widget);
+
+ //widget2 = glade_xml_get_widget(xml, "general_plugin_info");
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(general_plugin_enable_info),
+ // widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(general_plugin_open_info),
+ // widget);
+
+
+ /* plugin->vis page */
+
+ //widget = glade_xml_get_widget(xml, "vis_plugin_view");
+ //widget2 = glade_xml_get_widget(xml, "vis_plugin_prefs");
+ //
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(vis_plugin_open_prefs),
+ // widget);
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(vis_plugin_enable_prefs), widget2);
+
+
+ //widget2 = glade_xml_get_widget(xml, "vis_plugin_info");
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(vis_plugin_enable_info), widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(vis_plugin_open_info),
+ // widget);
+
+
+ /* plugin->effects page */
+
+ //widget = glade_xml_get_widget(xml, "effect_plugin_view");
+ //widget2 = glade_xml_get_widget(xml, "effect_plugin_prefs");
+
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(effect_plugin_open_prefs),
+ // widget);
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(effect_plugin_enable_prefs), widget2);
+ //
+ //
+ //widget2 = glade_xml_get_widget(xml, "effect_plugin_info");
+ //g_signal_connect(G_OBJECT(widget), "cursor-changed",
+ // G_CALLBACK(effect_plugin_enable_info), widget2);
+ //g_signal_connect_swapped(G_OBJECT(widget2), "clicked",
+ // G_CALLBACK(effect_plugin_open_info),
+ // widget);
+ //
+ /* playlist page */
+
+ //widget = glade_xml_get_widget(xml, "pause_between_songs_box");
+ //widget2 = glade_xml_get_widget(xml, "pause_between_songs");
+ //g_signal_connect_after(G_OBJECT(widget2), "realize",
+ // G_CALLBACK(on_pause_between_songs_realize),
+ // widget);
+ //g_signal_connect(G_OBJECT(widget2), "toggled",
+ // G_CALLBACK(on_pause_between_songs_toggled),
+ // widget);
+
+ //widget = glade_xml_get_widget(xml, "playlist_use_metadata_box");
+ //widget2 = glade_xml_get_widget(xml, "playlist_use_metadata");
+ //g_signal_connect_after(G_OBJECT(widget2), "realize",
+ // G_CALLBACK(on_use_pl_metadata_realize),
+ // widget);
+ //g_signal_connect(G_OBJECT(widget2), "toggled",
+ // G_CALLBACK(on_use_pl_metadata_toggled),
+ // widget);
+
+ //widget = glade_xml_get_widget(xml, "skin_view");
+ //g_signal_connect(widget, "drag-data-received",
+ // G_CALLBACK(on_skin_view_drag_data_received),
+ // NULL);
+ //bmp_drag_dest_set(widget);
+
+ //g_signal_connect(mainwin, "drag-data-received",
+ // G_CALLBACK(mainwin_drag_data_received),
+ // widget);
+
+ //widget = glade_xml_get_widget(xml, "playlist_font_button");
+ //g_signal_connect(mainwin, "drag-data-received",
+ // G_CALLBACK(mainwin_drag_data_received1),
+ // widget);
+
+ //widget = glade_xml_get_widget(xml, "titlestring_cbox");
+ //widget2 = glade_xml_get_widget(xml, "titlestring_entry");
+ //g_signal_connect(widget, "realize",
+ // G_CALLBACK(on_titlestring_cbox_realize),
+ // widget2);
+ //g_signal_connect(widget, "changed",
+ // G_CALLBACK(on_titlestring_cbox_changed),
+ // widget2);
+
+ /* FIXME: move this into a function */
+ /* create tag menu */
+ //titlestring_tag_menu = gtk_menu_new();
+ //for(i = 0; i < n_title_field_tags; i++) {
+ // menu_item = gtk_menu_item_new_with_label(_(title_field_tags[i].name));
+ // gtk_menu_shell_append(GTK_MENU_SHELL(titlestring_tag_menu), menu_item);
+ // g_signal_connect(menu_item, "activate",
+ // G_CALLBACK(titlestring_tag_menu_callback),
+ // GINT_TO_POINTER(i));
+ //};
+ //gtk_widget_show_all(titlestring_tag_menu);
+
+ //widget = glade_xml_get_widget(xml, "titlestring_help_button");
+ //widget2 = glade_xml_get_widget(xml, "titlestring_cbox");
+
+ //g_signal_connect(widget2, "changed",
+ // G_CALLBACK(on_titlestring_cbox_changed),
+ // widget);
+ //g_signal_connect(widget, "clicked",
+ // G_CALLBACK(on_titlestring_help_button_clicked),
+ // titlestring_tag_menu);
+}
+
+void
+show_prefs_window(void)
+{
+ prefswin_set_skin_update(TRUE);
+ gtk_widget_show(prefswin);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/prefswin.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,25 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PREFSWIN_H
+#define PREFSWIN_H
+
+void create_prefs_window(void);
+void show_prefs_window(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,99 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "sbutton.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+void
+sbutton_button_press_cb(GtkWidget * widget,
+ GdkEventButton * event,
+ SButton * button)
+{
+ if (event->button != 1)
+ return;
+
+ if (widget_contains(&button->sb_widget, event->x, event->y)) {
+ button->sb_pressed = 1;
+ button->sb_inside = 1;
+ }
+}
+
+void
+sbutton_button_release_cb(GtkWidget * widget, GdkEventButton * event,
+ SButton * button)
+{
+ if (event->button != 1)
+ return;
+ if (button->sb_inside && button->sb_pressed) {
+ button->sb_inside = 0;
+ if (button->sb_push_cb)
+ button->sb_push_cb();
+ }
+ if (button->sb_pressed)
+ button->sb_pressed = 0;
+}
+
+void
+sbutton_motion_cb(GtkWidget * widget, GdkEventMotion * event,
+ SButton * button)
+{
+ int inside;
+
+ if (!button->sb_pressed)
+ return;
+
+ inside = widget_contains(&button->sb_widget, event->x, event->y);
+
+ if (inside != button->sb_inside)
+ button->sb_inside = inside;
+}
+
+SButton *
+create_sbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, void (*cb) (void))
+{
+ SButton *b;
+
+ b = g_new0(SButton, 1);
+ widget_init(&b->sb_widget, parent, gc, x, y, w, h, 1);
+ b->sb_widget.button_press_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ sbutton_button_press_cb;
+ b->sb_widget.button_release_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ sbutton_button_release_cb;
+ b->sb_widget.motion_cb =
+ (void (*)(GtkWidget *, GdkEventMotion *, gpointer))
+ sbutton_motion_cb;
+ b->sb_push_cb = cb;
+
+ widget_list_add(wlist, WIDGET(b));
+ return b;
+}
+
+void
+free_sbutton(SButton * b)
+{
+ g_free(b);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/sbutton.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef SBUTTON_H
+#define SBUTTON_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+
+#define SBUTTON(x) ((SButton *)(x))
+struct _SButton {
+ Widget sb_widget;
+ gint sb_pressed, sb_inside;
+ void (*sb_push_cb) (void);
+};
+
+typedef struct _SButton SButton;
+
+SButton *create_sbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, void (*cb) (void));
+void free_sbutton(SButton * b);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1177 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* TODO: enforce default sizes! */
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "equalizer.h"
+#include "main.h"
+#include "playlistwin.h"
+#include "skin.h"
+#include "skinwin.h"
+#include "util.h"
+
+#include "debug.h"
+
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+
+
+struct _SkinPixmapIdMapping {
+ SkinPixmapId id;
+ const gchar *name;
+ const gchar *alt_name;
+ gint width, height;
+};
+
+struct _SkinMaskInfo {
+ gint width, height;
+ gchar *inistr;
+};
+
+typedef struct _SkinPixmapIdMapping SkinPixmapIdMapping;
+typedef struct _SkinMaskInfo SkinMaskInfo;
+
+
+Skin *bmp_active_skin = NULL;
+
+static gint skin_current_num;
+
+static SkinMaskInfo skin_mask_info[] = {
+ {275, 116, "Normal"},
+ {275, 16, "WindowShade"},
+ {275, 116, "Equalizer"},
+ {275, 16, "EqualizerWS"}
+};
+
+static SkinPixmapIdMapping skin_pixmap_id_map[] = {
+ {SKIN_MAIN, "main", NULL},
+ {SKIN_CBUTTONS, "cbuttons", NULL},
+ {SKIN_SHUFREP, "shufrep", NULL},
+ {SKIN_TEXT, "text", NULL},
+ {SKIN_TITLEBAR, "titlebar", NULL},
+ {SKIN_VOLUME, "volume", NULL},
+ {SKIN_BALANCE, "balance", "volume"},
+ {SKIN_MONOSTEREO, "monoster", NULL},
+ {SKIN_PLAYPAUSE, "playpaus", NULL},
+ {SKIN_NUMBERS, "nums_ex", "numbers"},
+ {SKIN_POSBAR, "posbar", NULL},
+ {SKIN_EQMAIN, "eqmain", NULL},
+ {SKIN_PLEDIT, "pledit", NULL},
+ {SKIN_EQ_EX, "eq_ex", NULL}
+};
+
+static guint skin_pixmap_id_map_size = G_N_ELEMENTS(skin_pixmap_id_map);
+
+static const guchar skin_default_viscolor[24][3] = {
+ {9, 34, 53},
+ {10, 18, 26},
+ {0, 54, 108},
+ {0, 58, 116},
+ {0, 62, 124},
+ {0, 66, 132},
+ {0, 70, 140},
+ {0, 74, 148},
+ {0, 78, 156},
+ {0, 82, 164},
+ {0, 86, 172},
+ {0, 92, 184},
+ {0, 98, 196},
+ {0, 104, 208},
+ {0, 110, 220},
+ {0, 116, 232},
+ {0, 122, 244},
+ {0, 128, 255},
+ {0, 128, 255},
+ {0, 104, 208},
+ {0, 80, 160},
+ {0, 56, 112},
+ {0, 32, 64},
+ {200, 200, 200}
+};
+
+static GdkBitmap *
+skin_create_transparent_mask(const gchar *,
+ const gchar *,
+ const gchar *,
+ GdkWindow *,
+ gint, gint);
+
+static void
+skin_setup_masks(Skin * skin);
+
+static void
+skin_set_default_vis_color(Skin * skin);
+
+
+void
+skin_lock(Skin * skin)
+{
+ g_mutex_lock(skin->lock);
+}
+
+void
+skin_unlock(Skin * skin)
+{
+ g_mutex_unlock(skin->lock);
+}
+
+gboolean
+bmp_active_skin_reload(void)
+{
+ return bmp_active_skin_load(bmp_active_skin->path);
+}
+
+gboolean
+bmp_active_skin_load(const gchar * path)
+{
+ g_return_val_if_fail(bmp_active_skin != NULL, FALSE);
+ if (!skin_load(bmp_active_skin, path))
+ return FALSE;
+ skin_setup_masks(bmp_active_skin);
+ draw_main_window(TRUE);
+// draw_playlist_window(TRUE);
+// draw_equalizer_window(TRUE);
+
+ vis_set_window(mainwin_vis, mainwin->window);
+// playlistwin_update_list();
+ return TRUE;
+}
+
+void
+skin_pixmap_free(SkinPixmap * p)
+{
+ g_return_if_fail(p != NULL);
+ g_return_if_fail(p->pixmap != NULL);
+
+ g_object_unref(p->pixmap);
+ p->pixmap = NULL;
+}
+
+Skin *
+skin_new(void)
+{
+ Skin *skin;
+ skin = g_new0(Skin, 1);
+ skin->lock = g_mutex_new();
+ return skin;
+}
+
+void
+skin_free(Skin * skin)
+{
+ gint i;
+
+ g_return_if_fail(skin != NULL);
+
+ skin_lock(skin);
+
+ for (i = 0; i < SKIN_PIXMAP_COUNT; i++)
+ skin_pixmap_free(&skin->pixmaps[i]);
+
+ for (i = 0; i < SKIN_PIXMAP_COUNT; i++) {
+ if (skin->masks[i])
+ g_object_unref(skin->masks[i]);
+
+ skin->masks[i] = NULL;
+ }
+
+ skin_set_default_vis_color(skin);
+ skin_unlock(skin);
+}
+
+void
+skin_destroy(Skin * skin)
+{
+ g_return_if_fail(skin != NULL);
+ skin_free(skin);
+ g_mutex_free(skin->lock);
+ g_free(skin);
+}
+
+const SkinPixmapIdMapping *
+skin_pixmap_id_lookup(gint id)
+{
+ gint i;
+
+ for (i = 0; i < skin_pixmap_id_map_size; i++) {
+ if (id == skin_pixmap_id_map[i].id) {
+ return &skin_pixmap_id_map[i];
+ }
+ }
+
+ return NULL;
+}
+
+const gchar *
+skin_pixmap_id_to_name(SkinPixmapId id)
+{
+ gint i;
+
+ for (i = 0; i < skin_pixmap_id_map_size; i++) {
+ if (id == skin_pixmap_id_map[i].id)
+ return skin_pixmap_id_map[i].name;
+ }
+ return NULL;
+}
+
+static void
+skin_set_default_vis_color(Skin * skin)
+{
+ memcpy(skin->vis_color, skin_default_viscolor,
+ sizeof(skin_default_viscolor));
+}
+
+gchar *
+skin_pixmap_locate(const gchar * dirname, const gchar * basename,
+ const gchar * alt_basename)
+{
+ gchar *filename;
+
+ if (!(filename = find_file_recursively(dirname, basename))) {
+ g_warning(G_STRLOC ": couldn't locate %s in directory %s",
+ basename, dirname);
+ g_free(filename);
+
+ if (alt_basename) {
+ g_message(G_STRLOC ": trying %s instead", alt_basename);
+ return skin_pixmap_locate(dirname, alt_basename, NULL);
+ }
+ }
+
+ return filename;
+}
+
+/* FIXME: this function is temporary. It will be removed when the skinning system
+ uses GdkPixbuf in place of GdkPixmap */
+
+static GdkPixmap *
+pixmap_new_from_file(const gchar * filename)
+{
+ GdkPixbuf *pixbuf;
+ GdkPixmap *pixmap;
+ gint width, height;
+
+ if (!(pixbuf = gdk_pixbuf_new_from_file(filename, NULL)))
+ return NULL;
+
+ width = gdk_pixbuf_get_width(pixbuf);
+ height = gdk_pixbuf_get_height(pixbuf);
+
+ if (!(pixmap = gdk_pixmap_new(mainwin->window, width, height,
+ gdk_rgb_get_visual()->depth))) {
+ g_object_unref(pixbuf);
+ return NULL;
+ }
+
+ gdk_pixbuf_render_to_drawable(pixbuf, pixmap, mainwin_gc, 0, 0, 0, 0,
+ width, height, GDK_RGB_DITHER_MAX, 0, 0);
+ g_object_unref(pixbuf);
+
+ return pixmap;
+}
+
+static gboolean
+skin_load_pixmap_id(Skin * skin, SkinPixmapId id, const gchar * path_p)
+{
+ const gchar *path;
+ gchar *basename = NULL, *alt_basename = NULL;
+ gchar *filename;
+ gint width, height;
+ const SkinPixmapIdMapping *pixmap_id_mapping;
+ GdkPixmap *gpm;
+ SkinPixmap *pm = NULL;
+
+ g_return_val_if_fail(skin != NULL, FALSE);
+ g_return_val_if_fail(id < SKIN_PIXMAP_COUNT, FALSE);
+
+ pixmap_id_mapping = skin_pixmap_id_lookup(id);
+ g_return_val_if_fail(pixmap_id_mapping != NULL, FALSE);
+
+ basename = g_strdup_printf("%s.bmp", pixmap_id_mapping->name);
+ if (pixmap_id_mapping->alt_name)
+ alt_basename = g_strdup_printf("%s.bmp", pixmap_id_mapping->alt_name);
+
+ path = path_p ? path_p : skin->path;
+ filename = skin_pixmap_locate(path, basename, alt_basename);
+ g_free(basename);
+ g_free(alt_basename);
+
+ if (!(gpm = pixmap_new_from_file(filename))) {
+ g_warning("loading of %s failed", filename);
+ g_free(filename);
+ return FALSE;
+ }
+
+ g_free(filename);
+
+ gdk_window_get_size(gpm, &width, &height);
+ pm = &skin->pixmaps[id];
+ pm->pixmap = gpm;
+ pm->width = width;
+ pm->height = height;
+ pm->current_width = width;
+ pm->current_height = height;
+
+ return TRUE;
+}
+
+void
+skin_mask_create(Skin * skin,
+ const gchar * path,
+ gint id,
+ GdkWindow * window)
+{
+ skin->masks[id] =
+ skin_create_transparent_mask(path, "region.txt",
+ skin_mask_info[id].inistr, window,
+ skin_mask_info[id].width,
+ skin_mask_info[id].height);
+}
+
+static void
+skin_setup_masks(Skin * skin)
+{
+ GdkBitmap *mask;
+
+ if (cfg.show_wm_decorations)
+ return;
+
+ if (cfg.player_visible) {
+ mask = skin_get_mask(skin, SKIN_MASK_MAIN + cfg.player_shaded);
+ gtk_widget_shape_combine_mask(mainwin, mask, 0, 0);
+ }
+
+// mask = skin_get_mask(skin, SKIN_MASK_EQ + cfg.equalizer_shaded);
+// gtk_widget_shape_combine_mask(equalizerwin, mask, 0, 0);
+}
+
+static GdkBitmap *
+create_default_mask(GdkWindow * parent, gint w, gint h)
+{
+ GdkBitmap *ret;
+ GdkGC *gc;
+ GdkColor pattern;
+
+ ret = gdk_pixmap_new(parent, w, h, 1);
+ gc = gdk_gc_new(ret);
+ pattern.pixel = 1;
+ gdk_gc_set_foreground(gc, &pattern);
+ gdk_draw_rectangle(ret, gc, TRUE, 0, 0, w, h);
+ gdk_gc_destroy(gc);
+
+ return ret;
+}
+
+static void
+skin_query_color(GdkColormap * cm, GdkColor * c)
+{
+ XColor xc = { 0 };
+
+ xc.pixel = c->pixel;
+ XQueryColor(GDK_COLORMAP_XDISPLAY(cm), GDK_COLORMAP_XCOLORMAP(cm), &xc);
+ c->red = xc.red;
+ c->green = xc.green;
+ c->blue = xc.blue;
+}
+
+static glong
+skin_calc_luminance(GdkColor * c)
+{
+ return (0.212671 * c->red + 0.715160 * c->green + 0.072169 * c->blue);
+}
+
+static void
+skin_get_textcolors(GdkPixmap * text, GdkColor * bgc, GdkColor * fgc)
+{
+ /*
+ * Try to extract reasonable background and foreground colors
+ * from the font pixmap
+ */
+
+ GdkImage *gi;
+ GdkColormap *cm;
+ gint i;
+
+ g_return_if_fail(text != NULL);
+
+ /* Get the first line of text */
+ gi = gdk_drawable_get_image(text, 0, 0, 152, 6);
+ cm = gdk_window_get_colormap(playlistwin->window);
+ g_return_if_fail(GDK_IS_WINDOW(playlistwin->window));
+
+ for (i = 0; i < 6; i++) {
+ GdkColor c;
+ gint x;
+ glong d, max_d;
+
+ /* Get a pixel from the middle of the space character */
+ bgc[i].pixel = gdk_image_get_pixel(gi, 151, i);
+ skin_query_color(cm, &bgc[i]);
+
+ max_d = 0;
+ for (x = 1; x < 150; x++) {
+ c.pixel = gdk_image_get_pixel(gi, x, i);
+ skin_query_color(cm, &c);
+
+ d = labs(skin_calc_luminance(&c) - skin_calc_luminance(&bgc[i]));
+ if (d > max_d) {
+ memcpy(&fgc[i], &c, sizeof(GdkColor));
+ max_d = d;
+ }
+ }
+ }
+ gdk_image_destroy(gi);
+
+}
+
+gboolean
+init_skins(const gchar * path)
+{
+ bmp_active_skin = skin_new();
+
+ if (!bmp_active_skin_load(path)) {
+ /* FIXME: Oddly, g_message() causes a crash if path is NULL on
+ * Solaris (see bug #165) */
+ if (path)
+ g_message("Unable to load skin (%s), trying default...", path);
+
+ /* can't load configured skin, retry with default */
+ if (!bmp_active_skin_load(BMP_DEFAULT_SKIN_PATH)) {
+ g_message("Unable to load default skin (%s)! Giving up.",
+ BMP_DEFAULT_SKIN_PATH);
+ return FALSE;
+ }
+ }
+
+ if (cfg.random_skin_on_play)
+ skinlist_update();
+ return TRUE;
+}
+
+static guint
+hex_chars_to_int(gchar hi, gchar lo)
+{
+ /*
+ * Converts a value in the range 0x00-0xFF
+ * to a integer in the range 0-65535
+ */
+ gchar str[3];
+
+ str[0] = hi;
+ str[1] = lo;
+ str[2] = 0;
+
+ return (CLAMP(strtol(str, NULL, 16), 0, 0xFF) << 8);
+}
+
+GdkColor *
+skin_load_color(const gchar * path, const gchar * file,
+ const gchar * section, const gchar * key)
+{
+ gchar *filename, *value;
+ GdkColor *color = NULL;
+
+ filename = find_file_recursively(path, file);
+ if (filename) {
+ value = read_ini_string(filename, section, key);
+ if (value) {
+ gchar *ptr = value;
+ gint len;
+
+ color = g_new0(GdkColor, 1);
+ g_strstrip(value);
+
+ if (value[0] == '#')
+ ptr++;
+ len = strlen(ptr);
+
+ /*
+ * The handling of incomplete values is done this way
+ * to maximize winamp compatibility
+ */
+ if (len >= 6) {
+ color->red = hex_chars_to_int(*ptr, *(ptr + 1));
+ ptr += 2;
+ }
+ if (len >= 4) {
+ color->green = hex_chars_to_int(*ptr, *(ptr + 1));
+ ptr += 2;
+ }
+ if (len >= 2)
+ color->blue = hex_chars_to_int(*ptr, *(ptr + 1));
+
+
+ gdk_color_alloc(gdk_window_get_colormap(playlistwin->window),
+ color);
+ g_free(value);
+ }
+ g_free(filename);
+ }
+ return color;
+}
+
+
+
+GdkBitmap *
+skin_create_transparent_mask(const gchar * path,
+ const gchar * file,
+ const gchar * section,
+ GdkWindow * window,
+ gint width,
+ gint height)
+{
+ GdkBitmap *mask = NULL;
+ GdkGC *gc = NULL;
+ GdkColor pattern;
+ GdkPoint *gpoints;
+
+ gchar *filename = NULL;
+ gboolean created_mask = FALSE;
+ GArray *num, *point;
+ gint i, j, k;
+
+ if (path)
+ filename = find_file_recursively(path, file);
+
+ /* filename will be null if path wasn't set */
+ if (!filename) {
+ return create_default_mask(window, width, height);
+ }
+
+ if ((num = read_ini_array(filename, section, "NumPoints")) == NULL) {
+ g_free(filename);
+ return NULL;
+ }
+
+ if ((point = read_ini_array(filename, section, "PointList")) == NULL) {
+ g_array_free(num, TRUE);
+ g_free(filename);
+ return NULL;
+ }
+
+ mask = gdk_pixmap_new(window, width, height, 1);
+ gc = gdk_gc_new(mask);
+
+ pattern.pixel = 0;
+ gdk_gc_set_foreground(gc, &pattern);
+ gdk_draw_rectangle(mask, gc, TRUE, 0, 0, width, height);
+ pattern.pixel = 1;
+ gdk_gc_set_foreground(gc, &pattern);
+
+ j = 0;
+ for (i = 0; i < num->len; i++) {
+ if ((point->len - j) >= (g_array_index(num, gint, i) * 2)) {
+ created_mask = TRUE;
+ gpoints = g_new(GdkPoint, g_array_index(num, gint, i));
+ for (k = 0; k < g_array_index(num, gint, i); k++) {
+ gpoints[k].x = g_array_index(point, gint, j + k * 2);
+ gpoints[k].y = g_array_index(point, gint, j + k * 2 + 1);
+ }
+ j += k * 2;
+ gdk_draw_polygon(mask, gc, TRUE, gpoints,
+ g_array_index(num, gint, i));
+ g_free(gpoints);
+ }
+ }
+ g_array_free(num, TRUE);
+ g_array_free(point, TRUE);
+ g_free(filename);
+
+ if (!created_mask)
+ gdk_draw_rectangle(mask, gc, TRUE, 0, 0, width, height);
+
+ gdk_gc_destroy(gc);
+
+ return mask;
+}
+
+void
+skin_load_viscolor(Skin * skin, const gchar * path, const gchar * basename)
+{
+ FILE *file;
+ gint i, c;
+ gchar line[256], *filename;
+ GArray *a;
+
+ g_return_if_fail(skin != NULL);
+ g_return_if_fail(path != NULL);
+ g_return_if_fail(basename != NULL);
+
+ skin_set_default_vis_color(skin);
+
+ filename = find_file_recursively(path, basename);
+ if (!filename)
+ return;
+
+ if (!(file = fopen(filename, "r"))) {
+ g_free(filename);
+ return;
+ }
+
+ g_free(filename);
+
+ for (i = 0; i < 24; i++) {
+ if (fgets(line, 255, file)) {
+ a = string_to_garray(line);
+ if (a->len > 2) {
+ for (c = 0; c < 3; c++)
+ skin->vis_color[i][c] = g_array_index(a, gint, c);
+ }
+ g_array_free(a, TRUE);
+ }
+ else
+ break;
+ }
+
+ fclose(file);
+}
+
+#if 0
+static void
+skin_numbers_generate_dash(Skin * skin)
+{
+ GdkGC *gc;
+ GdkPixmap *pixmap;
+ SkinPixmap *numbers;
+
+ g_return_if_fail(skin != NULL);
+
+ numbers = &skin->pixmaps[SKIN_NUMBERS];
+ if (!numbers->pixmap || numbers->current_width < 99)
+ return;
+
+ gc = gdk_gc_new(numbers->pixmap);
+ pixmap = gdk_pixmap_new(mainwin->window, 108,
+ numbers->current_height,
+ -1);
+
+ skin_draw_pixmap(skin, pixmap, gc, SKIN_NUMBERS, 0, 0, 0, 0, 99, 13);
+ skin_draw_pixmap(skin, pixmap, gc, SKIN_NUMBERS, 90, 0, 99, 0, 9, 13);
+ skin_draw_pixmap(skin, pixmap, gc, SKIN_NUMBERS, 20, 6, 101, 6, 5, 1);
+
+ g_object_unref(numbers->pixmap);
+ g_object_unref(gc);
+
+ numbers->pixmap = pixmap;
+ numbers->current_width = 108;
+}
+#endif
+
+static void
+skin_load_cursor(Skin * skin, const gchar * dirname)
+{
+ const gchar * basename = "normal.cur";
+ gchar * filename = NULL;
+ GdkPixbuf * cursor_pixbuf = NULL;
+ GdkPixbufAnimation * cursor_animated = NULL;
+ GdkCursor * cursor_gdk = NULL;
+ GError * error = NULL;
+
+ filename = find_file_recursively(dirname, basename);
+
+ if (filename && cfg.custom_cursors) {
+ cursor_animated = gdk_pixbuf_animation_new_from_file(filename, &error);
+ cursor_pixbuf = gdk_pixbuf_animation_get_static_image(cursor_animated);
+ cursor_gdk = gdk_cursor_new_from_pixbuf(gdk_display_get_default(),
+ cursor_pixbuf, 0, 0);
+ } else {
+ cursor_gdk = gdk_cursor_new(GDK_LEFT_PTR);
+ }
+
+ gdk_window_set_cursor(mainwin->window, cursor_gdk);
+// gdk_window_set_cursor(playlistwin->window, cursor_gdk);
+// gdk_window_set_cursor(equalizerwin->window, cursor_gdk);
+}
+
+static void
+skin_load_pixmaps(Skin * skin, const gchar * path)
+{
+ GdkPixmap *text_pm;
+ guint i;
+
+ for (i = 0; i < SKIN_PIXMAP_COUNT; i++)
+ skin_load_pixmap_id(skin, i, path);
+
+ text_pm = skin->pixmaps[SKIN_TEXT].pixmap;
+
+// if (text_pm)
+// skin_get_textcolors(text_pm, skin->textbg, skin->textfg);
+#if 0
+ if (skin->pixmaps[SKIN_NUMBERS].pixmap)
+ skin_numbers_generate_dash(skin);
+#endif
+/*
+ skin->colors[SKIN_PLEDIT_NORMAL] =
+ skin_load_color(path, "pledit.txt", "text", "normal");
+ skin->colors[SKIN_PLEDIT_CURRENT] =
+ skin_load_color(path, "pledit.txt", "text", "current");
+ skin->colors[SKIN_PLEDIT_NORMALBG] =
+ skin_load_color(path, "pledit.txt", "text", "normalbg");
+ skin->colors[SKIN_PLEDIT_SELECTEDBG] =
+ skin_load_color(path, "pledit.txt", "text", "selectedbg");
+*/
+ skin_mask_create(skin, path, SKIN_MASK_MAIN, mainwin->window);
+ skin_mask_create(skin, path, SKIN_MASK_MAIN_SHADE, mainwin->window);
+
+// skin_mask_create(skin, path, SKIN_MASK_EQ, equalizerwin->window);
+// skin_mask_create(skin, path, SKIN_MASK_EQ_SHADE, equalizerwin->window);
+
+ skin_load_viscolor(skin, path, "viscolor.txt");
+}
+
+static gboolean
+skin_load_nolock(Skin * skin, const gchar * path, gboolean force)
+{
+ gchar *cpath;
+
+ g_return_val_if_fail(skin != NULL, FALSE);
+ g_return_val_if_fail(path != NULL, FALSE);
+ REQUIRE_LOCK(skin->lock);
+
+ if (!g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_DIR))
+ return FALSE;
+
+ if (!force) {
+ if (skin->path)
+ if (!strcmp(skin->path, path))
+ return FALSE;
+ }
+
+ skin_current_num++;
+
+ skin->path = g_strdup(path);
+
+
+ if (!file_is_archive(path)) {
+ skin_load_pixmaps(skin, path);
+ skin_load_cursor(skin, path);
+ return TRUE;
+ }
+
+ if (!(cpath = archive_decompress(path))) {
+ g_message("Unable to extract skin archive (%s)", path);
+ return FALSE;
+ }
+
+ skin_load_pixmaps(skin, cpath);
+ skin_load_cursor(skin, cpath);
+ del_directory(cpath);
+ g_free(cpath);
+
+ return TRUE;
+}
+
+void
+skin_install_skin(const gchar * path)
+{
+ gchar *command;
+
+ g_return_if_fail(path != NULL);
+
+ command = g_strdup_printf("cp %s %s", path, bmp_paths[BMP_PATH_USER_SKIN_DIR]);
+ if (system(command)) {
+ g_message("Unable to install skin (%s) into user directory (%s)",
+ path, bmp_paths[BMP_PATH_USER_SKIN_DIR]);
+ }
+ g_free(command);
+}
+
+
+gboolean
+skin_load(Skin * skin, const gchar * path)
+{
+ gboolean error;
+
+ g_return_val_if_fail(skin != NULL, FALSE);
+ g_return_val_if_fail(path != NULL, FALSE);
+
+ skin_lock(skin);
+ error = skin_load_nolock(skin, path, FALSE);
+ skin_unlock(skin);
+
+ return error;
+}
+
+gboolean
+skin_reload_forced(void)
+{
+ gboolean error;
+
+ skin_lock(bmp_active_skin);
+ error = skin_load_nolock(bmp_active_skin, bmp_active_skin->path, TRUE);
+ skin_unlock(bmp_active_skin);
+
+ return error;
+}
+
+void
+skin_reload(Skin * skin)
+{
+ g_return_if_fail(skin != NULL);
+ skin_load_nolock(skin, skin->path, TRUE);
+}
+
+
+static SkinPixmap *
+skin_get_pixmap(Skin * skin, SkinPixmapId map_id)
+{
+ g_return_val_if_fail(skin != NULL, NULL);
+ g_return_val_if_fail(map_id < SKIN_PIXMAP_COUNT, NULL);
+
+ return &skin->pixmaps[map_id];
+}
+
+GdkBitmap *
+skin_get_mask(Skin * skin, SkinMaskId mi)
+{
+ g_return_val_if_fail(skin != NULL, NULL);
+ g_return_val_if_fail(mi < SKIN_PIXMAP_COUNT, NULL);
+
+ return skin->masks[mi];
+}
+
+GdkColor *
+skin_get_color(Skin * skin, SkinColorId color_id)
+{
+ GdkColor *ret = NULL;
+
+ g_return_val_if_fail(skin != NULL, NULL);
+
+ switch (color_id) {
+ case SKIN_TEXTBG:
+ if (skin->pixmaps[SKIN_TEXT].pixmap)
+ ret = skin->textbg;
+ else
+ ret = skin->def_textbg;
+ break;
+ case SKIN_TEXTFG:
+ if (skin->pixmaps[SKIN_TEXT].pixmap)
+ ret = skin->textfg;
+ else
+ ret = skin->def_textfg;
+ break;
+ default:
+ if (color_id < SKIN_COLOR_COUNT)
+ ret = skin->colors[color_id];
+ break;
+ }
+ return ret;
+}
+
+void
+skin_get_viscolor(Skin * skin, guchar vis_color[24][3])
+{
+ gint i;
+
+ g_return_if_fail(skin != NULL);
+
+ for (i = 0; i < 24; i++) {
+ vis_color[i][0] = skin->vis_color[i][0];
+ vis_color[i][1] = skin->vis_color[i][1];
+ vis_color[i][2] = skin->vis_color[i][2];
+ }
+}
+
+gint
+skin_get_id(void)
+{
+ return skin_current_num;
+}
+
+void
+skin_draw_pixmap(Skin * skin, GdkDrawable * drawable, GdkGC * gc,
+ SkinPixmapId pixmap_id,
+ gint xsrc, gint ysrc, gint xdest, gint ydest,
+ gint width, gint height)
+{
+ SkinPixmap *pixmap;
+
+ g_return_if_fail(skin != NULL);
+
+ pixmap = skin_get_pixmap(skin, pixmap_id);
+ g_return_if_fail(pixmap != NULL);
+ g_return_if_fail(pixmap->pixmap != NULL);
+
+ if (xsrc > pixmap->width || ysrc > pixmap->height)
+ return;
+
+ width = MIN(width, pixmap->width - xsrc);
+ height = MIN(height, pixmap->height - ysrc);
+ gdk_draw_pixmap(drawable, gc, pixmap->pixmap, xsrc, ysrc,
+ xdest, ydest, width, height);
+}
+
+void
+skin_get_eq_spline_colors(Skin * skin, guint32 colors[19])
+{
+ gint i;
+ GdkPixmap *pixmap;
+ GdkImage *img;
+ SkinPixmap *eqmainpm;
+
+ g_return_if_fail(skin != NULL);
+
+ eqmainpm = &skin->pixmaps[SKIN_EQMAIN];
+ if (eqmainpm->pixmap &&
+ eqmainpm->current_width >= 116 && eqmainpm->current_height >= 313)
+ pixmap = eqmainpm->pixmap;
+ else
+ return;
+
+ if (!GDK_IS_DRAWABLE(pixmap))
+ return;
+
+ if (!(img = gdk_drawable_get_image(pixmap, 115, 294, 1, 19)))
+ return;
+
+ for (i = 0; i < 19; i++)
+ colors[i] = gdk_image_get_pixel(img, 0, i);
+
+ gdk_image_destroy(img);
+}
+
+
+static void
+skin_draw_playlistwin_frame_top(Skin * skin,
+ GdkDrawable * drawable,
+ GdkGC * gc,
+ gint width, gint height, gboolean focus)
+{
+ /* The title bar skin consists of 2 sets of 4 images, 1 set
+ * for focused state and the other for unfocused. The 4 images
+ * are:
+ *
+ * a. right corner (25,20)
+ * b. left corner (25,20)
+ * c. tiler (25,20)
+ * d. title (100,20)
+ *
+ * min allowed width = 100+25+25 = 150
+ */
+
+ gint i, y, c;
+
+ /* get y offset of the pixmap set to use */
+ if (focus)
+ y = 0;
+ else
+ y = 21;
+
+ /* left corner */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 0, y, 0, 0, 25, 20);
+
+ /* titlebar title */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 26, y,
+ (width - 100) / 2, 0, 100, 20);
+
+ /* titlebar right corner */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 153, y,
+ width - 25, 0, 25, 20);
+
+ /* tile draw the remaining frame */
+
+ /* compute tile count */
+ c = (width - (100 + 25 + 25)) / 25;
+
+ for (i = 0; i < c / 2; i++) {
+ /* left of title */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+ 25 + i * 25, 0, 25, 20);
+
+ /* right of title */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+ (width + 100) / 2 + i * 25, 0, 25, 20);
+ }
+
+ if (c & 1) {
+ /* Odd tile count, so one remaining to draw. Here we split
+ * it into two and draw half on either side of the title */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+ ((c / 2) * 25) + 25, 0, 12, 20);
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+ (width / 2) + ((c / 2) * 25) + 50, 0, 13, 20);
+ }
+}
+
+static void
+skin_draw_playlistwin_frame_bottom(Skin * skin,
+ GdkDrawable * drawable,
+ GdkGC * gc,
+ gint width, gint height, gboolean focus)
+{
+ /* The bottom frame skin consists of 1 set of 4 images. The 4
+ * images are:
+ *
+ * a. left corner with menu buttons (125,38)
+ * b. visualization window (75,38)
+ * c. right corner with play buttons (150,38)
+ * d. frame tile (25,38)
+ *
+ * (min allowed width = 125+150+25=300
+ */
+
+ gint i, c;
+
+ /* bottom left corner (menu buttons) */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 0, 72,
+ 0, height - 38, 125, 38);
+
+ c = (width - 275) / 25;
+
+ /* draw visualization window, if width allows */
+ if (c >= 3) {
+ c -= 3;
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 205, 0,
+ width - (150 + 75), height - 38, 75, 38);
+ }
+
+ /* Bottom right corner (playbuttons etc) */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT,
+ 126, 72, width - 150, height - 38, 150, 38);
+
+ /* Tile draw the remaining undrawn portions */
+ for (i = 0; i < c; i++)
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 179, 0,
+ 125 + i * 25, height - 38, 25, 38);
+}
+
+static void
+skin_draw_playlistwin_frame_sides(Skin * skin,
+ GdkDrawable * drawable,
+ GdkGC * gc,
+ gint width, gint height, gboolean focus)
+{
+ /* The side frames consist of 2 tile images. 1 for the left, 1 for
+ * the right.
+ * a. left (12,29)
+ * b. right (19,29)
+ */
+
+ gint i;
+
+ /* frame sides */
+ for (i = 0; i < (height - (20 + 38)) / 29; i++) {
+ /* left */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 0, 42,
+ 0, 20 + i * 29, 12, 29);
+
+ /* right */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 32, 42,
+ width - 19, 20 + i * 29, 19, 29);
+ }
+}
+
+
+void
+skin_draw_playlistwin_frame(Skin * skin,
+ GdkDrawable * drawable, GdkGC * gc,
+ gint width, gint height, gboolean focus)
+{
+ skin_draw_playlistwin_frame_top(skin, drawable, gc, width, height, focus);
+ skin_draw_playlistwin_frame_bottom(skin, drawable, gc, width, height,
+ focus);
+ skin_draw_playlistwin_frame_sides(skin, drawable, gc, width, height,
+ focus);
+}
+
+
+void
+skin_draw_playlistwin_shaded(Skin * skin,
+ GdkDrawable * drawable, GdkGC * gc,
+ gint width, gboolean focus)
+{
+ /* The shade mode titlebar skin consists of 4 images:
+ * a) left corner offset (72,42) size (25,14)
+ * b) right corner, focused offset (99,57) size (50,14)
+ * c) right corner, unfocused offset (99,42) size (50,14)
+ * d) bar tile offset (72,57) size (25,14)
+ */
+
+ gint i;
+
+ /* left corner */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 72, 42, 0, 0, 25, 14);
+
+ /* bar tile */
+ for (i = 0; i < (width - 75) / 25; i++)
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 72, 57,
+ (i * 25) + 25, 0, 25, 14);
+
+ /* right corner */
+ skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 99, focus ? 57 : 42,
+ width - 50, 0, 50, 14);
+}
+
+
+void
+skin_draw_mainwin_titlebar(Skin * skin,
+ GdkDrawable * drawable, GdkGC * gc,
+ gboolean shaded, gboolean focus)
+{
+ /* The titlebar skin consists of 2 sets of 2 images, one for for
+ * shaded and the other for unshaded mode, giving a total of 4.
+ * The images are exactly 275x14 pixels, aligned and arranged
+ * vertically on each other in the pixmap in the following order:
+ *
+ * a) unshaded, focused offset (27, 0)
+ * b) unshaded, unfocused offset (27, 15)
+ * c) shaded, focused offset (27, 29)
+ * d) shaded, unfocused offset (27, 42)
+ */
+
+ gint y_offset;
+
+ if (shaded) {
+ if (focus)
+ y_offset = 29;
+ else
+ y_offset = 42;
+ }
+ else {
+ if (focus)
+ y_offset = 0;
+ else
+ y_offset = 15;
+ }
+
+ skin_draw_pixmap(skin, drawable, gc, SKIN_TITLEBAR, 27, y_offset,
+ 0, 0, MAINWIN_WIDTH, MAINWIN_TITLEBAR_HEIGHT);
+}
+
+#if 0
+void
+skin_draw_mainwin(Skin * skin,
+ GdkDrawable * drawable, GdkGC gc,
+ gboolean doublesize, gboolean shaded, gboolean focus)
+{
+
+}
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skin.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,140 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef SKIN_H
+#define SKIN_H
+
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+
+#define BMP_DEFAULT_SKIN_PATH \
+ DATA_DIR G_DIR_SEPARATOR_S "Skins" G_DIR_SEPARATOR_S "Default"
+
+
+typedef enum {
+ SKIN_MAIN = 0,
+ SKIN_CBUTTONS,
+ SKIN_TITLEBAR,
+ SKIN_SHUFREP,
+ SKIN_TEXT,
+ SKIN_VOLUME,
+ SKIN_BALANCE,
+ SKIN_MONOSTEREO,
+ SKIN_PLAYPAUSE,
+ SKIN_NUMBERS,
+ SKIN_POSBAR,
+ SKIN_PLEDIT,
+ SKIN_EQMAIN,
+ SKIN_EQ_EX,
+ SKIN_PIXMAP_COUNT
+} SkinPixmapId;
+
+typedef enum {
+ SKIN_MASK_MAIN = 0,
+ SKIN_MASK_MAIN_SHADE,
+ SKIN_MASK_EQ,
+ SKIN_MASK_EQ_SHADE,
+ SKIN_MASK_COUNT
+} SkinMaskId;
+
+typedef enum {
+ SKIN_PLEDIT_NORMAL = 0,
+ SKIN_PLEDIT_CURRENT,
+ SKIN_PLEDIT_NORMALBG,
+ SKIN_PLEDIT_SELECTEDBG,
+ SKIN_TEXTBG,
+ SKIN_TEXTFG,
+ SKIN_COLOR_COUNT
+} SkinColorId;
+
+
+#define SKIN_PIXMAP(x) ((SkinPixmap *)(x))
+typedef struct _SkinPixmap {
+ GdkPixmap *pixmap;
+ /* GdkPixmap *def_pixmap; */
+
+ /* The real size of the pixmap */
+ gint width, height;
+
+ /* The size of the pixmap from the current skin,
+ which might be smaller */
+ gint current_width, current_height;
+} SkinPixmap;
+
+
+#define SKIN(x) ((Skin *)(x))
+typedef struct _Skin {
+ GMutex *lock;
+ gchar *path;
+ gchar *def_path;
+ SkinPixmap pixmaps[SKIN_PIXMAP_COUNT];
+ GdkColor textbg[6], def_textbg[6];
+ GdkColor textfg[6], def_textfg[6];
+ GdkColor *colors[SKIN_COLOR_COUNT];
+ guchar vis_color[24][3];
+ GdkBitmap *masks[SKIN_MASK_COUNT];
+} Skin;
+
+
+extern Skin *bmp_active_skin;
+
+gboolean init_skins(const gchar * path);
+void cleanup_skins(void);
+
+gboolean bmp_active_skin_load(const gchar * path);
+gboolean bmp_active_skin_reload(void);
+
+Skin *skin_new(void);
+gboolean skin_load(Skin * skin, const gchar * path);
+void skin_reload(Skin * skin);
+void skin_free(Skin * skin);
+
+GdkBitmap *skin_get_mask(Skin * skin, SkinMaskId mi);
+GdkColor *skin_get_color(Skin * skin, SkinColorId color_id);
+
+void skin_get_viscolor(Skin * skin, guchar vis_color[24][3]);
+gint skin_get_id(void);
+void skin_draw_pixmap(Skin * skin, GdkDrawable * drawable, GdkGC * gc,
+ SkinPixmapId pixmap_id,
+ gint xsrc, gint ysrc, gint xdest, gint ydest,
+ gint width, gint height);
+void skin_get_eq_spline_colors(Skin * skin, guint32 colors[19]);
+void skin_install_skin(const gchar * path);
+
+void skin_draw_playlistwin_shaded(Skin * skin,
+ GdkDrawable * drawable, GdkGC * gc,
+ gint width, gboolean focus);
+void skin_draw_playlistwin_frame(Skin * skin,
+ GdkDrawable * drawable, GdkGC * gc,
+ gint width, gint height, gboolean focus);
+
+void skin_draw_mainwin_titlebar(Skin * skin,
+ GdkDrawable * drawable, GdkGC * gc,
+ gboolean shaded, gboolean focus);
+
+
+
+gboolean
+skin_reload_forced(void);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,379 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "skinwin.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "main.h"
+#include "skin.h"
+#include "util.h"
+
+#include <gdk/gdkx.h>
+
+
+#define THUMBNAIL_WIDTH 90
+#define THUMBNAIL_HEIGHT 40
+
+
+enum SkinViewCols {
+ SKIN_VIEW_COL_PREVIEW,
+ SKIN_VIEW_COL_NAME,
+ SKIN_VIEW_N_COLS
+};
+
+
+GList *skinlist = NULL;
+
+
+
+static gchar *
+get_thumbnail_filename(const gchar * path)
+{
+ gchar *basename, *pngname, *thumbname;
+
+ g_return_val_if_fail(path != NULL, NULL);
+
+ basename = g_path_get_basename(path);
+ pngname = g_strconcat(basename, ".png", NULL);
+
+ thumbname = g_build_filename(bmp_paths[BMP_PATH_SKIN_THUMB_DIR],
+ pngname, NULL);
+
+ g_free(basename);
+ g_free(pngname);
+
+ return thumbname;
+}
+
+
+static GdkPixbuf *
+skin_get_preview(const gchar * path)
+{
+ GdkPixbuf *preview = NULL;
+ gchar *dec_path, *preview_path;
+ gboolean is_archive = FALSE;
+
+ if (file_is_archive(path)) {
+ if (!(dec_path = archive_decompress(path)))
+ return NULL;
+
+ is_archive = TRUE;
+ }
+ else {
+ dec_path = g_strdup(path);
+ }
+
+ preview_path = find_file_recursively(dec_path, "main.bmp");
+
+ if (preview_path) {
+ preview = gdk_pixbuf_new_from_file(preview_path, NULL);
+ g_free(preview_path);
+ }
+
+ if (is_archive)
+ del_directory(dec_path);
+
+ g_free(dec_path);
+
+ return preview;
+}
+
+
+static GdkPixbuf *
+skin_get_thumbnail(const gchar * path)
+{
+ GdkPixbuf *scaled = NULL;
+ GdkPixbuf *preview;
+ gchar *thumbname;
+
+ g_return_val_if_fail(path != NULL, NULL);
+
+ if (g_str_has_suffix(path, BMP_SKIN_THUMB_DIR_BASENAME))
+ return NULL;
+
+ thumbname = get_thumbnail_filename(path);
+
+ if (g_file_test(thumbname, G_FILE_TEST_EXISTS)) {
+ scaled = gdk_pixbuf_new_from_file(thumbname, NULL);
+ g_free(thumbname);
+ return scaled;
+ }
+
+ if (!(preview = skin_get_preview(path))) {
+ g_free(thumbname);
+ return NULL;
+ }
+
+ scaled = gdk_pixbuf_scale_simple(preview,
+ THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT,
+ GDK_INTERP_BILINEAR);
+ g_object_unref(preview);
+
+ gdk_pixbuf_save(scaled, thumbname, "png", NULL, NULL);
+ g_free(thumbname);
+
+ return scaled;
+}
+
+static void
+skinlist_add(const gchar * filename)
+{
+ SkinNode *node;
+ gchar *basename;
+
+ g_return_if_fail(filename != NULL);
+
+ node = g_new0(SkinNode, 1);
+ node->path = g_strdup(filename);
+
+ basename = g_path_get_basename(filename);
+
+ if (file_is_archive(filename)) {
+ node->name = archive_basename(basename);
+ g_free(basename);
+ }
+ else {
+ node->name = basename;
+ }
+
+ skinlist = g_list_prepend(skinlist, node);
+}
+
+static gboolean
+scan_skindir_func(const gchar * path, const gchar * basename, gpointer data)
+{
+ if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
+ if (file_is_archive(path)) {
+ skinlist_add(path);
+ }
+ }
+ else if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
+ skinlist_add(path);
+ }
+
+ return FALSE;
+}
+
+static void
+scan_skindir(const gchar * path)
+{
+ GError *error = NULL;
+
+ g_return_if_fail(path != NULL);
+
+ if (path[0] == '.')
+ return;
+
+ if (!dir_foreach(path, scan_skindir_func, NULL, &error)) {
+ g_warning("Failed to open directory (%s): %s", path, error->message);
+ g_error_free(error);
+ return;
+ }
+}
+
+static gint
+skinlist_compare_func(gconstpointer a, gconstpointer b)
+{
+ g_return_val_if_fail(a != NULL && SKIN_NODE(a)->name != NULL, 1);
+ g_return_val_if_fail(b != NULL && SKIN_NODE(b)->name != NULL, 1);
+ return strcasecmp(SKIN_NODE(a)->name, SKIN_NODE(b)->name);
+}
+
+static void
+skin_free_func(gpointer data)
+{
+ g_return_if_fail(data != NULL);
+ g_free(SKIN_NODE(data)->name);
+ g_free(SKIN_NODE(data)->path);
+ g_free(data);
+}
+
+
+static void
+skinlist_clear(void)
+{
+ if (!skinlist)
+ return;
+
+ g_list_foreach(skinlist, (GFunc) skin_free_func, NULL);
+ g_list_free(skinlist);
+ skinlist = NULL;
+}
+
+void
+skinlist_update(void)
+{
+ gchar *skinsdir;
+
+ skinlist_clear();
+
+ scan_skindir(bmp_paths[BMP_PATH_USER_SKIN_DIR]);
+ scan_skindir(DATA_DIR G_DIR_SEPARATOR_S BMP_SKIN_DIR_BASENAME);
+
+ skinsdir = getenv("SKINSDIR");
+ if (skinsdir) {
+ gchar **dir_list = g_strsplit(skinsdir, ":", 0);
+ gchar **dir;
+
+ for (dir = dir_list; *dir; dir++)
+ scan_skindir(*dir);
+ g_strfreev(dir_list);
+ }
+
+ skinlist = g_list_sort(skinlist, skinlist_compare_func);
+
+ g_assert(skinlist != NULL);
+}
+
+void
+skin_view_update(GtkTreeView * treeview)
+{
+ GtkTreeSelection *selection = NULL;
+ GtkListStore *store;
+ GtkTreeIter iter, iter_current_skin;
+ GtkTreePath *path;
+
+ GdkPixbuf *thumbnail;
+ gchar *name;
+ GList *entry;
+
+ gtk_widget_set_sensitive(GTK_WIDGET(treeview), FALSE);
+
+ store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview));
+
+ gtk_list_store_clear(store);
+
+ skinlist_update();
+
+ for (entry = skinlist; entry; entry = g_list_next(entry)) {
+ thumbnail = skin_get_thumbnail(SKIN_NODE(entry->data)->path);
+
+ if (!thumbnail)
+ continue;
+
+ name = SKIN_NODE(entry->data)->name;
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ SKIN_VIEW_COL_PREVIEW, thumbnail,
+ SKIN_VIEW_COL_NAME, name, -1);
+ g_object_unref(thumbnail);
+
+ if (g_strstr_len(bmp_active_skin->path,
+ strlen(bmp_active_skin->path), name)) {
+ iter_current_skin = iter;
+ }
+
+ while (gtk_events_pending())
+ gtk_main_iteration();
+ }
+
+ selection = gtk_tree_view_get_selection(treeview);
+ gtk_tree_selection_select_iter(selection, &iter_current_skin);
+
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter_current_skin);
+ gtk_tree_view_scroll_to_cell(treeview, path, NULL, TRUE, 0.5, 0.5);
+ gtk_tree_path_free(path);
+
+ gtk_widget_set_sensitive(GTK_WIDGET(treeview), TRUE);
+}
+
+
+static void
+skin_view_on_cursor_changed(GtkTreeView * treeview,
+ gpointer data)
+{
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ GList *node;
+ gchar *name;
+ gchar *comp = NULL;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get(model, &iter, SKIN_VIEW_COL_NAME, &name, -1);
+
+ /* FIXME: store name in skinlist */
+ for (node = skinlist; node; node = g_list_next(node)) {
+ comp = SKIN_NODE(node->data)->path;
+ if (g_strrstr(comp, name))
+ break;
+ }
+
+ g_free(name);
+
+ bmp_active_skin_load(comp);
+}
+
+
+void
+skin_view_realize(GtkTreeView * treeview)
+{
+ GtkListStore *store;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeSelection *selection;
+
+ gtk_widget_show_all(GTK_WIDGET(treeview));
+
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
+
+ store = gtk_list_store_new(SKIN_VIEW_N_COLS, GDK_TYPE_PIXBUF,
+ G_TYPE_STRING);
+ gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+ gtk_tree_view_column_set_spacing(column, 16);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview),
+ GTK_TREE_VIEW_COLUMN(column));
+
+ renderer = gtk_cell_renderer_pixbuf_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes(column, renderer, "pixbuf",
+ SKIN_VIEW_COL_PREVIEW, NULL);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes(column, renderer, "text",
+ SKIN_VIEW_COL_NAME, NULL);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
+
+ g_signal_connect(treeview, "cursor-changed",
+ G_CALLBACK(skin_view_on_cursor_changed), NULL);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/skinwin.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef SKINWIN_H
+#define SKINWIN_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#define SKIN_NODE(x) ((SkinNode *)(x))
+struct _SkinNode {
+ gchar *name;
+ gchar *path;
+ GTime *time;
+};
+
+typedef struct _SkinNode SkinNode;
+
+extern GList *skinlist;
+
+void skinlist_update();
+void skin_view_realize(GtkTreeView * treeview);
+void skin_view_update(GtkTreeView * treeview);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,213 @@
+/* XMMS - Software volume managment.
+ * Copyright (C) 2001-2003 Matthieu Sozeau
+ * Original implementation from a patch by Tomas Simonaitis <haden at homelan.lt>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <libbeep/configdb.h>
+#include "softvolume.h"
+
+
+/**************************************************************************
+ *
+ * soft_volume_load
+ *
+ * TODO: make argument order consistent with soft_volume_save()
+ *
+ **************************************************************************/
+
+void
+soft_volume_load(const gchar * section, SoftVolumeConfig * c)
+{
+ ConfigDb *db;
+
+ g_return_if_fail(c != NULL);
+
+ c->enabled = FALSE;
+ c->volume_left = 0;
+ c->volume_right = 0;
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_get_bool(db, section, "softvolume_enable", &c->enabled);
+ bmp_cfg_db_get_int(db, section, "softvolume_left", &c->volume_left);
+ bmp_cfg_db_get_int(db, section, "softvolume_right", &c->volume_right);
+
+ bmp_cfg_db_close(db);
+}
+
+
+/**************************************************************************
+ *
+ * soft_volume_save
+ *
+ * TODO: make argument order consistent with soft_volume_load()
+ *
+ **************************************************************************/
+
+void
+soft_volume_save(SoftVolumeConfig * c, const gchar * section)
+{
+ ConfigDb *db;
+
+ g_return_if_fail(c != NULL);
+
+ db = bmp_cfg_db_open();
+
+ bmp_cfg_db_set_bool(db, section, "softvolume_enable", c->enabled);
+ bmp_cfg_db_set_int(db, section, "softvolume_left", c->volume_left);
+ bmp_cfg_db_set_int(db, section, "softvolume_right", c->volume_right);
+
+ bmp_cfg_db_close(db);
+}
+
+
+
+/**************************************************************************
+ *
+ * soft_volume_get
+ *
+ **************************************************************************/
+
+void
+soft_volume_get(SoftVolumeConfig * c, gint * l, gint * r)
+{
+ if (c == NULL)
+ return;
+
+ *l = c->volume_left;
+ *r = c->volume_right;
+}
+
+
+
+/**************************************************************************
+ *
+ * soft_volume_set
+ *
+ **************************************************************************/
+
+void
+soft_volume_set(SoftVolumeConfig * c, gint l, gint r)
+{
+ if (c == NULL)
+ return;
+
+ c->volume_left = l;
+ c->volume_right = r;
+}
+
+
+/**************************************************************************
+ *
+ * effect_16bit
+ *
+ **************************************************************************/
+
+G_INLINE_FUNC void
+effect_16bit(gint max, gint min, guint length, gint16 * sdata,
+ SoftVolumeConfig * c)
+{
+ gint i, v;
+
+ for (i = 0; i < (length >> 2); ++i) { /* ie. length/4 */
+ v = (gint) ((*sdata * c->volume_left) / 100);
+ *(sdata++) = (gint16) CLAMP(v, min, max);
+
+ v = (gint) ((*sdata * c->volume_right) / 100);
+ *(sdata++) = (gint16) CLAMP(v, min, max);
+ }
+}
+
+
+/**************************************************************************
+ *
+ * effect_8bit
+ *
+ **************************************************************************/
+
+G_INLINE_FUNC void
+effect_8bit(gint max, gint min, guint length, gint8 * sdata,
+ SoftVolumeConfig * c)
+{
+ gint i, v;
+
+ for (i = 0; i < (length >> 1); ++i) { /* ie. length/2 */
+ v = (gint) ((*sdata * c->volume_left) / 100);
+ *(sdata++) = (gint8) CLAMP(v, min, max);
+
+ v = (gint) ((*sdata * c->volume_right) / 100);
+ *(sdata++) = (gint8) CLAMP(v, min, max);
+ }
+}
+
+
+/**************************************************************************
+ *
+ * soft_volume_effect
+ *
+ **************************************************************************/
+
+void
+soft_volume_effect(SoftVolumeConfig * c, gpointer data, AFormat format,
+ gint length)
+{
+ if (!c)
+ return;
+
+ if (c->volume_right == -1)
+ c->volume_right = c->volume_left;
+
+ switch (format) {
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ case FMT_S16_LE:
+ case FMT_U16_LE:
+ break;
+
+ case FMT_U16_NE:
+ case FMT_U16_BE:
+ effect_16bit(65535, 0, length, data, c);
+ break;
+
+ case FMT_S16_BE:
+ case FMT_S16_NE:
+ effect_16bit(32767, -32768, length, data, c);
+ break;
+#else
+ case FMT_S16_BE:
+ case FMT_U16_BE:
+ break;
+
+ case FMT_U16_LE:
+ case FMT_U16_NE:
+ effect_16bit(65535, 0, length, data, c);
+ break;
+
+ case FMT_S16_LE:
+ case FMT_S16_NE:
+ effect_16bit(32767, -32768, length, data, c);
+ break;
+#endif
+
+ case FMT_U8:
+ effect_8bit(255, 0, length, data, c);
+ break;
+
+ case FMT_S8:
+ effect_8bit(127, -128, length, data, c);
+ break;
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/softvolume.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,65 @@
+/* XMMS - Software volume managment.
+ * Copyright (C) 2001-2003 Matthieu Sozeau
+ * Original implementation from a patch by Tomas Simonaitis <haden at homelan.lt>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef SOFTVOLUME_H
+#define SOFTVOLUME_H
+
+#include "plugin.h" /* glib and AFomat definition */
+
+struct _SoftVolumeConfig {
+ gboolean enabled;
+ gint volume_left;
+ gint volume_right;
+};
+
+typedef struct _SoftVolumeConfig SoftVolumeConfig;
+
+/**************************************************************************
+ *
+ * Functions to read/write a particular soft volume configuration.
+ * If section is NULL, the global ("xmms") section is used.
+ *
+ **************************************************************************/
+
+void soft_volume_load(const gchar * section, SoftVolumeConfig * c);
+
+void soft_volume_save(SoftVolumeConfig * c, const gchar * section);
+
+
+/**************************************************************************
+ *
+ * Functions to set the volume and get the current volume
+ *
+ **************************************************************************/
+
+void soft_volume_set(SoftVolumeConfig * c, gint l, gint r);
+
+void soft_volume_get(SoftVolumeConfig * c, gint * l, gint * r);
+
+
+/**************************************************************************
+ *
+ * Modify the buffer according to volume settings
+ *
+ **************************************************************************/
+
+void soft_volume_effect(SoftVolumeConfig * c,
+ gpointer data, AFormat format, gint length);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,201 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "svis.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <string.h>
+
+#include "main.h"
+#include "mainwin.h"
+#include "plugin.h"
+#include "widget.h"
+#include "vis.h"
+
+static gint svis_redraw_delays[] = { 1, 2, 4, 8 };
+
+/* FIXME: Are the svis_scope_colors correct? */
+static guint8 svis_scope_colors[] = { 20, 19, 18, 19, 20 };
+static guint8 svis_vu_normal_colors[] = { 17, 17, 17, 12, 12, 12, 2, 2 };
+
+#define DRAW_DS_PIXEL(ptr,value) \
+ *(ptr) = (value); \
+ *((ptr) + 1) = (value); \
+ *((ptr) + 76) = (value); \
+ *((ptr) + 77) = (value);
+
+#define SVIS_HEIGHT 5
+#define SVIS_WIDTH 38
+
+void
+svis_timeout_func(SVis * svis, guchar * data)
+{
+ static GTimer *timer = NULL;
+ gulong micros = 9999999;
+ gboolean falloff = FALSE;
+ gint i;
+
+ if (!timer) {
+ timer = g_timer_new();
+ g_timer_start(timer);
+ }
+ else {
+ g_timer_elapsed(timer, µs);
+ if (micros > 14000)
+ g_timer_reset(timer);
+
+ }
+
+ if (cfg.vis_type == INPUT_VIS_ANALYZER) {
+ if (micros > 14000)
+ falloff = TRUE;
+
+ for (i = 0; i < 2; i++) {
+ if (falloff || data) {
+ if (data && data[i] > svis->vs_data[i])
+ svis->vs_data[i] = data[i];
+ else if (falloff) {
+ if (svis->vs_data[i] >= 2)
+ svis->vs_data[i] -= 2;
+ else
+ svis->vs_data[i] = 0;
+ }
+ }
+
+ }
+ }
+ else if (data) {
+ for (i = 0; i < 75; i++)
+ svis->vs_data[i] = data[i];
+ }
+
+ if (micros > 14000) {
+ if (!svis->vs_refresh_delay) {
+ svis_draw((Widget *) svis);
+ svis->vs_refresh_delay = svis_redraw_delays[cfg.vis_refresh];
+
+ }
+ svis->vs_refresh_delay--;
+ }
+}
+
+void
+svis_draw(Widget * w)
+{
+ SVis *svis = (SVis *) w;
+ gint x, y, h;
+ guchar svis_color[24][3];
+ guchar rgb_data[SVIS_WIDTH * 2 * SVIS_HEIGHT * 2], *ptr, c;
+ guint32 colors[24];
+ GdkRgbCmap *cmap;
+
+ GDK_THREADS_ENTER();
+
+ skin_get_viscolor(bmp_active_skin, svis_color);
+ for (y = 0; y < 24; y++) {
+ colors[y] =
+ svis_color[y][0] << 16 | svis_color[y][1] << 8 | svis_color[y][2];
+ }
+ cmap = gdk_rgb_cmap_new(colors, 24);
+
+ memset(rgb_data, 0, SVIS_WIDTH * SVIS_HEIGHT);
+ if (cfg.vis_type == VIS_ANALYZER) {
+ switch (cfg.vu_mode) {
+ case VU_NORMAL:
+ for (y = 0; y < 2; y++) {
+ ptr = rgb_data + ((y * 3) * 38);
+ h = (svis->vs_data[y] * 7) / 37;
+ for (x = 0; x < h; x++, ptr += 5) {
+ c = svis_vu_normal_colors[x];
+ *(ptr) = c;
+ *(ptr + 1) = c;
+ *(ptr + 2) = c;
+ *(ptr + 38) = c;
+ *(ptr + 39) = c;
+ *(ptr + 40) = c;
+ }
+ }
+ break;
+ case VU_SMOOTH:
+ for (y = 0; y < 2; y++) {
+ ptr = rgb_data + ((y * 3) * SVIS_WIDTH);
+ for (x = 0; x < svis->vs_data[y]; x++, ptr++) {
+ c = 17 - ((x * 15) / 37);
+ *(ptr) = c;
+ *(ptr + 38) = c;
+ }
+ }
+ break;
+ }
+ }
+ else if (cfg.vis_type == VIS_SCOPE) {
+ for (x = 0; x < 38; x++) {
+ h = svis->vs_data[x << 1] / 3;
+ ptr = rgb_data + ((4 - h) * 38) + x;
+ *ptr = svis_scope_colors[h];
+ }
+ }
+
+ gdk_draw_indexed_image(mainwin->window, mainwin_gc,
+ svis->vs_widget.x, svis->vs_widget.y,
+ svis->vs_widget.width,
+ svis->vs_widget.height,
+ GDK_RGB_DITHER_NORMAL, (guchar *) rgb_data,
+ 38, cmap);
+
+ gdk_rgb_cmap_free(cmap);
+ GDK_THREADS_LEAVE();
+}
+
+void
+svis_clear_data(SVis * svis)
+{
+ gint i;
+
+ for (i = 0; i < 75; i++) {
+ svis->vs_data[i] = (cfg.vis_type == VIS_SCOPE) ? 6 : 0;
+ }
+}
+
+void
+svis_clear(SVis * svis)
+{
+ gdk_window_clear_area(mainwin->window, svis->vs_widget.x,
+ svis->vs_widget.y, svis->vs_widget.width,
+ svis->vs_widget.height);
+}
+
+SVis *
+create_svis(GList ** wlist,
+ GdkPixmap * parent,
+ GdkGC * gc,
+ gint x, gint y)
+{
+ SVis *svis;
+
+ svis = g_new0(SVis, 1);
+ widget_init(&svis->vs_widget, parent, gc, x, y, SVIS_WIDTH, SVIS_HEIGHT,
+ 1);
+
+ widget_list_add(wlist, WIDGET(svis));
+ return svis;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/svis.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,47 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef SVIS_H
+#define SVIS_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "svis.h"
+#include "widget.h"
+
+#define SVIS(x) ((SVis *)(x))
+struct _SVis {
+ Widget vs_widget;
+ gint vs_data[75];
+ gint vs_refresh_delay;
+};
+
+typedef struct _SVis SVis;
+
+void svis_draw(Widget * w);
+void svis_timeout_func(SVis * svis, guchar * data);
+SVis *create_svis(GList ** wlist, GdkPixmap * parent, GdkGC * gc, gint x,
+ gint y);
+void svis_set_data(SVis * vis, guchar * data);
+void svis_clear_data(SVis * vis);
+void svis_clear(SVis * vis);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,176 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "tbutton.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+
+void
+tbutton_draw(Widget * w)
+{
+ TButton *button = TBUTTON(w);
+ GdkPixmap *obj;
+
+ obj = button->tb_widget.parent;
+
+ if (button->tb_pressed && button->tb_inside) {
+ if (button->tb_selected) {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ button->tb_widget.gc,
+ button->tb_skin_index,
+ button->tb_psx, button->tb_psy,
+ button->tb_widget.x, button->tb_widget.y,
+ button->tb_widget.width,
+ button->tb_widget.height);
+ }
+ else {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ button->tb_widget.gc,
+ button->tb_skin_index,
+ button->tb_pux, button->tb_puy,
+ button->tb_widget.x, button->tb_widget.y,
+ button->tb_widget.width,
+ button->tb_widget.height);
+ }
+ }
+ else {
+ if (button->tb_selected) {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ button->tb_widget.gc,
+ button->tb_skin_index,
+ button->tb_nsx, button->tb_nsy,
+ button->tb_widget.x, button->tb_widget.y,
+ button->tb_widget.width,
+ button->tb_widget.height);
+ }
+ else {
+ skin_draw_pixmap(bmp_active_skin, obj,
+ button->tb_widget.gc,
+ button->tb_skin_index,
+ button->tb_nux, button->tb_nuy,
+ button->tb_widget.x, button->tb_widget.y,
+ button->tb_widget.width,
+ button->tb_widget.height);
+
+ }
+ }
+}
+
+void
+tbutton_button_press_cb(GtkWidget * widget, GdkEventButton * event,
+ TButton * button)
+{
+ if (event->button != 1)
+ return;
+
+ if (widget_contains(&button->tb_widget, event->x, event->y)) {
+ button->tb_pressed = 1;
+ button->tb_inside = 1;
+ widget_draw(WIDGET(button));
+ }
+}
+
+void
+tbutton_button_release_cb(GtkWidget * widget, GdkEventButton * event,
+ TButton * button)
+{
+ if (event->button != 1)
+ return;
+
+ if (button->tb_inside && button->tb_pressed) {
+ button->tb_inside = 0;
+ button->tb_selected = !button->tb_selected;
+
+ widget_draw(WIDGET(button));
+
+ if (button->tb_push_cb)
+ button->tb_push_cb(button->tb_selected);
+ }
+
+ if (button->tb_pressed)
+ button->tb_pressed = 0;
+}
+
+void
+tbutton_motion_cb(GtkWidget * widget, GdkEventMotion * event,
+ TButton * button)
+{
+ gint inside;
+
+ if (!button->tb_pressed)
+ return;
+ inside = widget_contains(&button->tb_widget, event->x, event->y);
+ if (inside != button->tb_inside) {
+ button->tb_inside = inside;
+ widget_draw(WIDGET(button));
+ }
+}
+
+TButton *
+create_tbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint nux, gint nuy,
+ gint pux, gint puy, gint nsx, gint nsy, gint psx,
+ gint psy, void (*cb) (gboolean), SkinPixmapId si)
+{
+ TButton *b;
+
+ b = g_new0(TButton, 1);
+ widget_init(&b->tb_widget, parent, gc, x, y, w, h, 1);
+ b->tb_widget.button_press_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ tbutton_button_press_cb;
+ b->tb_widget.button_release_cb =
+ (void (*)(GtkWidget *, GdkEventButton *, gpointer))
+ tbutton_button_release_cb;
+ b->tb_widget.motion_cb =
+ (void (*)(GtkWidget *, GdkEventMotion *, gpointer))
+ tbutton_motion_cb;
+ b->tb_widget.draw = tbutton_draw;
+ b->tb_nux = nux;
+ b->tb_nuy = nuy;
+ b->tb_pux = pux;
+ b->tb_puy = puy;
+ b->tb_nsx = nsx;
+ b->tb_nsy = nsy;
+ b->tb_psx = psx;
+ b->tb_psy = psy;
+ b->tb_push_cb = cb;
+ b->tb_skin_index = si;
+
+ widget_list_add(wlist, WIDGET(b));
+ return b;
+}
+
+void
+tbutton_set_toggled(TButton * tb, gboolean toggled)
+{
+ tb->tb_selected = toggled;
+ widget_draw(WIDGET(tb));
+}
+
+void
+free_tbutton(TButton * b)
+{
+ g_free(b);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/tbutton.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,48 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef TBUTTON_H
+#define TBUTTON_H
+
+#include <glib.h>
+
+#include "skin.h"
+#include "widget.h"
+
+#define TBUTTON(x) ((TButton *)(x))
+struct _TButton {
+ Widget tb_widget;
+ gint tb_nux, tb_nuy, tb_pux, tb_puy, tb_nsx, tb_nsy, tb_psx, tb_psy;
+ gint tb_pressed, tb_inside, tb_selected;
+ void (*tb_push_cb) (gboolean);
+ SkinPixmapId tb_skin_index;
+};
+
+typedef struct _TButton TButton;
+
+TButton *create_tbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gint h, gint nux, gint nuy,
+ gint pux, gint puy, gint nsx, gint nsy, gint psx,
+ gint psy, void (*cb) (gboolean), SkinPixmapId si);
+void tbutton_set_toggled(TButton * tb, gboolean toggled);
+void free_tbutton(TButton * b);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,563 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "textbox.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkprivate.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "main.h"
+#include "util.h"
+
+static void textbox_generate_pixmap(TextBox * tb);
+
+static void
+textbox_draw(Widget * w)
+{
+ TextBox *tb = TEXT_BOX(w);
+ gint cw;
+ GdkPixmap *obj;
+ GdkPixmap *src;
+
+ g_return_if_fail(tb != NULL);
+
+ if (tb->tb_text &&
+ (!tb->tb_pixmap_text || strcmp(tb->tb_text, tb->tb_pixmap_text)))
+ textbox_generate_pixmap(tb);
+
+ if (tb->tb_pixmap) {
+ if (skin_get_id() != tb->tb_skin_id) {
+ tb->tb_skin_id = skin_get_id();
+ textbox_generate_pixmap(tb);
+ }
+ obj = tb->tb_widget.parent;
+ src = tb->tb_pixmap;
+
+ cw = tb->tb_pixmap_width - tb->tb_offset;
+ if (cw > tb->tb_widget.width)
+ cw = tb->tb_widget.width;
+ gdk_draw_pixmap(obj, tb->tb_widget.gc, src, tb->tb_offset, 0,
+ tb->tb_widget.x, tb->tb_widget.y, cw,
+ tb->tb_widget.height);
+ if (cw < tb->tb_widget.width)
+ gdk_draw_pixmap(obj, tb->tb_widget.gc, src, 0, 0,
+ tb->tb_widget.x + cw, tb->tb_widget.y,
+ tb->tb_widget.width - cw, tb->tb_widget.height);
+ }
+}
+
+static gboolean
+textbox_scroll(gpointer data)
+{
+ TextBox *tb = TEXT_BOX(data);
+
+ if (!tb->tb_is_dragging) {
+ tb->tb_offset++;
+ if (tb->tb_offset >= tb->tb_pixmap_width)
+ tb->tb_offset -= tb->tb_pixmap_width;
+ widget_draw(WIDGET(tb));
+ }
+
+ return TRUE;
+}
+
+static void
+textbox_button_press(GtkWidget * w, GdkEventButton * event, gpointer data)
+{
+ TextBox *tb = TEXT_BOX(data);
+
+ if (event->button != 1)
+ return;
+ if (widget_contains(&tb->tb_widget, event->x, event->y) &&
+ tb->tb_scroll_allowed &&
+ tb->tb_pixmap_width > tb->tb_widget.width && tb->tb_is_scrollable) {
+ tb->tb_is_dragging = TRUE;
+ tb->tb_drag_off = tb->tb_offset;
+ tb->tb_drag_x = event->x;
+ }
+}
+
+static void
+textbox_motion(GtkWidget * w, GdkEventMotion * event, gpointer data)
+{
+ TextBox *tb = TEXT_BOX(data);
+
+ if (tb->tb_is_dragging) {
+ if (tb->tb_scroll_allowed &&
+ tb->tb_pixmap_width > tb->tb_widget.width) {
+ tb->tb_offset = tb->tb_drag_off - (event->x - tb->tb_drag_x);
+
+ while (tb->tb_offset < 0)
+ tb->tb_offset += tb->tb_pixmap_width;
+
+ while (tb->tb_offset > tb->tb_pixmap_width)
+ tb->tb_offset -= tb->tb_pixmap_width;
+
+ widget_draw(WIDGET(tb));
+ }
+ }
+}
+
+static void
+textbox_button_release(GtkWidget * w, GdkEventButton * event, gpointer data)
+{
+ TextBox *tb = TEXT_BOX(data);
+
+ if (event->button == 1)
+ tb->tb_is_dragging = FALSE;
+}
+
+static gboolean
+textbox_should_scroll(TextBox * tb)
+{
+ g_return_val_if_fail(tb != NULL, FALSE);
+
+ if (!tb->tb_scroll_allowed)
+ return FALSE;
+
+ if (tb->tb_font) {
+ gint width;
+
+ text_get_extents(tb->tb_fontname, tb->tb_text, &width, NULL, NULL,
+ NULL);
+
+ if (width <= tb->tb_widget.width)
+ return FALSE;
+ else
+ return TRUE;
+ }
+
+ if (g_utf8_strlen(tb->tb_text, -1) * 5 > tb->tb_widget.width)
+ return TRUE;
+
+ return FALSE;
+}
+
+void
+textbox_set_text(TextBox * tb, const gchar * text)
+{
+ g_return_if_fail(tb != NULL);
+ g_return_if_fail(text != NULL);
+
+ widget_lock(WIDGET(tb));
+
+ if (tb->tb_text) {
+ if (!strcmp(text, tb->tb_text)) {
+ widget_unlock(WIDGET(tb));
+ return;
+ }
+ g_free(tb->tb_text);
+ }
+
+ tb->tb_text = str_to_utf8(text);
+
+ widget_unlock(WIDGET(tb));
+ widget_draw(WIDGET(tb));
+}
+
+static void
+textbox_generate_xfont_pixmap(TextBox * tb, const gchar * pixmaptext)
+{
+ gint length, i;
+ GdkGC *gc, *maskgc;
+ GdkColor *c, pattern;
+ GdkBitmap *mask;
+ PangoLayout *layout;
+ gint width;
+
+ g_return_if_fail(tb != NULL);
+ g_return_if_fail(pixmaptext != NULL);
+
+ length = g_utf8_strlen(pixmaptext, -1);
+
+ text_get_extents(tb->tb_fontname, pixmaptext, &width, NULL, NULL, NULL);
+
+ tb->tb_pixmap_width = MAX(width, tb->tb_widget.width);
+ tb->tb_pixmap = gdk_pixmap_new(mainwin->window, tb->tb_pixmap_width,
+ tb->tb_widget.height,
+ gdk_rgb_get_visual()->depth);
+ gc = tb->tb_widget.gc;
+ c = skin_get_color(bmp_active_skin, SKIN_TEXTBG);
+ for (i = 0; i < tb->tb_widget.height; i++) {
+ gdk_gc_set_foreground(gc, &c[6 * i / tb->tb_widget.height]);
+ gdk_draw_line(tb->tb_pixmap, gc, 0, i, tb->tb_pixmap_width, i);
+ }
+
+ mask = gdk_pixmap_new(mainwin->window, tb->tb_pixmap_width,
+ tb->tb_widget.height, 1);
+ maskgc = gdk_gc_new(mask);
+ pattern.pixel = 0;
+ gdk_gc_set_foreground(maskgc, &pattern);
+
+ gdk_draw_rectangle(mask, maskgc, TRUE, 0, 0,
+ tb->tb_pixmap_width, tb->tb_widget.height);
+ pattern.pixel = 1;
+ gdk_gc_set_foreground(maskgc, &pattern);
+
+ gdk_gc_set_foreground(gc, skin_get_color(bmp_active_skin, SKIN_TEXTFG));
+
+ layout = gtk_widget_create_pango_layout(mainwin, pixmaptext);
+ pango_layout_set_font_description(layout, tb->tb_font);
+
+ gdk_draw_layout(tb->tb_pixmap, gc, 0, (tb->tb_font_descent / 2), layout);
+ g_object_unref(layout);
+
+ g_object_unref(maskgc);
+
+ gdk_gc_set_clip_mask(gc, mask);
+ c = skin_get_color(bmp_active_skin, SKIN_TEXTFG);
+ for (i = 0; i < tb->tb_widget.height; i++) {
+ gdk_gc_set_foreground(gc, &c[6 * i / tb->tb_widget.height]);
+ gdk_draw_line(tb->tb_pixmap, gc, 0, i, tb->tb_pixmap_width, i);
+ }
+ g_object_unref(mask);
+ gdk_gc_set_clip_mask(gc, NULL);
+}
+
+static void
+textbox_handle_special_char(gchar c, gint * x, gint * y)
+{
+ switch (c) {
+ case '"':
+ *x = 130;
+ *y = 0;
+ break;
+ case ':':
+ *x = 60;
+ *y = 6;
+ break;
+ case '(':
+ *x = 65;
+ *y = 6;
+ break;
+ case ')':
+ *x = 70;
+ *y = 6;
+ break;
+ case '-':
+ *x = 75;
+ *y = 6;
+ break;
+ case '`':
+ case '\'':
+ *x = 80;
+ *y = 6;
+ break;
+ case '!':
+ *x = 85;
+ *y = 6;
+ break;
+ case '_':
+ *x = 90;
+ *y = 6;
+ break;
+ case '+':
+ *x = 95;
+ *y = 6;
+ break;
+ case '\\':
+ *x = 100;
+ *y = 6;
+ break;
+ case '/':
+ *x = 105;
+ *y = 6;
+ break;
+ case '[':
+ *x = 110;
+ *y = 6;
+ break;
+ case ']':
+ *x = 115;
+ *y = 6;
+ break;
+ case '^':
+ *x = 120;
+ *y = 6;
+ break;
+ case '&':
+ *x = 125;
+ *y = 6;
+ break;
+ case '%':
+ *x = 130;
+ *y = 6;
+ break;
+ case '.':
+ case ',':
+ *x = 135;
+ *y = 6;
+ break;
+ case '=':
+ *x = 140;
+ *y = 6;
+ break;
+ case '$':
+ *x = 145;
+ *y = 6;
+ break;
+ case '#':
+ *x = 150;
+ *y = 6;
+ break;
+ case 'å':
+ case 'Å':
+ *x = 0;
+ *y = 12;
+ break;
+ case 'ö':
+ case 'Ö':
+ *x = 5;
+ *y = 12;
+ break;
+ case 'ä':
+ case 'Ä':
+ *x = 10;
+ *y = 12;
+ break;
+ case 'ü':
+ case 'Ü':
+ *x = 100;
+ *y = 0;
+ break;
+ case '?':
+ *x = 15;
+ *y = 12;
+ break;
+ case '*':
+ *x = 20;
+ *y = 12;
+ break;
+ default:
+ *x = 145;
+ *y = 0;
+ break;
+ }
+}
+
+static void
+textbox_generate_pixmap(TextBox * tb)
+{
+ gint length, i, x, y, wl;
+ gchar *pixmaptext;
+ GdkGC *gc;
+
+ g_return_if_fail(tb != NULL);
+
+ if (tb->tb_pixmap) {
+ g_object_unref(tb->tb_pixmap);
+ tb->tb_pixmap = NULL;
+ }
+
+ /*
+ * Don't reset the offset if only text after the last '(' has
+ * changed. This is a hack to avoid visual noice on vbr files
+ * where we guess the length.
+ */
+ if (!(tb->tb_pixmap_text && strrchr(tb->tb_text, '(') &&
+ !strncmp(tb->tb_pixmap_text, tb->tb_text,
+ strrchr(tb->tb_text, '(') - tb->tb_text)))
+ tb->tb_offset = 0;
+
+ g_free(tb->tb_pixmap_text);
+ tb->tb_pixmap_text = g_strdup(tb->tb_text);
+
+ /*
+ * wl is the number of (partial) letters visible. Only makes
+ * sense when using skinned font.
+ */
+
+ wl = tb->tb_widget.width / 5;
+ if (wl * 5 != tb->tb_widget.width)
+ wl++;
+
+ length = g_utf8_strlen(tb->tb_text, -1);
+
+ tb->tb_is_scrollable = FALSE;
+
+ if (textbox_should_scroll(tb)) {
+ tb->tb_is_scrollable = TRUE;
+ pixmaptext = g_strconcat(tb->tb_pixmap_text, " *** ", NULL);
+ length += 7;
+ }
+ else if (!tb->tb_font && length <= wl) {
+ gint pad = wl - length;
+ gchar *padchars = g_strnfill(pad, ' ');
+
+ pixmaptext = g_strconcat(tb->tb_pixmap_text, padchars, NULL);
+ g_free(padchars);
+ length += pad;
+ }
+ else
+ pixmaptext = g_strdup(tb->tb_pixmap_text);
+
+
+ if (tb->tb_is_scrollable) {
+ if (tb->tb_scroll_enabled && !tb->tb_timeout_tag) {
+ gint tag;
+ tag = TEXTBOX_SCROLL_SMOOTH_TIMEOUT;
+ tb->tb_timeout_tag = gtk_timeout_add(tag, textbox_scroll, tb);
+ }
+ }
+ else {
+ if (tb->tb_timeout_tag) {
+ gtk_timeout_remove(tb->tb_timeout_tag);
+ tb->tb_timeout_tag = 0;
+ }
+ tb->tb_offset = 0;
+ }
+
+ if (tb->tb_font) {
+ textbox_generate_xfont_pixmap(tb, pixmaptext);
+ g_free(pixmaptext);
+ return;
+ }
+
+ tb->tb_pixmap_width = length * 5;
+ tb->tb_pixmap = gdk_pixmap_new(mainwin->window,
+ tb->tb_pixmap_width, 6,
+ gdk_rgb_get_visual()->depth);
+ gc = tb->tb_widget.gc;
+
+ for (i = 0; i < length; i++) {
+ gchar c;
+ x = y = -1;
+ c = toupper(pixmaptext[i]);
+ if (c >= 'A' && c <= 'Z') {
+ x = 5 * (c - 'A');
+ y = 0;
+ }
+ else if (c >= '0' && c <= '9') {
+ x = 5 * (c - '0');
+ y = 6;
+ }
+ else
+ textbox_handle_special_char(c, &x, &y);
+
+ skin_draw_pixmap(bmp_active_skin,
+ tb->tb_pixmap, gc, tb->tb_skin_index,
+ x, y, i * 5, 0, 5, 6);
+ }
+ g_free(pixmaptext);
+}
+
+void
+textbox_set_scroll(TextBox * tb, gboolean s)
+{
+ g_return_if_fail(tb != NULL);
+
+ tb->tb_scroll_enabled = s;
+ if (tb->tb_scroll_enabled && tb->tb_is_scrollable
+ && tb->tb_scroll_allowed) {
+ gint tag;
+ tag = TEXTBOX_SCROLL_SMOOTH_TIMEOUT;
+ tb->tb_timeout_tag = gtk_timeout_add(tag, textbox_scroll, tb);
+ }
+ else {
+ if (tb->tb_timeout_tag) {
+ gtk_timeout_remove(tb->tb_timeout_tag);
+ tb->tb_timeout_tag = 0;
+ }
+ tb->tb_offset = 0;
+ widget_draw(WIDGET(tb));
+ }
+
+}
+
+void
+textbox_set_xfont(TextBox * tb, gboolean use_xfont, const gchar * fontname)
+{
+ gint ascent, descent;
+
+ g_return_if_fail(tb != NULL);
+
+ if (tb->tb_font) {
+ pango_font_description_free(tb->tb_font);
+ tb->tb_font = NULL;
+ }
+
+ tb->tb_widget.y = tb->tb_nominal_y;
+ tb->tb_widget.height = tb->tb_nominal_height;
+
+ /* Make sure the pixmap is regenerated */
+ if (tb->tb_pixmap_text) {
+ g_free(tb->tb_pixmap_text);
+ tb->tb_pixmap_text = NULL;
+ }
+
+ if (!use_xfont || strlen(fontname) == 0)
+ return;
+
+ tb->tb_font = pango_font_description_from_string(fontname);
+ tb->tb_fontname = g_strdup(fontname);
+
+ text_get_extents(fontname,
+ "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz ",
+ NULL, NULL, &ascent, &descent);
+ tb->tb_font_ascent = ascent;
+ tb->tb_font_descent = descent;
+
+
+ if (tb->tb_font == NULL)
+ return;
+
+ tb->tb_widget.height = tb->tb_font_ascent;
+ if (tb->tb_widget.height > tb->tb_nominal_height)
+ tb->tb_widget.y -= (tb->tb_widget.height - tb->tb_nominal_height) / 2;
+ else
+ tb->tb_widget.height = tb->tb_nominal_height;
+}
+
+TextBox *
+create_textbox(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gboolean allow_scroll, SkinPixmapId si)
+{
+ TextBox *tb;
+
+ tb = g_new0(TextBox, 1);
+ widget_init(&tb->tb_widget, parent, gc, x, y, w, 6, 1);
+ tb->tb_widget.button_press_cb = textbox_button_press;
+ tb->tb_widget.button_release_cb = textbox_button_release;
+ tb->tb_widget.motion_cb = textbox_motion;
+ tb->tb_widget.draw = textbox_draw;
+ tb->tb_scroll_allowed = allow_scroll;
+ tb->tb_scroll_enabled = TRUE;
+ tb->tb_skin_index = si;
+ tb->tb_nominal_y = y;
+ tb->tb_nominal_height = tb->tb_widget.height;
+ widget_list_add(wlist, WIDGET(tb));
+ return tb;
+}
+
+void
+textbox_free(TextBox * tb)
+{
+ g_return_if_fail(tb != NULL);
+
+ if (tb->tb_pixmap)
+ g_object_unref(tb->tb_pixmap);
+ g_free(tb->tb_text);
+ g_free(tb);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/textbox.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,64 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef TEXTBOX_H
+#define TEXTBOX_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <pango/pango.h>
+
+#include "skin.h"
+#include "widget.h"
+
+#define TEXTBOX_SCROLL_TIMEOUT 200
+#define TEXTBOX_SCROLL_SMOOTH_TIMEOUT 30
+
+#define TEXT_BOX(x) ((TextBox *)(x))
+struct _TextBox {
+ Widget tb_widget;
+ GdkPixmap *tb_pixmap;
+ gchar *tb_text, *tb_pixmap_text;
+ gint tb_pixmap_width;
+ gint tb_offset;
+ gboolean tb_scroll_allowed, tb_scroll_enabled;
+ gboolean tb_is_scrollable, tb_is_dragging;
+ gint tb_timeout_tag, tb_drag_x, tb_drag_off;
+ gint tb_nominal_y, tb_nominal_height;
+ gint tb_skin_id;
+ SkinPixmapId tb_skin_index;
+ PangoFontDescription *tb_font;
+ gint tb_font_ascent, tb_font_descent;
+ gchar *tb_fontname;
+};
+
+typedef struct _TextBox TextBox;
+
+void textbox_set_text(TextBox * tb, const gchar * text);
+void textbox_set_scroll(TextBox * tb, gboolean s);
+TextBox *create_textbox(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint w, gboolean allow_scroll,
+ SkinPixmapId si);
+void textbox_set_xfont(TextBox * tb, gboolean use_xfont,
+ const gchar * fontname);
+void textbox_free(TextBox * tb);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,110 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "urldecode.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "util.h"
+
+/* URL-decode a file: URL path, return NULL if it's not what we expect */
+gchar *
+xmms_urldecode_path(const gchar * encoded_path)
+{
+ const gchar *cur, *ext;
+ gchar *path, *tmp;
+ gint realchar;
+
+ if (!encoded_path)
+ return NULL;
+
+ if (!str_has_prefix_nocase(encoded_path, "file:"))
+ return NULL;
+
+ cur = encoded_path + 5;
+
+ if (str_has_prefix_nocase(cur, "//localhost"))
+ cur += 11;
+
+ if (*cur == '/')
+ while (cur[1] == '/')
+ cur++;
+
+ tmp = g_malloc0(strlen(cur) + 1);
+
+ while ((ext = strchr(cur, '%')) != NULL) {
+ strncat(tmp, cur, ext - cur);
+ ext++;
+ cur = ext + 2;
+ if (!sscanf(ext, "%2x", &realchar)) {
+ /* Assume it is a literal '%'. Several file
+ * managers send unencoded file: urls on drag
+ * and drop. */
+ realchar = '%';
+ cur -= 2;
+ }
+ tmp[strlen(tmp)] = realchar;
+ }
+
+ path = g_strconcat(tmp, cur, NULL);
+ g_free(tmp);
+ return path;
+}
+
+gchar *
+xmms_urldecode_plain(const gchar * encoded_path)
+{
+ const gchar *cur, *ext;
+ gchar *path, *tmp;
+ gint realchar;
+
+ if (!encoded_path)
+ return NULL;
+
+ cur = encoded_path;
+ if (*cur == '/')
+ while (cur[1] == '/')
+ cur++;
+
+ tmp = g_malloc0(strlen(cur) + 1);
+
+ while ((ext = strchr(cur, '%')) != NULL) {
+ strncat(tmp, cur, ext - cur);
+ ext++;
+ cur = ext + 2;
+ if (!sscanf(ext, "%2x", &realchar)) {
+ /*
+ * Assume it is a literal '%'. Several file
+ * managers send unencoded file: urls on on
+ * drag and drop.
+ */
+ realchar = '%';
+ cur -= 2;
+ }
+ tmp[strlen(tmp)] = realchar;
+ }
+
+ path = g_strconcat(tmp, cur, NULL);
+ g_free(tmp);
+ return path;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/urldecode.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,25 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+
+gchar *xmms_urldecode_path(const gchar *);
+gchar *xmms_urldecode_plain(const gchar *);
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1356 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#define NEED_GLADE
+#include "util.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+//#include <glade/glade.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <gdk/gdkx.h>
+#include <gdk/gdkkeysyms.h>
+#include <X11/Xlib.h>
+#include <sys/ipc.h>
+#include <unistd.h>
+#include <errno.h>
+
+#ifdef HAVE_FTS_H
+# include <fts.h>
+#endif
+
+#include "glade.h"
+#include "input.h"
+#include "main.h"
+#include "playback.h"
+#include "playlist.h"
+#include "playlistwin.h"
+
+
+static GQuark quark_popup_data;
+
+
+/*
+ * escape_shell_chars()
+ *
+ * Escapes characters that are special to the shell inside double quotes.
+ */
+
+gchar *
+escape_shell_chars(const gchar * string)
+{
+ const gchar *special = "$`\"\\"; /* Characters to escape */
+ const gchar *in = string;
+ gchar *out, *escaped;
+ gint num = 0;
+
+ while (*in != '\0')
+ if (strchr(special, *in++))
+ num++;
+
+ escaped = g_malloc(strlen(string) + num + 1);
+
+ in = string;
+ out = escaped;
+
+ while (*in != '\0') {
+ if (strchr(special, *in))
+ *out++ = '\\';
+ *out++ = *in++;
+ }
+ *out = '\0';
+
+ return escaped;
+}
+
+
+/*
+ * find <file> in directory <dirname> or subdirectories. return
+ * pointer to complete filename which has to be freed by calling
+ * "g_free()" after use. Returns NULL if file could not be found.
+ */
+
+typedef struct {
+ const gchar *to_match;
+ gchar *match;
+ gboolean found;
+} FindFileContext;
+
+static gboolean
+find_file_func(const gchar * path, const gchar * basename, gpointer data)
+{
+ FindFileContext *context = data;
+
+ if (strlen(path) > FILENAME_MAX) {
+ g_warning("Ignoring path: name too long (%s)", path);
+ return TRUE;
+ }
+
+ if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
+ if (!strcasecmp(basename, context->to_match)) {
+ context->match = g_strdup(path);
+ context->found = TRUE;
+ return TRUE;
+ }
+ }
+ else if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
+ dir_foreach(path, find_file_func, context, NULL);
+ if (context->found)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+gchar *
+find_file_recursively(const gchar * path, const gchar * filename)
+{
+ FindFileContext context;
+
+ context.to_match = filename;
+ context.match = NULL;
+ context.found = FALSE;
+
+ dir_foreach(path, find_file_func, &context, NULL);
+ return context.match;
+}
+
+
+typedef enum {
+ ARCHIVE_UNKNOWN = 0,
+ ARCHIVE_DIR,
+ ARCHIVE_TAR,
+ ARCHIVE_TGZ,
+ ARCHIVE_ZIP,
+ ARCHIVE_TBZ2
+} ArchiveType;
+
+typedef gchar *(*ArchiveExtractFunc) (const gchar *, const gchar *);
+
+typedef struct {
+ ArchiveType type;
+ const gchar *ext;
+} ArchiveExtensionType;
+
+static ArchiveExtensionType archive_extensions[] = {
+ {ARCHIVE_TAR, ".tar"},
+ {ARCHIVE_ZIP, ".wsz"},
+ {ARCHIVE_ZIP, ".zip"},
+ {ARCHIVE_TGZ, ".tar.gz"},
+ {ARCHIVE_TGZ, ".tgz"},
+ {ARCHIVE_TBZ2, ".tar.bz2"},
+ {ARCHIVE_TBZ2, ".bz2"},
+ {ARCHIVE_UNKNOWN, NULL}
+};
+
+static gchar *archive_extract_tar(const gchar * archive, const gchar * dest);
+static gchar *archive_extract_zip(const gchar * archive, const gchar * dest);
+static gchar *archive_extract_tgz(const gchar * archive, const gchar * dest);
+static gchar *archive_extract_tbz2(const gchar * archive, const gchar * dest);
+
+static ArchiveExtractFunc archive_extract_funcs[] = {
+ NULL,
+ NULL,
+ archive_extract_tar,
+ archive_extract_tgz,
+ archive_extract_zip,
+ archive_extract_tbz2
+};
+
+
+/* FIXME: these functions can be generalised into a function using a
+ * command lookup table */
+
+static const gchar *
+get_tar_command(void)
+{
+ static const gchar *command = NULL;
+
+ if (!command) {
+ if (!(command = getenv("TARCMD")))
+ command = "tar";
+ }
+
+ return command;
+}
+
+static const gchar *
+get_unzip_command(void)
+{
+ static const gchar *command = NULL;
+
+ if (!command) {
+ if (!(command = getenv("UNZIPCMD")))
+ command = "unzip";
+ }
+
+ return command;
+}
+
+
+static gchar *
+archive_extract_tar(const gchar * archive, const gchar * dest)
+{
+ return g_strdup_printf("%s >/dev/null xf \"%s\" -C %s",
+ get_tar_command(), archive, dest);
+}
+
+static gchar *
+archive_extract_zip(const gchar * archive, const gchar * dest)
+{
+ return g_strdup_printf("%s >/dev/null -o -j \"%s\" -d %s",
+ get_unzip_command(), archive, dest);
+}
+
+static gchar *
+archive_extract_tgz(const gchar * archive, const gchar * dest)
+{
+ return g_strdup_printf("%s >/dev/null xzf \"%s\" -C %s",
+ get_tar_command(), archive, dest);
+}
+
+static gchar *
+archive_extract_tbz2(const gchar * archive, const gchar * dest)
+{
+ return g_strdup_printf("bzip2 -dc \"%s\" | %s >/dev/null xf - -C %s",
+ archive, get_tar_command(), dest);
+}
+
+
+ArchiveType
+archive_get_type(const gchar * filename)
+{
+ gint i = 0;
+
+ if (g_file_test(filename, G_FILE_TEST_IS_DIR))
+ return ARCHIVE_DIR;
+
+ while (archive_extensions[i].ext) {
+ if (g_str_has_suffix(filename, archive_extensions[i].ext)) {
+ return archive_extensions[i].type;
+ }
+ i++;
+ }
+
+ return ARCHIVE_UNKNOWN;
+}
+
+gboolean
+file_is_archive(const gchar * filename)
+{
+ return (archive_get_type(filename) > ARCHIVE_DIR);
+}
+
+gchar *
+archive_basename(const gchar * str)
+{
+ gint i = 0;
+
+ while (archive_extensions[i].ext) {
+ if (str_has_suffix_nocase(str, archive_extensions[i].ext)) {
+ const gchar *end = g_strrstr(str, archive_extensions[i].ext);
+ if (end) {
+ return g_strndup(str, end - str);
+ }
+ break;
+ }
+ i++;
+ }
+
+ return NULL;
+}
+
+/*
+ decompress_archive
+
+ Decompresses the archive "filename" to a temporary directory,
+ returns the path to the temp dir, or NULL if failed,
+ watch out tho, doesn't actually check if the system command succeeds :-|
+*/
+
+gchar *
+archive_decompress(const gchar * filename)
+{
+ gchar *tmpdir, *cmd, *escaped_filename;
+ ArchiveType type;
+
+ if ((type = archive_get_type(filename)) <= ARCHIVE_DIR)
+ return NULL;
+
+ tmpdir = g_build_filename(g_get_tmp_dir(), "bmp.XXXXXXXX", NULL);
+ if (!mkdtemp(tmpdir)) {
+ g_free(tmpdir);
+ g_message("Unable to load skin: Failed to create temporary "
+ "directory: %s", g_strerror(errno));
+ return NULL;
+ }
+
+ escaped_filename = escape_shell_chars(filename);
+ cmd = archive_extract_funcs[type] (escaped_filename, tmpdir);
+ g_free(escaped_filename);
+
+ if (!cmd) {
+ g_message("extraction function is NULL!");
+ g_free(tmpdir);
+ return NULL;
+ }
+
+ system(cmd);
+ g_free(cmd);
+
+ return tmpdir;
+}
+
+
+#ifdef HAVE_FTS_H
+
+void
+del_directory(const gchar * dirname)
+{
+ gchar *const argv[2] = { (gchar *) dirname, NULL };
+ FTS *fts;
+ FTSENT *p;
+
+ fts = fts_open(argv, FTS_PHYSICAL, (gint(*)())NULL);
+ while ((p = fts_read(fts))) {
+ switch (p->fts_info) {
+ case FTS_D:
+ break;
+ case FTS_DNR:
+ case FTS_ERR:
+ break;
+ case FTS_DP:
+ rmdir(p->fts_accpath);
+ break;
+ default:
+ unlink(p->fts_accpath);
+ break;
+ }
+ }
+ fts_close(fts);
+}
+
+#else /* !HAVE_FTS */
+
+gboolean
+del_directory_func(const gchar * path, const gchar * basename,
+ gpointer params)
+{
+ if (!strcmp(basename, ".") || !strcmp(path, ".."))
+ return FALSE;
+
+ if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
+ dir_foreach(path, del_directory_func, NULL, NULL);
+ rmdir(path);
+ return FALSE;
+ }
+
+ unlink(path);
+
+ return FALSE;
+}
+
+void
+del_directory(const gchar * path)
+{
+ dir_foreach(path, del_directory_func, NULL, NULL);
+ rmdir(path);
+}
+
+#endif /* ifdef HAVE_FTS */
+
+gchar *
+read_ini_string(const gchar * filename, const gchar * section,
+ const gchar * key)
+{
+ gchar *buffer, *ret_buffer = NULL;
+ gint found_section = 0, off = 0, len = 0;
+ gsize filesize;
+
+ if (!filename)
+ return NULL;
+
+ if (!g_file_get_contents(filename, &buffer, &filesize, NULL))
+ return NULL;
+
+ while (!ret_buffer && off < filesize) {
+ while (off < filesize &&
+ (buffer[off] == '\r' || buffer[off] == '\n' ||
+ buffer[off] == ' ' || buffer[off] == '\t'))
+ off++;
+ if (off >= filesize)
+ break;
+ if (buffer[off] == '[') {
+ gint slen = strlen(section);
+ off++;
+ found_section = 0;
+ if (off + slen + 1 < filesize &&
+ !strncasecmp(section, &buffer[off], slen)) {
+ off += slen;
+ if (buffer[off] == ']') {
+ off++;
+ found_section = 1;
+ }
+ }
+ }
+ else if (found_section && off + strlen(key) < filesize &&
+ !strncasecmp(key, &buffer[off], strlen(key))) {
+ off += strlen(key);
+ while (off < filesize &&
+ (buffer[off] == ' ' || buffer[off] == '\t'))
+ off++;
+ if (off >= filesize)
+ break;
+ if (buffer[off] == '=') {
+ off++;
+ while (off < filesize &&
+ (buffer[off] == ' ' || buffer[off] == '\t'))
+ off++;
+ if (off >= filesize)
+ break;
+ len = 0;
+ while (off + len < filesize &&
+ buffer[off + len] != '\r' &&
+ buffer[off + len] != '\n' && buffer[off + len] != ';')
+ len++;
+ ret_buffer = g_strndup(&buffer[off], len);
+ off += len;
+ }
+ }
+ while (off < filesize && buffer[off] != '\r' && buffer[off] != '\n')
+ off++;
+ }
+
+ g_free(buffer);
+ return ret_buffer;
+}
+
+GArray *
+string_to_garray(const gchar * str)
+{
+ GArray *array;
+ gint temp;
+ const gchar *ptr = str;
+ gchar *endptr;
+
+ array = g_array_new(FALSE, TRUE, sizeof(gint));
+ for (;;) {
+ temp = strtol(ptr, &endptr, 10);
+ if (ptr == endptr)
+ break;
+ g_array_append_val(array, temp);
+ ptr = endptr;
+ while (!isdigit(*ptr) && (*ptr) != '\0')
+ ptr++;
+ if (*ptr == '\0')
+ break;
+ }
+ return (array);
+}
+
+GArray *
+read_ini_array(const gchar * filename, const gchar * section,
+ const gchar * key)
+{
+ gchar *temp;
+ GArray *a;
+
+ if ((temp = read_ini_string(filename, section, key)) == NULL) {
+ g_free(temp);
+ return NULL;
+ }
+ a = string_to_garray(temp);
+ g_free(temp);
+ return a;
+}
+
+void
+glist_movedown(GList * list)
+{
+ gpointer temp;
+
+ if (g_list_next(list)) {
+ temp = list->data;
+ list->data = list->next->data;
+ list->next->data = temp;
+ }
+}
+
+void
+glist_moveup(GList * list)
+{
+ gpointer temp;
+
+ if (g_list_previous(list)) {
+ temp = list->data;
+ list->data = list->prev->data;
+ list->prev->data = temp;
+ }
+}
+
+
+void
+util_menu_position(GtkMenu * menu, gint * x, gint * y,
+ gboolean * push_in, gpointer data)
+{
+ GtkRequisition requisition;
+ gint screen_width;
+ gint screen_height;
+ MenuPos *pos = data;
+
+ gtk_widget_size_request(GTK_WIDGET(menu), &requisition);
+
+ screen_width = gdk_screen_width();
+ screen_height = gdk_screen_height();
+
+ *x = CLAMP(pos->x - 2, 0, MAX(0, screen_width - requisition.width));
+ *y = CLAMP(pos->y - 2, 0, MAX(0, screen_height - requisition.height));
+}
+
+static void
+util_menu_delete_popup_data(GtkObject * object, GtkItemFactory * ifactory)
+{
+ gtk_signal_disconnect_by_func(object,
+ GTK_SIGNAL_FUNC
+ (util_menu_delete_popup_data), ifactory);
+ gtk_object_remove_data_by_id(GTK_OBJECT(ifactory), quark_popup_data);
+}
+
+
+/*
+ * util_item_factory_popup[_with_data]() is a replacement for
+ * gtk_item_factory_popup[_with_data]().
+ *
+ * The difference is that the menu is always popped up whithin the
+ * screen. This means it does not neccesarily pop up at (x,y).
+ */
+
+void
+util_item_factory_popup_with_data(GtkItemFactory * ifactory,
+ gpointer data,
+ GtkDestroyNotify destroy, guint x,
+ guint y, guint mouse_button, guint32 time)
+{
+ static GQuark quark_user_menu_pos = 0;
+ MenuPos *pos;
+
+ if (!quark_user_menu_pos)
+ quark_user_menu_pos = g_quark_from_static_string("user_menu_pos");
+
+ if (!quark_popup_data)
+ quark_popup_data =
+ g_quark_from_static_string("GtkItemFactory-popup-data");
+
+ pos = g_object_get_qdata(G_OBJECT(ifactory), quark_user_menu_pos);
+ if (!pos) {
+ pos = g_new0(MenuPos, 1);
+
+ g_object_set_qdata_full(G_OBJECT(ifactory->widget),
+ quark_user_menu_pos, pos, g_free);
+ }
+ pos->x = x;
+ pos->y = y;
+
+
+ if (data != NULL) {
+ g_object_set_qdata_full(G_OBJECT(ifactory),
+ quark_popup_data, data, destroy);
+ g_signal_connect(G_OBJECT(ifactory->widget),
+ "selection-done",
+ G_CALLBACK(util_menu_delete_popup_data), ifactory);
+ }
+
+ gtk_menu_popup(GTK_MENU(ifactory->widget), NULL, NULL,
+ (GtkMenuPositionFunc) util_menu_position,
+ pos, mouse_button, time);
+}
+
+void
+util_item_factory_popup(GtkItemFactory * ifactory, guint x, guint y,
+ guint mouse_button, guint32 time)
+{
+ util_item_factory_popup_with_data(ifactory, NULL, NULL, x, y,
+ mouse_button, time);
+}
+
+
+#define URL_HISTORY_MAX_SIZE 30
+
+static void
+util_add_url_callback(GtkWidget * widget,
+ GtkEntry * entry)
+{
+ const gchar *text;
+
+ text = gtk_entry_get_text(entry);
+ if (g_list_find_custom(cfg.url_history, text, (GCompareFunc) strcasecmp))
+ return;
+
+ cfg.url_history = g_list_prepend(cfg.url_history, g_strdup(text));
+
+ while (g_list_length(cfg.url_history) > URL_HISTORY_MAX_SIZE) {
+ GList *node = g_list_last(cfg.url_history);
+ g_free(node->data);
+ cfg.url_history = g_list_delete_link(cfg.url_history, node);
+ }
+}
+
+GtkWidget *
+util_add_url_dialog_new(const gchar * caption, GCallback enqueue_func)
+{
+ GtkWidget *win, *vbox, *bbox, *enqueue, *cancel, *combo, *entry;
+ GList *url;
+
+ win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(win), caption);
+ gtk_window_set_type_hint(GTK_WINDOW(win), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
+ gtk_window_set_default_size(GTK_WINDOW(win), 400, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(win), 12);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(win), vbox);
+
+ combo = gtk_combo_box_entry_new_text();
+ gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 0);
+
+ entry = gtk_bin_get_child(GTK_BIN(combo));
+ gtk_window_set_focus(GTK_WINDOW(win), entry);
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+
+ for (url = cfg.url_history; url; url = g_list_next(url))
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), (const gchar *) url->data);
+
+ g_signal_connect(entry, "activate",
+ G_CALLBACK(util_add_url_callback),
+ entry);
+ g_signal_connect(entry, "activate",
+ G_CALLBACK(enqueue_func),
+ entry);
+ g_signal_connect_swapped(entry, "activate",
+ G_CALLBACK(gtk_widget_destroy),
+ win);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+ enqueue = gtk_button_new_from_stock(GTK_STOCK_ADD);
+ gtk_box_pack_start(GTK_BOX(bbox), enqueue, FALSE, FALSE, 0);
+
+ g_signal_connect(enqueue, "clicked",
+ G_CALLBACK(util_add_url_callback),
+ entry);
+ g_signal_connect(enqueue, "clicked",
+ G_CALLBACK(enqueue_func),
+ entry);
+ g_signal_connect_swapped(enqueue, "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ win);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, FALSE, FALSE, 0);
+
+ g_signal_connect_swapped(cancel, "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ win);
+
+ gtk_widget_show_all(vbox);
+
+ return win;
+}
+
+static void
+filebrowser_add_files(GtkFileChooser * browser,
+ GSList * files)
+{
+ GSList *cur;
+ gchar *ptr;
+ guint ctr = 0;
+
+ if (GTK_IS_WIDGET(mainwin_jtf))
+ gtk_widget_set_sensitive(mainwin_jtf, FALSE);
+
+ for (cur = files; cur; cur = g_slist_next(cur)) {
+
+ if (g_file_test(cur->data,G_FILE_TEST_IS_DIR)) {
+ playlist_add_dir((const gchar *) cur->data);
+ } else {
+ playlist_add((const gchar *) cur->data);
+ }
+
+ if (++ctr == 20) {
+ playlistwin_update_list();
+ ctr = 0;
+ while (gtk_events_pending() ) gtk_main_iteration();
+ }
+ }
+
+ playlistwin_update_list();
+
+ if (GTK_IS_WIDGET(mainwin_jtf))
+ gtk_widget_set_sensitive(mainwin_jtf, TRUE);
+
+#ifdef HAVE_GNOME_VFS
+ ptr = gtk_file_chooser_get_current_folder_uri(GTK_FILE_CHOOSER(browser));
+#else
+ ptr = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(browser));
+#endif
+
+ g_free(cfg.filesel_path);
+ cfg.filesel_path = ptr;
+}
+
+static void
+filebrowser_add(GtkFileChooser * browser)
+{
+ GSList *files;
+
+#ifdef HAVE_GNOME_VFS
+ files = gtk_file_chooser_get_uris(GTK_FILE_CHOOSER(browser));
+#else
+ files = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(browser));
+#endif
+
+ if (!files) {
+ return;
+ }
+
+ filebrowser_add_files(browser, files);
+ g_slist_foreach(files, (GFunc) g_free, NULL);
+ g_slist_free(files);
+}
+
+static void
+filebrowser_play(GtkFileChooser * browser)
+{
+ GSList *files;
+
+#ifdef HAVE_GNOME_VFS
+ files = gtk_file_chooser_get_uris(GTK_FILE_CHOOSER(browser));
+#else
+ files = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(browser));
+#endif
+
+ if (!files) return;
+
+ playlist_clear();
+
+ filebrowser_add_files(browser, files);
+ g_slist_foreach(files, (GFunc) g_free, NULL);
+ g_slist_free(files);
+
+ bmp_playback_initiate();
+}
+
+
+static void
+_filebrowser_add(GtkWidget *widget,
+ gpointer data)
+{
+ filebrowser_add(data);
+ gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(data));
+}
+
+static void
+_filebrowser_play(GtkWidget *widget, gpointer data)
+{
+ filebrowser_play(data);
+ gtk_file_chooser_unselect_all(data);
+}
+
+#if 0
+static void
+filebrowser_on_response(GtkFileChooser * browser,
+ gint response,
+ gpointer data)
+{
+ gtk_widget_hide(GTK_WIDGET(browser));
+ switch (response) {
+ case GTK_RESPONSE_OK:
+ break;
+ case GTK_RESPONSE_ACCEPT:
+ break;
+ case GTK_RESPONSE_CLOSE:
+ break;
+ }
+ gtk_widget_destroy(GTK_WIDGET(browser));
+
+}
+
+#endif
+
+static void
+_filebrowser_check_hide_add(GtkWidget * widget,
+ gpointer data)
+{
+ cfg.close_dialog_add = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+}
+
+static void
+_filebrowser_check_hide_open(GtkWidget * widget,
+ gpointer data)
+{
+ cfg.close_dialog_open = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+}
+
+
+
+static gboolean
+filebrowser_on_keypress(GtkWidget * browser,
+ GdkEventKey * event,
+ gpointer data)
+{
+ if (event->keyval == GDK_Escape) {
+ /* FIXME: this crashes BMP for some reason */
+ /* g_signal_emit_by_name(browser, "delete-event"); */
+ gtk_widget_hide(browser);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+_filebrowser_do_hide_add(GtkWidget *widget,
+ gpointer data)
+{
+ if (cfg.close_dialog_add)
+ gtk_widget_hide(data);
+}
+
+static void
+_filebrowser_do_hide_open(GtkWidget *widget,
+ gpointer data)
+{
+ if (cfg.close_dialog_open)
+ gtk_widget_hide(data);
+}
+
+void
+util_run_filebrowser(gboolean play_button)
+{
+/*
+ static GladeXML *xml = NULL;
+ static GtkWidget *dialog = NULL;
+ static GtkWidget *chooser = NULL;
+
+ static GtkWidget *button_add;
+ static GtkWidget *button_select_all, *button_deselect_all;
+ static GtkWidget *toggle;
+
+ static gulong handlerid, handlerid_check, handlerid_do;
+ static gulong handlerid_activate, handlerid_do_activate;
+*/
+ // if (!xml) {
+ /* FIXME: Creating a file chooser dialog manually using
+ libglade because there's no way to stop
+ GtkFileChooserDialog from resizing the buttons to the same
+ size. The long toggle button title causes the buttons to
+ turn unnecessarily elongated and fugly. */
+/*
+ GtkWidget *alignment;
+
+ xml = glade_xml_new_or_die(_("Add/Open Files dialog"),
+ DATA_DIR "/glade/addfiles.glade",
+ NULL, NULL);
+ glade_xml_signal_autoconnect(xml);
+
+ dialog = glade_xml_get_widget(xml, "add_files_dialog");
+*/
+ /* FIXME: Creating file chooser widget here because libglade <= 2.4.0 does
+ not support GtkFileChooserWidget */
+/*
+ chooser = gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_OPEN);
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(chooser), TRUE);
+
+#ifdef HAVE_GNOME_VFS
+ gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(chooser), FALSE);
+#endif
+
+ if (cfg.filesel_path)
+#ifdef HAVE_GNOME_VFS
+ gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(chooser),
+ cfg.filesel_path);
+#else
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser),
+ cfg.filesel_path);
+#endif
+
+ alignment = glade_xml_get_widget(xml, "alignment2");
+ gtk_container_add(GTK_CONTAINER(alignment), chooser);
+
+ toggle = glade_xml_get_widget(xml, "close_on_action");
+ button_select_all = glade_xml_get_widget(xml, "select_all");
+ button_deselect_all = glade_xml_get_widget(xml, "deselect_all");
+ button_add = glade_xml_get_widget(xml, "action");
+
+ g_signal_connect_swapped(button_select_all, "clicked",
+ G_CALLBACK(gtk_file_chooser_select_all),
+ chooser);
+ g_signal_connect_swapped(button_deselect_all, "clicked",
+ G_CALLBACK(gtk_file_chooser_unselect_all),
+ chooser);
+
+ g_signal_connect(dialog, "key_press_event",
+ G_CALLBACK(filebrowser_on_keypress),
+ NULL);
+
+ gtk_widget_show_all(dialog);
+ }
+*/
+ /* !xml */
+/* else {
+ g_signal_handler_disconnect(button_add, handlerid);
+ g_signal_handler_disconnect(toggle, handlerid_check);
+ g_signal_handler_disconnect(chooser, handlerid_activate);
+ g_signal_handler_disconnect(button_add, handlerid_do);
+ g_signal_handler_disconnect(chooser, handlerid_do_activate);
+ }
+
+ if (play_button) {
+ cfg.close_dialog_open = TRUE;
+
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Open Files"));
+
+ gtk_button_set_label(GTK_BUTTON(button_add), GTK_STOCK_OPEN);
+
+ gtk_button_set_label(GTK_BUTTON(toggle), _("Close dialog on Open"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), cfg.close_dialog_open);
+
+ handlerid = g_signal_connect(button_add, "clicked", G_CALLBACK(_filebrowser_play), chooser);
+ handlerid_check = g_signal_connect(toggle, "toggled", G_CALLBACK(_filebrowser_check_hide_open), NULL);
+ handlerid_do = g_signal_connect_after(button_add, "clicked", G_CALLBACK(_filebrowser_do_hide_open), dialog);
+ handlerid_activate = g_signal_connect(chooser, "file-activated", G_CALLBACK(_filebrowser_play), chooser);
+ handlerid_do_activate = g_signal_connect_after(chooser,"file_activated", G_CALLBACK(_filebrowser_do_hide_open), dialog);
+ }
+ else {
+ cfg.close_dialog_add = TRUE;
+
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Add Files"));
+
+ gtk_button_set_label(GTK_BUTTON(button_add), GTK_STOCK_ADD);
+
+ gtk_button_set_label(GTK_BUTTON(toggle), _("Close dialog on Add"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), cfg.close_dialog_add);
+
+ handlerid = g_signal_connect(button_add, "clicked", G_CALLBACK(_filebrowser_add), chooser);
+ handlerid_check = g_signal_connect(toggle, "toggled", G_CALLBACK(_filebrowser_check_hide_add), NULL);
+ handlerid_do = g_signal_connect_after(button_add, "clicked", G_CALLBACK(_filebrowser_do_hide_add), dialog);
+ handlerid_activate = g_signal_connect(chooser, "file-activated", G_CALLBACK(_filebrowser_add), chooser);
+ handlerid_do_activate = g_signal_connect_after(chooser,"file_activated", G_CALLBACK(_filebrowser_do_hide_add), dialog);
+ }
+
+ gtk_window_present(GTK_WINDOW(dialog));
+*/
+}
+
+GdkFont *
+util_font_load(const gchar * name)
+{
+ GdkFont *font;
+ PangoFontDescription *desc;
+
+ desc = pango_font_description_from_string(name);
+ font = gdk_font_from_description(desc);
+
+ return font;
+}
+
+#ifdef ENABLE_NLS
+gchar *
+bmp_menu_translate(const gchar * path, gpointer func_data)
+{
+ gchar *translation = gettext(path);
+
+ if (!translation || *translation != '/') {
+ g_warning("Bad translation for menupath: %s", path);
+ translation = (gchar *) path;
+ }
+
+ return translation;
+}
+#endif
+
+void
+util_set_cursor(GtkWidget * window)
+{
+ static GdkCursor *cursor = NULL;
+
+ if (!window) {
+ if (cursor) {
+ gdk_cursor_destroy(cursor);
+ cursor = NULL;
+ }
+ return;
+ }
+
+ if (!cursor)
+ cursor = gdk_cursor_new(GDK_LEFT_PTR);
+
+ gdk_window_set_cursor(window->window, cursor);
+}
+
+/* text_get_extents() taken from The GIMP (C) Spencer Kimball, Peter
+ * Mattis et al */
+gboolean
+text_get_extents(const gchar * fontname,
+ const gchar * text,
+ gint * width, gint * height, gint * ascent, gint * descent)
+{
+ PangoFontDescription *font_desc;
+ PangoLayout *layout;
+ PangoRectangle rect;
+
+ g_return_val_if_fail(fontname != NULL, FALSE);
+ g_return_val_if_fail(text != NULL, FALSE);
+
+ /* FIXME: resolution */
+ layout = gtk_widget_create_pango_layout(GTK_WIDGET(mainwin), text);
+
+ font_desc = pango_font_description_from_string(fontname);
+ pango_layout_set_font_description(layout, font_desc);
+ pango_font_description_free(font_desc);
+ pango_layout_get_pixel_extents(layout, NULL, &rect);
+
+ if (width)
+ *width = rect.width;
+ if (height)
+ *height = rect.height;
+
+ if (ascent || descent) {
+ PangoLayoutIter *iter;
+ PangoLayoutLine *line;
+
+ iter = pango_layout_get_iter(layout);
+ line = pango_layout_iter_get_line(iter);
+ pango_layout_iter_free(iter);
+
+ pango_layout_line_get_pixel_extents(line, NULL, &rect);
+
+ if (ascent)
+ *ascent = PANGO_ASCENT(rect);
+ if (descent)
+ *descent = -PANGO_DESCENT(rect);
+ }
+
+ g_object_unref(layout);
+
+ return TRUE;
+}
+
+/* counts number of digits in a gint */
+guint
+gint_count_digits(gint n)
+{
+ guint count = 0;
+
+ n = ABS(n);
+ do {
+ count++;
+ n /= 10;
+ } while (n > 0);
+
+ return count;
+}
+
+static gchar *
+str_twenty_to_space(gchar * str)
+{
+ gchar *match, *match_end;
+
+ g_return_val_if_fail(str != NULL, NULL);
+
+ while ((match = strstr(str, "%20"))) {
+ match_end = match + 3;
+ *match++ = ' ';
+ while (*match_end)
+ *match++ = *match_end++;
+ *match = 0;
+ }
+
+ return str;
+}
+
+static gchar *
+str_replace_char(gchar * str, gchar old, gchar new)
+{
+ gchar *match;
+
+ g_return_val_if_fail(str != NULL, NULL);
+
+ match = str;
+ while ((match = strchr(match, old)))
+ *match = new;
+
+ return str;
+}
+
+gchar *
+str_append(gchar * str, const gchar * add_str)
+{
+ return str_replace(str, g_strconcat(str, add_str, NULL));
+}
+
+gchar *
+str_replace(gchar * str, gchar * new_str)
+{
+ g_free(str);
+ return new_str;
+}
+
+void
+str_replace_in(gchar ** str, gchar * new_str)
+{
+ *str = str_replace(*str, new_str);
+}
+
+
+gboolean
+str_has_prefix_nocase(const gchar * str, const gchar * prefix)
+{
+ return (strncasecmp(str, prefix, strlen(prefix)) == 0);
+}
+
+gboolean
+str_has_suffix_nocase(const gchar * str, const gchar * suffix)
+{
+ return (strcasecmp(str + strlen(str) - strlen(suffix), suffix) == 0);
+}
+
+gboolean
+str_has_suffixes_nocase(const gchar * str, gchar * const *suffixes)
+{
+ gchar *const *suffix;
+
+ g_return_val_if_fail(str != NULL, FALSE);
+ g_return_val_if_fail(suffixes != NULL, FALSE);
+
+ for (suffix = suffixes; *suffix; suffix++)
+ if (str_has_suffix_nocase(str, *suffix))
+ return TRUE;
+
+ return FALSE;
+}
+
+gchar *
+str_to_utf8_fallback(const gchar * str)
+{
+ gchar *out_str, *convert_str, *chr;
+
+ /* NULL in NULL out */
+ if (!str)
+ return NULL;
+
+ convert_str = g_strdup(str);
+ for (chr = convert_str; *chr; chr++) {
+ if (*chr & 0x80)
+ *chr = '?';
+ }
+
+ out_str = g_strconcat(convert_str, _(" (invalid UTF-8)"), NULL);
+ g_free(convert_str);
+
+ return out_str;
+}
+
+gchar *
+filename_to_utf8(const gchar * filename)
+{
+ gchar *out_str;
+
+ /* NULL in NULL out */
+ if (!filename)
+ return NULL;
+
+ if ((out_str = g_filename_to_utf8(filename, -1, NULL, NULL, NULL)))
+ return out_str;
+
+ return str_to_utf8_fallback(filename);
+}
+
+gchar *
+str_to_utf8(const gchar * str)
+{
+ gchar *out_str;
+
+ /* NULL in NULL out */
+ if (!str)
+ return NULL;
+
+ /* already UTF-8? */
+ if (g_utf8_validate(str, -1, NULL))
+ return g_strdup(str);
+
+ /* assume encoding associated with locale */
+ if ((out_str = g_locale_to_utf8(str, -1, NULL, NULL, NULL)))
+ return out_str;
+
+ /* all else fails, we mask off character codes >= 128,
+ replace with '?' */
+ return str_to_utf8_fallback(str);
+}
+
+
+const gchar *
+str_skip_chars(const gchar * str, const gchar * chars)
+{
+ while (strchr(chars, *str))
+ str++;
+ return str;
+}
+
+gchar *
+convert_title_text(gchar * title)
+{
+ g_return_val_if_fail(title != NULL, NULL);
+
+ if (cfg.convert_underscore)
+ str_replace_char(title, '_', ' ');
+
+ if (cfg.convert_twenty)
+ str_twenty_to_space(title);
+
+ return title;
+}
+
+
+gboolean
+dir_foreach(const gchar * path, DirForeachFunc function,
+ gpointer user_data, GError ** error)
+{
+ GError *error_out = NULL;
+ GDir *dir;
+ const gchar *entry;
+ gchar *entry_fullpath;
+
+ if (!(dir = g_dir_open(path, 0, &error_out))) {
+ g_propagate_error(error, error_out);
+ return FALSE;
+ }
+
+ while ((entry = g_dir_read_name(dir))) {
+ entry_fullpath = g_build_filename(path, entry, NULL);
+
+ if ((*function) (entry_fullpath, entry, user_data)) {
+ g_free(entry_fullpath);
+ break;
+ }
+
+ g_free(entry_fullpath);
+ }
+
+ g_dir_close(dir);
+
+ return TRUE;
+}
+
+GtkWidget *
+make_filebrowser(const gchar * title,
+ gboolean save)
+{
+ GtkWidget *dialog;
+ GtkWidget *button;
+ GtkWidget *button_close;
+
+ g_return_val_if_fail(title != NULL, NULL);
+
+ dialog = gtk_file_chooser_dialog_new(title, GTK_WINDOW(mainwin),
+ GTK_FILE_CHOOSER_ACTION_OPEN, NULL);
+ if (save)
+ gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog),
+ GTK_FILE_CHOOSER_ACTION_SAVE);
+
+ if (!save)
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
+
+ g_signal_connect(dialog, "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &dialog);
+
+#ifdef HAVE_GNOME_VFS
+ gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), FALSE);
+#endif
+
+ button_close = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT);
+ gtk_button_set_use_stock(GTK_BUTTON(button_close), TRUE);
+ GTK_WIDGET_SET_FLAGS(button_close, GTK_CAN_DEFAULT);
+ g_signal_connect_swapped(button_close, "clicked",
+ G_CALLBACK(gtk_widget_destroy), dialog);
+
+ button = gtk_dialog_add_button(GTK_DIALOG(dialog), save ?
+ GTK_STOCK_SAVE : GTK_STOCK_OPEN,
+ GTK_RESPONSE_ACCEPT);
+ gtk_button_set_use_stock(GTK_BUTTON(button), TRUE);
+ GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_window_set_default(GTK_WINDOW(dialog), button);
+
+ gtk_widget_show(dialog);
+
+ return dialog;
+}
+
+
+GtkItemFactory *
+create_menu(GtkItemFactoryEntry *entries,
+ guint n_entries,
+ GtkAccelGroup *accel)
+{
+ GtkItemFactory *menu;
+
+ menu = gtk_item_factory_new(GTK_TYPE_MENU, "<Main>", accel);
+ gtk_item_factory_set_translate_func(menu, bmp_menu_translate, NULL,
+ NULL);
+ gtk_item_factory_create_items(menu, n_entries, entries, NULL);
+
+ return menu;
+}
+
+
+void
+make_submenu(GtkItemFactory *menu,
+ const gchar *item_path,
+ GtkItemFactory *submenu)
+{
+ GtkWidget *item, *menu_;
+
+ item = gtk_item_factory_get_widget(menu, item_path);
+ menu_ = gtk_item_factory_get_widget(submenu, "");
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu_);
+}
+
+
+
+
+
+
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/util.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,129 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+
+#define NO_PLAY_BUTTON FALSE
+#define PLAY_BUTTON TRUE
+
+#define SWAP(a, b) { a^=b; b^=a; a^=b; }
+
+
+typedef gboolean(*DirForeachFunc) (const gchar * path,
+ const gchar * basename,
+ gpointer user_data);
+
+
+gchar *escape_shell_chars(const gchar * string);
+
+gchar *find_file_recursively(const gchar * dirname, const gchar * file);
+void del_directory(const gchar * dirname);
+gboolean dir_foreach(const gchar * path, DirForeachFunc function,
+ gpointer user_data, GError ** error);
+
+gchar *read_ini_string(const gchar * filename, const gchar * section,
+ const gchar * key);
+GArray *read_ini_array(const gchar * filename, const gchar * section,
+ const gchar * key);
+
+GArray *string_to_garray(const gchar * str);
+
+void glist_movedown(GList * list);
+void glist_moveup(GList * list);
+
+void util_item_factory_popup(GtkItemFactory * ifactory, guint x, guint y,
+ guint mouse_button, guint32 time);
+void util_item_factory_popup_with_data(GtkItemFactory * ifactory,
+ gpointer data,
+ GtkDestroyNotify destroy, guint x,
+ guint y, guint mouse_button,
+ guint32 time);
+GtkWidget *util_add_url_dialog_new(const gchar * caption,
+ GCallback enqueue_func);
+void util_menu_position(GtkMenu * menu, gint * x, gint * y,
+ gboolean * push_in, gpointer data);
+
+void util_run_filebrowser(gboolean clear_pl_on_ok);
+gboolean util_filechooser_is_dir(GtkFileChooser * filesel);
+
+GdkFont *util_font_load(const gchar * name);
+void util_set_cursor(GtkWidget * window);
+gboolean text_get_extents(const gchar * fontname, const gchar * text,
+ gint * width, gint * height, gint * ascent,
+ gint * descent);
+
+gboolean file_is_archive(const gchar * filename);
+gchar *archive_decompress(const gchar * path);
+gchar *archive_basename(const gchar * path);
+
+guint gint_count_digits(gint n);
+
+gchar *convert_title_text(gchar * text);
+
+gchar *str_append(gchar * str, const gchar * add_str);
+gchar *str_replace(gchar * str, gchar * new_str);
+void str_replace_in(gchar ** str, gchar * new_str);
+
+gboolean str_has_prefix_nocase(const gchar * str, const gchar * prefix);
+gboolean str_has_suffix_nocase(const gchar * str, const gchar * suffix);
+gboolean str_has_suffixes_nocase(const gchar * str, gchar * const *suffixes);
+const gchar *str_skip_chars(const gchar * str, const gchar * chars);
+
+gchar *filename_to_utf8(const gchar * filename);
+gchar *str_to_utf8(const gchar * str);
+gchar *str_to_utf8_fallback(const gchar * str);
+
+#if ENABLE_NLS
+gchar *bmp_menu_translate(const gchar * path, gpointer func_data);
+#else
+# define bmp_menu_translate NULL
+#endif
+
+GtkItemFactory *create_menu(GtkItemFactoryEntry *entries,
+ guint n_entries,
+ GtkAccelGroup *accel);
+
+void make_submenu(GtkItemFactory *menu,
+ const gchar *item_path,
+ GtkItemFactory *submenu);
+
+GtkWidget *make_filebrowser(const gchar * title,
+ gboolean save);
+
+/* Not sure this should be here? */
+char *mkdtemp(char *path);
+
+typedef struct {
+ gint x;
+ gint y;
+} MenuPos;
+
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,302 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "vis.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <string.h>
+
+#include "main.h"
+#include "mainwin.h"
+#include "skin.h"
+#include "widget.h"
+
+static const gfloat vis_afalloff_speeds[] = { 0.34, 0.5, 1.0, 1.3, 1.6 };
+static const gfloat vis_pfalloff_speeds[] = { 1.2, 1.3, 1.4, 1.5, 1.6 };
+static const gint vis_redraw_delays[] = { 1, 2, 4, 8 };
+static const guint8 vis_scope_colors[] =
+ { 21, 21, 20, 20, 19, 19, 18, 19, 19, 20, 20, 21, 21 };
+
+void
+vis_timeout_func(Vis * vis, guchar * data)
+{
+ static GTimer *timer = NULL;
+ gulong micros = 9999999;
+ gboolean falloff = FALSE;
+ gint i;
+
+ if (!timer) {
+ timer = g_timer_new();
+ g_timer_start(timer);
+ }
+ else {
+ g_timer_elapsed(timer, µs);
+ if (micros > 14000)
+ g_timer_reset(timer);
+
+ }
+
+ if (cfg.vis_type == VIS_ANALYZER) {
+ if (micros > 14000)
+ falloff = TRUE;
+ if (data || falloff) {
+ for (i = 0; i < 75; i++) {
+ if (data && data[i] > vis->vs_data[i]) {
+ vis->vs_data[i] = data[i];
+ if (vis->vs_data[i] > vis->vs_peak[i]) {
+ vis->vs_peak[i] = vis->vs_data[i];
+ vis->vs_peak_speed[i] = 0.01;
+
+ }
+ else if (vis->vs_peak[i] > 0.0) {
+ vis->vs_peak[i] -= vis->vs_peak_speed[i];
+ vis->vs_peak_speed[i] *=
+ vis_pfalloff_speeds[cfg.peaks_falloff];
+ if (vis->vs_peak[i] < vis->vs_data[i])
+ vis->vs_peak[i] = vis->vs_data[i];
+ if (vis->vs_peak[i] < 0.0)
+ vis->vs_peak[i] = 0.0;
+ }
+ }
+ else if (falloff) {
+ if (vis->vs_data[i] > 0.0) {
+ vis->vs_data[i] -=
+ vis_afalloff_speeds[cfg.analyzer_falloff];
+ if (vis->vs_data[i] < 0.0)
+ vis->vs_data[i] = 0.0;
+ }
+ if (vis->vs_peak[i] > 0.0) {
+ vis->vs_peak[i] -= vis->vs_peak_speed[i];
+ vis->vs_peak_speed[i] *=
+ vis_pfalloff_speeds[cfg.peaks_falloff];
+ if (vis->vs_peak[i] < vis->vs_data[i])
+ vis->vs_peak[i] = vis->vs_data[i];
+ if (vis->vs_peak[i] < 0.0)
+ vis->vs_peak[i] = 0.0;
+ }
+ }
+ }
+ }
+ }
+ else if (data) {
+ for (i = 0; i < 75; i++)
+ vis->vs_data[i] = data[i];
+ }
+
+ if (micros > 14000) {
+ if (!vis->vs_refresh_delay) {
+ vis_draw((Widget *) vis);
+ vis->vs_refresh_delay = vis_redraw_delays[cfg.vis_refresh];
+
+ }
+ vis->vs_refresh_delay--;
+ }
+}
+
+void
+vis_draw(Widget * w)
+{
+ Vis *vis = (Vis *) w;
+ gint x, y, h = 0, h2;
+ guchar vis_color[24][3];
+ guchar rgb_data[152 * 32], *ptr, c;
+ guint32 colors[24];
+ GdkRgbCmap *cmap;
+
+ //added by lijiang
+ gint pos = 1;
+
+ if (!vis->vs_widget.visible)
+ return;
+
+ skin_get_viscolor(bmp_active_skin, vis_color);
+ for (y = 0; y < 24; y++) {
+ colors[y] =
+ vis_color[y][0] << 16 | vis_color[y][1] << 8 | vis_color[y][2];
+ }
+ cmap = gdk_rgb_cmap_new(colors, 24);
+
+ memset(rgb_data, 0, 76 * 16);
+ for (y = 1; y < 16; y += 2) {
+ ptr = rgb_data + (y * 76);
+ for (x = 0; x < 76; x += 2, ptr += 2)
+ *ptr = 1;
+ }
+ if (cfg.vis_type == VIS_ANALYZER) {
+ for (x = 0; x < 75; x++) {
+ //if (cfg.analyzer_type == ANALYZER_BARS && (x % 4) == 0)
+ if (cfg.analyzer_type == ANALYZER_BARS && (x % 6) == 0)
+ {
+ h = vis->vs_data[x >> 2];
+ if(pos < 13)
+ {
+ openmoko_update_vis_data(pos, h);
+ pos++;
+ }
+
+// g_print("bar: h = %d\n", h);
+ }
+ else if (cfg.analyzer_type == ANALYZER_LINES)
+ h = vis->vs_data[x];
+
+ if (h && (cfg.analyzer_type == ANALYZER_LINES ||
+ (x % 4) != 3)) {
+ ptr = rgb_data + ((16 - h) * 76) + x;
+ switch (cfg.analyzer_mode) {
+ case ANALYZER_NORMAL:
+ for (y = 0; y < h; y++, ptr += 76)
+ *ptr = 18 - h + y;
+ break;
+ case ANALYZER_FIRE:
+ for (y = 0; y < h; y++, ptr += 76)
+ *ptr = y + 2;
+ break;
+ case ANALYZER_VLINES:
+ for (y = 0; y < h; y++, ptr += 76)
+ *ptr = 18 - h;
+ break;
+ }
+ }
+ }
+ if (cfg.analyzer_peaks) {
+ for (x = 0; x < 75; x++) {
+ if (cfg.analyzer_type == ANALYZER_BARS && (x % 4) == 0)
+ h = vis->vs_peak[x >> 2];
+ else if (cfg.analyzer_type == ANALYZER_LINES)
+ h = vis->vs_peak[x];
+ if (h
+ && (cfg.analyzer_type == ANALYZER_LINES
+ || (x % 4) != 3))
+ rgb_data[(16 - h) * 76 + x] = 23;
+ }
+ }
+ }
+ else if (cfg.vis_type == VIS_SCOPE) {
+ for (x = 0; x < 75; x++) {
+ switch (cfg.scope_mode) {
+ case SCOPE_DOT:
+ h = vis->vs_data[x];
+ ptr = rgb_data + ((15 - h) * 76) + x;
+ *ptr = vis_scope_colors[h];
+ break;
+ case SCOPE_LINE:
+ if (x != 74) {
+ h = 15 - vis->vs_data[x];
+ h2 = 15 - vis->vs_data[x + 1];
+ if (h > h2) {
+ y = h;
+ h = h2;
+ h2 = y;
+ }
+ ptr = rgb_data + (h * 76) + x;
+ for (y = h; y <= h2; y++, ptr += 76)
+ *ptr = vis_scope_colors[y - 3];
+
+ }
+ else {
+ h = 15 - vis->vs_data[x];
+ ptr = rgb_data + (h * 76) + x;
+ *ptr = vis_scope_colors[h];
+ }
+ break;
+ case SCOPE_SOLID:
+ h = 15 - vis->vs_data[x];
+ h2 = 9;
+ c = vis_scope_colors[(gint) vis->vs_data[x]];
+ if (h > h2) {
+ y = h;
+ h = h2;
+ h2 = y;
+ }
+ ptr = rgb_data + (h * 76) + x;
+ for (y = h; y <= h2; y++, ptr += 76)
+ *ptr = c;
+ break;
+ }
+ }
+ }
+
+ /* FIXME: The check "shouldn't" be neccessary? */
+ /* if (GTK_IS_WINDOW(vis->vs_window)) { */
+ GDK_THREADS_ENTER();
+ gdk_draw_indexed_image(vis->vs_window, vis->vs_widget.gc,
+ vis->vs_widget.x, vis->vs_widget.y,
+ vis->vs_widget.width, vis->vs_widget.height,
+ GDK_RGB_DITHER_NORMAL, (guchar *) rgb_data,
+ 76, cmap);
+ GDK_THREADS_LEAVE();
+ /* } else {
+ vis->vs_window = mainwin->window;
+ GDK_THREADS_ENTER();
+ gdk_draw_indexed_image(vis->vs_window, vis->vs_widget.gc,
+ vis->vs_widget.x, vis->vs_widget.y,
+ vis->vs_widget.width, vis->vs_widget.height,
+ GDK_RGB_DITHER_NORMAL, (guchar *) rgb_data,
+ 76, cmap);
+ GDK_THREADS_LEAVE();
+ }
+ */
+ gdk_rgb_cmap_free(cmap);
+}
+
+void
+vis_clear_data(Vis * vis)
+{
+ gint i;
+
+ for (i = 0; i < 75; i++) {
+ vis->vs_data[i] = (cfg.vis_type == VIS_SCOPE) ? 6 : 0;
+ vis->vs_peak[i] = 0;
+ }
+}
+
+void
+vis_clear(Vis * vis)
+{
+ gdk_window_clear_area(vis->vs_window, vis->vs_widget.x,
+ vis->vs_widget.y, vis->vs_widget.width,
+ vis->vs_widget.height);
+}
+
+void
+vis_set_window(Vis * vis, GdkWindow * window)
+{
+ vis->vs_window = window;
+}
+
+Vis *
+create_vis(GList ** wlist,
+ GdkPixmap * parent,
+ GdkWindow * window,
+ GdkGC * gc,
+ gint x, gint y,
+ gint width)
+{
+ Vis *vis;
+
+ vis = g_new0(Vis, 1);
+
+ widget_init(&vis->vs_widget, parent, gc, x, y, width, 16, 1);
+ widget_list_add(wlist, WIDGET(vis));
+
+ return vis;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/vis.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,77 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef VIS_H
+#define VIS_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "widget.h"
+
+typedef enum {
+ VIS_ANALYZER, VIS_SCOPE, VIS_OFF
+} VisType;
+
+typedef enum {
+ ANALYZER_NORMAL, ANALYZER_FIRE, ANALYZER_VLINES
+} AnalyzerMode;
+
+typedef enum {
+ ANALYZER_LINES, ANALYZER_BARS
+} AnalyzerType;
+
+typedef enum {
+ SCOPE_DOT, SCOPE_LINE, SCOPE_SOLID
+} ScopeMode;
+
+typedef enum {
+ VU_NORMAL, VU_SMOOTH
+} VUMode;
+
+typedef enum {
+ REFRESH_FULL, REFRESH_HALF, REFRESH_QUARTER, REFRESH_EIGTH
+} RefreshRate;
+
+typedef enum {
+ FALLOFF_SLOWEST, FALLOFF_SLOW, FALLOFF_MEDIUM, FALLOFF_FAST,
+ FALLOFF_FASTEST
+} FalloffSpeed;
+
+#define VIS(x) ((Vis *)(x))
+struct _Vis {
+ Widget vs_widget;
+ GdkWindow *vs_window;
+ gfloat vs_data[75], vs_peak[75], vs_peak_speed[75];
+ gint vs_refresh_delay;
+};
+
+typedef struct _Vis Vis;
+
+void vis_draw(Widget * w);
+
+Vis *create_vis(GList ** wlist, GdkPixmap * parent, GdkWindow * window,
+ GdkGC * gc, gint x, gint y, gint width);
+void vis_timeout_func(Vis * vis, guchar * data);
+void vis_clear_data(Vis * vis);
+void vis_clear(Vis * vis);
+void vis_set_window(Vis * vis, GdkWindow * window);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,443 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "visualization.h"
+
+#include <glib.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "fft.h"
+#include "input.h"
+#include "main.h"
+#include "playback.h"
+#include "plugin.h"
+#include "prefswin.h"
+#include "svis.h"
+#include "vis.h"
+#include "widget.h"
+
+VisPluginData vp_data = {
+ NULL,
+ NULL,
+ FALSE
+};
+
+GList *
+get_vis_list(void)
+{
+ return vp_data.vis_list;
+}
+
+GList *
+get_vis_enabled_list(void)
+{
+ return vp_data.enabled_list;
+}
+
+void
+vis_disable_plugin(VisPlugin * vp)
+{
+ gint i = g_list_index(vp_data.vis_list, vp);
+ enable_vis_plugin(i, FALSE);
+}
+
+void
+vis_about(gint i)
+{
+ GList *node = g_list_nth(vp_data.vis_list, i);
+
+ if (node && node->data && VIS_PLUGIN(node->data)->about)
+ VIS_PLUGIN(node->data)->about();
+}
+
+void
+vis_configure(gint i)
+{
+ GList *node = g_list_nth(vp_data.vis_list, i);
+
+ if (node && node->data && VIS_PLUGIN(node->data)->configure)
+ VIS_PLUGIN(node->data)->configure();
+}
+
+void
+vis_playback_start(void)
+{
+ GList *node;
+ VisPlugin *vp;
+
+ if (vp_data.playback_started)
+ return;
+
+ for (node = vp_data.enabled_list; node; node = g_list_next(node)) {
+ vp = node->data;
+ if (vp->playback_start)
+ vp->playback_start();
+ }
+ vp_data.playback_started = TRUE;
+}
+
+void
+vis_playback_stop(void)
+{
+ GList *node = vp_data.enabled_list;
+ VisPlugin *vp;
+
+ if (!vp_data.playback_started)
+ return;
+
+ for (node = vp_data.enabled_list; node; node = g_list_next(node)) {
+ vp = node->data;
+ if (vp->playback_stop)
+ vp->playback_stop();
+ }
+ vp_data.playback_started = FALSE;
+}
+
+void
+enable_vis_plugin(gint i, gboolean enable)
+{
+ GList *node = g_list_nth(vp_data.vis_list, i);
+ VisPlugin *vp;
+
+ if (!node || !(node->data))
+ return;
+ vp = node->data;
+
+ if (enable && !g_list_find(vp_data.enabled_list, vp)) {
+ vp_data.enabled_list = g_list_append(vp_data.enabled_list, vp);
+ if (vp->init)
+ vp->init();
+ if (bmp_playback_get_playing() && vp->playback_start)
+ vp->playback_start();
+ }
+ else if (!enable && g_list_find(vp_data.enabled_list, vp)) {
+ vp_data.enabled_list = g_list_remove(vp_data.enabled_list, vp);
+ if (bmp_playback_get_playing() && vp->playback_stop)
+ vp->playback_stop();
+ if (vp->cleanup)
+ vp->cleanup();
+ }
+}
+
+gboolean
+vis_enabled(gint i)
+{
+ return (g_list_find
+ (vp_data.enabled_list,
+ g_list_nth(vp_data.vis_list, i)->data) != NULL);
+}
+
+gchar *
+vis_stringify_enabled_list(void)
+{
+ gchar *enalist = NULL, *tmp, *tmp2;
+ GList *node = vp_data.enabled_list;
+
+ if (g_list_length(node)) {
+ enalist = g_path_get_basename(VIS_PLUGIN(node->data)->filename);
+ for (node = g_list_next(node); node != NULL; node = g_list_next(node)) {
+ tmp = enalist;
+ tmp2 = g_path_get_basename(VIS_PLUGIN(node->data)->filename);
+ enalist = g_strconcat(tmp, ",", tmp2, NULL);
+ g_free(tmp);
+ g_free(tmp2);
+ }
+ }
+ return enalist;
+}
+
+void
+vis_enable_from_stringified_list(gchar * list)
+{
+ gchar **plugins, *base;
+ GList *node;
+ gint i;
+ VisPlugin *vp;
+
+ if (!list || !strcmp(list, ""))
+ return;
+ plugins = g_strsplit(list, ",", 0);
+ for (i = 0; plugins[i]; i++) {
+ for (node = vp_data.vis_list; node != NULL; node = g_list_next(node)) {
+ base = g_path_get_basename(VIS_PLUGIN(node->data)->filename);
+ if (!strcmp(plugins[i], base)) {
+ vp = node->data;
+ vp_data.enabled_list =
+ g_list_append(vp_data.enabled_list, vp);
+ if (vp->init)
+ vp->init();
+ if (bmp_playback_get_playing() && vp->playback_start)
+ vp->playback_start();
+ }
+ g_free(base);
+ }
+ }
+ g_strfreev(plugins);
+}
+
+static void
+calc_stereo_pcm(gint16 dest[2][512], gint16 src[2][512], gint nch)
+{
+ memcpy(dest[0], src[0], 512 * sizeof(gint16));
+ if (nch == 1)
+ memcpy(dest[1], src[0], 512 * sizeof(gint16));
+ else
+ memcpy(dest[1], src[1], 512 * sizeof(gint16));
+}
+
+static void
+calc_mono_pcm(gint16 dest[2][512], gint16 src[2][512], gint nch)
+{
+ gint i;
+ gint16 *d, *sl, *sr;
+
+ if (nch == 1)
+ memcpy(dest[0], src[0], 512 * sizeof(gint16));
+ else {
+ d = dest[0];
+ sl = src[0];
+ sr = src[1];
+ for (i = 0; i < 512; i++) {
+ *(d++) = (*(sl++) + *(sr++)) >> 1;
+ }
+ }
+}
+
+static void
+calc_freq(gint16 * dest, gint16 * src)
+{
+ static fft_state *state = NULL;
+ gfloat tmp_out[257];
+ gint i;
+
+ if (!state)
+ state = fft_init();
+
+ fft_perform(src, tmp_out, state);
+
+ for (i = 0; i < 256; i++)
+ dest[i] = ((gint) sqrt(tmp_out[i + 1])) >> 8;
+}
+
+static void
+calc_mono_freq(gint16 dest[2][256], gint16 src[2][512], gint nch)
+{
+ gint i;
+ gint16 *d, *sl, *sr, tmp[512];
+
+ if (nch == 1)
+ calc_freq(dest[0], src[0]);
+ else {
+ d = tmp;
+ sl = src[0];
+ sr = src[1];
+ for (i = 0; i < 512; i++) {
+ *(d++) = (*(sl++) + *(sr++)) >> 1;
+ }
+ calc_freq(dest[0], tmp);
+ }
+}
+
+static void
+calc_stereo_freq(gint16 dest[2][256], gint16 src[2][512], gint nch)
+{
+ calc_freq(dest[0], src[0]);
+
+ if (nch == 2)
+ calc_freq(dest[1], src[1]);
+ else
+ memcpy(dest[1], dest[0], 256 * sizeof(gint16));
+}
+
+void
+vis_send_data(gint16 pcm_data[2][512], gint nch, gint length)
+{
+ GList *node = vp_data.enabled_list;
+ VisPlugin *vp;
+ gint16 mono_freq[2][256], stereo_freq[2][256];
+ gboolean mono_freq_calced = FALSE, stereo_freq_calced = FALSE;
+ gint16 mono_pcm[2][512], stereo_pcm[2][512];
+ gboolean mono_pcm_calced = FALSE, stereo_pcm_calced = FALSE;
+ guint8 intern_vis_data[512];
+ gint i;
+
+ if (!pcm_data || nch < 1) {
+ if (cfg.vis_type != VIS_OFF) {
+/*
+ if (cfg.player_shaded && cfg.player_visible)
+ svis_timeout_func(mainwin_svis, NULL);
+ else
+*/
+ vis_timeout_func(active_vis, NULL);
+ }
+ return;
+ }
+
+ while (node) {
+ vp = node->data;
+ if (vp->num_pcm_chs_wanted > 0 && vp->render_pcm) {
+ if (vp->num_pcm_chs_wanted == 1) {
+ if (!mono_pcm_calced) {
+ calc_mono_pcm(mono_pcm, pcm_data, nch);
+ mono_pcm_calced = TRUE;
+ }
+ vp->render_pcm(mono_pcm);
+ }
+ else {
+ if (!stereo_pcm_calced) {
+ calc_stereo_pcm(stereo_pcm, pcm_data, nch);
+ stereo_pcm_calced = TRUE;
+ }
+ vp->render_pcm(stereo_pcm);
+ }
+ }
+ if (vp->num_freq_chs_wanted > 0 && vp->render_freq) {
+ if (vp->num_freq_chs_wanted == 1) {
+ if (!mono_freq_calced) {
+ calc_mono_freq(mono_freq, pcm_data, nch);
+ mono_freq_calced = TRUE;
+ }
+ vp->render_freq(mono_freq);
+ }
+ else {
+ if (!stereo_freq_calced) {
+ calc_stereo_freq(stereo_freq, pcm_data, nch);
+ stereo_freq_calced = TRUE;
+ }
+ vp->render_freq(stereo_freq);
+ }
+ }
+ node = g_list_next(node);
+ }
+
+ if (cfg.vis_type == VIS_OFF)
+ return;
+
+ if (cfg.vis_type == VIS_ANALYZER) {
+ if (cfg.player_shaded && cfg.player_visible) {
+ /* VU */
+ gint vu, val;
+
+ if (!stereo_pcm_calced)
+ calc_stereo_pcm(stereo_pcm, pcm_data, nch);
+ vu = 0;
+ for (i = 0; i < 512; i++) {
+ val = abs(stereo_pcm[0][i]);
+ if (val > vu)
+ vu = val;
+ }
+ intern_vis_data[0] = (vu * 37) >> 15;
+ if (intern_vis_data[0] > 37)
+ intern_vis_data[0] = 37;
+ if (nch == 2) {
+ vu = 0;
+ for (i = 0; i < 512; i++) {
+ val = abs(stereo_pcm[1][i]);
+ if (val > vu)
+ vu = val;
+ }
+ intern_vis_data[1] = (vu * 37) >> 15;
+ if (intern_vis_data[1] > 37)
+ intern_vis_data[1] = 37;
+ }
+ else
+ intern_vis_data[1] = intern_vis_data[0];
+ }
+ else {
+ /* Spectrum analyzer */
+ /* 76 values */
+ const gint long_xscale[] =
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 61, 66, 71, 76, 81, 87, 93,
+ 100, 107,
+ 114, 122, 131, 140, 150, 161, 172, 184, 255
+ };
+ /* 20 values */
+ const int short_xscale[] =
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 15, 20, 27,
+ 36, 47, 62, 82, 107, 141, 184, 255
+ };
+ const double y_scale = 3.60673760222; /* 20.0 / log(256) */
+ const int *xscale;
+ gint j, y, max;
+
+ if (!mono_freq_calced)
+ calc_mono_freq(mono_freq, pcm_data, nch);
+
+ memset(intern_vis_data, 0, 75);
+
+ if (cfg.analyzer_type == ANALYZER_BARS) {
+ max = 19;
+ xscale = short_xscale;
+ }
+ else {
+ max = 75;
+ xscale = long_xscale;
+ }
+
+ for (i = 0; i < max; i++) {
+ for (j = xscale[i], y = 0; j < xscale[i + 1]; j++) {
+ if (mono_freq[0][j] > y)
+ y = mono_freq[0][j];
+ }
+ y >>= 7;
+ if (y != 0) {
+ intern_vis_data[i] = log(y) * y_scale;
+ if (intern_vis_data[i] > 15)
+ intern_vis_data[i] = 15;
+ }
+ else
+ intern_vis_data[i] = 0;
+ }
+ }
+ }
+ else { /* (cfg.vis_type == VIS_SCOPE) */
+
+ /* Osciloscope */
+ gint pos, step;
+
+ if (!mono_pcm_calced)
+ calc_mono_pcm(mono_pcm, pcm_data, nch);
+
+ step = (length << 8) / 74;
+ for (i = 0, pos = 0; i < 75; i++, pos += step) {
+ intern_vis_data[i] = ((mono_pcm[0][pos >> 8]) >> 11) + 6;
+ if (intern_vis_data[i] > 12)
+ intern_vis_data[i] = 12;
+ /* Do not see the point of that? (comparison always false) -larne.
+ if (intern_vis_data[i] < 0)
+ intern_vis_data[i] = 0; */
+ }
+ }
+/*
+ if (cfg.player_shaded && cfg.player_visible)
+ svis_timeout_func(mainwin_svis, intern_vis_data);
+ else
+*/
+ vis_timeout_func(active_vis, intern_vis_data);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/visualization.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,51 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef VISUALIZATION_H
+#define VISUALIZATION_H
+
+#include <glib.h>
+
+#include "plugin.h"
+
+typedef struct _VisPluginData VisPluginData;
+
+struct _VisPluginData {
+ GList *vis_list;
+ GList *enabled_list;
+ gboolean playback_started;
+};
+
+GList *get_vis_list(void);
+GList *get_vis_enabled_list(void);
+void enable_vis_plugin(gint i, gboolean enable);
+void vis_disable_plugin(VisPlugin * vp);
+void vis_about(gint i);
+void vis_configure(gint i);
+void vis_playback_start(void);
+void vis_playback_stop(void);
+gboolean vis_enabled(gint i);
+gchar *vis_stringify_enabled_list(void);
+void vis_enable_from_stringified_list(gchar * list);
+void vis_send_data(gint16 pcm_data[2][512], gint nch, gint length);
+
+extern VisPluginData vp_data;
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,242 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "widget.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "debug.h"
+
+
+void
+widget_init(Widget * widget, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint width, gint height, gint visible)
+{
+ widget->parent = parent;
+ widget->gc = gc;
+ widget_set_position(widget, x, y);
+ widget_set_size(widget, width, height);
+ widget->visible = visible;
+ widget->redraw = TRUE;
+ widget->mutex = g_mutex_new();
+}
+
+void
+widget_set_position(Widget * widget, gint x, gint y)
+{
+ widget->x = x;
+ widget->y = y;
+ widget_queue_redraw(widget);
+}
+
+void
+widget_set_size(Widget * widget, gint width, gint height)
+{
+ widget->width = width;
+ widget->height = height;
+ widget_queue_redraw(widget);
+}
+
+void
+widget_queue_redraw(Widget * widget)
+{
+ widget->redraw = TRUE;
+}
+
+gboolean
+widget_contains(Widget * widget, gint x, gint y)
+{
+ return (widget->visible &&
+ x >= widget->x &&
+ y >= widget->y &&
+ x < widget->x + widget->width &&
+ y < widget->y + widget->height);
+}
+
+void
+widget_show(Widget * widget)
+{
+ widget->visible = TRUE;
+ widget_draw(widget);
+}
+
+void
+widget_hide(Widget * widget)
+{
+ widget->visible = FALSE;
+}
+
+gboolean
+widget_is_visible(Widget * widget)
+{
+ return widget->visible;
+}
+
+void
+widget_resize(Widget * widget, gint width, gint height)
+{
+ widget_set_size(widget, width, height);
+}
+
+void
+widget_move(Widget * widget, gint x, gint y)
+{
+ widget_lock(widget);
+ widget_set_position(widget, x, y);
+ widget_unlock(widget);
+}
+
+void
+widget_draw(Widget * widget)
+{
+ widget_lock(widget);
+ WIDGET(widget)->redraw = TRUE;
+ widget_unlock(widget);
+}
+
+void
+widget_list_add(GList ** list, Widget * widget)
+{
+ (*list) = g_list_append(*list, widget);
+}
+
+void
+handle_press_cb(GList * widget_list, GtkWidget * widget,
+ GdkEventButton * event)
+{
+ GList *wl;
+
+ for (wl = widget_list; wl; wl = g_list_next(wl)) {
+ if (WIDGET(wl->data)->button_press_cb)
+ WIDGET(wl->data)->button_press_cb(widget, event, wl->data);
+ }
+}
+
+void
+handle_release_cb(GList * widget_list, GtkWidget * widget,
+ GdkEventButton * event)
+{
+ GList *wl;
+
+ for (wl = widget_list; wl; wl = g_list_next(wl)) {
+ if (WIDGET(wl->data)->button_release_cb)
+ WIDGET(wl->data)->button_release_cb(widget, event, wl->data);
+ }
+}
+
+void
+handle_motion_cb(GList * widget_list, GtkWidget * widget,
+ GdkEventMotion * event)
+{
+ GList *wl;
+
+ for (wl = widget_list; wl; wl = g_list_next(wl)) {
+ if (WIDGET(wl->data)->motion_cb)
+ WIDGET(wl->data)->motion_cb(widget, event, wl->data);
+ }
+}
+
+void
+handle_scroll_cb(GList * wlist, GtkWidget * widget, GdkEventScroll * event)
+{
+ GList *wl;
+
+ for (wl = wlist; wl; wl = g_list_next(wl)) {
+ if (WIDGET(wl->data)->mouse_scroll_cb)
+ WIDGET(wl->data)->mouse_scroll_cb(widget, event, wl->data);
+ }
+}
+
+void
+widget_list_draw(GList * widget_list, gboolean * redraw, gboolean force)
+{
+ GList *wl;
+ Widget *w;
+
+ *redraw = FALSE;
+ wl = widget_list;
+
+ for (wl = widget_list; wl; wl = g_list_next(wl)) {
+ w = WIDGET(wl->data);
+
+ REQUIRE_LOCK(w->mutex);
+
+ if (!w->draw)
+ continue;
+
+ if (!w->visible)
+ continue;
+
+ if (w->redraw || force) {
+ w->draw(w);
+/* w->redraw = FALSE; */
+ *redraw = TRUE;
+ }
+ }
+}
+
+void
+widget_list_change_pixmap(GList * widget_list, GdkPixmap * pixmap)
+{
+ GList *wl;
+
+ for (wl = widget_list; wl; wl = g_list_next(wl)) {
+ Widget *widget = wl->data;
+ widget->parent = pixmap;
+ widget_queue_redraw(widget);
+ }
+}
+
+void
+widget_list_clear_redraw(GList * widget_list)
+{
+ GList *wl;
+
+ for (wl = widget_list; wl; wl = g_list_next(wl)) {
+ REQUIRE_LOCK(WIDGET(wl->data)->mutex);
+ WIDGET(wl->data)->redraw = FALSE;
+ }
+}
+
+void
+widget_lock(Widget * widget)
+{
+ g_mutex_lock(WIDGET(widget)->mutex);
+}
+
+void
+widget_unlock(Widget * widget)
+{
+ g_mutex_unlock(WIDGET(widget)->mutex);
+}
+
+void
+widget_list_lock(GList * widget_list)
+{
+ g_list_foreach(widget_list, (GFunc) widget_lock, NULL);
+}
+
+void
+widget_list_unlock(GList * widget_list)
+{
+ g_list_foreach(widget_list, (GFunc) widget_unlock, NULL);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/widget.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,101 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef WIDGET_H
+#define WIDGET_H
+
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+
+typedef struct _Widget Widget;
+
+
+typedef void (*WidgetButtonPressFunc) (GtkWidget *, GdkEventButton *,
+ gpointer);
+typedef void (*WidgetButtonReleaseFunc) (GtkWidget *, GdkEventButton *,
+ gpointer);
+typedef void (*WidgetMotionFunc) (GtkWidget *, GdkEventMotion *, gpointer);
+typedef void (*WidgetDrawFunc) (Widget *);
+typedef void (*WidgetScrollFunc) (GtkWidget *, GdkEventScroll *, gpointer);
+
+
+#define WIDGET(x) ((Widget *)(x))
+struct _Widget {
+ GdkPixmap *parent;
+ GdkGC *gc;
+
+ gint x, y;
+ gint width, height;
+
+ gint visible;
+ gboolean redraw;
+
+ GMutex *mutex;
+
+ WidgetButtonPressFunc button_press_cb;
+ WidgetButtonReleaseFunc button_release_cb;
+ WidgetMotionFunc motion_cb;
+ WidgetDrawFunc draw;
+ WidgetScrollFunc mouse_scroll_cb;
+};
+
+
+void widget_init(Widget * widget, GdkPixmap * parent, GdkGC * gc,
+ gint x, gint y, gint width, gint height, gint visible);
+
+void widget_set_position(Widget * widget, gint x, gint y);
+void widget_set_size(Widget * widget, gint width, gint height);
+void widget_queue_redraw(Widget * widget);
+
+void widget_lock(Widget * widget);
+void widget_unlock(Widget * widget);
+
+gboolean widget_contains(Widget * widget, gint x, gint y);
+
+void widget_show(Widget * widget);
+void widget_hide(Widget * widget);
+gboolean widget_is_visible(Widget * widget);
+
+void widget_resize(Widget * widget, gint width, gint height);
+void widget_move(Widget * widget, gint x, gint y);
+void widget_draw(Widget * widget);
+
+void handle_press_cb(GList * wlist, GtkWidget * widget,
+ GdkEventButton * event);
+void handle_release_cb(GList * wlist, GtkWidget * widget,
+ GdkEventButton * event);
+void handle_motion_cb(GList * wlist, GtkWidget * widget,
+ GdkEventMotion * event);
+void handle_scroll_cb(GList * wlist, GtkWidget * widget,
+ GdkEventScroll * event);
+
+void widget_list_add(GList ** list, Widget * widget);
+void widget_list_draw(GList * list, gboolean * redraw, gboolean force);
+void widget_list_change_pixmap(GList * list, GdkPixmap * pixmap);
+void widget_list_clear_redraw(GList * list);
+void widget_list_lock(GList * list);
+void widget_list_unlock(GList * list);
+
+
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,312 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "xml_document.h"
+
+#include <glib.h>
+#include <string.h>
+
+/* document builder callbacks */
+
+static void bmp_xml_doc_build_start_element(GMarkupParseContext * context,
+ const gchar * element_name,
+ const gchar ** attrib_names,
+ const gchar ** attrib_values,
+ gpointer user_data,
+ GError ** error);
+
+static void bmp_xml_doc_build_end_element(GMarkupParseContext * context,
+ const gchar * element_name,
+ gpointer user_data,
+ GError ** error);
+
+static void bmp_xml_doc_build_text(GMarkupParseContext * context,
+ const gchar * text,
+ gsize text_len,
+ gpointer user_data,
+ GError ** error);
+
+static void bmp_xml_doc_build_ignore(GMarkupParseContext * context,
+ const gchar * text,
+ gsize text_len,
+ gpointer user_data,
+ GError ** error);
+
+static void bmp_xml_doc_build_error(GMarkupParseContext * context,
+ GError * error,
+ gpointer user_data);
+
+static void bmp_xml_doc_build_destroy(BmpXmlDocument * data);
+
+static GMarkupParser bmp_xml_doc_builder = {
+ bmp_xml_doc_build_start_element,
+ bmp_xml_doc_build_end_element,
+ bmp_xml_doc_build_text,
+ bmp_xml_doc_build_ignore,
+ bmp_xml_doc_build_error
+};
+
+static GDestroyNotify bmp_xml_node_data_free_func[] = {
+ (GDestroyNotify) bmp_xml_doc_node_data_free,
+ (GDestroyNotify) bmp_xml_element_node_data_free,
+ (GDestroyNotify) bmp_xml_attrib_node_data_free,
+ (GDestroyNotify) bmp_xml_text_node_data_free
+};
+
+GNode *
+bmp_xml_doc_node_new(void)
+{
+ BmpXmlDocNodeData *data;
+ data = g_new0(BmpXmlDocNodeData, 1);
+ data->type = BMP_XML_NODE_DOC;
+ return g_node_new(data);
+}
+
+void
+bmp_xml_doc_node_data_free(BmpXmlDocNodeData * data)
+{
+ g_return_if_fail(data != NULL);
+ g_free(data);
+}
+
+GNode *
+bmp_xml_element_node_new(const gchar * name)
+{
+ BmpXmlElementNodeData *data;
+ data = g_new0(BmpXmlElementNodeData, 1);
+ data->type = BMP_XML_NODE_ELEMENT;
+ data->name = g_strdup(name);
+ return g_node_new(data);
+}
+
+void
+bmp_xml_element_node_data_free(BmpXmlElementNodeData * data)
+{
+ g_return_if_fail(data != NULL);
+ g_free(data->name);
+ g_free(data);
+}
+
+GNode *
+bmp_xml_attrib_node_new(const gchar * name,
+ const gchar * value)
+{
+ BmpXmlAttribNodeData *data;
+ data = g_new0(BmpXmlAttribNodeData, 1);
+ data->type = BMP_XML_NODE_ATTRIB;
+ data->name = g_strdup(name);
+ data->value = g_strdup(value);
+ return g_node_new(data);
+}
+
+void
+bmp_xml_attrib_node_data_free(BmpXmlAttribNodeData * data)
+{
+ g_assert(data != NULL);
+ g_free(data->name);
+ g_free(data->value);
+ g_free(data);
+}
+
+GNode *
+bmp_xml_text_node_new(const gchar * text, gsize length)
+{
+ BmpXmlTextNodeData *data;
+ data = g_new0(BmpXmlTextNodeData, 1);
+ data->type = BMP_XML_NODE_TEXT;
+ data->text = g_new0(gchar, length);
+ memcpy(data->text, text, length);
+ data->length = length;
+ return g_node_new(data);
+}
+
+void
+bmp_xml_text_node_data_free(BmpXmlTextNodeData * data)
+{
+ g_return_if_fail(data != NULL);
+ g_free(data->text);
+ g_free(data);
+}
+
+void
+bmp_xml_node_data_free(GNode * node)
+{
+ BmpXmlNodeData *data;
+
+ g_return_if_fail(node != NULL);
+ g_return_if_fail(node->data != NULL);
+
+ data = BMP_XML_NODE_DATA(node->data);
+ (*bmp_xml_node_data_free_func[data->type]) (data);
+}
+
+BmpXmlDocument *
+bmp_xml_document_new(void)
+{
+ BmpXmlDocument *document;
+
+ document = g_new0(BmpXmlDocument, 1);
+
+ document->parse_context =
+ g_markup_parse_context_new(&bmp_xml_doc_builder, 0,
+ document, (GDestroyNotify)
+ bmp_xml_doc_build_destroy);
+ document->current_depth = 0;
+
+ document->tree = bmp_xml_doc_node_new();
+ document->current_node = document->tree;
+
+ return document;
+}
+
+void
+bmp_xml_document_free(BmpXmlDocument * document)
+{
+ g_return_if_fail(document != NULL);
+
+ g_node_traverse(document->tree, G_IN_ORDER, G_TRAVERSE_ALL, -1,
+ (GNodeTraverseFunc) bmp_xml_node_data_free, NULL);
+ g_node_destroy(document->tree);
+
+ g_free(document);
+}
+
+GNode *
+bmp_xml_document_get_tree(BmpXmlDocument * document)
+{
+ return document->tree;
+}
+
+gboolean
+bmp_xml_document_load(BmpXmlDocument ** document_ref,
+ const gchar * filename, GError ** error_out)
+{
+ BmpXmlDocument *document;
+ gchar *buffer;
+ gsize buffer_size;
+ GError *error = NULL;
+
+ g_assert(document_ref != NULL);
+ g_assert(filename != NULL);
+
+ *document_ref = NULL;
+
+ if (!g_file_get_contents(filename, &buffer, &buffer_size, &error)) {
+ g_propagate_error(error_out, error);
+ return FALSE;
+ }
+
+ if (!(document = bmp_xml_document_new())) {
+ g_free(buffer);
+ return FALSE;
+ }
+
+ if (!g_markup_parse_context_parse(document->parse_context, buffer,
+ buffer_size, &error)) {
+ bmp_xml_document_free(document);
+ g_free(buffer);
+ g_propagate_error(error_out, error);
+ return FALSE;
+ }
+
+ g_free(buffer);
+
+ if (!g_markup_parse_context_end_parse(document->parse_context, &error)) {
+ bmp_xml_document_free(document);
+ g_propagate_error(error_out, error);
+ return FALSE;
+ }
+
+ *document_ref = document;
+
+ return TRUE;
+}
+
+
+static void
+bmp_xml_doc_build_start_element(GMarkupParseContext * context,
+ const gchar * element_name,
+ const gchar ** attrib_names,
+ const gchar ** attrib_values,
+ gpointer user_data,
+ GError ** error)
+{
+ BmpXmlDocument *document;
+
+ document = BMP_XML_DOCUMENT(user_data);
+
+ document->current_node =
+ g_node_append(document->current_node,
+ bmp_xml_element_node_new(element_name));
+
+ while (*attrib_names) {
+ g_node_append(document->current_node,
+ bmp_xml_attrib_node_new(*attrib_names++,
+ *attrib_values++));
+ }
+
+ document->current_depth++;
+}
+
+static void
+bmp_xml_doc_build_end_element(GMarkupParseContext * context,
+ const gchar * element_name,
+ gpointer user_data,
+ GError ** error)
+{
+ BmpXmlDocument *document;
+
+ document = BMP_XML_DOCUMENT(user_data);
+ document->current_node = document->current_node->parent;
+ document->current_depth--;
+}
+
+static void
+bmp_xml_doc_build_text(GMarkupParseContext * context,
+ const gchar * text,
+ gsize text_len,
+ gpointer user_data,
+ GError ** error)
+{
+ BmpXmlDocument *document;
+ document = BMP_XML_DOCUMENT(user_data);
+ g_node_append(document->current_node,
+ bmp_xml_text_node_new(text, text_len));
+}
+
+static void
+bmp_xml_doc_build_ignore(GMarkupParseContext * context,
+ const gchar * text,
+ gsize text_len,
+ gpointer user_data,
+ GError ** error)
+{
+}
+
+static void
+bmp_xml_doc_build_error(GMarkupParseContext * context,
+ GError * error,
+ gpointer user_data)
+{
+}
+
+static void
+bmp_xml_doc_build_destroy(BmpXmlDocument * document)
+{
+ g_markup_parse_context_free(document->parse_context);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep/xml_document.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,90 @@
+/* BMP - Cross-platform multimedia player
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef XML_DOCUMENT_H
+#define XML_DOCUMENT_H
+
+#include <glib.h>
+
+typedef enum {
+ BMP_XML_NODE_DOC = 0,
+ BMP_XML_NODE_ELEMENT,
+ BMP_XML_NODE_ATTRIB,
+ BMP_XML_NODE_TEXT
+} BmpXmlNodeType;
+
+#define BMP_XML_DOCUMENT(x) ((BmpXmlDocument *)(x))
+typedef struct {
+ GNode *tree;
+ GNode *current_node;
+ guint current_depth;
+ GMarkupParseContext *parse_context;
+} BmpXmlDocument;
+
+#define BMP_XML_NODE_DATA(x) ((BmpXmlNodeData *)(x))
+typedef struct {
+ BmpXmlNodeType type;
+} BmpXmlNodeData;
+
+#define BMP_XML_DOC_NODE_DATA(x) ((BmpXmlDocNodeData *)(x))
+typedef struct {
+ BmpXmlNodeType type;
+} BmpXmlDocNodeData;
+
+#define BMP_XML_ELEMENT_NODE_DATA(x) ((BmpXmlElementNodeData *)(x))
+typedef struct {
+ BmpXmlNodeType type;
+ gchar *name;
+} BmpXmlElementNodeData;
+
+#define BMP_XML_ATTRIB_NODE_DATA(x) ((BmpXmlAttribNodeData *)(x))
+typedef struct {
+ BmpXmlNodeType type;
+ gchar *name;
+ gchar *value;
+} BmpXmlAttribNodeData;
+
+#define BMP_XML_TEXT_NODE_DATA(x) ((BmpXmlTextNodeData *)(x))
+typedef struct {
+ BmpXmlNodeType type;
+ gchar *text;
+ gsize length;
+} BmpXmlTextNodeData;
+
+
+GNode *bmp_xml_doc_node_new(void);
+void bmp_xml_doc_node_data_free(BmpXmlDocNodeData * data);
+
+GNode *bmp_xml_element_node_new(const gchar * name);
+void bmp_xml_element_node_data_free(BmpXmlElementNodeData * data);
+
+GNode *bmp_xml_attrib_node_new(const gchar * name, const gchar * value);
+void bmp_xml_attrib_node_data_free(BmpXmlAttribNodeData * data);
+
+void bmp_xml_text_node_data_free(BmpXmlTextNodeData * data);
+GNode *bmp_xml_text_node_new(const gchar * text, gsize length);
+
+
+gboolean bmp_xml_document_load(BmpXmlDocument ** document,
+ const gchar * filename, GError ** error);
+
+void bmp_xml_document_free(BmpXmlDocument * document);
+
+GNode *bmp_xml_document_get_tree(BmpXmlDocument * document);
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep-media-player.1.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep-media-player.1.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/beep-media-player.1.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,204 @@
+.TH BEEP-MEDIA-PLAYER 1 "24 December 2003" "Version @VERSION@" "BMP Manual Pages"
+.SH NAME
+Beep Media Player \- an audio player for X.
+.SH SYNOPSIS
+.B beep-media-player
+[\-h] [\-\-help] [\-n \fI<session>\fP] [\-\-session=\fI<session>\fP] [\-r]
+[\-\-rew] [\-p] [\-\-play] [\-u] [\-\-pause] [\-s] [\-\-stop] [\-f]
+[\-\-fwd] [\-e] [\-\-enqueue] [\-m] [\-\-show\-main\-window] [\-v]
+[\-\-version] [\fIfilename\fP]...
+.SH DESCRIPTION
+\fIBMP\fP is the Beep Media Player, based on the X Multimedia System.
+It is used to play audio and other kinds of media files. By default
+BMP can play MPEG audio, Ogg Vorbis, RIFF wav, most module formats,
+and a few other formats. BMP can be extended through plugins to play
+a number of other audio and video formats.
+.SH OPTIONS
+BMP accepts the following options:
+.TP
+.B \-h, \-\-help
+Show summary of options.
+.TP
+.B \-n, \-\-session
+Select BMP/XMMS session (Default: 0).
+.TP
+.B \-r, \-\-rew
+Skip backwards in playlist.
+.TP
+.B \-p, \-\-play
+Start playing current playlist.
+.TP
+.B \-u, \-\-pause
+Pause current song.
+.TP
+.B \-s, \-\-stop
+Stop current song.
+.TP
+.B \-t, \-\-play\-pause
+Pause if playing, play otherwise.
+.TP
+.B \-f, \-\-fwd
+Skip forward in playlist.
+.TP
+.B \-e, \-\-enqueue
+Don't clear the playlist.
+.TP
+.B \-m, \-\-show\-main\-window
+Show the main window.
+.TP
+.B \-v, \-\-version
+Print version number and exit.
+.SH SKINS
+BMP supports WinAmp style skins. Skins may be stored in either
+archived (\fI.zip\fP, \fI.wsz\fP, \fI.tgz\fP, \fI.tar.gz\fP,
+or \fI.tar.bz2\fP) or unarchived format. BMP looks for skinfiles in
+ at datadir@/bmp/Skins, ~/.bmp/Skins, and locations specified by the
+\fBSKINSDIR\fP variable.
+.SH KEYBINDINGS
+Global keybindings for BMP:
+
+.in +2
+.ta \w'Shift + Control + w 'u
+z Previous song
+.br
+x Play
+.br
+c Pause
+.br
+v Stop
+.br
+b Next song
+.br
+l Play file
+.br
+j Jump to file
+.br
+r Toggle Repeat
+.br
+s Toggle Shuffle
+.br
+Shift + l Play directory
+.br
+Control + l Play location
+.br
+Control + p Preferences dialog
+.br
+Control + v Visualization plugin dialog
+.br
+Control + r Time remaining
+.br
+Control + a Always on top
+.br
+Control + w Winshade mode
+.br
+Control + d Doublesize mode
+.br
+Control + e Easy move
+.br
+Control + j Jump to time
+.br
+Control + z Start of list
+.br
+Control + n No Playlist Advance
+.br
+Control + 3 File info dialog
+.br
+Control + Alt + w Toggle Equalizer winshade mode
+.br
+Shift + Control + w Playlist winshade mode
+.br
+Alt + w Hide/show mainwindow
+.br
+Alt + e Hide/show playlistwindow
+.br
+Alt + g Hide/show Equalizer
+.br
+Alt + s Skin selecting window
+.in -2
+
+Main window specific:
+
+.in +2
+.br
+Arrow key up Volume up 2%
+.br
+Arrow key down Volume down 2%
+.br
+Arrow key right Skip 5 seconds forward in song
+.br
+Arrow key left Skip 5 seconds back in song
+.in -2
+
+Playlist window specific:
+
+.in +2
+.br
+Arrow key up Up one step in playlist
+.br
+Arrow key down Down one step in playlist
+.br
+Delete Remove selected songs from playlist
+.br
+Page Up Move one page up
+.br
+Page Down Move one page down
+.br
+Home First page in playlist
+.br
+End Last page in playlist
+.br
+Enter Play selected song
+.br
+Insert Add file dialog
+.br
+Shift + Insert Add directory dialog
+.br
+Alt + Insert Add url dialog
+.in -2
+
+Equalizer shade mode specific:
+
+.in +2
+.br
+Arrow key up Volume up 2%
+.br
+Arrow key down Volume down 2%
+.br
+Arrow key right Balance 4% to right
+.br
+Arrow key left Balance 4% to left
+.in -2
+.SH FILES
+.TP \w'~/.bmp/bmp.m3uXX'u
+~/.bmp/config
+Users' BMP configuration.
+.TP
+~/.bmp/bmp.m3u
+Default playlist usually loaded on startup.
+.TP
+~/.bmp/gtkrc
+Users set of BMP-specific GTK config settings. Options such as widget
+color and fonts sizes can be set here.
+.TP
+~/.bmp/menurc
+Users set of keybindings.
+.TP
+~/.bmp/Skins, @datadir@/bmp/Skins
+Default locations where BMP should look for skinfiles.
+.TP
+~/.bmp/Plugins
+Location of user installed plugins.
+.SH ENVIRONMENT
+.TP 12
+.B SKINSDIR
+Colon separated list of paths where BMP should look for skinfiles.
+.TP
+.B TARCMD
+Tar command supporting GNU tar style decompression. Used for
+unpacking gzip and bzip2 compressed skins. Default is \fItar\fP.
+.TP
+.B UNZIPCMD
+Command for decompressing zip files (skins). Default is \fIunzip\fP.
+.SH OTHER INFO
+The webpage for BMP is at http://beepmp.sourceforge.net. Here you can find
+info about BMP, download the latest version, plugins, and skins.
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.pc.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.pc.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.pc.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,22 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+data_dir=@datadir@/@PACKAGE@
+
+version=@VERSION@
+include_dir=@includedir@
+beep_include_dir=@includedir@
+lib_dir=@libdir@
+
+plugin_dir=@plugindir@
+input_plugin_dir=@plugindir@/@INPUT_PLUGIN_DIR@
+output_plugin_dir=@plugindir@/@OUTPUT_PLUGIN_DIR@
+general_plugin_dir=@plugindir@/@GENERAL_PLUGIN_DIR@
+visualization_plugin_dir=@plugindir@/@VISUALIZATION_PLUGIN_DIR@
+effect_plugin_dir=@plugindir@/@EFFECT_PLUGIN_DIR@
+
+Name: BMP
+Description: BMP Is a versatile and handy multi platform media player
+Version: @VERSION@
+Requires: @PC_REQUIRES@
+Libs: -L${lib_dir} -lbeep
+Cflags: -I${beep_include_dir}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.spec.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.spec.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/bmp.spec.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,181 @@
+# RPM spec file for BMP
+
+# FIXME: The bmp RPM requires libasound.so.* without --with alsa. Need to
+# disable autoreq.
+
+# XMMS legacy
+%{?_with_xmmseq: %define xmmseq 1}
+%{!?_with_xmmseq: %define xmmseq 0}
+
+# plugins
+%{?_with_alsa: %define alsa 1}
+%{!?_with_alsa: %define alsa 0}
+%{?_with_mp3: %define mp3 1}
+%{!?_with_mp3: %define mp3 0}
+
+# GNOME support
+%{?_with_gconf: %define gconf 1}
+%{!?_with_gconf: %define gconf 0}
+%{?_with_gnomevfs: %define gnomevfs 1}
+%{!?_with_gnomevfs: %define gnomevfs 0}
+
+Summary: Beep Media Player
+Name: @PACKAGE@
+Version: @VERSION@
+Release: 1
+Epoch: 0
+License: GPL
+Group: Applications/Multimedia
+Url: http://beepmp.sourceforge.net
+Source0: %{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+Requires: unzip
+BuildRequires: gtk2-devel >= 2.4.0, libglade2-devel >= 2.3.1
+
+%if %{gconf}
+BuildRequires: GConf2-devel >= 2.4.0
+%endif
+
+%if %{gnomevfs}
+BuildRequires: gnome-vfs2-devel >= 2.4.0
+%endif
+
+%description
+Beep Media Player(BMP) is a GTK2 port of the popular X Multimedia
+System(XMMS) and more.
+
+Build options:
+--with: alsa mp3 gconf gnomevfs xmmseq
+
+%package devel
+Summary: BMP - Static libraries and header files.
+Group: Applications/Multimedia
+Requires: %{name} = %{epoch}:%{version}-%{release}
+
+%description devel
+Static libraries and header files required for compiling BMP plugins.
+
+%if %{mp3}
+%package mp3
+Summary: BMP - MP3 output plugin
+Group: Applications/Multimedia
+Requires: %{name} = %{epoch}:%{version}-%{release}
+
+%description mp3
+MP3 input plugin for BMP.
+%endif
+
+%if %{alsa}
+%package alsa
+Summary: BMP - ALSA output plugin
+Group: Applications/Multimedia
+Requires: %{name} = %{epoch}:%{version}-%{release}
+BuildRequires: alsa-lib-devel >= 1.0.0
+
+%description alsa
+Output plugin for BMP to use with the Advanced Linux Sound
+Architecture (ALSA).
+%endif
+
+%prep
+%setup -q
+
+%build
+%configure \
+ --disable-opengl \
+ %{!?_with_alsa:--disable-alsa} \
+ %{!?_with_mp3:--disable-mp3} \
+ %{?_with_gconf:--enable-gconf} \
+ %{?_with_gnomevfs:--enable-gnome-vfs} \
+ %{?_with_xmmseq:--with-xmms-eq}
+make %{_smp_mflags}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT
+%find_lang %{name}
+
+rm -f $RPM_BUILD_ROOT%{_libdir}/bmp/*/*.la
+
+%post -p /sbin/ldconfig
+%postun -p /sbin/ldconfig
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f %{name}.lang
+%defattr(-,root,root,-)
+%doc AUTHORS COPYING ChangeLog NEWS README
+%{_bindir}/beep-media-player
+%{_datadir}/bmp/
+%{_datadir}/pixmaps/*
+%{_datadir}/applications/bmp.desktop
+%{_libdir}/libbeep.so.*
+%{_libdir}/bmp/Input/libcdaudio.so
+%{_libdir}/bmp/Input/libvorbis.so
+%{_libdir}/bmp/Input/libwav.so
+%{_libdir}/bmp/Output/libOSS.so
+%{_libdir}/bmp/Output/libesdout.so
+%{_libdir}/bmp/Visualization/libbscope.so
+%{_mandir}/man1/*
+
+%files devel
+%defattr(-,root,root,-)
+%{_libdir}/pkgconfig/bmp.pc
+%{_libdir}/lib*.so
+#%{_libdir}/lib*.a
+%{_libdir}/lib*.la
+%{_includedir}/bmp
+
+%if %{alsa}
+%files alsa
+%defattr(-,root,root,-)
+%{_libdir}/bmp/Output/libALSA.so
+%endif
+
+%if %{mp3}
+%files mp3
+%defattr(-,root,root,-)
+%{_libdir}/bmp/Input/libmpg123.so
+%endif
+
+
+%changelog
+* Sat Oct 22 2005 Chong Kai Xiong <descender at phreaker.net> - 0:0.9.7.1-1
+- Remove .la files instead of using %exclude
+- Rename Copyright to License
+
+* Sat Dec 4 2004 Chong Kai Xiong <descender at phreaker.net> - 0:0.9.7-2
+- remove duplicate listings in %files
+- fix libglade2-devel version requirement
+- add option to build with XMMS equalization
+
+* Tue Jul 6 2004 Chong Kai Xiong <descender at phreaker.net> 0:0.9.7-1
+- fixed file list to own package-specific directories
+- remove vendor, add epoch tag, explicit requires, add unzip to requires
+- force version match between plugins and main package
+- use %find_lang
+- don't install INSTALL
+
+* Thu Jun 24 2004 Chong Kai Xiong <descender at phreaker.net> 0.9.7-3
+- added support for GConf and GNOME VFS
+- fixed file list
+
+* Fri May 28 2004 Chong Kai Xiong <descender at phreaker.net> 0.9.7-2
+- require libglade 2.0
+
+* Sun Apr 05 2004 Chong Kai Xiong <descender at phreaker.net> 0.9.7-1
+- require GTK 2.4 and ALSA 1.0
+
+* Tue Jan 13 2004 David Lau <coder_sku at sourceforge.net> 0.9.6-3
+- removes plugin .la's
+
+* Wed Dec 24 2003 Chong Kai Xiong <descender at phreaker.net> 0.9.6-2
+- first fully usable version
+
+* Tue Nov 29 2003 Chong Kai Xiong <descender at phreaker.net> 0.9.6-1
+- added support for --with switches
+
+* Tue Nov 11 2003 Chong Kai Xiong <descender at phreaker.net> 1.0.0pre6
+- initial build
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,330 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define if cdrom access is in BSD style */
+#undef BEEP_CDROM_BSD
+
+/* Define if cdrom access uses Darwin variant */
+#undef BEEP_CDROM_BSD_DARWIN
+
+/* Define if cdrom access uses NetBSD variant */
+#undef BEEP_CDROM_BSD_NETBSD
+
+/* Define if cdrom access is in Solaris style */
+#undef BEEP_CDROM_SOLARIS
+
+/* Resource and configuration path for bmp relative to $HOME. */
+#undef BMP_RCPATH
+
+/* Path to default cdaudio device. */
+#undef CDDA_DEVICE
+
+/* Path to default cdaudio directory. */
+#undef CDDA_DIRECTORY
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for `alloca.c' support on those systems.
+ */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Path to OSS DSP, really just a data pipe, default is /dev/dsp. */
+#undef DEV_DSP
+
+/* Path to OSS mixer, default is /dev/mixer. */
+#undef DEV_MIXER
+
+/* Define to disable per user plugin directory */
+#undef DISABLE_USER_PLUGIN_DIR
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+ */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <argz.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `feof_unlocked' function. */
+#undef HAVE_FEOF_UNLOCKED
+
+/* Define to 1 if you have the `fgets_unlocked' function. */
+#undef HAVE_FGETS_UNLOCKED
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define to 1 if you have the <fts.h> header file. */
+#undef HAVE_FTS_H
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#undef HAVE_GETC_UNLOCKED
+
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
+/* Define to 1 if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define to 1 if you have the `getgid' function. */
+#undef HAVE_GETGID
+
+/* Define to 1 if you have the `getmntinfo' function. */
+#undef HAVE_GETMNTINFO
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define when using id3lib */
+#undef HAVE_ID3LIB
+
+/* Define to 1 if you have the <id3.h> header file. */
+#undef HAVE_ID3_H
+
+/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+ declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+#undef HAVE_LINUX_CDROM_H
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+#undef HAVE_LINUX_JOYSTICK_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+#undef HAVE_MACHINE_SOUNDCARD_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the `mkdtemp' function. */
+#undef HAVE_MKDTEMP
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define if you have the FreeBSD newpcm driver */
+#undef HAVE_NEWPCM
+
+/* Define to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define if the OSS output plugin should be built */
+#undef HAVE_OSS
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+ uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+#undef HAVE_SYS_CDIO_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#undef HAVE_SYS_SOUNDCARD_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the unsigned long long type. */
+#undef HAVE_UNSIGNED_LONG_LONG
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define to 1 if you have the `__argz_count' function. */
+#undef HAVE___ARGZ_COUNT
+
+/* Define to 1 if you have the `__argz_next' function. */
+#undef HAVE___ARGZ_NEXT
+
+/* Define to 1 if you have the `__argz_stringify' function. */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if integer division by zero raises signal SIGFPE. */
+#undef INTDIV0_RAISES_SIGFPE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to symbol prefix, if any */
+#undef SYMBOL_PREFIX
+
+/* Define if building with ia32 SIMD support */
+#undef USE_SIMD
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if your processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
+/* Define if building with old XMMS equalization code. */
+#undef XMMS_EQ
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `long' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to int if the socklen_t type is missing */
+#undef socklen_t
+
+/* Define to unsigned long or unsigned long long if <stdint.h> and
+ <inttypes.h> don't define. */
+#undef uintmax_t
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in~
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in~ 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/config.h.in~ 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,333 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define if cdrom access is in BSD style */
+#undef BEEP_CDROM_BSD
+
+/* Define if cdrom access uses Darwin variant */
+#undef BEEP_CDROM_BSD_DARWIN
+
+/* Define if cdrom access uses NetBSD variant */
+#undef BEEP_CDROM_BSD_NETBSD
+
+/* Define if cdrom access is in Solaris style */
+#undef BEEP_CDROM_SOLARIS
+
+/* Resource and configuration path for bmp relative to $HOME. */
+#undef BMP_RCPATH
+
+/* Path to default cdaudio device. */
+#undef CDDA_DEVICE
+
+/* Path to default cdaudio directory. */
+#undef CDDA_DIRECTORY
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for `alloca.c' support on those systems.
+ */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Path to OSS DSP, really just a data pipe, default is /dev/dsp. */
+#undef DEV_DSP
+
+/* Path to OSS mixer, default is /dev/mixer. */
+#undef DEV_MIXER
+
+/* Define to disable per user plugin directory */
+#undef DISABLE_USER_PLUGIN_DIR
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+ */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <argz.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `feof_unlocked' function. */
+#undef HAVE_FEOF_UNLOCKED
+
+/* Define to 1 if you have the `fgets_unlocked' function. */
+#undef HAVE_FGETS_UNLOCKED
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define to 1 if you have the <fts.h> header file. */
+#undef HAVE_FTS_H
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#undef HAVE_GETC_UNLOCKED
+
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
+/* Define to 1 if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define to 1 if you have the `getgid' function. */
+#undef HAVE_GETGID
+
+/* Define to 1 if you have the `getmntinfo' function. */
+#undef HAVE_GETMNTINFO
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if building with GnomeVFS support */
+#undef HAVE_GNOME_VFS
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define when using id3lib */
+#undef HAVE_ID3LIB
+
+/* Define to 1 if you have the <id3.h> header file. */
+#undef HAVE_ID3_H
+
+/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+ declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+#undef HAVE_LINUX_CDROM_H
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+#undef HAVE_LINUX_JOYSTICK_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+#undef HAVE_MACHINE_SOUNDCARD_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the `mkdtemp' function. */
+#undef HAVE_MKDTEMP
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define if you have the FreeBSD newpcm driver */
+#undef HAVE_NEWPCM
+
+/* Define to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define if the OSS output plugin should be built */
+#undef HAVE_OSS
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+ uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+#undef HAVE_SYS_CDIO_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#undef HAVE_SYS_SOUNDCARD_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the unsigned long long type. */
+#undef HAVE_UNSIGNED_LONG_LONG
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define to 1 if you have the `__argz_count' function. */
+#undef HAVE___ARGZ_COUNT
+
+/* Define to 1 if you have the `__argz_next' function. */
+#undef HAVE___ARGZ_NEXT
+
+/* Define to 1 if you have the `__argz_stringify' function. */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if integer division by zero raises signal SIGFPE. */
+#undef INTDIV0_RAISES_SIGFPE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to symbol prefix, if any */
+#undef SYMBOL_PREFIX
+
+/* Define if building with ia32 SIMD support */
+#undef USE_SIMD
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if your processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
+/* Define if building with old XMMS equalization code. */
+#undef XMMS_EQ
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `long' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to int if the socklen_t type is missing */
+#undef socklen_t
+
+/* Define to unsigned long or unsigned long long if <stdint.h> and
+ <inttypes.h> don't define. */
+#undef uintmax_t
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/configure.ac
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/configure.ac 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/configure.ac 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,654 @@
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(bmp, 0.9.7.1)
+AC_PREREQ(2.5)
+
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE
+
+AC_CONFIG_HEADERS([config.h])
+
+dnl libbeep
+LIBBEEP_MAJOR_VERSION=2
+LIBBEEP_MINOR_VERSION=0
+LIBBEEP_MICRO_VERSION=0
+LIBBEEP_VERSION=$LIBBEEP_MAJOR_VERSION.$LIBBEEP_MINOR_VERSION.$LIBBEEP_MICRO_VERSION
+AC_SUBST(LIBBEEP_MAJOR_VERSION)
+AC_SUBST(LIBBEEP_MINOR_VERSION)
+AC_SUBST(LIBBEEP_MICRO_VERSION)
+
+
+dnl GNU gettext
+
+AM_GNU_GETTEXT
+AM_GNU_GETTEXT_VERSION([0.12.1])
+
+
+dnl Check for C compiler
+
+AC_LANG([C])
+AC_ISC_POSIX
+AC_C_BIGENDIAN
+
+
+dnl Check for assembler
+
+AM_PROG_AS
+
+
+dnl Checks for various programs
+
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+dnl Libtool
+dnl FIXME: find a way to allow building static libbeep,
+dnl without building static plugins
+
+dnl Next four lines is a hack to prevent libtool checking for C++/F77
+m4_undefine([AC_PROG_CXX])
+m4_defun([AC_PROG_CXX],[])
+m4_undefine([AC_PROG_F77])
+m4_defun([AC_PROG_F77],[])
+
+AC_DISABLE_STATIC
+AC_ENABLE_SHARED
+AC_PROG_LIBTOOL
+
+
+dnl Path settings
+
+AC_PATH_PROG(BEEP_PATH, beep-media-player, no)
+
+AC_ARG_WITH(rc-path,
+ [ --rc-path=path Resource and configuration path for bmp relative to $HOME.],
+ [rc_path=$withval],
+ [rc_path=.bmp]
+)
+AC_DEFINE_UNQUOTED(BMP_RCPATH, "$rc_path",
+ [Resource and configuration path for bmp relative to $HOME.]
+)
+AC_SUBST(BMP_RCPATH)
+
+AC_ARG_ENABLE(one-plugin-dir,
+ [ --enable-one-plugin-dir Use a single plugin dir [default=no]],
+ [enable_one_plugin_dir=$enableval],
+ [enable_one_plugin_dir=no]
+)
+
+AC_ARG_ENABLE(user-plugin-dir,
+ [ --disable-user-plugin-dir disable per-user plugin dir],
+ [enable_user_plugin_dir=$enableval],
+ [enable_user_plugin_dir=yes]
+)
+
+AC_ARG_WITH(dev-dsp,
+ [ --with-dev-dsp=path Path to OSS DSP data pipe, default is /dev/dsp.],
+ [dev_dsp=$withval],
+ [dev_dsp=/dev/dsp]
+)
+AC_DEFINE_UNQUOTED(DEV_DSP, "$dev_dsp",
+ [Path to OSS DSP, really just a data pipe, default is /dev/dsp.]
+)
+
+AC_ARG_WITH(dev-mixer,
+ [ --with-dev-mixer=path Path to OSS sound mixer, default is /dev/mixer.],
+ [dev_mixer=$withval],
+ [dev_mixer=/dev/mixer]
+)
+AC_DEFINE_UNQUOTED(DEV_MIXER, "$dev_mixer",
+ [Path to OSS mixer, default is /dev/mixer.]
+)
+
+AC_ARG_WITH(cdda-device,
+ [ --with-cdda-device=path Path to default cdaudio device.],
+ [AC_DEFINE_UNQUOTED(CDDA_DEVICE, "$withval",
+ [Path to default cdaudio device.]
+ )
+ ]
+)
+
+AC_ARG_WITH(cdda-dir,
+ [ --with-cdda-dir=path Path to default cdaudio directory.],
+ [AC_DEFINE_UNQUOTED(CDDA_DIRECTORY, "$withval",
+ [Path to default cdaudio directory.]
+ )
+ ]
+)
+
+
+dnl If {type}_PLUGINS is defined, it should be a comma or space separated
+dnl list of plugins that should be built, e.g.,
+dnl INPUT_PLUGINS="mpg123,cdaudio cdin". If variable is not defined, all
+dnl buildable plugins are compiled. This stuff makes life easier for
+dnl automated builds that want to disable certain plugins.
+
+for class in EFFECT GENERAL INPUT OUTPUT VISUALIZATION; do
+ value=`eval echo "\\$${class}_PLUGINS"`
+ if test "${value}" = ""; then
+ eval ${class}_PLUGINS="\$\(ALL_PLUGINS\)"
+ else
+ value=`echo ${value} | sed -e 's/,/ /g'`
+ eval ${class}_PLUGINS="\${value}"
+ fi
+done
+
+AC_SUBST(EFFECT_PLUGINS)
+AC_SUBST(GENERAL_PLUGINS)
+AC_SUBST(INPUT_PLUGINS)
+AC_SUBST(OUTPUT_PLUGINS)
+AC_SUBST(VISUALIZATION_PLUGINS)
+
+
+dnl Option to change equalizer to the old XMMS one which only works with the mpg123
+dnl plugin (or rather, only implemented within the plugin)
+
+AC_ARG_WITH(xmms-eq,
+ [ --with-xmms-eq Use old XMMS equalization code.],
+ [use_xmms_eq=$withval],
+ [use_xmms_eq=no]
+)
+
+if test "$use_xmms_eq" = "yes"; then
+ AC_DEFINE(XMMS_EQ, , [Define if building with old XMMS equalization code.])
+fi
+
+
+dnl Check for X
+dnl FIXME: remove this dependency
+
+AC_PATH_XTRA
+if test "$no_x" = "yes" ; then
+ AC_MSG_ERROR([Cannot find X11 headers/libraries])
+fi
+
+dnl Check for GTK/GLib/GThread/Pango
+
+PKG_CHECK_MODULES(GTK, [glib-2.0 >= 2.4.0 gtk+-2.0 >= 2.4.0 gthread-2.0 pango],,
+ AC_MSG_ERROR([Cannot find glib2/gtk2/pango])
+)
+
+dnl Check for dbus
+
+PKG_CHECK_MODULES(DBUS, [dbus-glib-1 >= 0.23.4],,
+ AC_MSG_ERROR([Cannot find dbus-glib-1])
+)
+
+dnl Check for openmoko-libs
+
+PKG_CHECK_MODULES(OPENMOKO, [openmoko-libs >= 0.0.2],,
+ AC_MSG_ERROR([Cannot find openmoko-libs])
+)
+
+dnl x86 SIMD(3DNow!/MMX) instructions support
+dnl ========================
+
+AC_ARG_ENABLE(simd,
+ [ --enable-simd build with x86 SIMD(3DNow!/MMX) instructions support (default=no)],
+ [USE_SIMD=$enableval],
+ [USE_SIMD=no]
+)
+
+if test "$USE_SIMD" = "yes"; then
+ AC_DEFINE(USE_SIMD, , [Define if building with ia32 SIMD support])
+fi
+
+AM_CONDITIONAL(USE_SIMD, test "$USE_SIMD" = "yes")
+AC_SUBST(USE_SIMD_TRUE)
+
+
+# Check if socklen_t is defined
+
+AC_CACHE_CHECK(for socklen_t, beep_cv_type_socklen_t,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+ #include <sys/socket.h>],
+ [socklen_t s;],
+ [beep_cv_type_socklen_t=yes],
+ [beep_cv_type_socklen_t=no]
+ )
+ ]
+)
+
+if test "$beep_cv_type_socklen_t" = "no"; then
+ AC_DEFINE(socklen_t, int, [Define to int if the socklen_t type is missing])
+fi
+
+
+dnl GConf support
+
+AC_ARG_ENABLE( gconf,
+ [ --enable-gconf enable GConf support (default=disabled)],
+ [enable_gconf=$enableval],
+ [enable_gconf="no"]
+)
+
+if test "$enable_gconf" = "yes"; then
+ PKG_CHECK_MODULES(GCONF, [gconf-2.0 >= 2.6.0],,
+ AC_MSG_ERROR([Cannot find GConf])
+ )
+fi
+
+AM_CONDITIONAL(HAVE_GCONF, test "$enable_gconf" = "yes")
+
+
+dnl GnomeVFS support
+
+AC_ARG_ENABLE( gnome-vfs,
+ [ --enable-gnome-vfs enable GnomeVFS support (default=disabled)],
+ [enable_gnomevfs=$enableval],
+ [enable_gnomevfs="no"]
+)
+
+
+AM_CONDITIONAL(HAVE_GNOME_VFS, test "$enable_gnomevfs" = "yes")
+
+
+dnl Check for esound
+
+AC_ARG_ENABLE( esd,
+ [ --disable-esd disable esound output plugin [default=enabled]],
+ [enable_esd=$enableval],
+ [enable_esd="yes"]
+)
+
+if test "$enable_esd" = "yes"; then
+ PKG_CHECK_MODULES(ESD, [esound >= 0.2],
+ [have_esd=yes],
+ [have_esd=no]
+ )
+else
+ AC_MSG_RESULT([*** esound plugin disabled per user request ***])
+ have_esd=no
+fi
+
+AM_CONDITIONAL(HAVE_ESD, test "$have_esd" = "yes")
+
+
+dnl *** MP3
+
+AC_ARG_ENABLE(mp3,
+ [ --disable-mp3 disable mp3 plugin. [default=enabled] ],
+ [enable_mp3=$enableval],
+ [enable_mp3=yes]
+)
+
+AM_CONDITIONAL(ENABLE_MPG123, test "$enable_mp3" = "yes")
+
+dnl *** id3lib
+dnl only makes sence if mp3's enabled
+if test "x$enable_mp3" = "xyes" ; then
+
+ID3LIBS=""
+have_id3lib="no"
+
+dnl here we assume that if libz isn't installed but id3lib is
+dnl it's compiled without compression support
+AC_CHECK_HEADERS([id3.h],[
+ AC_CHECK_LIB([z],[compress],[ZLIB='-lz'],[ZLIB=''])
+ AC_CHECK_LIB([id3],[ID3Tag_New],
+ [have_id3lib=yes
+ AC_DEFINE(HAVE_ID3LIB,,[Define when using id3lib])
+ ID3LIBS="-lstdc++ $ZLIB -lid3"],,[-lstdc++ $ZLIB])])
+
+AC_SUBST(ID3LIBS)
+
+fi dnl $enable_mp3 = yes
+
+dnl *** Ogg Vorbis
+
+AC_ARG_ENABLE(vorbis,
+ [ --disable-vorbis disable Ogg Vorbis input plugin (default=enabled)],
+ [enable_vorbis=$enableval],
+ [enable_vorbis="yes"]
+)
+
+if test "$enable_vorbis" = "yes"; then
+ PKG_CHECK_MODULES(OGG_VORBIS, [ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0],
+ [have_oggvorbis=yes],
+ [AC_MSG_ERROR([Cannot find libogg/libvorbis])
+ have_oggvorbis=no]
+ )
+else
+ AC_MSG_RESULT([*** Ogg Vorbis plugin disabled per user request ***])
+ have_oggvorbis=no
+fi
+
+AM_CONDITIONAL(HAVE_OGGVORBIS, [test "$have_oggvorbis" = "yes"])
+
+
+dnl *** OSS output
+
+AC_ARG_ENABLE(oss,
+ [ --disable-oss disable the OSS output plugin],
+ [have_oss=$enableval],
+ [have_oss=yes]
+)
+
+if test "$have_oss" = "yes"; then
+ AC_MSG_CHECKING(for OSS include dir)
+ OSS_CFLAGS=""
+ if test -f "/etc/oss.conf" ; then
+ for i in `cat /etc/oss.conf`; do
+ t=`echo $i | sed -e 's/OSSLIBDIR=//'`
+ if test "$i" != "$t" ; then
+ if test -f "$t/include/sys/soundcard.h" ; then
+ OSS_CFLAGS="-I$t/include"
+ fi
+ fi
+ done
+ fi
+ if test -n "$OSS_CFLAGS" ; then
+ AC_MSG_RESULT([$OSS_CFLAGS])
+ else
+ AC_MSG_RESULT([not found])
+ fi
+ CFLAGS_save=$CFLAGS
+ CFLAGS="$CFLAGS $OSS_CFLAGS"
+ AC_CHECK_HEADERS(sys/soundcard.h)
+ AC_CHECK_HEADERS(machine/soundcard.h)
+ CFLAGS=$CFLAGS_save
+
+ if test "${ac_cv_header_sys_soundcard_h}" = "yes" || test "${ac_cv_header_machine_soundcard_h}" = "yes"; then
+ have_oss=yes
+ fi
+fi
+
+if test "$have_oss" = "yes"; then
+ AC_DEFINE(HAVE_OSS, 1, [Define if the OSS output plugin should be built])
+else
+ have_oss=no
+fi
+
+AM_CONDITIONAL(HAVE_OSS, test "$have_oss" = "yes")
+
+
+dnl *** ALSA output plugin
+
+AC_ARG_ENABLE(alsa,
+ [ --disable-alsa disable ALSA input plugin (default=enabled)],
+ [enable_alsa=$enableval],
+ [enable_alsa=yes]
+)
+
+if test "$enable_alsa" = "yes"; then
+ PKG_CHECK_MODULES(ALSA, [alsa >= 1.0],
+ [have_alsa=yes],
+ [have_alsa=no]
+ )
+else
+ AC_MSG_RESULT([*** ALSA output plugin disabled per user request ***])
+ have_alsa=no
+fi
+
+AM_CONDITIONAL(HAVE_ALSA, test "$have_alsa" = "yes")
+
+
+dnl FreeBSD newpcm driver detection
+
+AC_CACHE_CHECK(for FreeBSD newpcm driver, beep_cv_newpcm_driver,
+ if test -r "/dev/sndstat"; then
+ grep 'newpcm' /dev/sndstat 2>/dev/null 1>/dev/null
+ if test "x$?" = "x0"; then
+ beep_cv_newpcm_driver="yes"
+ else
+ beep_cv_newpcm_driver="no"
+ fi
+ else
+ beep_cv_newpcm_driver="no"
+ fi
+)
+
+if test "$beep_cv_newpcm_driver" = "yes"; then
+ AC_DEFINE(HAVE_NEWPCM, 1, [Define if you have the FreeBSD newpcm driver])
+fi
+
+
+AC_CHECK_HEADERS(linux/cdrom.h)
+AC_CHECK_HEADERS(sys/cdio.h)
+AC_CHECK_HEADERS(linux/joystick.h)
+AC_CHECK_HEADERS(unistd.h)
+AC_CHECK_HEADERS(fcntl.h)
+AC_CHECK_HEADERS(sys/ioctl.h)
+AC_CHECK_HEADERS(fnmatch.h)
+AC_CHECK_HEADERS(limits.h)
+AC_CHECK_HEADERS(wchar.h)
+AC_CHECK_HEADERS(fts.h)
+
+AC_CHECK_FUNCS(mkdtemp)
+AC_CHECK_FUNCS(getmntinfo)
+AC_CHECK_FUNCS(strtoul)
+
+
+if test "${ac_cv_header_linux_cdrom_h}" = "yes" || test "${ac_cv_header_sys_cdio_h}" = "yes"
+then
+ case "$host" in
+ *-*-sunos* | *-*-solaris* | *-*-linux*)
+ AC_DEFINE(BEEP_CDROM_SOLARIS,, [Define if cdrom access is in Solaris style])
+ ;;
+ *-*-freebsd*)
+ AC_DEFINE(BEEP_CDROM_BSD,, [Define if cdrom access is in BSD style])
+ ;;
+ *-*-netbsd* | *-*-openbsd*)
+ AC_DEFINE(BEEP_CDROM_BSD,, [Define if cdrom access is in BSD style])
+ AC_DEFINE(BEEP_CDROM_BSD_NETBSD,, [Define if cdrom access uses NetBSD variant])
+ ;;
+ *-*darwin*)
+ AC_DEFINE(BEEP_CDROM_BSD,, [Define if cdrom access is in BSD style])
+ AC_DEFINE(BEEP_CDROM_BSD_DARWIN,, [Define if cdrom access uses Darwin variant])
+ ;;
+ esac
+fi
+
+
+AM_CONDITIONAL(HAVE_CDROM, test "${ac_cv_header_linux_cdrom_h}" = "yes" || test "${ac_cv_header_sys_cdio_h}" = "yes")
+AM_CONDITIONAL(HAVE_LINUX_JOYSTICK,test "${ac_cv_header_linux_joystick_h}" = "yes")
+
+if test -n "$GCC"
+then
+ CFLAGS="$CFLAGS -Wall -Wpointer-arith -finline-functions -ffast-math"
+ case "$CFLAGS" in
+ -g*) ;;
+ *\ -g*) ;;
+ *) CFLAGS="$CFLAGS -fomit-frame-pointer" ;;
+ esac
+ case "$host" in
+ *-*-freebsd*)
+ ;;
+ *)
+ CFLAGS="$CFLAGS -funroll-all-loops"
+ ;;
+ esac
+fi
+
+AC_MSG_CHECKING(if __ELF__ is defined)
+AC_EGREP_CPP(yes,
+ [#ifdef __ELF__
+ yes
+ #endif
+ ],
+ [is_elf=yes],
+ [is_elf=no]
+)
+AC_MSG_RESULT([${is_elf}])
+
+
+have_solaris=no
+have_sun=no
+ARCH_DEFINES=""
+case "$host" in
+ *-*-openbsd* | *-*-netbsd*)
+ have_sun=yes
+ if test "${is_elf}" = "no"
+ then
+ AC_DEFINE(SYMBOL_PREFIX, "_", [Define to symbol prefix, if any])
+ fi
+ ;;
+ *-*-darwin*)
+ AC_DEFINE(SYMBOL_PREFIX, "_", [Define to symbol prefix, if any])
+ ;;
+ *-hpux-*)
+ ARCH_DEFINES="-DHPUX"
+ ;;
+ *-*-solaris* | *-*-sunos*)
+ have_solaris=yes
+ ;;
+esac
+
+arch_type=other
+x86_asm=no
+case "$host" in
+ i386-*-* | i486-*-* | i586-*-* | i686-*-* | i86pc-*-*)
+ arch_type=ix86
+ case "$host" in
+ *-*-netbsd* | *-*openbsd*)
+ ;;
+ *)
+ ARCH_DEFINES="-DI386_ASSEM"
+ x86_asm=yes
+ ;;
+ esac
+ ;;
+esac
+
+
+AC_SUBST(ARCH_DEFINES)
+AM_CONDITIONAL(ARCH_X86, test "x$arch_type" = "xix86")
+AM_CONDITIONAL(USE_X86ASM, test "x$x86_asm" = xyes)
+AM_CONDITIONAL(HAVE_SOLARIS, test "x$have_solaris" = xyes)
+AM_CONDITIONAL(HAVE_SUN, test "x$have_sun" = xyes)
+
+plugindir=$libdir/bmp
+AC_SUBST(plugindir)
+
+if test "x$enable_one_plugin_dir" = "xyes"; then
+ pluginsubs="\\\"Plugins\\\""
+ INPUT_PLUGIN_DIR=Plugins
+ OUTPUT_PLUGIN_DIR=Plugins
+ EFFECT_PLUGIN_DIR=Plugins
+ GENERAL_PLUGIN_DIR=Plugins
+ VISUALIZATION_PLUGIN_DIR=Plugins
+else
+ pluginsubs="\\\"Output\\\",\\\"Input\\\",\\\"Effect\\\",\\\"General\\\",\\\"Visualization\\\""
+ INPUT_PLUGIN_DIR=Input
+ OUTPUT_PLUGIN_DIR=Output
+ EFFECT_PLUGIN_DIR=Effect
+ GENERAL_PLUGIN_DIR=General
+ VISUALIZATION_PLUGIN_DIR=Visualization
+fi
+
+AC_SUBST(INPUT_PLUGIN_DIR)
+AC_SUBST(OUTPUT_PLUGIN_DIR)
+AC_SUBST(EFFECT_PLUGIN_DIR)
+AC_SUBST(GENERAL_PLUGIN_DIR)
+AC_SUBST(VISUALIZATION_PLUGIN_DIR)
+AC_SUBST(pluginsubs)
+
+localedir=$datadir/locale
+AC_SUBST(localedir)
+
+BEEP_DEFINES="$CFLAGS -DDATA_DIR=\\\"$datadir/bmp\\\" -DPLUGIN_DIR=\\\"$plugindir\\\" -DPLUGINSUBS=$pluginsubs -DLOCALEDIR=\\\"$localedir\\\""
+CFLAGS="$CFLAGS $EXTRA_CFLAGS"
+
+if test "$enable_user_plugin_dir" = "no"; then
+ AC_DEFINE(DISABLE_USER_PLUGIN_DIR,, [Define to disable per user plugin directory])
+fi
+
+AC_SUBST(BEEP_DEFINES)
+
+PLUGIN_LDFLAGS='-module -avoid-version -export-symbols-regex "get_.plugin_info"'
+AC_SUBST(PLUGIN_LDFLAGS)
+
+AC_SUBST(beepdir)
+AC_SUBST(plugindir)
+
+AC_CONFIG_FILES([
+ Makefile
+ beep-media-player.1
+ bmp.spec
+ bmp.pc
+ beep/bmp.desktop
+ beep/Makefile
+ libbeep/Makefile
+ Output/Makefile
+ Output/OSS/Makefile
+ Output/esd/Makefile
+ Output/alsa/Makefile
+ Input/Makefile
+ Input/mpg123/Makefile
+ Input/vorbis/Makefile
+ Input/cdaudio/Makefile
+ Input/wav/Makefile
+ Visualization/Makefile
+ Visualization/blur_scope/Makefile
+ po/Makefile.in
+ intl/Makefile
+ images/Makefile
+])
+
+AC_OUTPUT
+
+
+echo
+echo "Configuration:"
+echo
+echo " Install path: ${prefix}"
+
+if test "$BEEP_PATH" != "no"; then
+ echo " Current beep executable: $BEEP_PATH"
+fi
+
+echo " Configuration path: \$HOME/$rc_path"
+echo
+echo " Use one plugin dir: $enable_one_plugin_dir"
+echo " Allow user plugin dir: $enable_user_plugin_dir"
+echo
+echo " XMMS Legacy"
+echo " -----------"
+echo " Equalization (works only with mpg123) $use_xmms_eq"
+echo
+echo " GNOME support"
+echo " -------------"
+echo " GConf support $enable_gconf"
+echo " VFS support $enable_gnomevfs"
+echo
+echo " Output Plugins"
+echo " --------------"
+echo " Open Sound System (oss): $have_oss"
+echo " Advanced Linux Sound Arch. (alsa): $have_alsa"
+echo " Enlightenment Sound Daemon (esd): $have_esd"
+echo
+echo " Input Plugins"
+echo " -------------"
+echo " MPEG 1/2/3 (mpg123): $enable_mp3"
+echo " + id3v2 editing: $have_id3lib"
+echo " CD Digital Audio (cdda): yes"
+echo " Microsoft WAV (wav): yes"
+echo " Ogg Vorbis (vorbis): $have_oggvorbis"
+echo ""
+echo " Visualization"
+echo " -------------"
+echo " Blur Scope: yes"
+echo
+
+if test "$beep_cv_lib_xlibs_threadsafe" = "no"; then
+ echo "Note: You need to have thread-safe xlibs to use beep."
+ echo "If you are using libc5 thread aware Xlibs just skip this."
+ echo ""
+ echo "If you don't have those libs and you are on a libc5 system get them at:"
+ echo "ftp://ftp.dent.med.uni-muenchen.de/pub/wmglo/"
+fi
+
+if test "$BEEP_PATH" != "no" && test "$prefix/bin/beep-media-player" != "$BEEP_PATH" ; then
+ echo ""
+ echo "Note: Configure has discovered that you already have BMP installed"
+ echo "and it does not match with the given --prefix. You have BMP installed "
+ echo "in $(dirname $BEEP_PATH) and you chose $prefix/bin."
+ echo
+ echo "If you don't want two copies of BMP installed, rerun configure with"
+ echo "the --prefix option set to the location of the old BMP, or uninstall"
+ echo "the old BMP."
+fi
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,46 @@
+imagesdir = $(datadir)/images
+images_DATA = bg-music-player.png \
+ btn-menu.png \
+ btn-white.png \
+ btn-white-p.png \
+ ico-list.png \
+ ico-nexttrack.png \
+ icon-musicplayer-song.png \
+ icon-musicplayer-time.png \
+ ico-pause.png \
+ ico-play.png \
+ ico-previoustrack.png \
+ ico-repeat.png \
+ ico-shuffle.png \
+ ind-music-eq-01.png \
+ ind-music-eq-02.png \
+ ind-music-eq-03.png \
+ ind-music-eq-04.png \
+ ind-music-eq-05.png \
+ ind-music-eq-06.png \
+ ind-music-eq-07.png \
+ ind-music-eq-08.png \
+ ind-music-eq-09.png \
+ ind-music-eq-10.png \
+ ind-music-eq-11.png \
+ ind-music-eq-12.png \
+ ind-music-pan-0.png \
+ ind-music-pan--1.png \
+ ind-music-pan-1.png \
+ ind-music-pan--2.png \
+ ind-music-pan-2.png \
+ ind-music-pan--3.png \
+ ind-music-pan-3.png \
+ ind-music-volume-00.png \
+ ind-music-volume-01.png \
+ ind-music-volume-02.png \
+ ind-music-volume-03.png \
+ ind-music-volume-04.png \
+ ind-music-volume-05.png \
+ ind-music-volume-06.png \
+ ind-music-volume-07.png \
+ ind-music-volume-08.png \
+ ind-music-volume-09.png \
+ ind-music-volume-10.png
+
+EXTRA_DIST = $(images_DATA)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/bg-music-player.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/bg-music-player.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-menu.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-menu.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-white-p.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-white-p.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-white.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/btn-white.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-list.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-list.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-nexttrack.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-nexttrack.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-pause.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-pause.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-play.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-play.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-previoustrack.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-previoustrack.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-repeat.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-repeat.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-shuffle.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ico-shuffle.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/icon-musicplayer-song.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/icon-musicplayer-song.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/icon-musicplayer-time.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/icon-musicplayer-time.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-01.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-01.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-02.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-02.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-03.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-03.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-04.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-04.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-05.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-05.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-06.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-06.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-07.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-07.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-08.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-08.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-09.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-09.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-10.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-10.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-11.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-11.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-12.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-eq-12.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--1.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--2.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--3.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan--3.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-0.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-0.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-1.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-2.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-3.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-pan-3.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-00.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-00.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-01.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-01.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-02.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-02.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-03.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-03.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-04.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-04.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-05.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-05.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-06.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-06.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-07.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-07.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-08.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-08.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-09.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-09.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-10.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/ind-music-volume-10.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/slider-bar.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/slider-bar.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/slider_btn.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/images/slider_btn.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ChangeLog
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ChangeLog 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ChangeLog 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,4 @@
+2003-05-22 GNU <bug-gnu-gettext at gnu.org>
+
+ * Version 0.12.1 released.
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/VERSION
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/VERSION 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/VERSION 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.12.1
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/bindtextdom.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/bindtextdom.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/bindtextdom.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,374 @@
+/* Implementation of the bindtextdomain(3) function
+ Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs. */
+extern const char _nl_default_dirname[];
+#ifdef _LIBC
+extern const char _nl_default_dirname_internal[] attribute_hidden;
+#else
+# define INTUSE(name) name
+#endif
+
+/* List with bindings of specific domains. */
+extern struct binding *_nl_domain_bindings;
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
+#endif
+
+/* Prototypes for local functions. */
+static void set_binding_values PARAMS ((const char *domainname,
+ const char **dirnamep,
+ const char **codesetp));
+
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+ to be used for the DOMAINNAME message catalog.
+ If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+ modified, only the current value is returned.
+ If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+ modified nor returned. */
+static void
+set_binding_values (domainname, dirnamep, codesetp)
+ const char *domainname;
+ const char **dirnamep;
+ const char **codesetp;
+{
+ struct binding *binding;
+ int modified;
+
+ /* Some sanity checks. */
+ if (domainname == NULL || domainname[0] == '\0')
+ {
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ return;
+ }
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ modified = 0;
+
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding != NULL)
+ {
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The current binding has be to returned. */
+ *dirnamep = binding->dirname;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->dirname;
+ if (strcmp (dirname, result) != 0)
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ result = (char *) INTUSE(_nl_default_dirname);
+ else
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, dirname, len);
+#endif
+ }
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->dirname != INTUSE(_nl_default_dirname))
+ free (binding->dirname);
+
+ binding->dirname = result;
+ modified = 1;
+ }
+ }
+ *dirnamep = result;
+ }
+ }
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset == NULL)
+ /* The current binding has be to returned. */
+ *codesetp = binding->codeset;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->codeset;
+ if (result == NULL || strcmp (codeset, result) != 0)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, codeset, len);
+#endif
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->codeset != NULL)
+ free (binding->codeset);
+
+ binding->codeset = result;
+ binding->codeset_cntr++;
+ modified = 1;
+ }
+ }
+ *codesetp = result;
+ }
+ }
+ }
+ else if ((dirnamep == NULL || *dirnamep == NULL)
+ && (codesetp == NULL || *codesetp == NULL))
+ {
+ /* Simply return the default values. */
+ if (dirnamep)
+ *dirnamep = INTUSE(_nl_default_dirname);
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ else
+ {
+ /* We have to create a new binding. */
+ size_t len = strlen (domainname) + 1;
+ struct binding *new_binding =
+ (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+ if (__builtin_expect (new_binding == NULL, 0))
+ goto failed;
+
+ memcpy (new_binding->domainname, domainname, len);
+
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The default value. */
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ char *result;
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+ memcpy (result, dirname, len);
+#endif
+ dirname = result;
+ }
+ }
+ *dirnamep = dirname;
+ new_binding->dirname = (char *) dirname;
+ }
+ else
+ /* The default value. */
+ new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
+
+ new_binding->codeset_cntr = 0;
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset != NULL)
+ {
+ char *result;
+
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+ memcpy (result, codeset, len);
+#endif
+ codeset = result;
+ new_binding->codeset_cntr++;
+ }
+ *codesetp = codeset;
+ new_binding->codeset = (char *) codeset;
+ }
+ else
+ new_binding->codeset = NULL;
+
+ /* Now enqueue it. */
+ if (_nl_domain_bindings == NULL
+ || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+ {
+ new_binding->next = _nl_domain_bindings;
+ _nl_domain_bindings = new_binding;
+ }
+ else
+ {
+ binding = _nl_domain_bindings;
+ while (binding->next != NULL
+ && strcmp (domainname, binding->next->domainname) > 0)
+ binding = binding->next;
+
+ new_binding->next = binding->next;
+ binding->next = new_binding;
+ }
+
+ modified = 1;
+
+ /* Here we deal with memory allocation failures. */
+ if (0)
+ {
+ failed_codeset:
+ if (new_binding->dirname != INTUSE(_nl_default_dirname))
+ free (new_binding->dirname);
+ failed_dirname:
+ free (new_binding);
+ failed:
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ }
+
+ /* If we modified any binding, we flush the caches. */
+ if (modified)
+ ++_nl_msg_cat_cntr;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+ const char *domainname;
+ const char *dirname;
+{
+ set_binding_values (domainname, &dirname, NULL);
+ return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+char *
+BIND_TEXTDOMAIN_CODESET (domainname, codeset)
+ const char *domainname;
+ const char *codeset;
+{
+ set_binding_values (domainname, NULL, &codeset);
+ return (char *) codeset;
+}
+
+#ifdef _LIBC
+/* Aliases for function names in GNU C Library. */
+weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/config.charset
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/config.charset 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/config.charset 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,467 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+# Copyright (C) 2000-2003 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# The table consists of lines of the form
+# ALIAS CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+# name used by which systems a MIME name?
+# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
+# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
+# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
+# ISO-8859-3 glibc solaris yes
+# ISO-8859-4 osf solaris freebsd yes
+# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
+# ISO-8859-6 glibc aix hpux solaris yes
+# ISO-8859-7 glibc aix hpux irix osf solaris yes
+# ISO-8859-8 glibc aix hpux osf solaris yes
+# ISO-8859-9 glibc aix hpux irix osf solaris yes
+# ISO-8859-13 glibc
+# ISO-8859-14 glibc
+# ISO-8859-15 glibc aix osf solaris freebsd
+# KOI8-R glibc solaris freebsd yes
+# KOI8-U glibc freebsd yes
+# KOI8-T glibc
+# CP437 dos
+# CP775 dos
+# CP850 aix osf dos
+# CP852 dos
+# CP855 dos
+# CP856 aix
+# CP857 dos
+# CP861 dos
+# CP862 dos
+# CP864 dos
+# CP865 dos
+# CP866 freebsd dos
+# CP869 dos
+# CP874 woe32 dos
+# CP922 aix
+# CP932 aix woe32 dos
+# CP943 aix
+# CP949 osf woe32 dos
+# CP950 woe32 dos
+# CP1046 aix
+# CP1124 aix
+# CP1125 dos
+# CP1129 aix
+# CP1250 woe32
+# CP1251 glibc solaris woe32
+# CP1252 aix woe32
+# CP1253 woe32
+# CP1254 woe32
+# CP1255 glibc woe32
+# CP1256 woe32
+# CP1257 woe32
+# GB2312 glibc aix hpux irix solaris freebsd yes
+# EUC-JP glibc aix hpux irix osf solaris freebsd yes
+# EUC-KR glibc aix hpux irix osf solaris freebsd yes
+# EUC-TW glibc aix hpux irix osf solaris
+# BIG5 glibc aix hpux osf solaris freebsd yes
+# BIG5-HKSCS glibc solaris
+# GBK glibc aix osf solaris woe32 dos
+# GB18030 glibc solaris
+# SHIFT_JIS hpux osf solaris freebsd yes
+# JOHAB glibc solaris woe32
+# TIS-620 glibc aix hpux osf solaris
+# VISCII glibc yes
+# TCVN5712-1 glibc
+# GEORGIAN-PS glibc
+# HP-ROMAN8 hpux
+# HP-ARABIC8 hpux
+# HP-GREEK8 hpux
+# HP-HEBREW8 hpux
+# HP-TURKISH8 hpux
+# HP-KANA8 hpux
+# DEC-KANJI osf
+# DEC-HANYU osf
+# UTF-8 glibc aix hpux osf solaris yes
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+ linux* | *-gnu*)
+ # With glibc-2.1 or newer, we don't need any canonicalization,
+ # because glibc has iconv and both glibc and libiconv support all
+ # GNU canonical names directly. Therefore, the Makefile does not
+ # need to install the alias file at all.
+ # The following applies only to glibc-2.0.x and older libcs.
+ echo "ISO_646.IRV:1983 ASCII"
+ ;;
+ aix*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-6 ISO-8859-6"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "IBM-850 CP850"
+ echo "IBM-856 CP856"
+ echo "IBM-921 ISO-8859-13"
+ echo "IBM-922 CP922"
+ echo "IBM-932 CP932"
+ echo "IBM-943 CP943"
+ echo "IBM-1046 CP1046"
+ echo "IBM-1124 CP1124"
+ echo "IBM-1129 CP1129"
+ echo "IBM-1252 CP1252"
+ echo "IBM-eucCN GB2312"
+ echo "IBM-eucJP EUC-JP"
+ echo "IBM-eucKR EUC-KR"
+ echo "IBM-eucTW EUC-TW"
+ echo "big5 BIG5"
+ echo "GBK GBK"
+ echo "TIS-620 TIS-620"
+ echo "UTF-8 UTF-8"
+ ;;
+ hpux*)
+ echo "iso88591 ISO-8859-1"
+ echo "iso88592 ISO-8859-2"
+ echo "iso88595 ISO-8859-5"
+ echo "iso88596 ISO-8859-6"
+ echo "iso88597 ISO-8859-7"
+ echo "iso88598 ISO-8859-8"
+ echo "iso88599 ISO-8859-9"
+ echo "iso885915 ISO-8859-15"
+ echo "roman8 HP-ROMAN8"
+ echo "arabic8 HP-ARABIC8"
+ echo "greek8 HP-GREEK8"
+ echo "hebrew8 HP-HEBREW8"
+ echo "turkish8 HP-TURKISH8"
+ echo "kana8 HP-KANA8"
+ echo "tis620 TIS-620"
+ echo "big5 BIG5"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "hp15CN GB2312"
+ #echo "ccdc ?" # what is this?
+ echo "SJIS SHIFT_JIS"
+ echo "utf8 UTF-8"
+ ;;
+ irix*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "eucCN GB2312"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ ;;
+ osf*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "cp850 CP850"
+ echo "big5 BIG5"
+ echo "dechanyu DEC-HANYU"
+ echo "dechanzi GB2312"
+ echo "deckanji DEC-KANJI"
+ echo "deckorean EUC-KR"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "GBK GBK"
+ echo "KSC5601 CP949"
+ echo "sdeckanji EUC-JP"
+ echo "SJIS SHIFT_JIS"
+ echo "TACTIS TIS-620"
+ echo "UTF-8 UTF-8"
+ ;;
+ solaris*)
+ echo "646 ASCII"
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-3 ISO-8859-3"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-6 ISO-8859-6"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "koi8-r KOI8-R"
+ echo "ansi-1251 CP1251"
+ echo "BIG5 BIG5"
+ echo "Big5-HKSCS BIG5-HKSCS"
+ echo "gb2312 GB2312"
+ echo "GBK GBK"
+ echo "GB18030 GB18030"
+ echo "cns11643 EUC-TW"
+ echo "5601 EUC-KR"
+ echo "ko_KR.johap92 JOHAB"
+ echo "eucJP EUC-JP"
+ echo "PCK SHIFT_JIS"
+ echo "TIS620.2533 TIS-620"
+ #echo "sun_eu_greek ?" # what is this?
+ echo "UTF-8 UTF-8"
+ ;;
+ freebsd* | os2*)
+ # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+ # reuse FreeBSD's locale data for OS/2.
+ echo "C ASCII"
+ echo "US-ASCII ASCII"
+ for l in la_LN lt_LN; do
+ echo "$l.ASCII ASCII"
+ done
+ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+ echo "$l.ISO_8859-1 ISO-8859-1"
+ echo "$l.DIS_8859-15 ISO-8859-15"
+ done
+ for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+ echo "$l.ISO_8859-2 ISO-8859-2"
+ done
+ for l in la_LN lt_LT; do
+ echo "$l.ISO_8859-4 ISO-8859-4"
+ done
+ for l in ru_RU ru_SU; do
+ echo "$l.KOI8-R KOI8-R"
+ echo "$l.ISO_8859-5 ISO-8859-5"
+ echo "$l.CP866 CP866"
+ done
+ echo "uk_UA.KOI8-U KOI8-U"
+ echo "zh_TW.BIG5 BIG5"
+ echo "zh_TW.Big5 BIG5"
+ echo "zh_CN.EUC GB2312"
+ echo "ja_JP.EUC EUC-JP"
+ echo "ja_JP.SJIS SHIFT_JIS"
+ echo "ja_JP.Shift_JIS SHIFT_JIS"
+ echo "ko_KR.EUC EUC-KR"
+ ;;
+ netbsd*)
+ echo "646 ASCII"
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "eucCN GB2312"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "BIG5 BIG5"
+ echo "SJIS SHIFT_JIS"
+ ;;
+ beos*)
+ # BeOS has a single locale, and it has UTF-8 encoding.
+ echo "* UTF-8"
+ ;;
+ msdosdjgpp*)
+ # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "#"
+ echo "# The encodings given here may not all be correct."
+ echo "# If you find that the encoding given for your language and"
+ echo "# country is not the one your DOS machine actually uses, just"
+ echo "# correct it in this file, and send a mail to"
+ echo "# Juan Manuel Guerrero <st001906 at hrz1.hrz.tu-darmstadt.de>"
+ echo "# and Bruno Haible <bruno at clisp.org>."
+ echo "#"
+ echo "C ASCII"
+ # ISO-8859-1 languages
+ echo "ca CP850"
+ echo "ca_ES CP850"
+ echo "da CP865" # not CP850 ??
+ echo "da_DK CP865" # not CP850 ??
+ echo "de CP850"
+ echo "de_AT CP850"
+ echo "de_CH CP850"
+ echo "de_DE CP850"
+ echo "en CP850"
+ echo "en_AU CP850" # not CP437 ??
+ echo "en_CA CP850"
+ echo "en_GB CP850"
+ echo "en_NZ CP437"
+ echo "en_US CP437"
+ echo "en_ZA CP850" # not CP437 ??
+ echo "es CP850"
+ echo "es_AR CP850"
+ echo "es_BO CP850"
+ echo "es_CL CP850"
+ echo "es_CO CP850"
+ echo "es_CR CP850"
+ echo "es_CU CP850"
+ echo "es_DO CP850"
+ echo "es_EC CP850"
+ echo "es_ES CP850"
+ echo "es_GT CP850"
+ echo "es_HN CP850"
+ echo "es_MX CP850"
+ echo "es_NI CP850"
+ echo "es_PA CP850"
+ echo "es_PY CP850"
+ echo "es_PE CP850"
+ echo "es_SV CP850"
+ echo "es_UY CP850"
+ echo "es_VE CP850"
+ echo "et CP850"
+ echo "et_EE CP850"
+ echo "eu CP850"
+ echo "eu_ES CP850"
+ echo "fi CP850"
+ echo "fi_FI CP850"
+ echo "fr CP850"
+ echo "fr_BE CP850"
+ echo "fr_CA CP850"
+ echo "fr_CH CP850"
+ echo "fr_FR CP850"
+ echo "ga CP850"
+ echo "ga_IE CP850"
+ echo "gd CP850"
+ echo "gd_GB CP850"
+ echo "gl CP850"
+ echo "gl_ES CP850"
+ echo "id CP850" # not CP437 ??
+ echo "id_ID CP850" # not CP437 ??
+ echo "is CP861" # not CP850 ??
+ echo "is_IS CP861" # not CP850 ??
+ echo "it CP850"
+ echo "it_CH CP850"
+ echo "it_IT CP850"
+ echo "lt CP775"
+ echo "lt_LT CP775"
+ echo "lv CP775"
+ echo "lv_LV CP775"
+ echo "nb CP865" # not CP850 ??
+ echo "nb_NO CP865" # not CP850 ??
+ echo "nl CP850"
+ echo "nl_BE CP850"
+ echo "nl_NL CP850"
+ echo "nn CP865" # not CP850 ??
+ echo "nn_NO CP865" # not CP850 ??
+ echo "no CP865" # not CP850 ??
+ echo "no_NO CP865" # not CP850 ??
+ echo "pt CP850"
+ echo "pt_BR CP850"
+ echo "pt_PT CP850"
+ echo "sv CP850"
+ echo "sv_SE CP850"
+ # ISO-8859-2 languages
+ echo "cs CP852"
+ echo "cs_CZ CP852"
+ echo "hr CP852"
+ echo "hr_HR CP852"
+ echo "hu CP852"
+ echo "hu_HU CP852"
+ echo "pl CP852"
+ echo "pl_PL CP852"
+ echo "ro CP852"
+ echo "ro_RO CP852"
+ echo "sk CP852"
+ echo "sk_SK CP852"
+ echo "sl CP852"
+ echo "sl_SI CP852"
+ echo "sq CP852"
+ echo "sq_AL CP852"
+ echo "sr CP852" # CP852 or CP866 or CP855 ??
+ echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+ # ISO-8859-3 languages
+ echo "mt CP850"
+ echo "mt_MT CP850"
+ # ISO-8859-5 languages
+ echo "be CP866"
+ echo "be_BE CP866"
+ echo "bg CP866" # not CP855 ??
+ echo "bg_BG CP866" # not CP855 ??
+ echo "mk CP866" # not CP855 ??
+ echo "mk_MK CP866" # not CP855 ??
+ echo "ru CP866"
+ echo "ru_RU CP866"
+ echo "uk CP1125"
+ echo "uk_UA CP1125"
+ # ISO-8859-6 languages
+ echo "ar CP864"
+ echo "ar_AE CP864"
+ echo "ar_DZ CP864"
+ echo "ar_EG CP864"
+ echo "ar_IQ CP864"
+ echo "ar_IR CP864"
+ echo "ar_JO CP864"
+ echo "ar_KW CP864"
+ echo "ar_MA CP864"
+ echo "ar_OM CP864"
+ echo "ar_QA CP864"
+ echo "ar_SA CP864"
+ echo "ar_SY CP864"
+ # ISO-8859-7 languages
+ echo "el CP869"
+ echo "el_GR CP869"
+ # ISO-8859-8 languages
+ echo "he CP862"
+ echo "he_IL CP862"
+ # ISO-8859-9 languages
+ echo "tr CP857"
+ echo "tr_TR CP857"
+ # Japanese
+ echo "ja CP932"
+ echo "ja_JP CP932"
+ # Chinese
+ echo "zh_CN GBK"
+ echo "zh_TW CP950" # not CP938 ??
+ # Korean
+ echo "kr CP949" # not CP934 ??
+ echo "kr_KR CP949" # not CP934 ??
+ # Thai
+ echo "th CP874"
+ echo "th_TH CP874"
+ # Other
+ echo "eo CP850"
+ echo "eo_EO CP850"
+ ;;
+esac
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/config.charset
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcgettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcgettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcgettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,59 @@
+/* Implementation of the dcgettext(3) function.
+ Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCGETTEXT (domainname, msgid, category)
+ const char *domainname;
+ const char *msgid;
+ int category;
+{
+ return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+INTDEF(__dcgettext)
+weak_alias (__dcgettext, dcgettext);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcigettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcigettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcigettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1238 @@
+/* Implementation of the internal dcigettext function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#ifdef _LIBC
+ /* Guess whether integer division by zero raises signal SIGFPE.
+ Set to 1 only if you know for sure. In case of doubt, set to 0. */
+# if defined __alpha__ || defined __arm__ || defined __i386__ \
+ || defined __m68k__ || defined __s390__
+# define INTDIV0_RAISES_SIGFPE 1
+# else
+# define INTDIV0_RAISES_SIGFPE 0
+# endif
+#endif
+#if !INTDIV0_RAISES_SIGFPE
+# include <signal.h>
+#endif
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness. */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types. */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define getcwd __getcwd
+# ifndef stpcpy
+# define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+# define getcwd(buf, max) getwd (buf)
+# else
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try. */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h. */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+ PATH_MAX but might cause redefinition warnings when sys/param.h is
+ later included (as on MORE/BSD 4.3). */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been. */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* This is the type used for the search tree where known translations
+ are stored. */
+struct known_translation_t
+{
+ /* Domain in which to search. */
+ char *domainname;
+
+ /* The category. */
+ int category;
+
+ /* State of the catalog counter at the point the string was found. */
+ int counter;
+
+ /* Catalog where the string was found. */
+ struct loaded_l10nfile *domain;
+
+ /* And finally the translation. */
+ const char *translation;
+ size_t translation_length;
+
+ /* Pointer to the string in question. */
+ char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations. We can use this
+ only if the system provides the `tsearch' function family. */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+# define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations. */
+static int transcmp PARAMS ((const void *p1, const void *p2));
+static int
+transcmp (p1, p2)
+ const void *p1;
+ const void *p2;
+{
+ const struct known_translation_t *s1;
+ const struct known_translation_t *s2;
+ int result;
+
+ s1 = (const struct known_translation_t *) p1;
+ s2 = (const struct known_translation_t *) p2;
+
+ result = strcmp (s1->msgid, s2->msgid);
+ if (result == 0)
+ {
+ result = strcmp (s1->domainname, s2->domainname);
+ if (result == 0)
+ /* We compare the category last (though this is the cheapest
+ operation) since it is hopefully always the same (namely
+ LC_MESSAGES). */
+ result = s1->category - s2->category;
+ }
+
+ return result;
+}
+#endif
+
+#ifndef INTVARDEF
+# define INTVARDEF(name)
+#endif
+#ifndef INTUSE
+# define INTUSE(name) name
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+ textdomain(3). The default value for this is "messages". */
+const char _nl_default_default_domain[] attribute_hidden = "messages";
+
+/* Value used as the default domain for gettext(3). */
+const char *_nl_current_default_domain attribute_hidden
+ = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs. */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+const char _nl_default_dirname[] = LOCALEDIR;
+INTVARDEF (_nl_default_dirname)
+#endif
+
+/* List with bindings of specific domains created by bindtextdomain()
+ calls. */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions. */
+static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
+ unsigned long int n,
+ const char *translation,
+ size_t translation_len))
+ internal_function;
+static const char *guess_category_value PARAMS ((int category,
+ const char *categoryname))
+ internal_function;
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category) _nl_category_names[category]
+#else
+static const char *category_to_name PARAMS ((int category)) internal_function;
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done. */
+# define freea(p) /* nothing */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+ void *address;
+ struct block_list *next;
+};
+# define ADD_BLOCK(list, addr) \
+ do { \
+ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+ /* If we cannot get a free block we cannot add the new element to \
+ the list. */ \
+ if (newp != NULL) { \
+ newp->address = (addr); \
+ newp->next = (list); \
+ (list) = newp; \
+ } \
+ } while (0)
+# define FREE_BLOCKS(list) \
+ do { \
+ while (list != NULL) { \
+ struct block_list *old = list; \
+ list = list->next; \
+ free (old->address); \
+ free (old); \
+ } \
+ } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+# define freea(p) free (p)
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations. */
+typedef struct transmem_list
+{
+ struct transmem_list *next;
+ char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+ easier methods therefore we make a difference here. */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+# define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+# define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+# define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+# define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+ if (enable_secure == 0) \
+ { \
+ if (getuid () != geteuid () || getgid () != getegid ()) \
+ enable_secure = 1; \
+ else \
+ enable_secure = -1; \
+ }
+#endif
+
+/* Get the function to evaluate the plural expression. */
+#include "eval-plural.h"
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ CATEGORY locale and, if PLURAL is nonzero, search over string
+ depending on the plural form determined by N. */
+char *
+DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ int plural;
+ unsigned long int n;
+ int category;
+{
+#ifndef HAVE_ALLOCA
+ struct block_list *block_list = NULL;
+#endif
+ struct loaded_l10nfile *domain;
+ struct binding *binding;
+ const char *categoryname;
+ const char *categoryvalue;
+ char *dirname, *xdomainname;
+ char *single_locale;
+ char *retval;
+ size_t retlen;
+ int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+ struct known_translation_t *search;
+ struct known_translation_t **foundp = NULL;
+ size_t msgid_len;
+#endif
+ size_t domainname_len;
+
+ /* If no real MSGID is given return NULL. */
+ if (msgid1 == NULL)
+ return NULL;
+
+#ifdef _LIBC
+ if (category < 0 || category >= __LC_LAST || category == LC_ALL)
+ /* Bogus. */
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+#endif
+
+ __libc_rwlock_rdlock (_nl_state_lock);
+
+ /* If DOMAINNAME is NULL, we are interested in the default domain. If
+ CATEGORY is not LC_MESSAGES this might not make much sense but the
+ definition left this undefined. */
+ if (domainname == NULL)
+ domainname = _nl_current_default_domain;
+
+ /* OS/2 specific: backward compatibility with older libintl versions */
+#ifdef LC_MESSAGES_COMPAT
+ if (category == LC_MESSAGES_COMPAT)
+ category = LC_MESSAGES;
+#endif
+
+#if defined HAVE_TSEARCH || defined _LIBC
+ msgid_len = strlen (msgid1) + 1;
+
+ /* Try to find the translation among those which we found at
+ some time. */
+ search = (struct known_translation_t *)
+ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+ memcpy (search->msgid, msgid1, msgid_len);
+ search->domainname = (char *) domainname;
+ search->category = category;
+
+ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+ freea (search);
+ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+ {
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+ (*foundp)->translation_length);
+ else
+ retval = (char *) (*foundp)->translation;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+#endif
+
+ /* Preserve the `errno' value. */
+ saved_errno = errno;
+
+ /* See whether this is a SUID binary or not. */
+ DETERMINE_SECURE;
+
+ /* First find matching binding. */
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding == NULL)
+ dirname = (char *) INTUSE(_nl_default_dirname);
+ else if (IS_ABSOLUTE_PATH (binding->dirname))
+ dirname = binding->dirname;
+ else
+ {
+ /* We have a relative path. Make it absolute now. */
+ size_t dirname_len = strlen (binding->dirname) + 1;
+ size_t path_max;
+ char *ret;
+
+ path_max = (unsigned int) PATH_MAX;
+ path_max += 2; /* The getcwd docs say to do this. */
+
+ for (;;)
+ {
+ dirname = (char *) alloca (path_max + dirname_len);
+ ADD_BLOCK (block_list, dirname);
+
+ __set_errno (0);
+ ret = getcwd (dirname, path_max);
+ if (ret != NULL || errno != ERANGE)
+ break;
+
+ path_max += path_max / 2;
+ path_max += PATH_INCR;
+ }
+
+ if (ret == NULL)
+ /* We cannot get the current working directory. Don't signal an
+ error but simply return the default string. */
+ goto return_untranslated;
+
+ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+ }
+
+ /* Now determine the symbolic name of CATEGORY and its value. */
+ categoryname = category_to_name (category);
+ categoryvalue = guess_category_value (category, categoryname);
+
+ domainname_len = strlen (domainname);
+ xdomainname = (char *) alloca (strlen (categoryname)
+ + domainname_len + 5);
+ ADD_BLOCK (block_list, xdomainname);
+
+ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+ domainname, domainname_len),
+ ".mo");
+
+ /* Creating working area. */
+ single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+ ADD_BLOCK (block_list, single_locale);
+
+
+ /* Search for the given string. This is a loop because we perhaps
+ got an ordered list of languages to consider for the translation. */
+ while (1)
+ {
+ /* Make CATEGORYVALUE point to the next element of the list. */
+ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+ ++categoryvalue;
+ if (categoryvalue[0] == '\0')
+ {
+ /* The whole contents of CATEGORYVALUE has been searched but
+ no valid entry has been found. We solve this situation
+ by implicitly appending a "C" entry, i.e. no translation
+ will take place. */
+ single_locale[0] = 'C';
+ single_locale[1] = '\0';
+ }
+ else
+ {
+ char *cp = single_locale;
+ while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+ *cp++ = *categoryvalue++;
+ *cp = '\0';
+
+ /* When this is a SUID binary we must not allow accessing files
+ outside the dedicated directories. */
+ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+ /* Ingore this entry. */
+ continue;
+ }
+
+ /* If the current locale value is C (or POSIX) we don't load a
+ domain. Return the MSGID. */
+ if (strcmp (single_locale, "C") == 0
+ || strcmp (single_locale, "POSIX") == 0)
+ break;
+
+ /* Find structure describing the message catalog matching the
+ DOMAINNAME and CATEGORY. */
+ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+ if (domain != NULL)
+ {
+ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+ if (retval == NULL)
+ {
+ int cnt;
+
+ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+ {
+ retval = _nl_find_msg (domain->successor[cnt], binding,
+ msgid1, &retlen);
+
+ if (retval != NULL)
+ {
+ domain = domain->successor[cnt];
+ break;
+ }
+ }
+ }
+
+ if (retval != NULL)
+ {
+ /* Found the translation of MSGID1 in domain DOMAIN:
+ starting at RETVAL, RETLEN bytes. */
+ FREE_BLOCKS (block_list);
+#if defined HAVE_TSEARCH || defined _LIBC
+ if (foundp == NULL)
+ {
+ /* Create a new entry and add it to the search tree. */
+ struct known_translation_t *newp;
+
+ newp = (struct known_translation_t *)
+ malloc (offsetof (struct known_translation_t, msgid)
+ + msgid_len + domainname_len + 1);
+ if (newp != NULL)
+ {
+ newp->domainname =
+ mempcpy (newp->msgid, msgid1, msgid_len);
+ memcpy (newp->domainname, domainname, domainname_len + 1);
+ newp->category = category;
+ newp->counter = _nl_msg_cat_cntr;
+ newp->domain = domain;
+ newp->translation = retval;
+ newp->translation_length = retlen;
+
+ /* Insert the entry in the search tree. */
+ foundp = (struct known_translation_t **)
+ tsearch (newp, &root, transcmp);
+ if (foundp == NULL
+ || __builtin_expect (*foundp != newp, 0))
+ /* The insert failed. */
+ free (newp);
+ }
+ }
+ else
+ {
+ /* We can update the existing entry. */
+ (*foundp)->counter = _nl_msg_cat_cntr;
+ (*foundp)->domain = domain;
+ (*foundp)->translation = retval;
+ (*foundp)->translation_length = retlen;
+ }
+#endif
+ __set_errno (saved_errno);
+
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup (domain, n, retval, retlen);
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+ }
+ }
+
+ return_untranslated:
+ /* Return the untranslated MSGID. */
+ FREE_BLOCKS (block_list);
+ __libc_rwlock_unlock (_nl_state_lock);
+#ifndef _LIBC
+ if (!ENABLE_SECURE)
+ {
+ extern void _nl_log_untranslated PARAMS ((const char *logfilename,
+ const char *domainname,
+ const char *msgid1,
+ const char *msgid2,
+ int plural));
+ const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
+
+ if (logfilename != NULL && logfilename[0] != '\0')
+ _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
+ }
+#endif
+ __set_errno (saved_errno);
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+}
+
+
+char *
+internal_function
+_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
+ struct loaded_l10nfile *domain_file;
+ struct binding *domainbinding;
+ const char *msgid;
+ size_t *lengthp;
+{
+ struct loaded_domain *domain;
+ nls_uint32 nstrings;
+ size_t act;
+ char *result;
+ size_t resultlen;
+
+ if (domain_file->decided == 0)
+ _nl_load_domain (domain_file, domainbinding);
+
+ if (domain_file->data == NULL)
+ return NULL;
+
+ domain = (struct loaded_domain *) domain_file->data;
+
+ nstrings = domain->nstrings;
+
+ /* Locate the MSGID and its translation. */
+ if (domain->hash_tab != NULL)
+ {
+ /* Use the hashing table. */
+ nls_uint32 len = strlen (msgid);
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ while (1)
+ {
+ nls_uint32 nstr =
+ W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
+
+ if (nstr == 0)
+ /* Hash table entry is empty. */
+ return NULL;
+
+ nstr--;
+
+ /* Compare msgid with the original string at index nstr.
+ We compare the lengths with >=, not ==, because plural entries
+ are represented by strings with an embedded NUL. */
+ if (nstr < nstrings
+ ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+ && (strcmp (msgid,
+ domain->data + W (domain->must_swap,
+ domain->orig_tab[nstr].offset))
+ == 0)
+ : domain->orig_sysdep_tab[nstr - nstrings].length > len
+ && (strcmp (msgid,
+ domain->orig_sysdep_tab[nstr - nstrings].pointer)
+ == 0))
+ {
+ act = nstr;
+ goto found;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ /* NOTREACHED */
+ }
+ else
+ {
+ /* Try the default method: binary search in the sorted array of
+ messages. */
+ size_t top, bottom;
+
+ bottom = 0;
+ top = nstrings;
+ while (bottom < top)
+ {
+ int cmp_val;
+
+ act = (bottom + top) / 2;
+ cmp_val = strcmp (msgid, (domain->data
+ + W (domain->must_swap,
+ domain->orig_tab[act].offset)));
+ if (cmp_val < 0)
+ top = act;
+ else if (cmp_val > 0)
+ bottom = act + 1;
+ else
+ goto found;
+ }
+ /* No translation was found. */
+ return NULL;
+ }
+
+ found:
+ /* The translation was found at index ACT. If we have to convert the
+ string to use a different character set, this is the time. */
+ if (act < nstrings)
+ {
+ result = (char *)
+ (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
+ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+ }
+ else
+ {
+ result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
+ resultlen = domain->trans_sysdep_tab[act - nstrings].length;
+ }
+
+#if defined _LIBC || HAVE_ICONV
+ if (domain->codeset_cntr
+ != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+ {
+ /* The domain's codeset has changed through bind_textdomain_codeset()
+ since the message catalog was initialized or last accessed. We
+ have to reinitialize the converter. */
+ _nl_free_domain_conv (domain);
+ _nl_init_domain_conv (domain_file, domain, domainbinding);
+ }
+
+ if (
+# ifdef _LIBC
+ domain->conv != (__gconv_t) -1
+# else
+# if HAVE_ICONV
+ domain->conv != (iconv_t) -1
+# endif
+# endif
+ )
+ {
+ /* We are supposed to do a conversion. First allocate an
+ appropriate table with the same structure as the table
+ of translations in the file, where we can put the pointers
+ to the converted strings in.
+ There is a slight complication with plural entries. They
+ are represented by consecutive NUL terminated strings. We
+ handle this case by converting RESULTLEN bytes, including
+ NULs. */
+
+ if (domain->conv_tab == NULL
+ && ((domain->conv_tab =
+ (char **) calloc (nstrings + domain->n_sysdep_strings,
+ sizeof (char *)))
+ == NULL))
+ /* Mark that we didn't succeed allocating a table. */
+ domain->conv_tab = (char **) -1;
+
+ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+ /* Nothing we can do, no more memory. */
+ goto converted;
+
+ if (domain->conv_tab[act] == NULL)
+ {
+ /* We haven't used this string so far, so it is not
+ translated yet. Do this now. */
+ /* We use a bit more efficient memory handling.
+ We allocate always larger blocks which get used over
+ time. This is faster than many small allocations. */
+ __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE 4080
+ static unsigned char *freemem;
+ static size_t freemem_size;
+
+ const unsigned char *inbuf;
+ unsigned char *outbuf;
+ int malloc_count;
+# ifndef _LIBC
+ transmem_block_t *transmem_list = NULL;
+# endif
+
+ __libc_lock_lock (lock);
+
+ inbuf = (const unsigned char *) result;
+ outbuf = freemem + sizeof (size_t);
+
+ malloc_count = 0;
+ while (1)
+ {
+ transmem_block_t *newmem;
+# ifdef _LIBC
+ size_t non_reversible;
+ int res;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ res = __gconv (domain->conv,
+ &inbuf, inbuf + resultlen,
+ &outbuf,
+ outbuf + freemem_size - sizeof (size_t),
+ &non_reversible);
+
+ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+ break;
+
+ if (res != __GCONV_FULL_OUTPUT)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+ inbuf = result;
+# else
+# if HAVE_ICONV
+ const char *inptr = (const char *) inbuf;
+ size_t inleft = resultlen;
+ char *outptr = (char *) outbuf;
+ size_t outleft;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ outleft = freemem_size - sizeof (size_t);
+ if (iconv (domain->conv,
+ (ICONV_CONST char **) &inptr, &inleft,
+ &outptr, &outleft)
+ != (size_t) (-1))
+ {
+ outbuf = (unsigned char *) outptr;
+ break;
+ }
+ if (errno != E2BIG)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+# endif
+# endif
+
+ resize_freemem:
+ /* We must allocate a new buffer or resize the old one. */
+ if (malloc_count > 0)
+ {
+ ++malloc_count;
+ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) realloc (transmem_list,
+ freemem_size);
+# ifdef _LIBC
+ if (newmem != NULL)
+ transmem_list = transmem_list->next;
+ else
+ {
+ struct transmem_list *old = transmem_list;
+
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+# endif
+ }
+ else
+ {
+ malloc_count = 1;
+ freemem_size = INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) malloc (freemem_size);
+ }
+ if (__builtin_expect (newmem == NULL, 0))
+ {
+ freemem = NULL;
+ freemem_size = 0;
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+# ifdef _LIBC
+ /* Add the block to the list of blocks we have to free
+ at some point. */
+ newmem->next = transmem_list;
+ transmem_list = newmem;
+
+ freemem = newmem->data;
+ freemem_size -= offsetof (struct transmem_list, data);
+# else
+ transmem_list = newmem;
+ freemem = newmem;
+# endif
+
+ outbuf = freemem + sizeof (size_t);
+ }
+
+ /* We have now in our buffer a converted string. Put this
+ into the table of conversions. */
+ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+ domain->conv_tab[act] = (char *) freemem;
+ /* Shrink freemem, but keep it aligned. */
+ freemem_size -= outbuf - freemem;
+ freemem = outbuf;
+ freemem += freemem_size & (alignof (size_t) - 1);
+ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+ __libc_lock_unlock (lock);
+ }
+
+ /* Now domain->conv_tab[act] contains the translation of all
+ the plural variants. */
+ result = domain->conv_tab[act] + sizeof (size_t);
+ resultlen = *(size_t *) domain->conv_tab[act];
+ }
+
+ converted:
+ /* The result string is converted. */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+ *lengthp = resultlen;
+ return result;
+}
+
+
+/* Look up a plural variant. */
+static char *
+internal_function
+plural_lookup (domain, n, translation, translation_len)
+ struct loaded_l10nfile *domain;
+ unsigned long int n;
+ const char *translation;
+ size_t translation_len;
+{
+ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+ unsigned long int index;
+ const char *p;
+
+ index = plural_eval (domaindata->plural, n);
+ if (index >= domaindata->nplurals)
+ /* This should never happen. It means the plural expression and the
+ given maximum value do not match. */
+ index = 0;
+
+ /* Skip INDEX strings at TRANSLATION. */
+ p = translation;
+ while (index-- > 0)
+ {
+#ifdef _LIBC
+ p = __rawmemchr (p, '\0');
+#else
+ p = strchr (p, '\0');
+#endif
+ /* And skip over the NUL byte. */
+ p++;
+
+ if (p >= translation + translation_len)
+ /* This should never happen. It means the plural expression
+ evaluated to a value larger than the number of variants
+ available for MSGID1. */
+ return (char *) translation;
+ }
+ return (char *) p;
+}
+
+#ifndef _LIBC
+/* Return string representation of locale CATEGORY. */
+static const char *
+internal_function
+category_to_name (category)
+ int category;
+{
+ const char *retval;
+
+ switch (category)
+ {
+#ifdef LC_COLLATE
+ case LC_COLLATE:
+ retval = "LC_COLLATE";
+ break;
+#endif
+#ifdef LC_CTYPE
+ case LC_CTYPE:
+ retval = "LC_CTYPE";
+ break;
+#endif
+#ifdef LC_MONETARY
+ case LC_MONETARY:
+ retval = "LC_MONETARY";
+ break;
+#endif
+#ifdef LC_NUMERIC
+ case LC_NUMERIC:
+ retval = "LC_NUMERIC";
+ break;
+#endif
+#ifdef LC_TIME
+ case LC_TIME:
+ retval = "LC_TIME";
+ break;
+#endif
+#ifdef LC_MESSAGES
+ case LC_MESSAGES:
+ retval = "LC_MESSAGES";
+ break;
+#endif
+#ifdef LC_RESPONSE
+ case LC_RESPONSE:
+ retval = "LC_RESPONSE";
+ break;
+#endif
+#ifdef LC_ALL
+ case LC_ALL:
+ /* This might not make sense but is perhaps better than any other
+ value. */
+ retval = "LC_ALL";
+ break;
+#endif
+ default:
+ /* If you have a better idea for a default value let me know. */
+ retval = "LC_XXX";
+ }
+
+ return retval;
+}
+#endif
+
+/* Guess value of current locale from value of the environment variables. */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+ int category;
+ const char *categoryname;
+{
+ const char *language;
+ const char *retval;
+
+ /* The highest priority value is the `LANGUAGE' environment
+ variable. But we don't use the value if the currently selected
+ locale is the C locale. This is a GNU extension. */
+ language = getenv ("LANGUAGE");
+ if (language != NULL && language[0] == '\0')
+ language = NULL;
+
+ /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+ `LC_xxx', and `LANG'. On some systems this can be done by the
+ `setlocale' function itself. */
+#ifdef _LIBC
+ retval = __current_locale_name (category);
+#else
+ retval = _nl_locale_name (category, categoryname);
+#endif
+
+ /* Ignore LANGUAGE if the locale is set to "C" because
+ 1. "C" locale usually uses the ASCII encoding, and most international
+ messages use non-ASCII characters. These characters get displayed
+ as question marks (if using glibc's iconv()) or as invalid 8-bit
+ characters (because other iconv()s refuse to convert most non-ASCII
+ characters to ASCII). In any case, the output is ugly.
+ 2. The precise output of some programs in the "C" locale is specified
+ by POSIX and should not depend on environment variables like
+ "LANGUAGE". We allow such programs to use gettext(). */
+ return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+ char *dest;
+ const char *src;
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (dest, src, n)
+ void *dest;
+ const void *src;
+ size_t n;
+{
+ return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+ program's end. */
+libc_freeres_fn (free_mem)
+{
+ void *old;
+
+ while (_nl_domain_bindings != NULL)
+ {
+ struct binding *oldp = _nl_domain_bindings;
+ _nl_domain_bindings = _nl_domain_bindings->next;
+ if (oldp->dirname != INTUSE(_nl_default_dirname))
+ /* Yes, this is a pointer comparison. */
+ free (oldp->dirname);
+ free (oldp->codeset);
+ free (oldp);
+ }
+
+ if (_nl_current_default_domain != _nl_default_default_domain)
+ /* Yes, again a pointer comparison. */
+ free ((char *) _nl_current_default_domain);
+
+ /* Remove the search tree with the known translations. */
+ __tdestroy (root, free);
+ root = NULL;
+
+ while (transmem_list != NULL)
+ {
+ old = transmem_list;
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+}
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcngettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcngettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dcngettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,60 @@
+/* Implementation of the dcngettext(3) function.
+ Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCNGETTEXT (domainname, msgid1, msgid2, n, category)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+ int category;
+{
+ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dcngettext, dcngettext);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dgettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dgettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dgettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,59 @@
+/* Implementation of the dgettext(3) function.
+ Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale. */
+char *
+DGETTEXT (domainname, msgid)
+ const char *domainname;
+ const char *msgid;
+{
+ return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dgettext, dgettext);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dngettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dngettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/dngettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,61 @@
+/* Implementation of the dngettext(3) function.
+ Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale and skip message according to the plural form. */
+char *
+DNGETTEXT (domainname, msgid1, msgid2, n)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dngettext, dngettext);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/eval-plural.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/eval-plural.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/eval-plural.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,114 @@
+/* Plural expression evaluation.
+ Copyright (C) 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value. */
+STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp,
+ unsigned long int n))
+ internal_function;
+
+STATIC
+unsigned long int
+internal_function
+plural_eval (pexp, n)
+ struct expression *pexp;
+ unsigned long int n;
+{
+ switch (pexp->nargs)
+ {
+ case 0:
+ switch (pexp->operation)
+ {
+ case var:
+ return n;
+ case num:
+ return pexp->val.num;
+ default:
+ break;
+ }
+ /* NOTREACHED */
+ break;
+ case 1:
+ {
+ /* pexp->operation must be lnot. */
+ unsigned long int arg = plural_eval (pexp->val.args[0], n);
+ return ! arg;
+ }
+ case 2:
+ {
+ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+ if (pexp->operation == lor)
+ return leftarg || plural_eval (pexp->val.args[1], n);
+ else if (pexp->operation == land)
+ return leftarg && plural_eval (pexp->val.args[1], n);
+ else
+ {
+ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+ switch (pexp->operation)
+ {
+ case mult:
+ return leftarg * rightarg;
+ case divide:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg / rightarg;
+ case module:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg % rightarg;
+ case plus:
+ return leftarg + rightarg;
+ case minus:
+ return leftarg - rightarg;
+ case less_than:
+ return leftarg < rightarg;
+ case greater_than:
+ return leftarg > rightarg;
+ case less_or_equal:
+ return leftarg <= rightarg;
+ case greater_or_equal:
+ return leftarg >= rightarg;
+ case equal:
+ return leftarg == rightarg;
+ case not_equal:
+ return leftarg != rightarg;
+ default:
+ break;
+ }
+ }
+ /* NOTREACHED */
+ break;
+ }
+ case 3:
+ {
+ /* pexp->operation must be qmop. */
+ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+ }
+ }
+ /* NOTREACHED */
+ return 0;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/explodename.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/explodename.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/explodename.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,192 @@
+/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+char *
+_nl_find_language (name)
+ const char *name;
+{
+ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+ && name[0] != '+' && name[0] != ',')
+ ++name;
+
+ return (char *) name;
+}
+
+
+int
+_nl_explode_name (name, language, modifier, territory, codeset,
+ normalized_codeset, special, sponsor, revision)
+ char *name;
+ const char **language;
+ const char **modifier;
+ const char **territory;
+ const char **codeset;
+ const char **normalized_codeset;
+ const char **special;
+ const char **sponsor;
+ const char **revision;
+{
+ enum { undecided, xpg, cen } syntax;
+ char *cp;
+ int mask;
+
+ *modifier = NULL;
+ *territory = NULL;
+ *codeset = NULL;
+ *normalized_codeset = NULL;
+ *special = NULL;
+ *sponsor = NULL;
+ *revision = NULL;
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = 0;
+ syntax = undecided;
+ *language = cp = name;
+ cp = _nl_find_language (*language);
+
+ if (*language == cp)
+ /* This does not make sense: language has to be specified. Use
+ this entry as it is without exploding. Perhaps it is an alias. */
+ cp = strchr (*language, '\0');
+ else if (cp[0] == '_')
+ {
+ /* Next is the territory. */
+ cp[0] = '\0';
+ *territory = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+ && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= TERRITORY;
+
+ if (cp[0] == '.')
+ {
+ /* Next is the codeset. */
+ syntax = xpg;
+ cp[0] = '\0';
+ *codeset = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '@')
+ ++cp;
+
+ mask |= XPG_CODESET;
+
+ if (*codeset != cp && (*codeset)[0] != '\0')
+ {
+ *normalized_codeset = _nl_normalize_codeset (*codeset,
+ cp - *codeset);
+ if (strcmp (*codeset, *normalized_codeset) == 0)
+ free ((char *) *normalized_codeset);
+ else
+ mask |= XPG_NORM_CODESET;
+ }
+ }
+ }
+
+ if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+ {
+ /* Next is the modifier. */
+ syntax = cp[0] == '@' ? xpg : cen;
+ cp[0] = '\0';
+ *modifier = ++cp;
+
+ while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+ && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= XPG_MODIFIER | CEN_AUDIENCE;
+ }
+
+ if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+ {
+ syntax = cen;
+
+ if (cp[0] == '+')
+ {
+ /* Next is special application (CEN syntax). */
+ cp[0] = '\0';
+ *special = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPECIAL;
+ }
+
+ if (cp[0] == ',')
+ {
+ /* Next is sponsor (CEN syntax). */
+ cp[0] = '\0';
+ *sponsor = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPONSOR;
+ }
+
+ if (cp[0] == '_')
+ {
+ /* Next is revision (CEN syntax). */
+ cp[0] = '\0';
+ *revision = ++cp;
+
+ mask |= CEN_REVISION;
+ }
+ }
+
+ /* For CEN syntax values it might be important to have the
+ separator character in the file name, not for XPG syntax. */
+ if (syntax == xpg)
+ {
+ if (*territory != NULL && (*territory)[0] == '\0')
+ mask &= ~TERRITORY;
+
+ if (*codeset != NULL && (*codeset)[0] == '\0')
+ mask &= ~XPG_CODESET;
+
+ if (*modifier != NULL && (*modifier)[0] == '\0')
+ mask &= ~XPG_MODIFIER;
+ }
+
+ return mask;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/finddomain.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/finddomain.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/finddomain.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,195 @@
+/* Handle list of needed message catalogs
+ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper at gnu.org>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains. */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+ the DOMAINNAME and CATEGORY parameters with respect to the currently
+ established bindings. */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (dirname, locale, domainname, domainbinding)
+ const char *dirname;
+ char *locale;
+ const char *domainname;
+ struct binding *domainbinding;
+{
+ struct loaded_l10nfile *retval;
+ const char *language;
+ const char *modifier;
+ const char *territory;
+ const char *codeset;
+ const char *normalized_codeset;
+ const char *special;
+ const char *sponsor;
+ const char *revision;
+ const char *alias_value;
+ int mask;
+
+ /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+ language[_territory[.codeset]][@modifier]
+
+ and six parts for the CEN syntax:
+
+ language[_territory][+audience][+special][,[sponsor][_revision]]
+
+ Beside the first part all of them are allowed to be missing. If
+ the full specified locale is not found, the less specific one are
+ looked for. The various parts will be stripped off according to
+ the following order:
+ (1) revision
+ (2) sponsor
+ (3) special
+ (4) codeset
+ (5) normalized codeset
+ (6) territory
+ (7) audience/modifier
+ */
+
+ /* If we have already tested for this locale entry there has to
+ be one data set in the list of loaded domains. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, 0, locale, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, domainname, 0);
+ if (retval != NULL)
+ {
+ /* We know something about this locale. */
+ int cnt;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+
+ if (retval->data != NULL)
+ return retval;
+
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ return cnt >= 0 ? retval : NULL;
+ /* NOTREACHED */
+ }
+
+ /* See whether the locale value is an alias. If yes its value
+ *overwrites* the alias name. No test for the original value is
+ done. */
+ alias_value = _nl_expand_alias (locale);
+ if (alias_value != NULL)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ locale = strdup (alias_value);
+ if (locale == NULL)
+ return NULL;
+#else
+ size_t len = strlen (alias_value) + 1;
+ locale = (char *) malloc (len);
+ if (locale == NULL)
+ return NULL;
+
+ memcpy (locale, alias_value, len);
+#endif
+ }
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = _nl_explode_name (locale, &language, &modifier, &territory,
+ &codeset, &normalized_codeset, &special,
+ &sponsor, &revision);
+
+ /* Create all possible locale entries which might be interested in
+ generalization. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, mask, language, territory,
+ codeset, normalized_codeset, modifier, special,
+ sponsor, revision, domainname, 1);
+ if (retval == NULL)
+ /* This means we are out of core. */
+ return NULL;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+ if (retval->data == NULL)
+ {
+ int cnt;
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ }
+
+ /* The room for an alias was dynamically allocated. Free it now. */
+ if (alias_value != NULL)
+ free (locale);
+
+ /* The space for normalized_codeset is dynamically allocated. Free it. */
+ if (mask & XPG_NORM_CODESET)
+ free ((void *) normalized_codeset);
+
+ return retval;
+}
+
+
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+ while (runp != NULL)
+ {
+ struct loaded_l10nfile *here = runp;
+ if (runp->data != NULL)
+ _nl_unload_domain ((struct loaded_domain *) runp->data);
+ runp = runp->next;
+ free ((char *) here->filename);
+ free (here);
+ }
+}
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,64 @@
+/* Implementation of gettext(3) function.
+ Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+GETTEXT (msgid)
+ const char *msgid;
+{
+ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__gettext, gettext);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettextP.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettextP.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gettextP.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,224 @@
+/* Header describing internals of libintl library.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper at cygnus.com>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include <stddef.h> /* Get size_t. */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+# include <iconv.h>
+# endif
+#endif
+
+#include "loadinfo.h"
+
+#include "gmo.h" /* Get nls_uint32. */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static inline nls_uint32
+SWAP (i)
+ nls_uint32 i;
+{
+ return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* In-memory representation of system dependent string. */
+struct sysdep_string_desc
+{
+ /* Length of addressed string, including the trailing NUL. */
+ size_t length;
+ /* Pointer to addressed string. */
+ const char *pointer;
+};
+
+/* The representation of an opened message catalog. */
+struct loaded_domain
+{
+ /* Pointer to memory containing the .mo file. */
+ const char *data;
+ /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
+ int use_mmap;
+ /* Size of mmap()ed memory. */
+ size_t mmap_size;
+ /* 1 if the .mo file uses a different endianness than this machine. */
+ int must_swap;
+ /* Pointer to additional malloc()ed memory. */
+ void *malloced;
+
+ /* Number of static strings pairs. */
+ nls_uint32 nstrings;
+ /* Pointer to descriptors of original strings in the file. */
+ const struct string_desc *orig_tab;
+ /* Pointer to descriptors of translated strings in the file. */
+ const struct string_desc *trans_tab;
+
+ /* Number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Pointer to descriptors of original sysdep strings. */
+ const struct sysdep_string_desc *orig_sysdep_tab;
+ /* Pointer to descriptors of translated sysdep strings. */
+ const struct sysdep_string_desc *trans_sysdep_tab;
+
+ /* Size of hash table. */
+ nls_uint32 hash_size;
+ /* Pointer to hash table. */
+ const nls_uint32 *hash_tab;
+ /* 1 if the hash table uses a different endianness than this machine. */
+ int must_swap_hash_tab;
+
+ int codeset_cntr;
+#ifdef _LIBC
+ __gconv_t conv;
+#else
+# if HAVE_ICONV
+ iconv_t conv;
+# endif
+#endif
+ char **conv_tab;
+
+ struct expression *plural;
+ unsigned long int nplurals;
+};
+
+/* We want to allocate a string at the end of the struct. But ISO C
+ doesn't allow zero sized arrays. */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain. Used to store settings
+ from bindtextdomain() and bind_textdomain_codeset(). */
+struct binding
+{
+ struct binding *next;
+ char *dirname;
+ int codeset_cntr; /* Incremented each time codeset changes. */
+ char *codeset;
+ char domainname[ZERO];
+};
+
+/* A counter which is incremented each time some previous translations
+ become invalid.
+ This variable is part of the external ABI of the GNU libintl. */
+extern int _nl_msg_cat_cntr;
+
+#ifndef _LIBC
+const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
+#endif
+
+struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+ char *__locale,
+ const char *__domainname,
+ struct binding *__domainbinding))
+ internal_function;
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
+ struct binding *__domainbinding))
+ internal_function;
+void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+ internal_function;
+const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
+ struct loaded_domain *__domain,
+ struct binding *__domainbinding))
+ internal_function;
+void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
+ internal_function;
+
+char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding,
+ const char *msgid, size_t *lengthp))
+ internal_function;
+
+#ifdef _LIBC
+extern char *__gettext PARAMS ((const char *__msgid));
+extern char *__dgettext PARAMS ((const char *__domainname,
+ const char *__msgid));
+extern char *__dcgettext PARAMS ((const char *__domainname,
+ const char *__msgid, int __category));
+extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+ unsigned long int __n));
+extern char *__dngettext PARAMS ((const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int n));
+extern char *__dcngettext PARAMS ((const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category));
+extern char *__dcigettext PARAMS ((const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category));
+extern char *__textdomain PARAMS ((const char *__domainname));
+extern char *__bindtextdomain PARAMS ((const char *__domainname,
+ const char *__dirname));
+extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
+ const char *__codeset));
+#else
+/* Declare the exported libintl_* functions, in a way that allows us to
+ call them under their real name. */
+# define _INTL_REDIRECT_MACROS
+# include "libgnuintl.h"
+extern char *libintl_dcigettext PARAMS ((const char *__domainname,
+ const char *__msgid1,
+ const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category));
+#endif
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gmo.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gmo.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/gmo.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,148 @@
+/* Description of GNU message catalog format: general file layout.
+ Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format. */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format. */
+#define MO_REVISION_NUMBER 0
+
+/* The following contortions are an attempt to use the C preprocessor
+ to determine an unsigned integral type that is 32 bits wide. An
+ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+ as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+ when cross-compiling. */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+ This should be valid for all systems GNU cares about because
+ that doesn't include 16-bit systems, and only modern systems
+ (that certainly have <limits.h>) have 64+-bit integral types. */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+# if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+# else
+ /* The following line is intended to throw an error. Using #error is
+ not portable enough. */
+ "Cannot determine unsigned 32-bit data type."
+# endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format. */
+struct mo_file_header
+{
+ /* The magic number. */
+ nls_uint32 magic;
+ /* The revision number of the file format. */
+ nls_uint32 revision;
+
+ /* The following are only used in .mo files with major revision 0. */
+
+ /* The number of strings pairs. */
+ nls_uint32 nstrings;
+ /* Offset of table with start offsets of original strings. */
+ nls_uint32 orig_tab_offset;
+ /* Offset of table with start offsets of translated strings. */
+ nls_uint32 trans_tab_offset;
+ /* Size of hash table. */
+ nls_uint32 hash_tab_size;
+ /* Offset of first hash table entry. */
+ nls_uint32 hash_tab_offset;
+
+ /* The following are only used in .mo files with minor revision >= 1. */
+
+ /* The number of system dependent segments. */
+ nls_uint32 n_sysdep_segments;
+ /* Offset of table describing system dependent segments. */
+ nls_uint32 sysdep_segments_offset;
+ /* The number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Offset of table with start offsets of original sysdep strings. */
+ nls_uint32 orig_sysdep_tab_offset;
+ /* Offset of table with start offsets of translated sysdep strings. */
+ nls_uint32 trans_sysdep_tab_offset;
+};
+
+/* Descriptor for static string contained in the binary .mo file. */
+struct string_desc
+{
+ /* Length of addressed string, not including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* The following are only used in .mo files with minor revision >= 1. */
+
+/* Descriptor for system dependent string segment. */
+struct sysdep_segment
+{
+ /* Length of addressed string, including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* Descriptor for system dependent string. */
+struct sysdep_string
+{
+ /* Offset of static string segments in file. */
+ nls_uint32 offset;
+ /* Alternating sequence of static and system dependent segments.
+ The last segment is a static segment, including the trailing NUL. */
+ struct segment_pair
+ {
+ /* Size of static segment. */
+ nls_uint32 segsize;
+ /* Reference to system dependent string segment, or ~0 at the end. */
+ nls_uint32 sysdepref;
+ } segments[1];
+};
+
+/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
+ regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
+#define SEGMENTS_END ((nls_uint32) ~0)
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/hash-string.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/hash-string.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/hash-string.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,59 @@
+/* Description of GNU message catalog format: string hashing function.
+ Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(Args) Args
+# else
+# define PARAMS(Args) ()
+# endif
+#endif
+
+/* We assume to have `unsigned long int' value with at least 32 bits. */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+static unsigned long int hash_string PARAMS ((const char *__str_param));
+
+static inline unsigned long int
+hash_string (str_param)
+ const char *str_param;
+{
+ unsigned long int hval, g;
+ const char *str = str_param;
+
+ /* Compute the hash value for the given string. */
+ hval = 0;
+ while (*str != '\0')
+ {
+ hval <<= 4;
+ hval += (unsigned long int) *str++;
+ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+ hval ^= g;
+ }
+ }
+ return hval;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/intl-compat.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/intl-compat.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/intl-compat.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,151 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+ Library.
+ Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix) to those
+ defined in the included GNU libintl library (with "libintl_" prefix).
+ It is compiled into libintl in order to make the AM_GNU_GETTEXT test
+ of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
+ has the redirections primarily in the <libintl.h> include file.
+ It is also compiled into libgnuintl so that libgnuintl.so can be used
+ as LD_PRELOADable library on glibc systems, to provide the extra
+ features that the functions in the libc don't have (namely, logging). */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+
+DLL_EXPORTED
+char *
+gettext (msgid)
+ const char *msgid;
+{
+ return libintl_gettext (msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dgettext (domainname, msgid)
+ const char *domainname;
+ const char *msgid;
+{
+ return libintl_dgettext (domainname, msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dcgettext (domainname, msgid, category)
+ const char *domainname;
+ const char *msgid;
+ int category;
+{
+ return libintl_dcgettext (domainname, msgid, category);
+}
+
+
+DLL_EXPORTED
+char *
+ngettext (msgid1, msgid2, n)
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return libintl_ngettext (msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dngettext (domainname, msgid1, msgid2, n)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return libintl_dngettext (domainname, msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dcngettext (domainname, msgid1, msgid2, n, category)
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+ int category;
+{
+ return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
+}
+
+
+DLL_EXPORTED
+char *
+textdomain (domainname)
+ const char *domainname;
+{
+ return libintl_textdomain (domainname);
+}
+
+
+DLL_EXPORTED
+char *
+bindtextdomain (domainname, dirname)
+ const char *domainname;
+ const char *dirname;
+{
+ return libintl_bindtextdomain (domainname, dirname);
+}
+
+
+DLL_EXPORTED
+char *
+bind_textdomain_codeset (domainname, codeset)
+ const char *domainname;
+ const char *codeset;
+{
+ return libintl_bind_textdomain_codeset (domainname, codeset);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/l10nflist.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/l10nflist.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/l10nflist.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,453 @@
+/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# ifndef stpcpy
+# define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+#endif
+
+/* Define function which are usually not available. */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ. */
+static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+
+static size_t
+argz_count__ (argz, len)
+ const char *argz;
+ size_t len;
+{
+ size_t count = 0;
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len + 1;
+ len -= part_len + 1;
+ count++;
+ }
+ return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#else
+# ifdef _LIBC
+# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+ except the last into the character SEP. */
+static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+
+static void
+argz_stringify__ (argz, len, sep)
+ char *argz;
+ size_t len;
+ int sep;
+{
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len;
+ len -= part_len + 1;
+ if (len > 0)
+ *argz++ = sep;
+ }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#else
+# ifdef _LIBC
+# define __argz_stringify(argz, len, sep) \
+ INTUSE(__argz_stringify) (argz, len, sep)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+ const char *entry));
+
+static char *
+argz_next__ (argz, argz_len, entry)
+ char *argz;
+ size_t argz_len;
+ const char *entry;
+{
+ if (entry)
+ {
+ if (entry < argz + argz_len)
+ entry = strchr (entry, '\0') + 1;
+
+ return entry >= argz + argz_len ? NULL : (char *) entry;
+ }
+ else
+ if (argz_len > 0)
+ return argz;
+ else
+ return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X. */
+static int pop PARAMS ((int x));
+
+static inline int
+pop (x)
+ int x;
+{
+ /* We assume that no more than 16 bits are used. */
+ x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+ x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+ x = ((x >> 4) + x) & 0x0f0f;
+ x = ((x >> 8) + x) & 0xff;
+
+ return x;
+}
+
+
+struct loaded_l10nfile *
+_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+ territory, codeset, normalized_codeset, modifier, special,
+ sponsor, revision, filename, do_allocate)
+ struct loaded_l10nfile **l10nfile_list;
+ const char *dirlist;
+ size_t dirlist_len;
+ int mask;
+ const char *language;
+ const char *territory;
+ const char *codeset;
+ const char *normalized_codeset;
+ const char *modifier;
+ const char *special;
+ const char *sponsor;
+ const char *revision;
+ const char *filename;
+ int do_allocate;
+{
+ char *abs_filename;
+ struct loaded_l10nfile **lastp;
+ struct loaded_l10nfile *retval;
+ char *cp;
+ size_t dirlist_count;
+ size_t entries;
+ int cnt;
+
+ /* If LANGUAGE contains an absolute directory specification, we ignore
+ DIRLIST. */
+ if (IS_ABSOLUTE_PATH (language))
+ dirlist_len = 0;
+
+ /* Allocate room for the full file name. */
+ abs_filename = (char *) malloc (dirlist_len
+ + strlen (language)
+ + ((mask & TERRITORY) != 0
+ ? strlen (territory) + 1 : 0)
+ + ((mask & XPG_CODESET) != 0
+ ? strlen (codeset) + 1 : 0)
+ + ((mask & XPG_NORM_CODESET) != 0
+ ? strlen (normalized_codeset) + 1 : 0)
+ + (((mask & XPG_MODIFIER) != 0
+ || (mask & CEN_AUDIENCE) != 0)
+ ? strlen (modifier) + 1 : 0)
+ + ((mask & CEN_SPECIAL) != 0
+ ? strlen (special) + 1 : 0)
+ + (((mask & CEN_SPONSOR) != 0
+ || (mask & CEN_REVISION) != 0)
+ ? (1 + ((mask & CEN_SPONSOR) != 0
+ ? strlen (sponsor) : 0)
+ + ((mask & CEN_REVISION) != 0
+ ? strlen (revision) + 1 : 0)) : 0)
+ + 1 + strlen (filename) + 1);
+
+ if (abs_filename == NULL)
+ return NULL;
+
+ /* Construct file name. */
+ cp = abs_filename;
+ if (dirlist_len > 0)
+ {
+ memcpy (cp, dirlist, dirlist_len);
+ __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+ cp += dirlist_len;
+ cp[-1] = '/';
+ }
+
+ cp = stpcpy (cp, language);
+
+ if ((mask & TERRITORY) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, territory);
+ }
+ if ((mask & XPG_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, codeset);
+ }
+ if ((mask & XPG_NORM_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, normalized_codeset);
+ }
+ if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+ {
+ /* This component can be part of both syntaces but has different
+ leading characters. For CEN we use `+', else `@'. */
+ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+ cp = stpcpy (cp, modifier);
+ }
+ if ((mask & CEN_SPECIAL) != 0)
+ {
+ *cp++ = '+';
+ cp = stpcpy (cp, special);
+ }
+ if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+ {
+ *cp++ = ',';
+ if ((mask & CEN_SPONSOR) != 0)
+ cp = stpcpy (cp, sponsor);
+ if ((mask & CEN_REVISION) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, revision);
+ }
+ }
+
+ *cp++ = '/';
+ stpcpy (cp, filename);
+
+ /* Look in list of already loaded domains whether it is already
+ available. */
+ lastp = l10nfile_list;
+ for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+ if (retval->filename != NULL)
+ {
+ int compare = strcmp (retval->filename, abs_filename);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It's not in the list. */
+ retval = NULL;
+ break;
+ }
+
+ lastp = &retval->next;
+ }
+
+ if (retval != NULL || do_allocate == 0)
+ {
+ free (abs_filename);
+ return retval;
+ }
+
+ dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+ /* Allocate a new loaded_l10nfile. */
+ retval =
+ (struct loaded_l10nfile *)
+ malloc (sizeof (*retval)
+ + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
+ * sizeof (struct loaded_l10nfile *)));
+ if (retval == NULL)
+ return NULL;
+
+ retval->filename = abs_filename;
+
+ /* We set retval->data to NULL here; it is filled in later.
+ Setting retval->decided to 1 here means that retval does not
+ correspond to a real file (dirlist_count > 1) or is not worth
+ looking up (if an unnormalized codeset was specified). */
+ retval->decided = (dirlist_count > 1
+ || ((mask & XPG_CODESET) != 0
+ && (mask & XPG_NORM_CODESET) != 0));
+ retval->data = NULL;
+
+ retval->next = *lastp;
+ *lastp = retval;
+
+ entries = 0;
+ /* Recurse to fill the inheritance list of RETVAL.
+ If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+ entry does not correspond to a real file; retval->filename contains
+ colons. In this case we loop across all elements of DIRLIST and
+ across all bit patterns dominated by MASK.
+ If the DIRLIST is a single directory or entirely redundant (i.e.
+ DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
+ MASK, excluding MASK itself.
+ In either case, we loop down from MASK to 0. This has the effect
+ that the extra bits in the locale name are dropped in this order:
+ first the modifier, then the territory, then the codeset, then the
+ normalized_codeset. */
+ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
+ if ((cnt & ~mask) == 0
+ && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+ && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+ {
+ if (dirlist_count > 1)
+ {
+ /* Iterate over all elements of the DIRLIST. */
+ char *dir = NULL;
+
+ while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+ != NULL)
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ else
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ retval->successor[entries] = NULL;
+
+ return retval;
+}
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+const char *
+_nl_normalize_codeset (codeset, name_len)
+ const char *codeset;
+ size_t name_len;
+{
+ int len = 0;
+ int only_digit = 1;
+ char *retval;
+ char *wp;
+ size_t cnt;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalnum ((unsigned char) codeset[cnt]))
+ {
+ ++len;
+
+ if (isalpha ((unsigned char) codeset[cnt]))
+ only_digit = 0;
+ }
+
+ retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+ if (retval != NULL)
+ {
+ if (only_digit)
+ wp = stpcpy (retval, "iso");
+ else
+ wp = retval;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalpha ((unsigned char) codeset[cnt]))
+ *wp++ = tolower ((unsigned char) codeset[cnt]);
+ else if (isdigit ((unsigned char) codeset[cnt]))
+ *wp++ = codeset[cnt];
+
+ *wp = '\0';
+ }
+
+ return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+ char *dest;
+ const char *src;
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/libgnuintl.h.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/libgnuintl.h.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/libgnuintl.h.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,309 @@
+/* Message catalogs for internationalization.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H 1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
+ On systems that don't define it, use an arbitrary value instead.
+ On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+ then includes <libintl.h> (i.e. this file!) and then only defines
+ LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
+ in this case. */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+ implementation of gettext. */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats. Returns the
+ maximum minor revision number supported for a given major revision. */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+ ((major) == 0 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
+ precedence over _conio_gettext. */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
+ used by programs. Similarly, test __PROTOTYPES, not PROTOTYPES. */
+#ifndef _INTL_PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define _INTL_PARAMS(args) args
+# else
+# define _INTL_PARAMS(args) ()
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* We redirect the functions to those prefixed with "libintl_". This is
+ necessary, because some systems define gettext/textdomain/... in the C
+ library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
+ If we used the unprefixed names, there would be cases where the
+ definition in the C library would override the one in the libintl.so
+ shared library. Recall that on ELF systems, the symbols are looked
+ up in the following order:
+ 1. in the executable,
+ 2. in the shared libraries specified on the link command line, in order,
+ 3. in the dependencies of the shared libraries specified on the link
+ command line,
+ 4. in the dlopen()ed shared libraries, in the order in which they were
+ dlopen()ed.
+ The definition in the C library would override the one in libintl.so if
+ either
+ * -lc is given on the link command line and -lintl isn't, or
+ * -lc is given on the link command line before -lintl, or
+ * libintl.so is a dependency of a dlopen()ed shared library but not
+ linked to the executable at link time.
+ Since Solaris gettext() behaves differently than GNU gettext(), this
+ would be unacceptable.
+
+ The redirection happens by default through macros in C, so that &gettext
+ is independent of the compilation unit, but through inline functions in
+ C++, in order not to interfere with the name mangling of class fields or
+ class methods called 'gettext'. */
+
+/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
+ If he doesn't, we choose the method. A third possible method is
+ _INTL_REDIRECT_ASM, supported only by GCC. */
+#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
+# if __GNUC__ >= 2 && !defined __APPLE_CC__ && (defined __STDC__ || defined __cplusplus)
+# define _INTL_REDIRECT_ASM
+# else
+# ifdef __cplusplus
+# define _INTL_REDIRECT_INLINE
+# else
+# define _INTL_REDIRECT_MACROS
+# endif
+# endif
+#endif
+/* Auxiliary macros. */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_gettext (const char *__msgid);
+static inline char *gettext (const char *__msgid)
+{
+ return libintl_gettext (__msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define gettext libintl_gettext
+#endif
+extern char *gettext _INTL_PARAMS ((const char *__msgid))
+ _INTL_ASM (libintl_gettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ LC_MESSAGES locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
+static inline char *dgettext (const char *__domainname, const char *__msgid)
+{
+ return libintl_dgettext (__domainname, __msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dgettext libintl_dgettext
+#endif
+extern char *dgettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid))
+ _INTL_ASM (libintl_dgettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+static inline char *dcgettext (const char *__domainname, const char *__msgid,
+ int __category)
+{
+ return libintl_dcgettext (__domainname, __msgid, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcgettext libintl_dcgettext
+#endif
+extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid,
+ int __category))
+ _INTL_ASM (libintl_dcgettext);
+#endif
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+static inline char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+{
+ return libintl_ngettext (__msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define ngettext libintl_ngettext
+#endif
+extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
+ const char *__msgid2,
+ unsigned long int __n))
+ _INTL_ASM (libintl_ngettext);
+#endif
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n);
+static inline char *dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n)
+{
+ return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dngettext libintl_dngettext
+#endif
+extern char *dngettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid1,
+ const char *__msgid2,
+ unsigned long int __n))
+ _INTL_ASM (libintl_dngettext);
+#endif
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+static inline char *dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category)
+{
+ return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcngettext libintl_dcngettext
+#endif
+extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
+ const char *__msgid1,
+ const char *__msgid2,
+ unsigned long int __n,
+ int __category))
+ _INTL_ASM (libintl_dcngettext);
+#endif
+
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_textdomain (const char *__domainname);
+static inline char *textdomain (const char *__domainname)
+{
+ return libintl_textdomain (__domainname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define textdomain libintl_textdomain
+#endif
+extern char *textdomain _INTL_PARAMS ((const char *__domainname))
+ _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+ const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+ const char *__dirname)
+{
+ return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
+ const char *__dirname))
+ _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+{
+ return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
+ const char *__codeset))
+ _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+ libintl_set_relocation_prefix _INTL_PARAMS ((const char *orig_prefix,
+ const char *curr_prefix));
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadinfo.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadinfo.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadinfo.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,156 @@
+/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper at cygnus.com>, 1996.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H 1
+
+/* Declarations of locale dependent catalog lookup functions.
+ Implemented in
+
+ localealias.c Possibly replace a locale name by another.
+ explodename.c Split a locale name into its various fields.
+ l10nflist.c Generate a list of filenames of possible message catalogs.
+ finddomain.c Find and open the relevant message catalogs.
+
+ The main function _nl_find_domain() in finddomain.c is declared
+ in gettextP.h.
+ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames. */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+ /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts. */
+#define CEN_REVISION 1
+#define CEN_SPONSOR 2
+#define CEN_SPECIAL 4
+#define XPG_NORM_CODESET 8
+#define XPG_CODESET 16
+#define TERRITORY 32
+#define CEN_AUDIENCE 64
+#define XPG_MODIFIER 128
+
+#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+ const char *filename;
+ int decided;
+
+ const void *data;
+
+ struct loaded_l10nfile *next;
+ struct loaded_l10nfile *successor[1];
+};
+
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
+ size_t name_len));
+
+/* Lookup a locale dependent file.
+ *L10NFILE_LIST denotes a pool of lookup results of locale dependent
+ files of the same kind, sorted in decreasing order of ->filename.
+ DIRLIST and DIRLIST_LEN are an argz list of directories in which to
+ look, containing at least one directory (i.e. DIRLIST_LEN > 0).
+ MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
+ SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
+ produced by _nl_explode_name(). FILENAME is the filename suffix.
+ The return value is the lookup result, either found in *L10NFILE_LIST,
+ or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
+ If the return value is non-NULL, it is added to *L10NFILE_LIST, and
+ its ->next field denotes the chaining inside *L10NFILE_LIST, and
+ furthermore its ->successor[] field contains a list of other lookup
+ results from which this lookup result inherits. */
+extern struct loaded_l10nfile *
+_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len, int mask,
+ const char *language, const char *territory,
+ const char *codeset,
+ const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ const char *filename, int do_allocate));
+
+/* Lookup the real locale name for a locale alias NAME, or NULL if
+ NAME is not a locale alias (but possibly a real locale name).
+ The return value is statically allocated and must not be freed. */
+extern const char *_nl_expand_alias PARAMS ((const char *name));
+
+/* Split a locale name NAME into its pieces: language, modifier,
+ territory, codeset, special, sponsor, revision.
+ NAME gets destructively modified: NUL bytes are inserted here and
+ there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
+ *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
+ pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
+ gets assigned the expanded *CODESET, if it is different from *CODESET;
+ this one is dynamically allocated and has to be freed by the caller.
+ The return value is a bitmask, where each bit corresponds to one
+ filled-in value:
+ XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
+ TERRITORY for *TERRITORY,
+ XPG_CODESET for *CODESET,
+ XPG_NORM_CODESET for *NORMALIZED_CODESET,
+ CEN_SPECIAL for *SPECIAL,
+ CEN_SPONSOR for *SPONSOR,
+ CEN_REVISION for *REVISION.
+ */
+extern int _nl_explode_name PARAMS ((char *name, const char **language,
+ const char **modifier,
+ const char **territory,
+ const char **codeset,
+ const char **normalized_codeset,
+ const char **special,
+ const char **sponsor,
+ const char **revision));
+
+/* Split a locale name NAME into a leading language part and all the
+ rest. Return a pointer to the first character after the language,
+ i.e. to the first byte of the rest. */
+extern char *_nl_find_language PARAMS ((const char *name));
+
+#endif /* loadinfo.h */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadmsgcat.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadmsgcat.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/loadmsgcat.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1322 @@
+/* Load needed message catalogs.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP 1
+#else
+# undef HAVE_MMAP
+#endif
+
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
+#include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+ Note that our fallback values need not be literal strings, because we don't
+ use them with preprocessor string concatenation. */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+ (sizeof (void *) == sizeof (long) ? "ld" : \
+ sizeof (void *) == sizeof (int) ? "d" : \
+ "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+ (sizeof (void *) == sizeof (long) ? "li" : \
+ sizeof (void *) == sizeof (int) ? "i" : \
+ "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+ (sizeof (void *) == sizeof (long) ? "lo" : \
+ sizeof (void *) == sizeof (int) ? "o" : \
+ "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+ (sizeof (void *) == sizeof (long) ? "lu" : \
+ sizeof (void *) == sizeof (int) ? "u" : \
+ "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+ (sizeof (void *) == sizeof (long) ? "lx" : \
+ sizeof (void *) == sizeof (int) ? "x" : \
+ "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+ (sizeof (void *) == sizeof (long) ? "lX" : \
+ sizeof (void *) == sizeof (int) ? "X" : \
+ "llX")
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions. This is required by the standard
+ because some ISO C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define open __open
+# define close __close
+# define read __read
+# define mmap __mmap
+# define munmap __munmap
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+ O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default. */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/* Prototypes for local functions. Needed to ensure compiler checking of
+ function argument counts despite of K&R C function definition syntax. */
+static const char *get_sysdep_segment_value PARAMS ((const char *name));
+
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+ with all translations. This is important if the translations are
+ cached by one of GCC's features. */
+int _nl_msg_cat_cntr;
+
+
+/* Expand a system dependent string segment. Return NULL if unsupported. */
+static const char *
+get_sysdep_segment_value (name)
+ const char *name;
+{
+ /* Test for an ISO C 99 section 7.8.1 format string directive.
+ Syntax:
+ P R I { d | i | o | u | x | X }
+ { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
+ /* We don't use a table of 14 times 6 'const char *' strings here, because
+ data relocations cost startup time. */
+ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
+ {
+ if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+ || name[3] == 'x' || name[3] == 'X')
+ {
+ if (name[4] == '8' && name[5] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId8;
+ if (name[3] == 'i')
+ return PRIi8;
+ if (name[3] == 'o')
+ return PRIo8;
+ if (name[3] == 'u')
+ return PRIu8;
+ if (name[3] == 'x')
+ return PRIx8;
+ if (name[3] == 'X')
+ return PRIX8;
+ abort ();
+ }
+ if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId16;
+ if (name[3] == 'i')
+ return PRIi16;
+ if (name[3] == 'o')
+ return PRIo16;
+ if (name[3] == 'u')
+ return PRIu16;
+ if (name[3] == 'x')
+ return PRIx16;
+ if (name[3] == 'X')
+ return PRIX16;
+ abort ();
+ }
+ if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId32;
+ if (name[3] == 'i')
+ return PRIi32;
+ if (name[3] == 'o')
+ return PRIo32;
+ if (name[3] == 'u')
+ return PRIu32;
+ if (name[3] == 'x')
+ return PRIx32;
+ if (name[3] == 'X')
+ return PRIX32;
+ abort ();
+ }
+ if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId64;
+ if (name[3] == 'i')
+ return PRIi64;
+ if (name[3] == 'o')
+ return PRIo64;
+ if (name[3] == 'u')
+ return PRIu64;
+ if (name[3] == 'x')
+ return PRIx64;
+ if (name[3] == 'X')
+ return PRIX64;
+ abort ();
+ }
+ if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
+ && name[7] == 'S' && name[8] == 'T')
+ {
+ if (name[9] == '8' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST8;
+ if (name[3] == 'i')
+ return PRIiLEAST8;
+ if (name[3] == 'o')
+ return PRIoLEAST8;
+ if (name[3] == 'u')
+ return PRIuLEAST8;
+ if (name[3] == 'x')
+ return PRIxLEAST8;
+ if (name[3] == 'X')
+ return PRIXLEAST8;
+ abort ();
+ }
+ if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST16;
+ if (name[3] == 'i')
+ return PRIiLEAST16;
+ if (name[3] == 'o')
+ return PRIoLEAST16;
+ if (name[3] == 'u')
+ return PRIuLEAST16;
+ if (name[3] == 'x')
+ return PRIxLEAST16;
+ if (name[3] == 'X')
+ return PRIXLEAST16;
+ abort ();
+ }
+ if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST32;
+ if (name[3] == 'i')
+ return PRIiLEAST32;
+ if (name[3] == 'o')
+ return PRIoLEAST32;
+ if (name[3] == 'u')
+ return PRIuLEAST32;
+ if (name[3] == 'x')
+ return PRIxLEAST32;
+ if (name[3] == 'X')
+ return PRIXLEAST32;
+ abort ();
+ }
+ if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST64;
+ if (name[3] == 'i')
+ return PRIiLEAST64;
+ if (name[3] == 'o')
+ return PRIoLEAST64;
+ if (name[3] == 'u')
+ return PRIuLEAST64;
+ if (name[3] == 'x')
+ return PRIxLEAST64;
+ if (name[3] == 'X')
+ return PRIXLEAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
+ && name[7] == 'T')
+ {
+ if (name[8] == '8' && name[9] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST8;
+ if (name[3] == 'i')
+ return PRIiFAST8;
+ if (name[3] == 'o')
+ return PRIoFAST8;
+ if (name[3] == 'u')
+ return PRIuFAST8;
+ if (name[3] == 'x')
+ return PRIxFAST8;
+ if (name[3] == 'X')
+ return PRIXFAST8;
+ abort ();
+ }
+ if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST16;
+ if (name[3] == 'i')
+ return PRIiFAST16;
+ if (name[3] == 'o')
+ return PRIoFAST16;
+ if (name[3] == 'u')
+ return PRIuFAST16;
+ if (name[3] == 'x')
+ return PRIxFAST16;
+ if (name[3] == 'X')
+ return PRIXFAST16;
+ abort ();
+ }
+ if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST32;
+ if (name[3] == 'i')
+ return PRIiFAST32;
+ if (name[3] == 'o')
+ return PRIoFAST32;
+ if (name[3] == 'u')
+ return PRIuFAST32;
+ if (name[3] == 'x')
+ return PRIxFAST32;
+ if (name[3] == 'X')
+ return PRIXFAST32;
+ abort ();
+ }
+ if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST64;
+ if (name[3] == 'i')
+ return PRIiFAST64;
+ if (name[3] == 'o')
+ return PRIoFAST64;
+ if (name[3] == 'u')
+ return PRIuFAST64;
+ if (name[3] == 'x')
+ return PRIxFAST64;
+ if (name[3] == 'X')
+ return PRIXFAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdMAX;
+ if (name[3] == 'i')
+ return PRIiMAX;
+ if (name[3] == 'o')
+ return PRIoMAX;
+ if (name[3] == 'u')
+ return PRIuMAX;
+ if (name[3] == 'x')
+ return PRIxMAX;
+ if (name[3] == 'X')
+ return PRIXMAX;
+ abort ();
+ }
+ if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdPTR;
+ if (name[3] == 'i')
+ return PRIiPTR;
+ if (name[3] == 'o')
+ return PRIoPTR;
+ if (name[3] == 'u')
+ return PRIuPTR;
+ if (name[3] == 'x')
+ return PRIxPTR;
+ if (name[3] == 'X')
+ return PRIXPTR;
+ abort ();
+ }
+ }
+ }
+ /* Other system dependent strings are not valid. */
+ return NULL;
+}
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+ Return the header entry. */
+const char *
+internal_function
+_nl_init_domain_conv (domain_file, domain, domainbinding)
+ struct loaded_l10nfile *domain_file;
+ struct loaded_domain *domain;
+ struct binding *domainbinding;
+{
+ /* Find out about the character set the file is encoded with.
+ This can be found (in textual form) in the entry "". If this
+ entry does not exist or if this does not contain the `charset='
+ information, we will assume the charset matches the one the
+ current locale and we don't have to perform any conversion. */
+ char *nullentry;
+ size_t nullentrylen;
+
+ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
+ domain->codeset_cntr =
+ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+ domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+ domain->conv = (iconv_t) -1;
+# endif
+#endif
+ domain->conv_tab = NULL;
+
+ /* Get the header entry. */
+ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+ if (nullentry != NULL)
+ {
+#if defined _LIBC || HAVE_ICONV
+ const char *charsetstr;
+
+ charsetstr = strstr (nullentry, "charset=");
+ if (charsetstr != NULL)
+ {
+ size_t len;
+ char *charset;
+ const char *outcharset;
+
+ charsetstr += strlen ("charset=");
+ len = strcspn (charsetstr, " \t\n");
+
+ charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+ memcpy (charset, charsetstr, len);
+ charset[len] = '\0';
+# endif
+
+ /* The output charset should normally be determined by the
+ locale. But sometimes the locale is not used or not correctly
+ set up, so we provide a possibility for the user to override
+ this. Moreover, the value specified through
+ bind_textdomain_codeset overrides both. */
+ if (domainbinding != NULL && domainbinding->codeset != NULL)
+ outcharset = domainbinding->codeset;
+ else
+ {
+ outcharset = getenv ("OUTPUT_CHARSET");
+ if (outcharset == NULL || outcharset[0] == '\0')
+ {
+# ifdef _LIBC
+ outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
+# else
+# if HAVE_ICONV
+ extern const char *locale_charset PARAMS ((void));
+ outcharset = locale_charset ();
+# endif
+# endif
+ }
+ }
+
+# ifdef _LIBC
+ /* We always want to use transliteration. */
+ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+ charset = norm_add_slashes (charset, NULL);
+ if (__gconv_open (outcharset, charset, &domain->conv,
+ GCONV_AVOID_NOCONV)
+ != __GCONV_OK)
+ domain->conv = (__gconv_t) -1;
+# else
+# if HAVE_ICONV
+ /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
+ we want to use transliteration. */
+# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+ || _LIBICONV_VERSION >= 0x0105
+ if (strchr (outcharset, '/') == NULL)
+ {
+ char *tmp;
+
+ len = strlen (outcharset);
+ tmp = (char *) alloca (len + 10 + 1);
+ memcpy (tmp, outcharset, len);
+ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+ outcharset = tmp;
+
+ domain->conv = iconv_open (outcharset, charset);
+
+ freea (outcharset);
+ }
+ else
+# endif
+ domain->conv = iconv_open (outcharset, charset);
+# endif
+# endif
+
+ freea (charset);
+ }
+#endif /* _LIBC || HAVE_ICONV */
+ }
+
+ return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog. */
+void
+internal_function
+_nl_free_domain_conv (domain)
+ struct loaded_domain *domain;
+{
+ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+ free (domain->conv_tab);
+
+#ifdef _LIBC
+ if (domain->conv != (__gconv_t) -1)
+ __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+ if (domain->conv != (iconv_t) -1)
+ iconv_close (domain->conv);
+# endif
+#endif
+}
+
+/* Load the message catalogs specified by FILENAME. If it is no valid
+ message catalog do nothing. */
+void
+internal_function
+_nl_load_domain (domain_file, domainbinding)
+ struct loaded_l10nfile *domain_file;
+ struct binding *domainbinding;
+{
+ int fd;
+ size_t size;
+#ifdef _LIBC
+ struct stat64 st;
+#else
+ struct stat st;
+#endif
+ struct mo_file_header *data = (struct mo_file_header *) -1;
+ int use_mmap = 0;
+ struct loaded_domain *domain;
+ int revision;
+ const char *nullentry;
+
+ domain_file->decided = 1;
+ domain_file->data = NULL;
+
+ /* Note that it would be useless to store domainbinding in domain_file
+ because domainbinding might be == NULL now but != NULL later (after
+ a call to bind_textdomain_codeset). */
+
+ /* If the record does not represent a valid locale the FILENAME
+ might be NULL. This can happen when according to the given
+ specification the locale file name is different for XPG and CEN
+ syntax. */
+ if (domain_file->filename == NULL)
+ return;
+
+ /* Try to open the addressed file. */
+ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ return;
+
+ /* We must know about the size of the file. */
+ if (
+#ifdef _LIBC
+ __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+ __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+ {
+ /* Something went wrong. */
+ close (fd);
+ return;
+ }
+
+#ifdef HAVE_MMAP
+ /* Now we are ready to load the file. If mmap() is available we try
+ this first. If not available or it failed we try to load it. */
+ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+
+ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+ {
+ /* mmap() call was successful. */
+ close (fd);
+ use_mmap = 1;
+ }
+#endif
+
+ /* If the data is not yet available (i.e. mmap'ed) we try to load
+ it manually. */
+ if (data == (struct mo_file_header *) -1)
+ {
+ size_t to_read;
+ char *read_ptr;
+
+ data = (struct mo_file_header *) malloc (size);
+ if (data == NULL)
+ return;
+
+ to_read = size;
+ read_ptr = (char *) data;
+ do
+ {
+ long int nb = (long int) read (fd, read_ptr, to_read);
+ if (nb <= 0)
+ {
+#ifdef EINTR
+ if (nb == -1 && errno == EINTR)
+ continue;
+#endif
+ close (fd);
+ return;
+ }
+ read_ptr += nb;
+ to_read -= nb;
+ }
+ while (to_read > 0);
+
+ close (fd);
+ }
+
+ /* Using the magic number we can test whether it really is a message
+ catalog file. */
+ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+ 0))
+ {
+ /* The magic number is wrong: not a message catalog file. */
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ return;
+ }
+
+ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+ if (domain == NULL)
+ return;
+ domain_file->data = domain;
+
+ domain->data = (char *) data;
+ domain->use_mmap = use_mmap;
+ domain->mmap_size = size;
+ domain->must_swap = data->magic != _MAGIC;
+ domain->malloced = NULL;
+
+ /* Fill in the information about the available tables. */
+ revision = W (domain->must_swap, data->revision);
+ /* We support only the major revision 0. */
+ switch (revision >> 16)
+ {
+ case 0:
+ domain->nstrings = W (domain->must_swap, data->nstrings);
+ domain->orig_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+ domain->trans_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+ domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+ domain->hash_tab =
+ (domain->hash_size > 2
+ ? (const nls_uint32 *)
+ ((char *) data + W (domain->must_swap, data->hash_tab_offset))
+ : NULL);
+ domain->must_swap_hash_tab = domain->must_swap;
+
+ /* Now dispatch on the minor revision. */
+ switch (revision & 0xffff)
+ {
+ case 0:
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ break;
+ case 1:
+ default:
+ {
+ nls_uint32 n_sysdep_strings;
+
+ if (domain->hash_tab == NULL)
+ /* This is invalid. These minor revisions need a hash table. */
+ goto invalid;
+
+ n_sysdep_strings =
+ W (domain->must_swap, data->n_sysdep_strings);
+ if (n_sysdep_strings > 0)
+ {
+ nls_uint32 n_sysdep_segments;
+ const struct sysdep_segment *sysdep_segments;
+ const char **sysdep_segment_values;
+ const nls_uint32 *orig_sysdep_tab;
+ const nls_uint32 *trans_sysdep_tab;
+ size_t memneed;
+ char *mem;
+ struct sysdep_string_desc *inmem_orig_sysdep_tab;
+ struct sysdep_string_desc *inmem_trans_sysdep_tab;
+ nls_uint32 *inmem_hash_tab;
+ unsigned int i;
+
+ /* Get the values of the system dependent segments. */
+ n_sysdep_segments =
+ W (domain->must_swap, data->n_sysdep_segments);
+ sysdep_segments = (const struct sysdep_segment *)
+ ((char *) data
+ + W (domain->must_swap, data->sysdep_segments_offset));
+ sysdep_segment_values =
+ alloca (n_sysdep_segments * sizeof (const char *));
+ for (i = 0; i < n_sysdep_segments; i++)
+ {
+ const char *name =
+ (char *) data
+ + W (domain->must_swap, sysdep_segments[i].offset);
+ nls_uint32 namelen =
+ W (domain->must_swap, sysdep_segments[i].length);
+
+ if (!(namelen > 0 && name[namelen - 1] == '\0'))
+ {
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ sysdep_segment_values[i] = get_sysdep_segment_value (name);
+ }
+
+ orig_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->orig_sysdep_tab_offset));
+ trans_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->trans_sysdep_tab_offset));
+
+ /* Compute the amount of additional memory needed for the
+ system dependent strings and the augmented hash table. */
+ memneed = 2 * n_sysdep_strings
+ * sizeof (struct sysdep_string_desc)
+ + domain->hash_size * sizeof (nls_uint32);
+ for (i = 0; i < 2 * n_sysdep_strings; i++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ i < n_sysdep_strings
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i - n_sysdep_strings]));
+ size_t need = 0;
+ const struct segment_pair *p = sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ need += W (domain->must_swap, p->segsize);
+
+ sysdepref = W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdepref >= n_sysdep_segments)
+ {
+ /* Invalid. */
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ need += strlen (sysdep_segment_values[sysdepref]);
+ }
+
+ memneed += need;
+ }
+
+ /* Allocate additional memory. */
+ mem = (char *) malloc (memneed);
+ if (mem == NULL)
+ goto invalid;
+
+ domain->malloced = mem;
+ inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_sysdep_strings * sizeof (struct sysdep_string_desc);
+ inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_sysdep_strings * sizeof (struct sysdep_string_desc);
+ inmem_hash_tab = (nls_uint32 *) mem;
+ mem += domain->hash_size * sizeof (nls_uint32);
+
+ /* Compute the system dependent strings. */
+ for (i = 0; i < 2 * n_sysdep_strings; i++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ i < n_sysdep_strings
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i - n_sysdep_strings]));
+ const char *static_segments =
+ (char *) data
+ + W (domain->must_swap, sysdep_string->offset);
+ const struct segment_pair *p = sysdep_string->segments;
+
+ /* Concatenate the segments, and fill
+ inmem_orig_sysdep_tab[i] (for i < n_sysdep_strings) and
+ inmem_trans_sysdep_tab[i-n_sysdep_strings] (for
+ i >= n_sysdep_strings). */
+
+ if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END)
+ {
+ /* Only one static segment. */
+ inmem_orig_sysdep_tab[i].length =
+ W (domain->must_swap, p->segsize);
+ inmem_orig_sysdep_tab[i].pointer = static_segments;
+ }
+ else
+ {
+ inmem_orig_sysdep_tab[i].pointer = mem;
+
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 segsize =
+ W (domain->must_swap, p->segsize);
+ nls_uint32 sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ size_t n;
+
+ if (segsize > 0)
+ {
+ memcpy (mem, static_segments, segsize);
+ mem += segsize;
+ static_segments += segsize;
+ }
+
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ n = strlen (sysdep_segment_values[sysdepref]);
+ memcpy (mem, sysdep_segment_values[sysdepref], n);
+ mem += n;
+ }
+
+ inmem_orig_sysdep_tab[i].length =
+ mem - inmem_orig_sysdep_tab[i].pointer;
+ }
+ }
+
+ /* Compute the augmented hash table. */
+ for (i = 0; i < domain->hash_size; i++)
+ inmem_hash_tab[i] =
+ W (domain->must_swap_hash_tab, domain->hash_tab[i]);
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ const char *msgid = inmem_orig_sysdep_tab[i].pointer;
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ for (;;)
+ {
+ if (inmem_hash_tab[idx] == 0)
+ {
+ /* Hash table entry is empty. Use it. */
+ inmem_hash_tab[idx] = 1 + domain->nstrings + i;
+ break;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ }
+
+ freea (sysdep_segment_values);
+
+ domain->n_sysdep_strings = n_sysdep_strings;
+ domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
+ domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
+
+ domain->hash_tab = inmem_hash_tab;
+ domain->must_swap_hash_tab = 0;
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+ }
+ break;
+ }
+ break;
+ default:
+ /* This is an invalid revision. */
+ invalid:
+ /* This is an invalid .mo file. */
+ if (domain->malloced)
+ free (domain->malloced);
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ free (domain);
+ domain_file->data = NULL;
+ return;
+ }
+
+ /* Now initialize the character set converter from the character set
+ the file is encoded with (found in the header entry) to the domain's
+ specified character set or the locale's character set. */
+ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+ /* Also look for a plural specification. */
+ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (domain)
+ struct loaded_domain *domain;
+{
+ if (domain->plural != &__gettext_germanic_plural)
+ __gettext_free_exp (domain->plural);
+
+ _nl_free_domain_conv (domain);
+
+ if (domain->malloced)
+ free (domain->malloced);
+
+# ifdef _POSIX_MAPPED_FILES
+ if (domain->use_mmap)
+ munmap ((caddr_t) domain->data, domain->mmap_size);
+ else
+# endif /* _POSIX_MAPPED_FILES */
+ free ((void *) domain->data);
+
+ free (domain);
+}
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,398 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Bruno Haible <bruno at clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "localcharset.h"
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS. */
+# define OS2
+#endif
+
+#if !defined WIN32
+# if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+# else
+# if HAVE_SETLOCALE
+# include <locale.h>
+# endif
+# endif
+#elif defined WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#ifdef HAVE_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+ possible multithread problem in the function get_charset_aliases. If we
+ are running in a threaded environment, and if two threads initialize
+ 'charset_aliases' simultaneously, both will produce the same value,
+ and everything will be ok if the two assignments to 'charset_aliases'
+ are atomic. But I don't know what will happen if the two assignments mix. */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+ read, else NULL. Its format is:
+ ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file. */
+static const char *
+get_charset_aliases ()
+{
+ const char *cp;
+
+ cp = charset_aliases;
+ if (cp == NULL)
+ {
+#if !(defined VMS || defined WIN32)
+ FILE *fp;
+ const char *dir = relocate (LIBDIR);
+ const char *base = "charset.alias";
+ char *file_name;
+
+ /* Concatenate dir and base into freshly allocated file_name. */
+ {
+ size_t dir_len = strlen (dir);
+ size_t base_len = strlen (base);
+ int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+ file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+ if (file_name != NULL)
+ {
+ memcpy (file_name, dir, dir_len);
+ if (add_slash)
+ file_name[dir_len] = DIRECTORY_SEPARATOR;
+ memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+ }
+ }
+
+ if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+ /* Out of memory or file not found, treat it as empty. */
+ cp = "";
+ else
+ {
+ /* Parse the file's contents. */
+ int c;
+ char buf1[50+1];
+ char buf2[50+1];
+ char *res_ptr = NULL;
+ size_t res_size = 0;
+ size_t l1, l2;
+
+ for (;;)
+ {
+ c = getc (fp);
+ if (c == EOF)
+ break;
+ if (c == '\n' || c == ' ' || c == '\t')
+ continue;
+ if (c == '#')
+ {
+ /* Skip comment, to end of line. */
+ do
+ c = getc (fp);
+ while (!(c == EOF || c == '\n'));
+ if (c == EOF)
+ break;
+ continue;
+ }
+ ungetc (c, fp);
+ if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+ break;
+ l1 = strlen (buf1);
+ l2 = strlen (buf2);
+ if (res_size == 0)
+ {
+ res_size = l1 + 1 + l2 + 1;
+ res_ptr = (char *) malloc (res_size + 1);
+ }
+ else
+ {
+ res_size += l1 + 1 + l2 + 1;
+ res_ptr = (char *) realloc (res_ptr, res_size + 1);
+ }
+ if (res_ptr == NULL)
+ {
+ /* Out of memory. */
+ res_size = 0;
+ break;
+ }
+ strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+ strcpy (res_ptr + res_size - (l2 + 1), buf2);
+ }
+ fclose (fp);
+ if (res_size == 0)
+ cp = "";
+ else
+ {
+ *(res_ptr + res_size) = '\0';
+ cp = res_ptr;
+ }
+ }
+
+ if (file_name != NULL)
+ free (file_name);
+
+#else
+
+# if defined VMS
+ /* To avoid the troubles of an extra file charset.alias_vms in the
+ sources of many GNU packages, simply inline the aliases here. */
+ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+ "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+ section 10.7 "Handling Different Character Sets". */
+ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+ "ISO8859-2" "\0" "ISO-8859-2" "\0"
+ "ISO8859-5" "\0" "ISO-8859-5" "\0"
+ "ISO8859-7" "\0" "ISO-8859-7" "\0"
+ "ISO8859-8" "\0" "ISO-8859-8" "\0"
+ "ISO8859-9" "\0" "ISO-8859-9" "\0"
+ /* Japanese */
+ "eucJP" "\0" "EUC-JP" "\0"
+ "SJIS" "\0" "SHIFT_JIS" "\0"
+ "DECKANJI" "\0" "DEC-KANJI" "\0"
+ "SDECKANJI" "\0" "EUC-JP" "\0"
+ /* Chinese */
+ "eucTW" "\0" "EUC-TW" "\0"
+ "DECHANYU" "\0" "DEC-HANYU" "\0"
+ "DECHANZI" "\0" "GB2312" "\0"
+ /* Korean */
+ "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WIN32
+ /* To avoid the troubles of installing a separate file in the same
+ directory as the DLL and of retrieving the DLL's directory at
+ runtime, simply inline the aliases here. */
+
+ cp = "CP936" "\0" "GBK" "\0"
+ "CP1361" "\0" "JOHAB" "\0"
+ "CP20127" "\0" "ASCII" "\0"
+ "CP20866" "\0" "KOI8-R" "\0"
+ "CP21866" "\0" "KOI8-RU" "\0"
+ "CP28591" "\0" "ISO-8859-1" "\0"
+ "CP28592" "\0" "ISO-8859-2" "\0"
+ "CP28593" "\0" "ISO-8859-3" "\0"
+ "CP28594" "\0" "ISO-8859-4" "\0"
+ "CP28595" "\0" "ISO-8859-5" "\0"
+ "CP28596" "\0" "ISO-8859-6" "\0"
+ "CP28597" "\0" "ISO-8859-7" "\0"
+ "CP28598" "\0" "ISO-8859-8" "\0"
+ "CP28599" "\0" "ISO-8859-9" "\0"
+ "CP28605" "\0" "ISO-8859-15" "\0";
+# endif
+#endif
+
+ charset_aliases = cp;
+ }
+
+ return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset ()
+{
+ const char *codeset;
+ const char *aliases;
+
+#if !(defined WIN32 || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+ /* Most systems support nl_langinfo (CODESET) nowadays. */
+ codeset = nl_langinfo (CODESET);
+
+# else
+
+ /* On old systems which lack it, use setlocale or getenv. */
+ const char *locale = NULL;
+
+ /* But most old systems don't have a complete set of locales. Some
+ (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
+ use setlocale here; it would return "C" when it doesn't support the
+ locale name the user has set. */
+# if HAVE_SETLOCALE && 0
+ locale = setlocale (LC_CTYPE, NULL);
+# endif
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ }
+
+ /* On some old systems, one used to set locale = "iso8859_1". On others,
+ you set it to "language_COUNTRY.charset". In any case, we resolve it
+ through the charset.alias file. */
+ codeset = locale;
+
+# endif
+
+#elif defined WIN32
+
+ static char buf[2 + 10 + 1];
+
+ /* Woe32 has a function returning the locale's codepage as a number. */
+ sprintf (buf, "CP%u", GetACP ());
+ codeset = buf;
+
+#elif defined OS2
+
+ const char *locale;
+ static char buf[2 + 10 + 1];
+ ULONG cp[3];
+ ULONG cplen;
+
+ /* Allow user to override the codeset, as set in the operating system,
+ with standard language environment variables. */
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ if (locale != NULL && locale[0] != '\0')
+ {
+ /* If the locale name contains an encoding after the dot, return it. */
+ const char *dot = strchr (locale, '.');
+
+ if (dot != NULL)
+ {
+ const char *modifier;
+
+ dot++;
+ /* Look for the possible @... trailer and remove it, if any. */
+ modifier = strchr (dot, '@');
+ if (modifier == NULL)
+ return dot;
+ if (modifier - dot < sizeof (buf))
+ {
+ memcpy (buf, dot, modifier - dot);
+ buf [modifier - dot] = '\0';
+ return buf;
+ }
+ }
+
+ /* Resolve through the charset.alias file. */
+ codeset = locale;
+ }
+ else
+ {
+ /* OS/2 has a function returning the locale's codepage as a number. */
+ if (DosQueryCp (sizeof (cp), cp, &cplen))
+ codeset = "";
+ else
+ {
+ sprintf (buf, "CP%u", cp[0]);
+ codeset = buf;
+ }
+ }
+
+#endif
+
+ if (codeset == NULL)
+ /* The canonical name cannot be determined. */
+ codeset = "";
+
+ /* Resolve alias. */
+ for (aliases = get_charset_aliases ();
+ *aliases != '\0';
+ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+ if (strcmp (codeset, aliases) == 0
+ || (aliases[0] == '*' && aliases[1] == '\0'))
+ {
+ codeset = aliases + strlen (aliases) + 1;
+ break;
+ }
+
+ /* Don't return an empty string. GNU libc and GNU libiconv interpret
+ the empty string as denoting "the locale's character encoding",
+ thus GNU libiconv would call this function a second time. */
+ if (codeset[0] == '\0')
+ codeset = "ASCII";
+
+ return codeset;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localcharset.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,42 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/locale.alias
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/locale.alias 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/locale.alias 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+# /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is far from being complete. If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us. Send it using the `glibcbug' script to
+# bugs at gnu.org.
+
+# Packages using this file:
+
+bokmal no_NO.ISO-8859-1
+bokmål no_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-1
+estonian et_EE.ISO-8859-1
+finnish fi_FI.ISO-8859-1
+français fr_FR.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+nb_NO no_NO.ISO-8859-1
+nb_NO.ISO-8859-1 no_NO.ISO-8859-1
+norwegian no_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.ISO-8859-5
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localealias.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localealias.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localealias.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,419 @@
+/* Handle aliases for locale names.
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+# define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY 1
+# define HAVE___FSETLOCKING 1
+
+/* We need locking here since we can be called from different places. */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Some optimizations for glibc. */
+#ifdef _LIBC
+# define FEOF(fp) feof_unlocked (fp)
+# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp) feof (fp)
+# define FGETS(buf, n, fp) fgets (buf, n, fp)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+ const char *alias;
+ const char *value;
+};
+
+
+#ifndef _LIBC
+# define libc_freeres_ptr(decl) decl
+#endif
+
+libc_freeres_ptr (static char *string_space);
+static size_t string_space_act;
+static size_t string_space_max;
+libc_freeres_ptr (static struct alias_map *map);
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions. */
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+ internal_function;
+static int extend_alias_table PARAMS ((void));
+static int alias_compare PARAMS ((const struct alias_map *map1,
+ const struct alias_map *map2));
+
+
+const char *
+_nl_expand_alias (name)
+ const char *name;
+{
+ static const char *locale_alias_path;
+ struct alias_map *retval;
+ const char *result = NULL;
+ size_t added;
+
+#ifdef _LIBC
+ __libc_lock_lock (lock);
+#endif
+
+ if (locale_alias_path == NULL)
+ locale_alias_path = LOCALE_ALIAS_PATH;
+
+ do
+ {
+ struct alias_map item;
+
+ item.alias = name;
+
+ if (nmap > 0)
+ retval = (struct alias_map *) bsearch (&item, map, nmap,
+ sizeof (struct alias_map),
+ (int (*) PARAMS ((const void *,
+ const void *))
+ ) alias_compare);
+ else
+ retval = NULL;
+
+ /* We really found an alias. Return the value. */
+ if (retval != NULL)
+ {
+ result = retval->value;
+ break;
+ }
+
+ /* Perhaps we can find another alias file. */
+ added = 0;
+ while (added == 0 && locale_alias_path[0] != '\0')
+ {
+ const char *start;
+
+ while (locale_alias_path[0] == PATH_SEPARATOR)
+ ++locale_alias_path;
+ start = locale_alias_path;
+
+ while (locale_alias_path[0] != '\0'
+ && locale_alias_path[0] != PATH_SEPARATOR)
+ ++locale_alias_path;
+
+ if (start < locale_alias_path)
+ added = read_alias_file (start, locale_alias_path - start);
+ }
+ }
+ while (added != 0);
+
+#ifdef _LIBC
+ __libc_lock_unlock (lock);
+#endif
+
+ return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (fname, fname_len)
+ const char *fname;
+ int fname_len;
+{
+ FILE *fp;
+ char *full_fname;
+ size_t added;
+ static const char aliasfile[] = "/locale.alias";
+
+ full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+#ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+#else
+ memcpy (full_fname, fname, fname_len);
+ memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+ fp = fopen (relocate (full_fname), "r");
+ freea (full_fname);
+ if (fp == NULL)
+ return 0;
+
+#ifdef HAVE___FSETLOCKING
+ /* No threads present. */
+ __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+
+ added = 0;
+ while (!FEOF (fp))
+ {
+ /* It is a reasonable approach to use a fix buffer here because
+ a) we are only interested in the first two fields
+ b) these fields must be usable as file names and so must not
+ be that long
+ We avoid a multi-kilobyte buffer here since this would use up
+ stack space which we might not have if the program ran out of
+ memory. */
+ char buf[400];
+ char *alias;
+ char *value;
+ char *cp;
+
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* EOF reached. */
+ break;
+
+ cp = buf;
+ /* Ignore leading white space. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ /* A leading '#' signals a comment line. */
+ if (cp[0] != '\0' && cp[0] != '#')
+ {
+ alias = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate alias name. */
+ if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ /* Now look for the beginning of the value. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ if (cp[0] != '\0')
+ {
+ size_t alias_len;
+ size_t value_len;
+
+ value = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate value. */
+ if (cp[0] == '\n')
+ {
+ /* This has to be done to make the following test
+ for the end of line possible. We are looking for
+ the terminating '\n' which do not overwrite here. */
+ *cp++ = '\0';
+ *cp = '\n';
+ }
+ else if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ if (nmap >= maxmap)
+ if (__builtin_expect (extend_alias_table (), 0))
+ return added;
+
+ alias_len = strlen (alias) + 1;
+ value_len = strlen (value) + 1;
+
+ if (string_space_act + alias_len + value_len > string_space_max)
+ {
+ /* Increase size of memory pool. */
+ size_t new_size = (string_space_max
+ + (alias_len + value_len > 1024
+ ? alias_len + value_len : 1024));
+ char *new_pool = (char *) realloc (string_space, new_size);
+ if (new_pool == NULL)
+ return added;
+
+ if (__builtin_expect (string_space != new_pool, 0))
+ {
+ size_t i;
+
+ for (i = 0; i < nmap; i++)
+ {
+ map[i].alias += new_pool - string_space;
+ map[i].value += new_pool - string_space;
+ }
+ }
+
+ string_space = new_pool;
+ string_space_max = new_size;
+ }
+
+ map[nmap].alias = memcpy (&string_space[string_space_act],
+ alias, alias_len);
+ string_space_act += alias_len;
+
+ map[nmap].value = memcpy (&string_space[string_space_act],
+ value, value_len);
+ string_space_act += value_len;
+
+ ++nmap;
+ ++added;
+ }
+ }
+
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ while (strchr (buf, '\n') == NULL)
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
+ }
+
+ /* Should we test for ferror()? I think we have to silently ignore
+ errors. --drepper */
+ fclose (fp);
+
+ if (added > 0)
+ qsort (map, nmap, sizeof (struct alias_map),
+ (int (*) PARAMS ((const void *, const void *))) alias_compare);
+
+ return added;
+}
+
+
+static int
+extend_alias_table ()
+{
+ size_t new_size;
+ struct alias_map *new_map;
+
+ new_size = maxmap == 0 ? 100 : 2 * maxmap;
+ new_map = (struct alias_map *) realloc (map, (new_size
+ * sizeof (struct alias_map)));
+ if (new_map == NULL)
+ /* Simply don't extend: we don't have any more core. */
+ return -1;
+
+ map = new_map;
+ maxmap = new_size;
+ return 0;
+}
+
+
+static int
+alias_compare (map1, map2)
+ const struct alias_map *map1;
+ const struct alias_map *map2;
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+ return strcasecmp (map1->alias, map2->alias);
+#else
+ const unsigned char *p1 = (const unsigned char *) map1->alias;
+ const unsigned char *p2 = (const unsigned char *) map2->alias;
+ unsigned char c1, c2;
+
+ if (p1 == p2)
+ return 0;
+
+ do
+ {
+ /* I know this seems to be odd but the tolower() function in
+ some systems libc cannot handle nonalpha characters. */
+ c1 = isupper (*p1) ? tolower (*p1) : *p1;
+ c2 = isupper (*p2) ? tolower (*p2) : *p2;
+ if (c1 == '\0')
+ break;
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ return c1 - c2;
+#endif
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localename.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localename.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/localename.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,772 @@
+/* Determine the current selected locale.
+ Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Ulrich Drepper <drepper at gnu.org>, 1995. */
+/* Win32 code written by Tor Lillqvist <tml at iki.fi>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* Mingw headers don't have latest language and sublanguage codes. */
+# ifndef LANG_AFRIKAANS
+# define LANG_AFRIKAANS 0x36
+# endif
+# ifndef LANG_ALBANIAN
+# define LANG_ALBANIAN 0x1c
+# endif
+# ifndef LANG_ARABIC
+# define LANG_ARABIC 0x01
+# endif
+# ifndef LANG_ARMENIAN
+# define LANG_ARMENIAN 0x2b
+# endif
+# ifndef LANG_ASSAMESE
+# define LANG_ASSAMESE 0x4d
+# endif
+# ifndef LANG_AZERI
+# define LANG_AZERI 0x2c
+# endif
+# ifndef LANG_BASQUE
+# define LANG_BASQUE 0x2d
+# endif
+# ifndef LANG_BELARUSIAN
+# define LANG_BELARUSIAN 0x23
+# endif
+# ifndef LANG_BENGALI
+# define LANG_BENGALI 0x45
+# endif
+# ifndef LANG_CATALAN
+# define LANG_CATALAN 0x03
+# endif
+# ifndef LANG_DIVEHI
+# define LANG_DIVEHI 0x65
+# endif
+# ifndef LANG_ESTONIAN
+# define LANG_ESTONIAN 0x25
+# endif
+# ifndef LANG_FAEROESE
+# define LANG_FAEROESE 0x38
+# endif
+# ifndef LANG_FARSI
+# define LANG_FARSI 0x29
+# endif
+# ifndef LANG_GALICIAN
+# define LANG_GALICIAN 0x56
+# endif
+# ifndef LANG_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# endif
+# ifndef LANG_KASHMIRI
+# define LANG_KASHMIRI 0x60
+# endif
+# ifndef LANG_KAZAK
+# define LANG_KAZAK 0x3f
+# endif
+# ifndef LANG_KONKANI
+# define LANG_KONKANI 0x57
+# endif
+# ifndef LANG_KYRGYZ
+# define LANG_KYRGYZ 0x40
+# endif
+# ifndef LANG_LATVIAN
+# define LANG_LATVIAN 0x26
+# endif
+# ifndef LANG_LITHUANIAN
+# define LANG_LITHUANIAN 0x27
+# endif
+# ifndef LANG_MACEDONIAN
+# define LANG_MACEDONIAN 0x2f
+# endif
+# ifndef LANG_MALAY
+# define LANG_MALAY 0x3e
+# endif
+# ifndef LANG_MALAYALAM
+# define LANG_MALAYALAM 0x4c
+# endif
+# ifndef LANG_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_MONGOLIAN
+# define LANG_MONGOLIAN 0x50
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# endif
+# ifndef LANG_SANSKRIT
+# define LANG_SANSKRIT 0x4f
+# endif
+# ifndef LANG_SERBIAN
+# define LANG_SERBIAN 0x1a
+# endif
+# ifndef LANG_SINDHI
+# define LANG_SINDHI 0x59
+# endif
+# ifndef LANG_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SORBIAN
+# define LANG_SORBIAN 0x2e
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# endif
+# ifndef LANG_SYRIAC
+# define LANG_SYRIAC 0x5a
+# endif
+# ifndef LANG_TAMIL
+# define LANG_TAMIL 0x49
+# endif
+# ifndef LANG_TATAR
+# define LANG_TATAR 0x44
+# endif
+# ifndef LANG_TELUGU
+# define LANG_TELUGU 0x4a
+# endif
+# ifndef LANG_THAI
+# define LANG_THAI 0x1e
+# endif
+# ifndef LANG_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# endif
+# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
+# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+# endif
+# ifndef SUBLANG_ARABIC_IRAQ
+# define SUBLANG_ARABIC_IRAQ 0x02
+# endif
+# ifndef SUBLANG_ARABIC_EGYPT
+# define SUBLANG_ARABIC_EGYPT 0x03
+# endif
+# ifndef SUBLANG_ARABIC_LIBYA
+# define SUBLANG_ARABIC_LIBYA 0x04
+# endif
+# ifndef SUBLANG_ARABIC_ALGERIA
+# define SUBLANG_ARABIC_ALGERIA 0x05
+# endif
+# ifndef SUBLANG_ARABIC_MOROCCO
+# define SUBLANG_ARABIC_MOROCCO 0x06
+# endif
+# ifndef SUBLANG_ARABIC_TUNISIA
+# define SUBLANG_ARABIC_TUNISIA 0x07
+# endif
+# ifndef SUBLANG_ARABIC_OMAN
+# define SUBLANG_ARABIC_OMAN 0x08
+# endif
+# ifndef SUBLANG_ARABIC_YEMEN
+# define SUBLANG_ARABIC_YEMEN 0x09
+# endif
+# ifndef SUBLANG_ARABIC_SYRIA
+# define SUBLANG_ARABIC_SYRIA 0x0a
+# endif
+# ifndef SUBLANG_ARABIC_JORDAN
+# define SUBLANG_ARABIC_JORDAN 0x0b
+# endif
+# ifndef SUBLANG_ARABIC_LEBANON
+# define SUBLANG_ARABIC_LEBANON 0x0c
+# endif
+# ifndef SUBLANG_ARABIC_KUWAIT
+# define SUBLANG_ARABIC_KUWAIT 0x0d
+# endif
+# ifndef SUBLANG_ARABIC_UAE
+# define SUBLANG_ARABIC_UAE 0x0e
+# endif
+# ifndef SUBLANG_ARABIC_BAHRAIN
+# define SUBLANG_ARABIC_BAHRAIN 0x0f
+# endif
+# ifndef SUBLANG_ARABIC_QATAR
+# define SUBLANG_ARABIC_QATAR 0x10
+# endif
+# ifndef SUBLANG_AZERI_LATIN
+# define SUBLANG_AZERI_LATIN 0x01
+# endif
+# ifndef SUBLANG_AZERI_CYRILLIC
+# define SUBLANG_AZERI_CYRILLIC 0x02
+# endif
+# ifndef SUBLANG_CHINESE_MACAU
+# define SUBLANG_CHINESE_MACAU 0x05
+# endif
+# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
+# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+# endif
+# ifndef SUBLANG_ENGLISH_JAMAICA
+# define SUBLANG_ENGLISH_JAMAICA 0x08
+# endif
+# ifndef SUBLANG_ENGLISH_CARIBBEAN
+# define SUBLANG_ENGLISH_CARIBBEAN 0x09
+# endif
+# ifndef SUBLANG_ENGLISH_BELIZE
+# define SUBLANG_ENGLISH_BELIZE 0x0a
+# endif
+# ifndef SUBLANG_ENGLISH_TRINIDAD
+# define SUBLANG_ENGLISH_TRINIDAD 0x0b
+# endif
+# ifndef SUBLANG_ENGLISH_ZIMBABWE
+# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+# endif
+# ifndef SUBLANG_ENGLISH_PHILIPPINES
+# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+# endif
+# ifndef SUBLANG_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# endif
+# ifndef SUBLANG_GERMAN_LUXEMBOURG
+# define SUBLANG_GERMAN_LUXEMBOURG 0x04
+# endif
+# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
+# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+# endif
+# ifndef SUBLANG_KASHMIRI_INDIA
+# define SUBLANG_KASHMIRI_INDIA 0x02
+# endif
+# ifndef SUBLANG_MALAY_MALAYSIA
+# define SUBLANG_MALAY_MALAYSIA 0x01
+# endif
+# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
+# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+# endif
+# ifndef SUBLANG_NEPALI_INDIA
+# define SUBLANG_NEPALI_INDIA 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# endif
+# ifndef SUBLANG_SPANISH_GUATEMALA
+# define SUBLANG_SPANISH_GUATEMALA 0x04
+# endif
+# ifndef SUBLANG_SPANISH_COSTA_RICA
+# define SUBLANG_SPANISH_COSTA_RICA 0x05
+# endif
+# ifndef SUBLANG_SPANISH_PANAMA
+# define SUBLANG_SPANISH_PANAMA 0x06
+# endif
+# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
+# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+# endif
+# ifndef SUBLANG_SPANISH_VENEZUELA
+# define SUBLANG_SPANISH_VENEZUELA 0x08
+# endif
+# ifndef SUBLANG_SPANISH_COLOMBIA
+# define SUBLANG_SPANISH_COLOMBIA 0x09
+# endif
+# ifndef SUBLANG_SPANISH_PERU
+# define SUBLANG_SPANISH_PERU 0x0a
+# endif
+# ifndef SUBLANG_SPANISH_ARGENTINA
+# define SUBLANG_SPANISH_ARGENTINA 0x0b
+# endif
+# ifndef SUBLANG_SPANISH_ECUADOR
+# define SUBLANG_SPANISH_ECUADOR 0x0c
+# endif
+# ifndef SUBLANG_SPANISH_CHILE
+# define SUBLANG_SPANISH_CHILE 0x0d
+# endif
+# ifndef SUBLANG_SPANISH_URUGUAY
+# define SUBLANG_SPANISH_URUGUAY 0x0e
+# endif
+# ifndef SUBLANG_SPANISH_PARAGUAY
+# define SUBLANG_SPANISH_PARAGUAY 0x0f
+# endif
+# ifndef SUBLANG_SPANISH_BOLIVIA
+# define SUBLANG_SPANISH_BOLIVIA 0x10
+# endif
+# ifndef SUBLANG_SPANISH_EL_SALVADOR
+# define SUBLANG_SPANISH_EL_SALVADOR 0x11
+# endif
+# ifndef SUBLANG_SPANISH_HONDURAS
+# define SUBLANG_SPANISH_HONDURAS 0x12
+# endif
+# ifndef SUBLANG_SPANISH_NICARAGUA
+# define SUBLANG_SPANISH_NICARAGUA 0x13
+# endif
+# ifndef SUBLANG_SPANISH_PUERTO_RICO
+# define SUBLANG_SPANISH_PUERTO_RICO 0x14
+# endif
+# ifndef SUBLANG_SWEDISH_FINLAND
+# define SUBLANG_SWEDISH_FINLAND 0x02
+# endif
+# ifndef SUBLANG_URDU_PAKISTAN
+# define SUBLANG_URDU_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_URDU_INDIA
+# define SUBLANG_URDU_INDIA 0x02
+# endif
+# ifndef SUBLANG_UZBEK_LATIN
+# define SUBLANG_UZBEK_LATIN 0x01
+# endif
+# ifndef SUBLANG_UZBEK_CYRILLIC
+# define SUBLANG_UZBEK_CYRILLIC 0x02
+# endif
+#endif
+
+/* XPG3 defines the result of 'setlocale (category, NULL)' as:
+ "Directs 'setlocale()' to query 'category' and return the current
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+ those using GNU C Library). */
+#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Determine the current locale's name, and canonicalize it into XPG syntax
+ language[_territory[.codeset]][@modifier]
+ The codeset part in the result is not reliable; the locale_charset()
+ should be used for codeset information instead.
+ The result must not be freed; it is statically allocated. */
+
+const char *
+_nl_locale_name (category, categoryname)
+ int category;
+ const char *categoryname;
+{
+ const char *retval;
+
+#ifndef WIN32
+
+ /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
+ On some systems this can be done by the 'setlocale' function itself. */
+# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+ retval = setlocale (category, NULL);
+# else
+ /* Setting of LC_ALL overwrites all other. */
+ retval = getenv ("LC_ALL");
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Next comes the name of the desired category. */
+ retval = getenv (categoryname);
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Last possibility is the LANG environment variable. */
+ retval = getenv ("LANG");
+ if (retval == NULL || retval[0] == '\0')
+ /* We use C as the default domain. POSIX says this is
+ implementation defined. */
+ retval = "C";
+ }
+ }
+# endif
+
+ return retval;
+
+#else /* WIN32 */
+
+ /* Return an XPG style locale name language[_territory][@modifier].
+ Don't even bother determining the codeset; it's not useful in this
+ context, because message catalogs are not specific to a single
+ codeset. */
+
+ LCID lcid;
+ LANGID langid;
+ int primary, sub;
+
+ /* Let the user override the system settings through environment
+ variables, as on POSIX systems. */
+ retval = getenv ("LC_ALL");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv (categoryname);
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv ("LANG");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+
+ /* Use native Win32 API locale ID. */
+ lcid = GetThreadLocale ();
+
+ /* Strip off the sorting rules, keep only the language part. */
+ langid = LANGIDFROMLCID (lcid);
+
+ /* Split into language and territory part. */
+ primary = PRIMARYLANGID (langid);
+ sub = SUBLANGID (langid);
+
+ /* Dispatch on language.
+ See also http://www.unicode.org/unicode/onlinedat/languages.html .
+ For details about languages, see http://www.ethnologue.com/ . */
+ switch (primary)
+ {
+ case LANG_AFRIKAANS: return "af_ZA";
+ case LANG_ALBANIAN: return "sq_AL";
+ case 0x5e: /* AMHARIC */ return "am_ET";
+ case LANG_ARABIC:
+ switch (sub)
+ {
+ case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
+ case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
+ case SUBLANG_ARABIC_EGYPT: return "ar_EG";
+ case SUBLANG_ARABIC_LIBYA: return "ar_LY";
+ case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
+ case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
+ case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
+ case SUBLANG_ARABIC_OMAN: return "ar_OM";
+ case SUBLANG_ARABIC_YEMEN: return "ar_YE";
+ case SUBLANG_ARABIC_SYRIA: return "ar_SY";
+ case SUBLANG_ARABIC_JORDAN: return "ar_JO";
+ case SUBLANG_ARABIC_LEBANON: return "ar_LB";
+ case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
+ case SUBLANG_ARABIC_UAE: return "ar_AE";
+ case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
+ case SUBLANG_ARABIC_QATAR: return "ar_QA";
+ }
+ return "ar";
+ case LANG_ARMENIAN: return "hy_AM";
+ case LANG_ASSAMESE: return "as_IN";
+ case LANG_AZERI:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
+ case SUBLANG_AZERI_LATIN: return "az_AZ at latin";
+ case SUBLANG_AZERI_CYRILLIC: return "az_AZ at cyrillic";
+ }
+ return "az";
+ case LANG_BASQUE:
+ return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
+ case LANG_BELARUSIAN: return "be_BY";
+ case LANG_BENGALI: return "bn_IN";
+ case LANG_BULGARIAN: return "bg_BG";
+ case 0x55: /* BURMESE */ return "my_MM";
+ case 0x53: /* CAMBODIAN */ return "km_KH";
+ case LANG_CATALAN: return "ca_ES";
+ case 0x5c: /* CHEROKEE */ return "chr_US";
+ case LANG_CHINESE:
+ switch (sub)
+ {
+ case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
+ case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
+ case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
+ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
+ case SUBLANG_CHINESE_MACAU: return "zh_MO";
+ }
+ return "zh";
+ case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
+ * What used to be called Serbo-Croatian
+ * should really now be two separate
+ * languages because of political reasons.
+ * (Says tml, who knows nothing about Serbian
+ * or Croatian.)
+ * (I can feel those flames coming already.)
+ */
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "hr_HR";
+ case SUBLANG_SERBIAN_LATIN: return "sr_YU";
+ case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU at cyrillic";
+ }
+ return "hr";
+ case LANG_CZECH: return "cs_CZ";
+ case LANG_DANISH: return "da_DK";
+ case LANG_DIVEHI: return "div_MV";
+ case LANG_DUTCH:
+ switch (sub)
+ {
+ case SUBLANG_DUTCH: return "nl_NL";
+ case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
+ }
+ return "nl";
+ case 0x66: /* EDO */ return "bin_NG";
+ case LANG_ENGLISH:
+ switch (sub)
+ {
+ /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
+ * English was the language spoken in England.
+ * Oh well.
+ */
+ case SUBLANG_ENGLISH_US: return "en_US";
+ case SUBLANG_ENGLISH_UK: return "en_GB";
+ case SUBLANG_ENGLISH_AUS: return "en_AU";
+ case SUBLANG_ENGLISH_CAN: return "en_CA";
+ case SUBLANG_ENGLISH_NZ: return "en_NZ";
+ case SUBLANG_ENGLISH_EIRE: return "en_IE";
+ case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
+ case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
+ case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
+ case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
+ case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
+ case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
+ case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
+ }
+ return "en";
+ case LANG_ESTONIAN: return "et_EE";
+ case LANG_FAEROESE: return "fo_FO";
+ case LANG_FARSI: return "fa_IR";
+ case LANG_FINNISH: return "fi_FI";
+ case LANG_FRENCH:
+ switch (sub)
+ {
+ case SUBLANG_FRENCH: return "fr_FR";
+ case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
+ case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
+ case SUBLANG_FRENCH_SWISS: return "fr_CH";
+ case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
+ case SUBLANG_FRENCH_MONACO: return "fr_MC";
+ }
+ return "fr";
+ case 0x62: /* FRISIAN */ return "fy_NL";
+ case 0x67: /* FULFULDE */ return "ful_NG";
+ case 0x3c: /* GAELIC */
+ switch (sub)
+ {
+ case 0x01: /* SCOTTISH */ return "gd_GB";
+ case 0x02: /* IRISH */ return "ga_IE";
+ }
+ return "C";
+ case LANG_GALICIAN: return "gl_ES";
+ case LANG_GEORGIAN: return "ka_GE";
+ case LANG_GERMAN:
+ switch (sub)
+ {
+ case SUBLANG_GERMAN: return "de_DE";
+ case SUBLANG_GERMAN_SWISS: return "de_CH";
+ case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
+ case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
+ case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
+ }
+ return "de";
+ case LANG_GREEK: return "el_GR";
+ case 0x74: /* GUARANI */ return "gn_PY";
+ case LANG_GUJARATI: return "gu_IN";
+ case 0x68: /* HAUSA */ return "ha_NG";
+ case 0x75: /* HAWAIIAN */
+ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
+ or Hawaii Creole English ("cpe_US", 600000 speakers)? */
+ return "cpe_US";
+ case LANG_HEBREW: return "he_IL";
+ case LANG_HINDI: return "hi_IN";
+ case LANG_HUNGARIAN: return "hu_HU";
+ case 0x69: /* IBIBIO */ return "nic_NG";
+ case LANG_ICELANDIC: return "is_IS";
+ case 0x70: /* IGBO */ return "ibo_NG";
+ case LANG_INDONESIAN: return "id_ID";
+ case 0x5d: /* INUKTITUT */ return "iu_CA";
+ case LANG_ITALIAN:
+ switch (sub)
+ {
+ case SUBLANG_ITALIAN: return "it_IT";
+ case SUBLANG_ITALIAN_SWISS: return "it_CH";
+ }
+ return "it";
+ case LANG_JAPANESE: return "ja_JP";
+ case LANG_KANNADA: return "kn_IN";
+ case 0x71: /* KANURI */ return "kau_NG";
+ case LANG_KASHMIRI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ks_PK";
+ case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
+ }
+ return "ks";
+ case LANG_KAZAK: return "kk_KZ";
+ case LANG_KONKANI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "kok_IN";
+ case LANG_KOREAN: return "ko_KR";
+ case LANG_KYRGYZ: return "ky_KG";
+ case 0x54: /* LAO */ return "lo_LA";
+ case 0x76: /* LATIN */ return "la_VA";
+ case LANG_LATVIAN: return "lv_LV";
+ case LANG_LITHUANIAN: return "lt_LT";
+ case LANG_MACEDONIAN: return "mk_MK";
+ case LANG_MALAY:
+ switch (sub)
+ {
+ case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
+ case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
+ }
+ return "ms";
+ case LANG_MALAYALAM: return "ml_IN";
+ case 0x3a: /* MALTESE */ return "mt_MT";
+ case LANG_MANIPURI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "mni_IN";
+ case LANG_MARATHI: return "mr_IN";
+ case LANG_MONGOLIAN:
+ return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
+ case LANG_NEPALI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ne_NP";
+ case SUBLANG_NEPALI_INDIA: return "ne_IN";
+ }
+ return "ne";
+ case LANG_NORWEGIAN:
+ switch (sub)
+ {
+ case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
+ case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+ }
+ return "no";
+ case LANG_ORIYA: return "or_IN";
+ case 0x72: /* OROMO */ return "om_ET";
+ case 0x79: /* PAPIAMENTU */ return "pap_AN";
+ case 0x63: /* PASHTO */
+ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
+ case LANG_POLISH: return "pl_PL";
+ case LANG_PORTUGUESE:
+ switch (sub)
+ {
+ case SUBLANG_PORTUGUESE: return "pt_PT";
+ /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
+ Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
+ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
+ }
+ return "pt";
+ case LANG_PUNJABI: return "pa_IN";
+ case 0x17: /* RHAETO-ROMANCE */ return "rm_CH";
+ case LANG_ROMANIAN: return "ro_RO";
+ case LANG_RUSSIAN:
+ return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */
+ case 0x3b: /* SAMI */ return "se_NO";
+ case LANG_SANSKRIT: return "sa_IN";
+ case LANG_SINDHI: return "sd";
+ case 0x5b: /* SINHALESE */ return "si_LK";
+ case LANG_SLOVAK: return "sk_SK";
+ case LANG_SLOVENIAN: return "sl_SI";
+ case 0x77: /* SOMALI */ return "so_SO";
+ case LANG_SORBIAN:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "wen_DE";
+ case LANG_SPANISH:
+ switch (sub)
+ {
+ case SUBLANG_SPANISH: return "es_ES";
+ case SUBLANG_SPANISH_MEXICAN: return "es_MX";
+ case SUBLANG_SPANISH_MODERN:
+ return "es_ES at modern"; /* not seen on Unix */
+ case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
+ case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
+ case SUBLANG_SPANISH_PANAMA: return "es_PA";
+ case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
+ case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
+ case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
+ case SUBLANG_SPANISH_PERU: return "es_PE";
+ case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
+ case SUBLANG_SPANISH_ECUADOR: return "es_EC";
+ case SUBLANG_SPANISH_CHILE: return "es_CL";
+ case SUBLANG_SPANISH_URUGUAY: return "es_UY";
+ case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
+ case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
+ case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
+ case SUBLANG_SPANISH_HONDURAS: return "es_HN";
+ case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
+ case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
+ }
+ return "es";
+ case 0x30: /* SUTU */ return "bnt_TZ";
+ case LANG_SWAHILI: return "sw_KE";
+ case LANG_SWEDISH:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "sv_SE";
+ case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+ }
+ return "sv";
+ case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
+ case 0x64: /* TAGALOG */ return "tl_PH";
+ case 0x28: /* TAJIK */ return "tg_TJ";
+ case 0x5f: /* TAMAZIGHT */ return "ber_MA";
+ case LANG_TAMIL:
+ return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
+ case LANG_TATAR: return "tt_RU";
+ case LANG_TELUGU: return "te_IN";
+ case LANG_THAI: return "th_TH";
+ case 0x51: /* TIBETAN */ return "bo_CN";
+ case 0x73: /* TIGRINYA */ return "ti_ET";
+ case 0x31: /* TSONGA */ return "ts_ZA";
+ case LANG_TURKISH: return "tr_TR";
+ case 0x42: /* TURKMEN */ return "tk_TM";
+ case LANG_UKRAINIAN: return "uk_UA";
+ case LANG_URDU:
+ switch (sub)
+ {
+ case SUBLANG_URDU_PAKISTAN: return "ur_PK";
+ case SUBLANG_URDU_INDIA: return "ur_IN";
+ }
+ return "ur";
+ case LANG_UZBEK:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Uzbek locales appear on Unix. */
+ case SUBLANG_UZBEK_LATIN: return "uz_UZ at latin";
+ case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ at cyrillic";
+ }
+ return "uz";
+ case 0x33: /* VENDA */ return "ven_ZA";
+ case LANG_VIETNAMESE: return "vi_VN";
+ case 0x52: /* WELSH */ return "cy_GB";
+ case 0x34: /* XHOSA */ return "xh_ZA";
+ case 0x78: /* YI */ return "sit_CN";
+ case 0x3d: /* YIDDISH */ return "yi_IL";
+ case 0x6a: /* YORUBA */ return "yo_NG";
+ case 0x35: /* ZULU */ return "zu_ZA";
+ default: return "C";
+ }
+
+#endif
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/log.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/log.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/log.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,104 @@
+/* Log file output.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Bruno Haible <bruno at clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print an ASCII string with quotes and escape sequences where needed. */
+static void
+print_escaped (stream, str)
+ FILE *stream;
+ const char *str;
+{
+ putc ('"', stream);
+ for (; *str != '\0'; str++)
+ if (*str == '\n')
+ {
+ fputs ("\\n\"", stream);
+ if (str[1] == '\0')
+ return;
+ fputs ("\n\"", stream);
+ }
+ else
+ {
+ if (*str == '"' || *str == '\\')
+ putc ('\\', stream);
+ putc (*str, stream);
+ }
+ putc ('"', stream);
+}
+
+/* Add to the log file an entry denoting a failed translation. */
+void
+_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural)
+ const char *logfilename;
+ const char *domainname;
+ const char *msgid1;
+ const char *msgid2;
+ int plural;
+{
+ static char *last_logfilename = NULL;
+ static FILE *last_logfile = NULL;
+ FILE *logfile;
+
+ /* Can we reuse the last opened logfile? */
+ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
+ {
+ /* Close the last used logfile. */
+ if (last_logfilename != NULL)
+ {
+ if (last_logfile != NULL)
+ {
+ fclose (last_logfile);
+ last_logfile = NULL;
+ }
+ free (last_logfilename);
+ last_logfilename = NULL;
+ }
+ /* Open the logfile. */
+ last_logfilename = (char *) malloc (strlen (logfilename) + 1);
+ if (last_logfilename == NULL)
+ return;
+ strcpy (last_logfilename, logfilename);
+ last_logfile = fopen (logfilename, "a");
+ if (last_logfile == NULL)
+ return;
+ }
+ logfile = last_logfile;
+
+ fprintf (logfile, "domain ");
+ print_escaped (logfile, domainname);
+ fprintf (logfile, "\nmsgid ");
+ print_escaped (logfile, msgid1);
+ if (plural)
+ {
+ fprintf (logfile, "\nmsgid_plural ");
+ print_escaped (logfile, msgid2);
+ fprintf (logfile, "\nmsgstr[0] \"\"\n");
+ }
+ else
+ fprintf (logfile, "\nmsgstr \"\"\n");
+ putc ('\n', logfile);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ngettext.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ngettext.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ngettext.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,68 @@
+/* Implementation of ngettext(3) function.
+ Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT libintl_ngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+NGETTEXT (msgid1, msgid2, n)
+ const char *msgid1;
+ const char *msgid2;
+ unsigned long int n;
+{
+ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__ngettext, ngettext);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,98 @@
+/* OS/2 compatibility functions.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#define OS2_AWARE
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+
+/* A version of getenv() that works from DLLs */
+extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
+
+char *
+_nl_getenv (const char *name)
+{
+ unsigned char *value;
+ if (DosScanEnv (name, &value))
+ return NULL;
+ else
+ return value;
+}
+
+/* A fixed size buffer. */
+char libintl_nl_default_dirname[MAXPATHLEN+1];
+
+char *_nlos2_libdir = NULL;
+char *_nlos2_localealiaspath = NULL;
+char *_nlos2_localedir = NULL;
+
+static __attribute__((constructor)) void
+nlos2_initialize ()
+{
+ char *root = getenv ("UNIXROOT");
+ char *gnulocaledir = getenv ("GNULOCALEDIR");
+
+ _nlos2_libdir = gnulocaledir;
+ if (!_nlos2_libdir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
+ memcpy (_nlos2_libdir, root, sl);
+ memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
+ }
+ else
+ _nlos2_libdir = LIBDIR;
+ }
+
+ _nlos2_localealiaspath = gnulocaledir;
+ if (!_nlos2_localealiaspath)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
+ memcpy (_nlos2_localealiaspath, root, sl);
+ memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
+ }
+ else
+ _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
+ }
+
+ _nlos2_localedir = gnulocaledir;
+ if (!_nlos2_localedir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
+ memcpy (_nlos2_localedir, root, sl);
+ memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
+ }
+ else
+ _nlos2_localedir = LOCALEDIR;
+ }
+
+ if (strlen (_nlos2_localedir) <= MAXPATHLEN)
+ strcpy (libintl_nl_default_dirname, _nlos2_localedir);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/os2compat.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,46 @@
+/* OS/2 compatibility defines.
+ This file is intended to be included from config.h
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* When included from os2compat.h we need all the original definitions */
+#ifndef OS2_AWARE
+
+#undef LIBDIR
+#define LIBDIR _nlos2_libdir
+extern char *_nlos2_libdir;
+
+#undef LOCALEDIR
+#define LOCALEDIR _nlos2_localedir
+extern char *_nlos2_localedir;
+
+#undef LOCALE_ALIAS_PATH
+#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
+extern char *_nlos2_localealiaspath;
+
+#endif
+
+#undef HAVE_STRCASECMP
+#define HAVE_STRCASECMP 1
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+
+/* We have our own getenv() which works even if library is compiled as DLL */
+#define getenv _nl_getenv
+
+/* Older versions of gettext used -1 as the value of LC_MESSAGES */
+#define LC_MESSAGES_COMPAT (-1)
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/osdep.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/osdep.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/osdep.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,24 @@
+/* OS dependent parts of libintl.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#if defined __EMX__
+# include "os2compat.c"
+#else
+/* Avoid AIX compiler warning. */
+typedef int dummy;
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,156 @@
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "plural-exp.h"
+
+#if (defined __GNUC__ && !defined __APPLE_CC__) \
+ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+ form determination. It represents the expression "n != 1". */
+static const struct expression plvar =
+{
+ .nargs = 0,
+ .operation = var,
+};
+static const struct expression plone =
+{
+ .nargs = 0,
+ .operation = num,
+ .val =
+ {
+ .num = 1
+ }
+};
+struct expression GERMANIC_PLURAL =
+{
+ .nargs = 2,
+ .operation = not_equal,
+ .val =
+ {
+ .args =
+ {
+ [0] = (struct expression *) &plvar,
+ [1] = (struct expression *) &plone
+ }
+ }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+ Initialization at run-time. */
+
+static struct expression plvar;
+static struct expression plone;
+struct expression GERMANIC_PLURAL;
+
+static void
+init_germanic_plural ()
+{
+ if (plone.val.num == 0)
+ {
+ plvar.nargs = 0;
+ plvar.operation = var;
+
+ plone.nargs = 0;
+ plone.operation = num;
+ plone.val.num = 1;
+
+ GERMANIC_PLURAL.nargs = 2;
+ GERMANIC_PLURAL.operation = not_equal;
+ GERMANIC_PLURAL.val.args[0] = &plvar;
+ GERMANIC_PLURAL.val.args[1] = &plone;
+ }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+void
+internal_function
+EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp)
+ const char *nullentry;
+ struct expression **pluralp;
+ unsigned long int *npluralsp;
+{
+ if (nullentry != NULL)
+ {
+ const char *plural;
+ const char *nplurals;
+
+ plural = strstr (nullentry, "plural=");
+ nplurals = strstr (nullentry, "nplurals=");
+ if (plural == NULL || nplurals == NULL)
+ goto no_plural;
+ else
+ {
+ char *endp;
+ unsigned long int n;
+ struct parse_args args;
+
+ /* First get the number. */
+ nplurals += 9;
+ while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+ ++nplurals;
+ if (!(*nplurals >= '0' && *nplurals <= '9'))
+ goto no_plural;
+#if defined HAVE_STRTOUL || defined _LIBC
+ n = strtoul (nplurals, &endp, 10);
+#else
+ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+ n = n * 10 + (*endp - '0');
+#endif
+ if (nplurals == endp)
+ goto no_plural;
+ *npluralsp = n;
+
+ /* Due to the restrictions bison imposes onto the interface of the
+ scanner function we have to put the input string and the result
+ passed up from the parser into the same structure which address
+ is passed down to the parser. */
+ plural += 7;
+ args.cp = plural;
+ if (PLURAL_PARSE (&args) != 0)
+ goto no_plural;
+ *pluralp = args.res;
+ }
+ }
+ else
+ {
+ /* By default we are using the Germanic form: singular form only
+ for `one', the plural form otherwise. Yes, this is also what
+ English is using since English is a Germanic language. */
+ no_plural:
+ INIT_GERMANIC_PLURAL ();
+ *pluralp = &GERMANIC_PLURAL;
+ *npluralsp = 2;
+ }
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural-exp.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,126 @@
+/* Expression parsing and evaluation for plural form selection.
+ Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+# define PARAMS(args) args
+# else
+# define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+
+/* This is the representation of the expressions to determine the
+ plural form. */
+struct expression
+{
+ int nargs; /* Number of arguments. */
+ enum operator
+ {
+ /* Without arguments: */
+ var, /* The variable "n". */
+ num, /* Decimal number. */
+ /* Unary operators: */
+ lnot, /* Logical NOT. */
+ /* Binary operators: */
+ mult, /* Multiplication. */
+ divide, /* Division. */
+ module, /* Modulo operation. */
+ plus, /* Addition. */
+ minus, /* Subtraction. */
+ less_than, /* Comparison. */
+ greater_than, /* Comparison. */
+ less_or_equal, /* Comparison. */
+ greater_or_equal, /* Comparison. */
+ equal, /* Comparison for equality. */
+ not_equal, /* Comparison for inequality. */
+ land, /* Logical AND. */
+ lor, /* Logical OR. */
+ /* Ternary operators: */
+ qmop /* Question mark operator. */
+ } operation;
+ union
+ {
+ unsigned long int num; /* Number value for `num'. */
+ struct expression *args[3]; /* Up to three arguments. */
+ } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+ the result in a thread-safe way. */
+struct parse_args
+{
+ const char *cp;
+ struct expression *res;
+};
+
+
+/* Names for the libintl functions are a problem. This source code is used
+ 1. in the GNU C Library library,
+ 2. in the GNU libintl library,
+ 3. in the GNU gettext tools.
+ The function names in each situation must be different, to allow for
+ binary incompatible changes in 'struct expression'. Furthermore,
+ 1. in the GNU C Library library, the names have a __ prefix,
+ 2.+3. in the GNU libintl library and in the GNU gettext tools, the names
+ must follow ANSI C and not start with __.
+ So we have to distinguish the three cases. */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+# define PLURAL_PARSE __gettextparse
+# define GERMANIC_PLURAL __gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
+#elif defined (IN_LIBINTL)
+# define FREE_EXPRESSION libintl_gettext_free_exp
+# define PLURAL_PARSE libintl_gettextparse
+# define GERMANIC_PLURAL libintl_gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
+#else
+# define FREE_EXPRESSION free_plural_expression
+# define PLURAL_PARSE parse_plural_expression
+# define GERMANIC_PLURAL germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
+#endif
+
+extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
+ internal_function;
+extern int PLURAL_PARSE PARAMS ((void *arg));
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
+ struct expression **pluralp,
+ unsigned long int *npluralsp))
+ internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL)
+extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
+ unsigned long int n));
+#endif
+
+#endif /* _PLURAL_EXP_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1518 @@
+/* A Bison parser, made from plural.y
+ by GNU bison 1.35. */
+
+#define YYBISON 1 /* Identify Bison output. */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+# define EQUOP2 257
+# define CMPOP2 258
+# define ADDOP2 259
+# define MULOP2 260
+# define NUMBER 261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+
+#line 49 "plural.y"
+#ifndef YYSTYPE
+typedef union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+#line 55 "plural.y"
+
+/* Prototypes for local functions. */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+ struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+ struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+ struct expression *left,
+ struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+ struct expression *bexp,
+ struct expression *tbranch,
+ struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (nargs, op, args)
+ int nargs;
+ enum operator op;
+ struct expression * const *args;
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+ enum operator op;
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+ enum operator op;
+ struct expression *right;
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+ enum operator op;
+ struct expression *left;
+ struct expression *right;
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+ enum operator op;
+ struct expression *bexp;
+ struct expression *tbranch;
+ struct expression *fbranch;
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define YYFINAL 27
+#define YYFLAG -32768
+#define YYNTBASE 16
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const char yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 10, 2, 2, 2, 2, 5, 2,
+ 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 6, 7, 8,
+ 9, 11
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+ 0, 0, 2, 8, 12, 16, 20, 24, 28, 32,
+ 35, 37, 39
+};
+static const short yyrhs[] =
+{
+ 17, 0, 17, 3, 17, 12, 17, 0, 17, 4,
+ 17, 0, 17, 5, 17, 0, 17, 6, 17, 0,
+ 17, 7, 17, 0, 17, 8, 17, 0, 17, 9,
+ 17, 0, 10, 17, 0, 13, 0, 11, 0, 14,
+ 17, 15, 0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+ 0, 174, 182, 186, 190, 194, 198, 202, 206, 210,
+ 214, 218, 223
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+ "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
+ "start", "exp", 0
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+ 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+ 0, 1, 5, 3, 3, 3, 3, 3, 3, 2,
+ 1, 1, 3
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+ doesn't specify something else to do. Zero means the default is an
+ error. */
+static const short yydefact[] =
+{
+ 0, 0, 11, 10, 0, 1, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 0, 3, 4, 5,
+ 6, 7, 8, 0, 2, 0, 0, 0
+};
+
+static const short yydefgoto[] =
+{
+ 25, 5
+};
+
+static const short yypact[] =
+{
+ -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9,
+ -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16,
+ 26, -3,-32768, -9, 34, 21, 53,-32768
+};
+
+static const short yypgoto[] =
+{
+ -32768, -1
+};
+
+
+#define YYLAST 53
+
+
+static const short yytable[] =
+{
+ 6, 1, 2, 7, 3, 4, 14, 16, 17, 18,
+ 19, 20, 21, 22, 8, 9, 10, 11, 12, 13,
+ 14, 26, 24, 12, 13, 14, 15, 8, 9, 10,
+ 11, 12, 13, 14, 13, 14, 23, 8, 9, 10,
+ 11, 12, 13, 14, 10, 11, 12, 13, 14, 11,
+ 12, 13, 14, 27
+};
+
+static const short yycheck[] =
+{
+ 1, 10, 11, 4, 13, 14, 9, 8, 9, 10,
+ 11, 12, 13, 14, 3, 4, 5, 6, 7, 8,
+ 9, 0, 23, 7, 8, 9, 15, 3, 4, 5,
+ 6, 7, 8, 9, 8, 9, 12, 3, 4, 5,
+ 6, 7, 8, 9, 5, 6, 7, 8, 9, 6,
+ 7, 8, 9, 0
+};
+#define YYPURE 1
+
+/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+#line 3 "/usr/local/share/bison/bison.simple"
+
+/* Skeleton output parser for bison,
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
+ Foundation, Inc.
+
+ 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* This is the parser code that is written into each bison parser when
+ the %semantic_parser declaration is not specified in the grammar.
+ It was written by Richard Stallman by simplifying the hairy parser
+ used when %semantic_parser is specified. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# if YYSTACK_USE_ALLOCA
+# define YYSTACK_ALLOC alloca
+# else
+# ifndef YYSTACK_USE_ALLOCA
+# if defined (alloca) || defined (_ALLOCA_H)
+# define YYSTACK_ALLOC alloca
+# else
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+# define YYSTACK_ALLOC malloc
+# define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+
+
+#if (! defined (yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ short yyss;
+ YYSTYPE yyvs;
+# if YYLSP_NEEDED
+ YYLTYPE yyls;
+# endif
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# if YYLSP_NEEDED
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ + 2 * YYSTACK_GAP_MAX)
+# else
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAX)
+# endif
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ register YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrlab1
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+#define YYFAIL goto yyerrlab
+#define YYRECOVERING() (!!yyerrstatus)
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yychar1 = YYTRANSLATE (yychar); \
+ YYPOPSTACK; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror ("syntax error: cannot back up"); \
+ YYERROR; \
+ } \
+while (0)
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run).
+
+ When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+ first token. By default, to implement support for ranges, extend
+ its range to the last symbol. */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#if YYPURE
+# if YYLSP_NEEDED
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval, &yylloc)
+# endif
+# else /* !YYLSP_NEEDED */
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval)
+# endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX yylex ()
+#endif /* !YYPURE */
+
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+#ifdef YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined (__GLIBC__) && defined (_STRING_H)
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+static YYSIZE_T
+# if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+# else
+yystrlen (yystr)
+ const char *yystr;
+# endif
+{
+ register const char *yys = yystr;
+
+ while (*yys++ != '\0')
+ continue;
+
+ return yys - yystr - 1;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+static char *
+# if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+# else
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+# endif
+{
+ register char *yyd = yydest;
+ register const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+#endif
+
+#line 315 "/usr/local/share/bison/bison.simple"
+
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+ It should actually point to an object.
+ Grammar actions can access the variable by casting it
+ to the proper pointer type. */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL
+# else
+# define YYPARSE_PARAM_ARG YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes. */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+ variables are global, or local to YYPARSE. */
+
+#define YY_DECL_NON_LSP_VARIABLES \
+/* The lookahead symbol. */ \
+int yychar; \
+ \
+/* The semantic value of the lookahead symbol. */ \
+YYSTYPE yylval; \
+ \
+/* Number of parse errors so far. */ \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES \
+ \
+/* Location data for the lookahead symbol. */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+ /* If reentrant, generate the variables here. */
+#if YYPURE
+ YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+ register int yystate;
+ register int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Lookahead token as an internal (translated) token number. */
+ int yychar1 = 0;
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ short yyssa[YYINITDEPTH];
+ short *yyss = yyssa;
+ register short *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ register YYSTYPE *yyvsp;
+
+#if YYLSP_NEEDED
+ /* The location stack. */
+ YYLTYPE yylsa[YYINITDEPTH];
+ YYLTYPE *yyls = yylsa;
+ YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK (yyvsp--, yyssp--)
+#endif
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+#if YYLSP_NEEDED
+ YYLTYPE yyloc;
+#endif
+
+ /* When reducing, the number of symbols on the RHS of the reduced
+ rule. */
+ int yylen;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+#if YYLSP_NEEDED
+ yylsp = yyls;
+#endif
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. so pushing a state here evens the stacks.
+ */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ short *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. */
+# if YYLSP_NEEDED
+ YYLTYPE *yyls1 = yyls;
+ /* This used to be a conditional around just the two extra args,
+ but that might be undefined if yyoverflow is a macro. */
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yyls1, yysize * sizeof (*yylsp),
+ &yystacksize);
+ yyls = yyls1;
+# else
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+# endif
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+# else
+ /* Extend the stack our own way. */
+ if (yystacksize >= YYMAXDEPTH)
+ goto yyoverflowlab;
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ short *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyoverflowlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+# if YYLSP_NEEDED
+ YYSTACK_RELOCATE (yyls);
+# endif
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+ yylsp = yyls + yysize - 1;
+#endif
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyssp >= yyss + yystacksize - 1)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state. */
+/* Read a lookahead token if we need one and don't already have one. */
+/* yyresume: */
+
+ /* First try to decide what to do without reference to lookahead token. */
+
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* yychar is either YYEMPTY or YYEOF
+ or a valid token in external form. */
+
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ /* Convert token to internal form (in yychar1) for indexing tables with */
+
+ if (yychar <= 0) /* This means end of input. */
+ {
+ yychar1 = 0;
+ yychar = YYEOF; /* Don't call YYLEX any more */
+
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yychar1 = YYTRANSLATE (yychar);
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables
+ which are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ YYFPRINTF (stderr, "Next token is %d (%s",
+ yychar, yytname[yychar1]);
+ /* Give the individual parser a way to print the precise
+ meaning of a token, for further debugging info. */
+# ifdef YYPRINT
+ YYPRINT (stderr, yychar, yylval);
+# endif
+ YYFPRINTF (stderr, ")\n");
+ }
+#endif
+ }
+
+ yyn += yychar1;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+ goto yydefault;
+
+ yyn = yytable[yyn];
+
+ /* yyn is what to do for this token type in this state.
+ Negative => reduce, -yyn is rule number.
+ Positive => shift, yyn is new state.
+ New state is final state => don't bother to shift,
+ just return success.
+ 0, or most negative number => error. */
+
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrlab;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Shift the lookahead token. */
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+ yychar, yytname[yychar1]));
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to the semantic value of
+ the lookahead token. This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+#if YYLSP_NEEDED
+ /* Similarly for the default location. Let the user run additional
+ commands if for instance locations are ranges. */
+ yyloc = yylsp[1-yylen];
+ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables which
+ are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ int yyi;
+
+ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+ yyn, yyrline[yyn]);
+
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+ YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+ }
+#endif
+
+ switch (yyn) {
+
+case 1:
+#line 175 "plural.y"
+{
+ if (yyvsp[0].exp == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = yyvsp[0].exp;
+ }
+ break;
+case 2:
+#line 183 "plural.y"
+{
+ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 3:
+#line 187 "plural.y"
+{
+ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 4:
+#line 191 "plural.y"
+{
+ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 5:
+#line 195 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 6:
+#line 199 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 7:
+#line 203 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 8:
+#line 207 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 9:
+#line 211 "plural.y"
+{
+ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+ }
+ break;
+case 10:
+#line 215 "plural.y"
+{
+ yyval.exp = new_exp_0 (var);
+ }
+ break;
+case 11:
+#line 219 "plural.y"
+{
+ if ((yyval.exp = new_exp_0 (num)) != NULL)
+ yyval.exp->val.num = yyvsp[0].num;
+ }
+ break;
+case 12:
+#line 224 "plural.y"
+{
+ yyval.exp = yyvsp[-1].exp;
+ }
+ break;
+}
+
+#line 705 "/usr/local/share/bison/bison.simple"
+
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+#if YYLSP_NEEDED
+ yylsp -= yylen;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+ *++yyvsp = yyval;
+#if YYLSP_NEEDED
+ *++yylsp = yyloc;
+#endif
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTBASE];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+ yyn = yypact[yystate];
+
+ if (yyn > YYFLAG && yyn < YYLAST)
+ {
+ YYSIZE_T yysize = 0;
+ char *yymsg;
+ int yyx, yycount;
+
+ yycount = 0;
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+ yysize += yystrlen ("parse error, unexpected ") + 1;
+ yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg != 0)
+ {
+ char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+ yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+ if (yycount < 5)
+ {
+ yycount = 0;
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *));
+ yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ {
+ const char *yyq = ! yycount ? ", expecting " : " or ";
+ yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yytname[yyx]);
+ yycount++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ yyerror ("parse error; also virtual memory exhausted");
+ }
+ else
+#endif /* defined (YYERROR_VERBOSE) */
+ yyerror ("parse error");
+ }
+ goto yyerrlab1;
+
+
+/*--------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action |
+`--------------------------------------------------*/
+yyerrlab1:
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ /* return failure if at end of input */
+ if (yychar == YYEOF)
+ YYABORT;
+ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+ yychar, yytname[yychar1]));
+ yychar = YYEMPTY;
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+
+ yyerrstatus = 3; /* Each real token shifted decrements this */
+
+ goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token. |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+ /* This is wrong; only states that explicitly want error tokens
+ should shift them. */
+
+ /* If its default is to accept any token, ok. Otherwise pop it. */
+ yyn = yydefact[yystate];
+ if (yyn)
+ goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token |
+`---------------------------------------------------------------*/
+yyerrpop:
+ if (yyssp == yyss)
+ YYABORT;
+ yyvsp--;
+ yystate = *--yyssp;
+#if YYLSP_NEEDED
+ yylsp--;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "Error: state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+/*--------------.
+| yyerrhandle. |
+`--------------*/
+yyerrhandle:
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yyerrdefault;
+
+ yyn += YYTERROR;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+ goto yyerrdefault;
+
+ yyn = yytable[yyn];
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrpop;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrpop;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here. |
+`---------------------------------------------*/
+yyoverflowlab:
+ yyerror ("parser stack overflow");
+ yyresult = 2;
+ /* Fall through. */
+
+yyreturn:
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+#line 229 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+ struct expression *exp;
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+ YYSTYPE *lval;
+ const char **pexp;
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (str)
+ const char *str;
+{
+ /* Do nothing. We don't print error messages here. */
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.y
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.y 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/plural.y 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,409 @@
+%{
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+%}
+%pure_parser
+%expect 7
+
+%union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions. */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+ struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+ struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+ struct expression *left,
+ struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+ struct expression *bexp,
+ struct expression *tbranch,
+ struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (nargs, op, args)
+ int nargs;
+ enum operator op;
+ struct expression * const *args;
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+ enum operator op;
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+ enum operator op;
+ struct expression *right;
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+ enum operator op;
+ struct expression *left;
+ struct expression *right;
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+ enum operator op;
+ struct expression *bexp;
+ struct expression *tbranch;
+ struct expression *fbranch;
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+ precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
+ There is no unary minus and no bitwise operators.
+ Operators with the same syntactic behaviour have been merged into a single
+ token, to save space in the array generated by bison. */
+%right '?' /* ? */
+%left '|' /* || */
+%left '&' /* && */
+%left EQUOP2 /* == != */
+%left CMPOP2 /* < > <= >= */
+%left ADDOP2 /* + - */
+%left MULOP2 /* * / % */
+%right '!' /* ! */
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start: exp
+ {
+ if ($1 == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = $1;
+ }
+ ;
+
+exp: exp '?' exp ':' exp
+ {
+ $$ = new_exp_3 (qmop, $1, $3, $5);
+ }
+ | exp '|' exp
+ {
+ $$ = new_exp_2 (lor, $1, $3);
+ }
+ | exp '&' exp
+ {
+ $$ = new_exp_2 (land, $1, $3);
+ }
+ | exp EQUOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp CMPOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp ADDOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp MULOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | '!' exp
+ {
+ $$ = new_exp_1 (lnot, $2);
+ }
+ | 'n'
+ {
+ $$ = new_exp_0 (var);
+ }
+ | NUMBER
+ {
+ if (($$ = new_exp_0 (num)) != NULL)
+ $$->val.num = $1;
+ }
+ | '(' exp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+ struct expression *exp;
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+ YYSTYPE *lval;
+ const char **pexp;
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (str)
+ const char *str;
+{
+ /* Do nothing. We don't print error messages here. */
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-add.sin
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-add.sin 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-add.sin 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,31 @@
+# Add this package to a list of references stored in a text file.
+#
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# Written by Bruno Haible <haible at clisp.cons.org>.
+#
+/^# Packages using this file: / {
+ s/# Packages using this file://
+ ta
+ :a
+ s/ @PACKAGE@ / @PACKAGE@ /
+ tb
+ s/ $/ @PACKAGE@ /
+ :b
+ s/^/# Packages using this file:/
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-del.sin
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-del.sin 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/ref-del.sin 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,26 @@
+# Remove this package from a list of references stored in a text file.
+#
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# Written by Bruno Haible <haible at clisp.cons.org>.
+#
+/^# Packages using this file: / {
+ s/# Packages using this file://
+ s/ @PACKAGE@ / /
+ s/^/# Packages using this file:/
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,439 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno at clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* Specification. */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xmalloc.h"
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'. */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILESYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Original installation prefix. */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix. */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash. Anything that will be concatenated
+ to them must start with a slash. */
+
+/* Sets the original and the current installation prefix of this module.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+ const char *curr_prefix_arg)
+{
+ if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+ /* Optimization: if orig_prefix and curr_prefix are equal, the
+ relocation is a nop. */
+ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+ {
+ /* Duplicate the argument strings. */
+ char *memory;
+
+ orig_prefix_len = strlen (orig_prefix_arg);
+ curr_prefix_len = strlen (curr_prefix_arg);
+ memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (memory != NULL)
+#endif
+ {
+ memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+ orig_prefix = memory;
+ memory += orig_prefix_len + 1;
+ memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+ curr_prefix = memory;
+ return;
+ }
+ }
+ orig_prefix = NULL;
+ curr_prefix = NULL;
+ /* Don't worry about wasted memory here - this function is usually only
+ called once. */
+}
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+ set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+ /* Now notify all dependent libraries. */
+#if DEPENDS_ON_LIBCHARSET
+ libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+ libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+ libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+const char *
+compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname)
+{
+ const char *curr_installdir;
+ const char *rel_installdir;
+
+ if (curr_pathname == NULL)
+ return NULL;
+
+ /* Determine the relative installation directory, relative to the prefix.
+ This is simply the difference between orig_installprefix and
+ orig_installdir. */
+ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+ != 0)
+ /* Shouldn't happen - nothing should be installed outside $(prefix). */
+ return NULL;
+ rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+ /* Determine the current installation directory. */
+ {
+ const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
+ const char *p = curr_pathname + strlen (curr_pathname);
+ char *q;
+
+ while (p > p_base)
+ {
+ p--;
+ if (ISSLASH (*p))
+ break;
+ }
+
+ q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+ if (q == NULL)
+ return NULL;
+#endif
+ memcpy (q, curr_pathname, p - curr_pathname);
+ q[p - curr_pathname] = '\0';
+ curr_installdir = q;
+ }
+
+ /* Compute the current installation prefix by removing the trailing
+ rel_installdir from it. */
+ {
+ const char *rp = rel_installdir + strlen (rel_installdir);
+ const char *cp = curr_installdir + strlen (curr_installdir);
+ const char *cp_base =
+ curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
+
+ while (rp > rel_installdir && cp > cp_base)
+ {
+ bool same = false;
+ const char *rpi = rp;
+ const char *cpi = cp;
+
+ while (rpi > rel_installdir && cpi > cp_base)
+ {
+ rpi--;
+ cpi--;
+ if (ISSLASH (*rpi) || ISSLASH (*cpi))
+ {
+ if (ISSLASH (*rpi) && ISSLASH (*cpi))
+ same = true;
+ break;
+ }
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS - case insignificant filesystem */
+ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+ != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+ break;
+#else
+ if (*rpi != *cpi)
+ break;
+#endif
+ }
+ if (!same)
+ break;
+ /* The last pathname component was the same. opi and cpi now point
+ to the slash before it. */
+ rp = rpi;
+ cp = cpi;
+ }
+
+ if (rp > rel_installdir)
+ /* Unexpected: The curr_installdir does not end with rel_installdir. */
+ return NULL;
+
+ {
+ size_t curr_prefix_len = cp - curr_installdir;
+ char *curr_prefix;
+
+ curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (curr_prefix == NULL)
+ return NULL;
+#endif
+ memcpy (curr_prefix, curr_installdir, curr_prefix_len);
+ curr_prefix[curr_prefix_len] = '\0';
+
+ return curr_prefix;
+ }
+ }
+}
+
+#if defined PIC && defined INSTALLDIR
+
+/* Full pathname of shared library, or NULL. */
+static char *shared_library_fullname;
+
+#if defined _WIN32 || defined __WIN32__
+
+/* Determine the full pathname of the shared library when it is loaded. */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+ (void) reserved;
+
+ if (event == DLL_PROCESS_ATTACH)
+ {
+ /* The DLL is being loaded into an application's address range. */
+ static char location[MAX_PATH];
+
+ if (!GetModuleFileName (module_handle, location, sizeof (location)))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+}
+
+#else /* Unix */
+
+static void
+find_shared_library_fullname ()
+{
+#ifdef __linux__
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+ fp = fopen ("/proc/self/maps", "r");
+ if (fp)
+ {
+ unsigned long address = (unsigned long) &find_shared_library_fullname;
+ for (;;)
+ {
+ unsigned long start, end;
+ int c;
+
+ if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+ break;
+ if (address >= start && address <= end - 1)
+ {
+ /* Found it. Now see if this line contains a filename. */
+ while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+ continue;
+ if (c == '/')
+ {
+ size_t size;
+ int len;
+
+ ungetc (c, fp);
+ shared_library_fullname = NULL; size = 0;
+ len = getline (&shared_library_fullname, &size, fp);
+ if (len >= 0)
+ {
+ /* Success: filled shared_library_fullname. */
+ if (len > 0 && shared_library_fullname[len - 1] == '\n')
+ shared_library_fullname[len - 1] = '\0';
+ }
+ }
+ break;
+ }
+ while (c = getc (fp), c != EOF && c != '\n')
+ continue;
+ }
+ fclose (fp);
+ }
+#endif
+}
+
+#endif /* WIN32 / Unix */
+
+/* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+ Guaranteed to work only on Linux and Woe32. */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 || defined __WIN32__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+ find_shared_library_fullname ();
+ tried_find_shared_library_fullname = true;
+ }
+#endif
+ return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+ if (!initialized)
+ {
+ /* At this point, orig_prefix and curr_prefix likely have already been
+ set through the main program's set_program_name_and_installdir
+ function. This is sufficient in the case that the library has
+ initially been installed in the same orig_prefix. But we can do
+ better, to also cover the cases that 1. it has been installed
+ in a different prefix before being moved to orig_prefix and (later)
+ to curr_prefix, 2. unlike the program, it has not moved away from
+ orig_prefix. */
+ const char *orig_installprefix = INSTALLPREFIX;
+ const char *orig_installdir = INSTALLDIR;
+ const char *curr_prefix_better;
+
+ curr_prefix_better =
+ compute_curr_prefix (orig_installprefix, orig_installdir,
+ get_shared_library_fullname ());
+ if (curr_prefix_better == NULL)
+ curr_prefix_better = curr_prefix;
+
+ set_relocation_prefix (orig_installprefix, curr_prefix_better);
+
+ initialized = 1;
+ }
+#endif
+
+ /* Note: It is not necessary to perform case insensitive comparison here,
+ even for DOS-like filesystems, because the pathname argument was
+ typically created from the same Makefile variable as orig_prefix came
+ from. */
+ if (orig_prefix != NULL && curr_prefix != NULL
+ && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+ {
+ if (pathname[orig_prefix_len] == '\0')
+ /* pathname equals orig_prefix. */
+ return curr_prefix;
+ if (ISSLASH (pathname[orig_prefix_len]))
+ {
+ /* pathname starts with orig_prefix. */
+ const char *pathname_tail = &pathname[orig_prefix_len];
+ char *result =
+ (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+ if (result != NULL)
+#endif
+ {
+ memcpy (result, curr_prefix, curr_prefix_len);
+ strcpy (result + curr_prefix_len, pathname_tail);
+ return result;
+ }
+ }
+ }
+ /* Nothing to relocate. */
+ return pathname;
+}
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/relocatable.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,67 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno at clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+/* This can be enabled through the configure --enable-relocatable option. */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions. Note that because
+ this is a private .h file, we don't need to use __declspec(dllimport)
+ in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+extern RELOCATABLE_DLL_EXPORTED void
+ set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+extern const char * relocate (const char *pathname);
+
+/* Memory management: relocate() leaks memory, because it has to construct
+ a fresh pathname. If this is a problem because your program calls
+ relocate() frequently, think about caching the result. */
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+extern const char * compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames. */
+#define relocate(pathname) (pathname)
+
+#endif
+
+#endif /* _RELOCATABLE_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/textdomain.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/textdomain.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/intl/textdomain.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,142 @@
+/* Implementation of the textdomain(3) function.
+ Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain. */
+extern const char _nl_default_default_domain[] attribute_hidden;
+
+/* Default text domain in which entries for gettext(3) are to be found. */
+extern const char *_nl_current_default_domain attribute_hidden;
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN libintl_textdomain
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+char *
+TEXTDOMAIN (domainname)
+ const char *domainname;
+{
+ char *new_domain;
+ char *old_domain;
+
+ /* A NULL pointer requests the current setting. */
+ if (domainname == NULL)
+ return (char *) _nl_current_default_domain;
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ old_domain = (char *) _nl_current_default_domain;
+
+ /* If domain name is the null string set to default domain "messages". */
+ if (domainname[0] == '\0'
+ || strcmp (domainname, _nl_default_default_domain) == 0)
+ {
+ _nl_current_default_domain = _nl_default_default_domain;
+ new_domain = (char *) _nl_current_default_domain;
+ }
+ else if (strcmp (domainname, old_domain) == 0)
+ /* This can happen and people will use it to signal that some
+ environment variable changed. */
+ new_domain = old_domain;
+ else
+ {
+ /* If the following malloc fails `_nl_current_default_domain'
+ will be NULL. This value will be returned and so signals we
+ are out of core. */
+#if defined _LIBC || defined HAVE_STRDUP
+ new_domain = strdup (domainname);
+#else
+ size_t len = strlen (domainname) + 1;
+ new_domain = (char *) malloc (len);
+ if (new_domain != NULL)
+ memcpy (new_domain, domainname, len);
+#endif
+
+ if (new_domain != NULL)
+ _nl_current_default_domain = new_domain;
+ }
+
+ /* We use this possibility to signal a change of the loaded catalogs
+ since this is most likely the case and there is no other easy we
+ to do it. Do it only when the call was successful. */
+ if (new_domain != NULL)
+ {
+ ++_nl_msg_cat_cntr;
+
+ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+ free (old_domain);
+ }
+
+ __libc_rwlock_unlock (_nl_state_lock);
+
+ return new_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__textdomain, textdomain);
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/Makefile.am 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/Makefile.am 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,51 @@
+ACLOCAL_AMFLAGS = -I ../m4
+AUTOMAKE_OPTIONS = foreign
+
+beepincludedir = $(includedir)/bmp
+
+lib_LTLIBRARIES = libbeep.la
+
+libbeep_la_LDFLAGS = -export-dynamic -version-info $(LIBBEEP_MAJOR_VERSION):$(LIBBEEP_MINOR_VERSION):$(LIBBEEP_MICRO_VERSION)
+
+libbeep_la_LIBADD = \
+ $(GTK_LIBS) \
+ $(GCONF_LIBS) \
+ $(GNOMEVFS_LIBS)
+
+INCLUDES = \
+ $(GTK_CFLAGS) \
+ $(GCONF_CFLAGS) \
+ $(GNOMEVFS_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/intl
+
+if HAVE_GCONF
+ CONF_SRC = configdb_gconf.c
+else
+ CONF_SRC = configdb_rcfile.c
+endif
+
+if HAVE_GNOME_VFS
+ VFS_SRC = vfs_gnome.c
+else
+ VFS_SRC = vfs_stdio.c
+endif
+
+libbeep_la_SOURCES = \
+ $(CONF_SRC) configdb.h \
+ rcfile.c rcfile.h \
+ $(VFS_SRC) vfs.h \
+ configfile.c \
+ beepctrl.c beepctrl.h \
+ dirbrowser.c dirbrowser.h \
+ util.c util.h \
+ formatter.c formatter.h \
+ titlestring.c titlestring.h \
+ xentry.c xentry.h \
+ xconvert.c xconvert.h
+
+beepinclude_HEADERS = \
+ vfs.h rcfile.h configdb.h \
+ configfile.h \
+ beepctrl.h dirbrowser.h util.h \
+ formatter.h titlestring.h
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,934 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2003 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "beepctrl.h"
+#include "beep/controlsocket.h"
+
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+static gint
+read_all(gint fd, gpointer buf, size_t count)
+{
+ size_t left = count;
+ GTimer *timer;
+ gulong usec;
+ gint r;
+
+ timer = g_timer_new();
+
+ do {
+ if ((r = read(fd, buf, left)) < 0) {
+ count = -1;
+ break;
+ }
+ left -= r;
+ buf = (gchar *) buf + r;
+ g_timer_elapsed(timer, &usec);
+ }
+ while (left > 0 && usec <= CTRLSOCKET_IO_TIMEOUT_USEC);
+
+ g_timer_destroy(timer);
+ return count - left;
+}
+
+static gint
+write_all(gint fd, gconstpointer buf, size_t count)
+{
+ size_t left = count;
+ GTimer *timer;
+ gulong usec;
+ gint written;
+
+ timer = g_timer_new();
+
+ do {
+ if ((written = write(fd, buf, left)) < 0) {
+ count = -1;
+ break;
+ }
+ left -= written;
+ buf = (gchar *) buf + written;
+ g_timer_elapsed(timer, &usec);
+ }
+ while (left > 0 && usec <= CTRLSOCKET_IO_TIMEOUT_USEC);
+
+ g_timer_destroy(timer);
+ return count - left;
+}
+
+static gpointer
+remote_read_packet(gint fd, ServerPktHeader * pkt_hdr)
+{
+ gpointer data = NULL;
+
+ if (read_all(fd, pkt_hdr, sizeof(ServerPktHeader)) ==
+ sizeof(ServerPktHeader)) {
+ if (pkt_hdr->data_length) {
+ size_t data_length = pkt_hdr->data_length;
+ data = g_malloc0(data_length);
+ if (read_all(fd, data, data_length) < data_length) {
+ g_free(data);
+ data = NULL;
+ }
+ }
+ }
+ return data;
+}
+
+static void
+remote_read_ack(gint fd)
+{
+ gpointer data;
+ ServerPktHeader pkt_hdr;
+
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data)
+ g_free(data);
+
+}
+
+static void
+remote_send_packet(gint fd, guint32 command, gpointer data,
+ guint32 data_length)
+{
+ ClientPktHeader pkt_hdr;
+
+ pkt_hdr.version = XMMS_PROTOCOL_VERSION;
+ pkt_hdr.command = command;
+ pkt_hdr.data_length = data_length;
+ if (write_all(fd, &pkt_hdr, sizeof(ClientPktHeader)) < sizeof(pkt_hdr))
+ return;
+ if (data_length && data)
+ write_all(fd, data, data_length);
+}
+
+static void
+remote_send_guint32(gint session, guint32 cmd, guint32 val)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, cmd, &val, sizeof(guint32));
+ remote_read_ack(fd);
+ close(fd);
+}
+
+static void
+remote_send_boolean(gint session, guint32 cmd, gboolean val)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, cmd, &val, sizeof(gboolean));
+ remote_read_ack(fd);
+ close(fd);
+}
+
+static void
+remote_send_gfloat(gint session, guint32 cmd, gfloat value)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, cmd, &value, sizeof(gfloat));
+ remote_read_ack(fd);
+ close(fd);
+}
+
+static void
+remote_send_string(gint session, guint32 cmd, gchar * string)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, cmd, string, string ? strlen(string) + 1 : 0);
+ remote_read_ack(fd);
+ close(fd);
+}
+
+static gboolean
+remote_cmd(gint session, guint32 cmd)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return FALSE;
+ remote_send_packet(fd, cmd, NULL, 0);
+ remote_read_ack(fd);
+ close(fd);
+
+ return TRUE;
+}
+
+static gboolean
+remote_get_gboolean(gint session, gint cmd)
+{
+ ServerPktHeader pkt_hdr;
+ gboolean ret = FALSE;
+ gpointer data;
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return ret;
+ remote_send_packet(fd, cmd, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ ret = *((gboolean *) data);
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+
+ return ret;
+}
+
+static guint32
+remote_get_gint(gint session, gint cmd)
+{
+ ServerPktHeader pkt_hdr;
+ gpointer data;
+ gint fd, ret = 0;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return ret;
+ remote_send_packet(fd, cmd, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ ret = *((gint *) data);
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+ return ret;
+}
+
+static gfloat
+remote_get_gfloat(gint session, gint cmd)
+{
+ ServerPktHeader pkt_hdr;
+ gpointer data;
+ gint fd;
+ gfloat ret = 0.0;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return ret;
+ remote_send_packet(fd, cmd, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ ret = *((gfloat *) data);
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+ return ret;
+}
+
+gchar *
+remote_get_string(gint session, gint cmd)
+{
+ ServerPktHeader pkt_hdr;
+ gpointer data;
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return NULL;
+ remote_send_packet(fd, cmd, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ remote_read_ack(fd);
+ close(fd);
+ return data;
+}
+
+gchar *
+remote_get_string_pos(gint session, gint cmd, guint32 pos)
+{
+ ServerPktHeader pkt_hdr;
+ gpointer data;
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return NULL;
+ remote_send_packet(fd, cmd, &pos, sizeof(guint32));
+ data = remote_read_packet(fd, &pkt_hdr);
+ remote_read_ack(fd);
+ close(fd);
+ return data;
+}
+
+gint
+xmms_connect_to_session(gint session)
+{
+ gint fd;
+ uid_t stored_uid, euid;
+ struct sockaddr_un saddr;
+
+ if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) != -1) {
+ saddr.sun_family = AF_UNIX;
+ stored_uid = getuid();
+ euid = geteuid();
+ setuid(euid);
+ g_snprintf(saddr.sun_path, 108, "%s/%s_%s.%d", g_get_tmp_dir(),
+ CTRLSOCKET_NAME, g_get_user_name(), session);
+ setreuid(stored_uid, euid);
+ if (connect(fd, (struct sockaddr *) &saddr, sizeof(saddr)) != -1)
+ return fd;
+ }
+ close(fd);
+ return -1;
+}
+
+void
+xmms_remote_playlist(gint session, gchar ** list, gint num, gboolean enqueue)
+{
+ gint fd, i;
+ gchar *data, *ptr;
+ gint data_length;
+ guint32 len;
+
+ g_return_if_fail(list != NULL);
+ g_return_if_fail(num > 0);
+
+ if (!enqueue)
+ xmms_remote_playlist_clear(session);
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+
+ for (i = 0, data_length = 0; i < num; i++)
+ data_length += (((strlen(list[i]) + 1) + 3) / 4) * 4 + 4;
+ if (data_length) {
+ data_length += 4;
+ data = g_malloc(data_length);
+ for (i = 0, ptr = data; i < num; i++) {
+ len = strlen(list[i]) + 1;
+ *((guint32 *) ptr) = len;
+ ptr += 4;
+ memcpy(ptr, list[i], len);
+ ptr += ((len + 3) / 4) * 4;
+ }
+ *((guint32 *) ptr) = 0;
+ remote_send_packet(fd, CMD_PLAYLIST_ADD, data, data_length);
+ remote_read_ack(fd);
+ close(fd);
+ g_free(data);
+ }
+
+ if (!enqueue)
+ xmms_remote_play(session);
+}
+
+gint
+xmms_remote_get_version(gint session)
+{
+ return remote_get_gint(session, CMD_GET_VERSION);
+}
+
+void
+xmms_remote_play_files(gint session, GList * list)
+{
+ g_return_if_fail(list != NULL);
+
+ xmms_remote_playlist_clear(session);
+ xmms_remote_add_files(session, list);
+ xmms_remote_play(session);
+}
+
+void
+xmms_remote_playlist_add(gint session, GList * list)
+{
+ gchar **str_list;
+ GList *node;
+ gint i, num;
+
+ g_return_if_fail(list != NULL);
+
+ num = g_list_length(list);
+ str_list = g_malloc0(num * sizeof(gchar *));
+ for (i = 0, node = list; i < num && node; i++, node = g_list_next(node))
+ str_list[i] = node->data;
+
+ xmms_remote_playlist(session, str_list, num, TRUE);
+ g_free(str_list);
+}
+
+void
+xmms_remote_playlist_delete(gint session, gint pos)
+{
+ remote_send_guint32(session, CMD_PLAYLIST_DELETE, pos);
+}
+
+void
+xmms_remote_play(gint session)
+{
+ remote_cmd(session, CMD_PLAY);
+}
+
+void
+xmms_remote_pause(gint session)
+{
+ remote_cmd(session, CMD_PAUSE);
+}
+
+void
+xmms_remote_stop(gint session)
+{
+ remote_cmd(session, CMD_STOP);
+}
+
+void
+xmms_remote_play_pause(gint session)
+{
+ remote_cmd(session, CMD_PLAY_PAUSE);
+}
+
+gboolean
+xmms_remote_is_playing(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_PLAYING);
+}
+
+gboolean
+xmms_remote_is_paused(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_PAUSED);
+}
+
+gint
+xmms_remote_get_playlist_pos(gint session)
+{
+ return remote_get_gint(session, CMD_GET_PLAYLIST_POS);
+}
+
+void
+xmms_remote_set_playlist_pos(gint session, gint pos)
+{
+ remote_send_guint32(session, CMD_SET_PLAYLIST_POS, pos);
+}
+
+gint
+xmms_remote_get_playlist_length(gint session)
+{
+ return remote_get_gint(session, CMD_GET_PLAYLIST_LENGTH);
+}
+
+void
+xmms_remote_playlist_clear(gint session)
+{
+ remote_cmd(session, CMD_PLAYLIST_CLEAR);
+}
+
+gint
+xmms_remote_get_output_time(gint session)
+{
+ return remote_get_gint(session, CMD_GET_OUTPUT_TIME);
+}
+
+void
+xmms_remote_jump_to_time(gint session, gint pos)
+{
+ remote_send_guint32(session, CMD_JUMP_TO_TIME, pos);
+}
+
+void
+xmms_remote_get_volume(gint session, gint * vl, gint * vr)
+{
+ ServerPktHeader pkt_hdr;
+ gint fd;
+ gpointer data;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+
+ remote_send_packet(fd, CMD_GET_VOLUME, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ *vl = ((guint32 *) data)[0];
+ *vr = ((guint32 *) data)[1];
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+}
+
+gint
+xmms_remote_get_main_volume(gint session)
+{
+ gint vl, vr;
+
+ xmms_remote_get_volume(session, &vl, &vr);
+
+ return (vl > vr) ? vl : vr;
+}
+
+gint
+xmms_remote_get_balance(gint session)
+{
+ return remote_get_gint(session, CMD_GET_BALANCE);
+}
+
+void
+xmms_remote_set_volume(gint session, gint vl, gint vr)
+{
+ gint fd;
+ guint32 v[2];
+
+ if (vl < 0)
+ vl = 0;
+ if (vl > 100)
+ vl = 100;
+ if (vr < 0)
+ vr = 0;
+ if (vr > 100)
+ vr = 100;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ v[0] = vl;
+ v[1] = vr;
+ remote_send_packet(fd, CMD_SET_VOLUME, v, 2 * sizeof(guint32));
+ remote_read_ack(fd);
+ close(fd);
+}
+
+void
+xmms_remote_set_main_volume(gint session, gint v)
+{
+ gint b, vl, vr;
+
+ b = xmms_remote_get_balance(session);
+
+ if (b < 0) {
+ vl = v;
+ vr = (v * (100 - abs(b))) / 100;
+ }
+ else if (b > 0) {
+ vl = (v * (100 - b)) / 100;
+ vr = v;
+ }
+ else
+ vl = vr = v;
+ xmms_remote_set_volume(session, vl, vr);
+}
+
+void
+xmms_remote_set_balance(gint session, gint b)
+{
+ gint v, vl, vr;
+
+ if (b < -100)
+ b = -100;
+ if (b > 100)
+ b = 100;
+
+ v = xmms_remote_get_main_volume(session);
+
+ if (b < 0) {
+ vl = v;
+ vr = (v * (100 - abs(b))) / 100;
+ }
+ else if (b > 0) {
+ vl = (v * (100 - b)) / 100;
+ vr = v;
+ }
+ else
+ vl = vr = v;
+ xmms_remote_set_volume(session, vl, vr);
+}
+
+gchar *
+xmms_remote_get_skin(gint session)
+{
+ return remote_get_string(session, CMD_GET_SKIN);
+}
+
+void
+xmms_remote_set_skin(gint session, gchar * skinfile)
+{
+ remote_send_string(session, CMD_SET_SKIN, skinfile);
+}
+
+gchar *
+xmms_remote_get_playlist_file(gint session, gint pos)
+{
+ return remote_get_string_pos(session, CMD_GET_PLAYLIST_FILE, pos);
+}
+
+gchar *
+xmms_remote_get_playlist_title(gint session, gint pos)
+{
+ return remote_get_string_pos(session, CMD_GET_PLAYLIST_TITLE, pos);
+}
+
+gint
+xmms_remote_get_playlist_time(gint session, gint pos)
+{
+ ServerPktHeader pkt_hdr;
+ gpointer data;
+ gint fd, ret = 0;
+ guint32 p = pos;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return ret;
+ remote_send_packet(fd, CMD_GET_PLAYLIST_TIME, &p, sizeof(guint32));
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ ret = *((gint *) data);
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+ return ret;
+}
+
+void
+xmms_remote_get_info(gint session, gint * rate, gint * freq, gint * nch)
+{
+ ServerPktHeader pkt_hdr;
+ gint fd;
+ gpointer data;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, CMD_GET_INFO, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ *rate = ((guint32 *) data)[0];
+ *freq = ((guint32 *) data)[1];
+ *nch = ((guint32 *) data)[2];
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+}
+
+void
+xmms_remote_get_eq_data(gint session)
+{
+ /* Obsolete */
+}
+
+void
+xmms_remote_set_eq_data(gint session)
+{
+ /* Obsolete */
+}
+
+void
+xmms_remote_pl_win_toggle(gint session, gboolean show)
+{
+ remote_send_boolean(session, CMD_PL_WIN_TOGGLE, show);
+}
+
+void
+xmms_remote_eq_win_toggle(gint session, gboolean show)
+{
+ remote_send_boolean(session, CMD_EQ_WIN_TOGGLE, show);
+}
+
+void
+xmms_remote_main_win_toggle(gint session, gboolean show)
+{
+ remote_send_boolean(session, CMD_MAIN_WIN_TOGGLE, show);
+}
+
+gboolean
+xmms_remote_is_main_win(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_MAIN_WIN);
+}
+
+gboolean
+xmms_remote_is_pl_win(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_PL_WIN);
+}
+
+gboolean
+xmms_remote_is_eq_win(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_EQ_WIN);
+}
+
+void
+xmms_remote_show_prefs_box(gint session)
+{
+ remote_cmd(session, CMD_SHOW_PREFS_BOX);
+}
+
+void
+xmms_remote_toggle_aot(gint session, gboolean ontop)
+{
+ remote_send_boolean(session, CMD_TOGGLE_AOT, ontop);
+}
+
+void
+xmms_remote_show_about_box(gint session)
+{
+ remote_cmd(session, CMD_SHOW_ABOUT_BOX);
+}
+
+void
+xmms_remote_eject(gint session)
+{
+ remote_cmd(session, CMD_EJECT);
+}
+
+void
+xmms_remote_playlist_prev(gint session)
+{
+ remote_cmd(session, CMD_PLAYLIST_PREV);
+}
+
+void
+xmms_remote_playlist_next(gint session)
+{
+ remote_cmd(session, CMD_PLAYLIST_NEXT);
+}
+
+void
+xmms_remote_playlist_add_url_string(gint session, gchar * string)
+{
+ g_return_if_fail(string != NULL);
+ remote_send_string(session, CMD_PLAYLIST_ADD_URL_STRING, string);
+}
+
+void
+xmms_remote_playlist_ins_url_string(gint session, gchar * string, gint pos)
+{
+ gint fd, size;
+ gchar *packet;
+
+ g_return_if_fail(string != NULL);
+
+ size = strlen(string) + 1 + sizeof(gint);
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+
+ packet = g_malloc0(size);
+ *((gint *) packet) = pos;
+ strcpy(packet + sizeof(gint), string);
+ remote_send_packet(fd, CMD_PLAYLIST_INS_URL_STRING, packet, size);
+ remote_read_ack(fd);
+ close(fd);
+ g_free(packet);
+}
+
+gboolean
+xmms_remote_is_running(gint session)
+{
+ return remote_cmd(session, CMD_PING);
+}
+
+void
+xmms_remote_toggle_repeat(gint session)
+{
+ remote_cmd(session, CMD_TOGGLE_REPEAT);
+}
+
+void
+xmms_remote_toggle_shuffle(gint session)
+{
+ remote_cmd(session, CMD_TOGGLE_SHUFFLE);
+}
+
+void
+xmms_remote_toggle_advance(int session)
+{
+ remote_cmd(session, CMD_TOGGLE_ADVANCE);
+}
+
+gboolean
+xmms_remote_is_repeat(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_REPEAT);
+}
+
+gboolean
+xmms_remote_is_shuffle(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_SHUFFLE);
+}
+
+gboolean
+xmms_remote_is_advance(gint session)
+{
+ return remote_get_gboolean(session, CMD_IS_ADVANCE);
+}
+
+void
+xmms_remote_playqueue_add(gint session, gint pos)
+{
+ remote_send_guint32(session, CMD_PLAYQUEUE_ADD, pos);
+}
+
+void
+xmms_remote_playqueue_remove(gint session, gint pos)
+{
+ remote_send_guint32(session, CMD_PLAYQUEUE_REMOVE, pos);
+}
+
+gint
+xmms_remote_get_playqueue_length(gint session)
+{
+ return remote_get_gint(session, CMD_GET_PLAYQUEUE_LENGTH);
+}
+
+void
+xmms_remote_get_eq(gint session, gfloat * preamp, gfloat ** bands)
+{
+ ServerPktHeader pkt_hdr;
+ gint fd;
+ gpointer data;
+
+ if (preamp)
+ *preamp = 0.0;
+
+ if (bands)
+ *bands = NULL;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, CMD_GET_EQ, NULL, 0);
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ if (pkt_hdr.data_length >= 11 * sizeof(gfloat)) {
+ if (preamp)
+ *preamp = *((gfloat *) data);
+ if (bands)
+ *bands =
+ (gfloat *) g_memdup((gfloat *) data + 1,
+ 10 * sizeof(gfloat));
+ }
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+}
+
+gfloat
+xmms_remote_get_eq_preamp(gint session)
+{
+ return remote_get_gfloat(session, CMD_GET_EQ_PREAMP);
+}
+
+gfloat
+xmms_remote_get_eq_band(gint session, gint band)
+{
+ ServerPktHeader pkt_hdr;
+ gint fd;
+ gpointer data;
+ gfloat val = 0.0;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return val;
+ remote_send_packet(fd, CMD_GET_EQ_BAND, &band, sizeof(band));
+ data = remote_read_packet(fd, &pkt_hdr);
+ if (data) {
+ val = *((gfloat *) data);
+ g_free(data);
+ }
+ remote_read_ack(fd);
+ close(fd);
+ return val;
+}
+
+void
+xmms_remote_set_eq(gint session, gfloat preamp, gfloat * bands)
+{
+ gint fd, i;
+ gfloat data[11];
+
+ g_return_if_fail(bands != NULL);
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ data[0] = preamp;
+ for (i = 0; i < 10; i++)
+ data[i + 1] = bands[i];
+ remote_send_packet(fd, CMD_SET_EQ, data, sizeof(data));
+ remote_read_ack(fd);
+ close(fd);
+}
+
+void
+xmms_remote_set_eq_preamp(gint session, gfloat preamp)
+{
+ remote_send_gfloat(session, CMD_SET_EQ_PREAMP, preamp);
+}
+
+void
+xmms_remote_set_eq_band(gint session, gint band, gfloat value)
+{
+ gint fd;
+ gchar data[sizeof(gint) + sizeof(gfloat)];
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ *((gint *) data) = band;
+ *((gfloat *) (data + sizeof(gint))) = value;
+ remote_send_packet(fd, CMD_SET_EQ_BAND, data, sizeof(data));
+ remote_read_ack(fd);
+ close(fd);
+}
+
+void
+xmms_remote_quit(gint session)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, CMD_QUIT, NULL, 0);
+ remote_read_ack(fd);
+ close(fd);
+}
+
+void
+xmms_remote_activate(gint session)
+{
+ gint fd;
+
+ if ((fd = xmms_connect_to_session(session)) == -1)
+ return;
+ remote_send_packet(fd, CMD_ACTIVATE, NULL, 0);
+ remote_read_ack(fd);
+ close(fd);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/beepctrl.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,116 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2003 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef XMMS_XMMSCTRL_H
+#define XMMS_XMMSCTRL_H
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /* Do NOT use this! This is only for control socket initialization now. */
+ gint xmms_connect_to_session(gint session);
+
+ void xmms_remote_playlist(gint session, gchar ** list, gint num,
+ gboolean enqueue);
+ gint xmms_remote_get_version(gint session);
+ void xmms_remote_playlist_add(gint session, GList * list);
+ void xmms_remote_playlist_delete(gint session, gint pos);
+ void xmms_remote_play(gint session);
+ void xmms_remote_pause(gint session);
+ void xmms_remote_stop(gint session);
+ gboolean xmms_remote_is_playing(gint session);
+ gboolean xmms_remote_is_paused(gint session);
+ gint xmms_remote_get_playlist_pos(gint session);
+ void xmms_remote_set_playlist_pos(gint session, gint pos);
+ gint xmms_remote_get_playlist_length(gint session);
+ void xmms_remote_playlist_clear(gint session);
+ gint xmms_remote_get_output_time(gint session);
+ void xmms_remote_jump_to_time(gint session, gint pos);
+ void xmms_remote_get_volume(gint session, gint * vl, gint * vr);
+ gint xmms_remote_get_main_volume(gint session);
+ gint xmms_remote_get_balance(gint session);
+ void xmms_remote_set_volume(gint session, gint vl, gint vr);
+ void xmms_remote_set_main_volume(gint session, gint v);
+ void xmms_remote_set_balance(gint session, gint b);
+ gchar *xmms_remote_get_skin(gint session);
+ void xmms_remote_set_skin(gint session, gchar * skinfile);
+ gchar *xmms_remote_get_playlist_file(gint session, gint pos);
+ gchar *xmms_remote_get_playlist_title(gint session, gint pos);
+ gint xmms_remote_get_playlist_time(gint session, gint pos);
+ void xmms_remote_get_info(gint session, gint * rate, gint * freq,
+ gint * nch);
+ void xmms_remote_main_win_toggle(gint session, gboolean show);
+ void xmms_remote_pl_win_toggle(gint session, gboolean show);
+ void xmms_remote_eq_win_toggle(gint session, gboolean show);
+ gboolean xmms_remote_is_main_win(gint session);
+ gboolean xmms_remote_is_pl_win(gint session);
+ gboolean xmms_remote_is_eq_win(gint session);
+ void xmms_remote_show_prefs_box(gint session);
+ void xmms_remote_toggle_aot(gint session, gboolean ontop);
+ void xmms_remote_eject(gint session);
+ void xmms_remote_playlist_prev(gint session);
+ void xmms_remote_playlist_next(gint session);
+ void xmms_remote_playlist_add_url_string(gint session, gchar * string);
+ gboolean xmms_remote_is_running(gint session);
+ void xmms_remote_toggle_repeat(gint session);
+ void xmms_remote_toggle_shuffle(gint session);
+ gboolean xmms_remote_is_repeat(gint session);
+ gboolean xmms_remote_is_shuffle(gint session);
+ void xmms_remote_get_eq(gint session, gfloat * preamp,
+ gfloat ** bands);
+ gfloat xmms_remote_get_eq_preamp(gint session);
+ gfloat xmms_remote_get_eq_band(gint session, gint band);
+ void xmms_remote_set_eq(gint session, gfloat preamp, gfloat * bands);
+ void xmms_remote_set_eq_preamp(gint session, gfloat preamp);
+ void xmms_remote_set_eq_band(gint session, gint band, gfloat value);
+
+/* Added in XMMS 1.2.1 */
+ void xmms_remote_quit(gint session);
+
+/* Added in XMMS 1.2.6 */
+ void xmms_remote_play_pause(gint session);
+ void xmms_remote_playlist_ins_url_string(gint session, gchar * string,
+ gint pos);
+
+/* Added in XMMS 1.2.11 */
+ void xmms_remote_playqueue_add(gint session, gint pos);
+ void xmms_remote_playqueue_remove(gint session, gint pos);
+ gint xmms_remote_get_playqueue_length(gint session);
+ void xmms_remote_toggle_advance(gint session);
+ gboolean xmms_remote_is_advance(gint session);
+
+/* Added in BMP 0.9.7 */
+ void xmms_remote_activate(gint session);
+
+
+#ifdef __cplusplus
+};
+#endif
+
+/* Deprecated APIs */
+void xmms_remote_play_files(gint session, GList * list);
+
+#define xmms_remote_add_files(session,list) \
+ xmms_remote_playlist_add(session,list)
+
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,64 @@
+#ifndef CONFIGDB_H
+#define CONFIGDB_H
+
+#include <glib.h>
+
+
+typedef struct _ConfigDb ConfigDb;
+
+
+G_BEGIN_DECLS
+
+ ConfigDb *bmp_cfg_db_open();
+ void bmp_cfg_db_close(ConfigDb *db);
+
+ gboolean bmp_cfg_db_get_string(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gchar **value);
+ gboolean bmp_cfg_db_get_int(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gint *value);
+ gboolean bmp_cfg_db_get_bool(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gboolean *value);
+ gboolean bmp_cfg_db_get_float(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gfloat *value);
+ gboolean bmp_cfg_db_get_double(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gdouble *value);
+
+ void bmp_cfg_db_set_string(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gchar *value);
+ void bmp_cfg_db_set_int(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gint value);
+ void bmp_cfg_db_set_bool(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gboolean value);
+ void bmp_cfg_db_set_float(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gfloat value);
+ void bmp_cfg_db_set_double(ConfigDb *db,
+ const gchar *section,
+ const gchar *key,
+ gdouble value);
+
+ void bmp_cfg_db_unset_key(ConfigDb *db,
+ const gchar *section,
+ const gchar *key);
+
+G_END_DECLS
+
+#endif // CONFIGDB_H
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_gconf.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_gconf.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_gconf.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,270 @@
+/* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "configdb.h"
+
+#include <string.h>
+#include <gconf/gconf-client.h>
+
+
+#define BMP_CONFIG_BASE_PATH "/apps/bmp"
+
+
+struct _ConfigDb {
+ GConfClient *client;
+};
+
+
+ConfigDb *
+bmp_cfg_db_open()
+{
+ ConfigDb *db;
+
+ db = g_new(ConfigDb, 1);
+
+ db->client = gconf_client_get_default();
+
+ return db;
+}
+
+void
+bmp_cfg_db_close(ConfigDb * db)
+{
+ g_object_unref(db->client);
+}
+
+static gchar *
+build_keypath(const gchar * section,
+ const gchar * key)
+{
+ if (section == NULL) {
+ return g_strconcat(BMP_CONFIG_BASE_PATH, "/", key, NULL);
+ }
+ else {
+ return g_strconcat(BMP_CONFIG_BASE_PATH, "/", section, "/",
+ key, NULL);
+ }
+}
+
+static gboolean
+bmp_cfg_db_get_value(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ GConfValue ** value)
+{
+ gchar *path;
+
+ g_return_val_if_fail(db != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ path = build_keypath(section, key);
+ *value = gconf_client_get(db->client, path, NULL);
+ g_free(path);
+
+ return (*value != NULL) ? TRUE : FALSE;
+}
+
+static void
+bmp_cfg_db_set_value(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ GConfValue * value)
+{
+ gchar *path;
+
+ g_return_if_fail(db != NULL);
+ g_return_if_fail(key != NULL);
+ g_return_if_fail(value != NULL);
+
+ path = build_keypath(section, key);
+ gconf_client_set(db->client, path, value, NULL);
+ g_free(path);
+}
+
+gboolean
+bmp_cfg_db_get_string(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gchar ** value)
+{
+ GConfValue *cval;
+
+ if (!bmp_cfg_db_get_value(db, section, key, &cval))
+ return FALSE;
+ if (cval->type != GCONF_VALUE_STRING)
+ return FALSE;
+ *value = strdup(gconf_value_get_string(cval));
+ gconf_value_free(cval);
+
+ return TRUE;
+}
+
+gboolean
+bmp_cfg_db_get_int(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gint * value)
+{
+ GConfValue *cval;
+
+ if (!bmp_cfg_db_get_value(db, section, key, &cval))
+ return FALSE;
+ if (cval->type != GCONF_VALUE_INT)
+ return FALSE;
+ *value = gconf_value_get_int(cval);
+ gconf_value_free(cval);
+
+ return TRUE;
+}
+
+gboolean
+bmp_cfg_db_get_bool(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gboolean * value)
+{
+ GConfValue *cval;
+
+ if (!bmp_cfg_db_get_value(db, section, key, &cval))
+ return FALSE;
+ if (cval->type != GCONF_VALUE_BOOL)
+ return FALSE;
+ *value = gconf_value_get_bool(cval);
+ gconf_value_free(cval);
+
+ return TRUE;
+}
+
+gboolean
+bmp_cfg_db_get_float(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gfloat * value)
+{
+ GConfValue *cval;
+
+ if (!bmp_cfg_db_get_value(db, section, key, &cval))
+ return FALSE;
+ if (cval->type != GCONF_VALUE_FLOAT)
+ return FALSE;
+ *value = gconf_value_get_float(cval);
+ gconf_value_free(cval);
+
+ return TRUE;
+}
+
+gboolean
+bmp_cfg_db_get_double(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gdouble * value)
+{
+ GConfValue *cval;
+
+ if (!bmp_cfg_db_get_value(db, section, key, &cval))
+ return FALSE;
+ if (cval->type != GCONF_VALUE_FLOAT)
+ return FALSE;
+ *value = gconf_value_get_float(cval);
+ gconf_value_free(cval);
+
+ return TRUE;
+}
+
+void
+bmp_cfg_db_set_string(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gchar * value)
+{
+ GConfValue *cval;
+
+ cval = gconf_value_new(GCONF_VALUE_STRING);
+ gconf_value_set_string(cval, value);
+ bmp_cfg_db_set_value(db, section, key, cval);
+ gconf_value_free(cval);
+}
+
+void
+bmp_cfg_db_set_int(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gint value)
+{
+ GConfValue *cval;
+
+ cval = gconf_value_new(GCONF_VALUE_INT);
+ gconf_value_set_int(cval, value);
+ bmp_cfg_db_set_value(db, section, key, cval);
+ gconf_value_free(cval);
+}
+
+void
+bmp_cfg_db_set_bool(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gboolean value)
+{
+ GConfValue *cval;
+
+ cval = gconf_value_new(GCONF_VALUE_BOOL);
+ gconf_value_set_bool(cval, value);
+ bmp_cfg_db_set_value(db, section, key, cval);
+ gconf_value_free(cval);
+}
+
+void
+bmp_cfg_db_set_float(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gfloat value)
+{
+ GConfValue *cval;
+
+ cval = gconf_value_new(GCONF_VALUE_FLOAT);
+ gconf_value_set_float(cval, value);
+ bmp_cfg_db_set_value(db, section, key, cval);
+ gconf_value_free(cval);
+}
+
+void
+bmp_cfg_db_set_double(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gdouble value)
+{
+ GConfValue *cval;
+
+ cval = gconf_value_new(GCONF_VALUE_FLOAT);
+ gconf_value_set_float(cval, value);
+ bmp_cfg_db_set_value(db, section, key, cval);
+ gconf_value_free(cval);
+}
+
+void
+bmp_cfg_db_unset_key(ConfigDb * db,
+ const gchar * section,
+ const gchar * key)
+{
+ gchar *path;
+
+ g_return_if_fail(db != NULL);
+ g_return_if_fail(key != NULL);
+
+ path = build_keypath(section, key);
+ gconf_client_unset(db->client, path, NULL);
+ g_free(path);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_rcfile.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_rcfile.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configdb_rcfile.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,205 @@
+/* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "configdb.h"
+
+#include <string.h>
+#include "rcfile.h"
+
+
+#define RCFILE_DEFAULT_SECTION_NAME "beep"
+
+
+struct _ConfigDb
+{
+ RcFile *file;
+ gchar *filename;
+ gboolean dirty;
+};
+
+
+ConfigDb *
+bmp_cfg_db_open()
+{
+ ConfigDb *db;
+
+ db = g_new(ConfigDb, 1);
+ db->filename = g_build_filename(g_get_home_dir(), BMP_RCPATH,
+ "config", NULL);
+ db->file = bmp_rcfile_open(db->filename);
+ if (!db->file)
+ db->file = bmp_rcfile_new();
+
+ db->dirty = FALSE;
+
+ return db;
+}
+
+void
+bmp_cfg_db_close(ConfigDb * db)
+{
+ if (db->dirty)
+ bmp_rcfile_write(db->file, db->filename);
+ bmp_rcfile_free(db->file);
+ g_free(db->filename);
+}
+
+gboolean
+bmp_cfg_db_get_string(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gchar ** value)
+{
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ return bmp_rcfile_read_string(db->file, section, key, value);
+}
+
+gboolean
+bmp_cfg_db_get_int(ConfigDb * db,
+ const gchar * section, const gchar * key, gint * value)
+{
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ return bmp_rcfile_read_int(db->file, section, key, value);
+}
+
+gboolean
+bmp_cfg_db_get_bool(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gboolean * value)
+{
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ return bmp_rcfile_read_bool(db->file, section, key, value);
+}
+
+gboolean
+bmp_cfg_db_get_float(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gfloat * value)
+{
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ return bmp_rcfile_read_float(db->file, section, key, value);
+}
+
+gboolean
+bmp_cfg_db_get_double(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gdouble * value)
+{
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ return bmp_rcfile_read_double(db->file, section, key, value);
+}
+
+void
+bmp_cfg_db_set_string(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gchar * value)
+{
+ db->dirty = TRUE;
+
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ bmp_rcfile_write_string(db->file, section, key, value);
+}
+
+void
+bmp_cfg_db_set_int(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gint value)
+{
+ db->dirty = TRUE;
+
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ bmp_rcfile_write_int(db->file, section, key, value);
+}
+
+void
+bmp_cfg_db_set_bool(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gboolean value)
+{
+ db->dirty = TRUE;
+
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ bmp_rcfile_write_boolean(db->file, section, key, value);
+}
+
+void
+bmp_cfg_db_set_float(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gfloat value)
+{
+ db->dirty = TRUE;
+
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ bmp_rcfile_write_float(db->file, section, key, value);
+}
+
+void
+bmp_cfg_db_set_double(ConfigDb * db,
+ const gchar * section,
+ const gchar * key,
+ gdouble value)
+{
+ db->dirty = TRUE;
+
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ bmp_rcfile_write_double(db->file, section, key, value);
+}
+
+void
+bmp_cfg_db_unset_key(ConfigDb * db,
+ const gchar * section,
+ const gchar * key)
+{
+ db->dirty = TRUE;
+
+ g_return_if_fail(db != NULL);
+ g_return_if_fail(key != NULL);
+
+ if (!section)
+ section = RCFILE_DEFAULT_SECTION_NAME;
+
+ bmp_rcfile_remove_key(db->file, section, key);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,493 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2002 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2002 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#if defined(HAVE_CONFIG_H)
+#include "../config.h"
+#endif
+
+#include "configfile.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+
+#include <unistd.h>
+#include <sys/stat.h>
+
+
+typedef gboolean(*XmmsCfgValueReadFunc) (ConfigFile * config_file,
+ const gchar * section,
+ const gchar * key,
+ gpointer * value);
+
+typedef void (*XmmsCfgValueWriteFunc) (ConfigFile * config_file,
+ const gchar * section,
+ const gchar * key,
+ gpointer * value);
+
+struct _XmmsCfgValueTypeInfo {
+ XmmsCfgValueReadFunc read;
+ XmmsCfgValueWriteFunc write;
+};
+
+typedef struct _XmmsCfgValueTypeInfo XmmsCfgValueTypeInfo;
+
+
+static XmmsCfgValueTypeInfo xmms_cfg_value_type_func[] = {
+ {(XmmsCfgValueReadFunc) xmms_cfg_read_int,
+ (XmmsCfgValueWriteFunc) xmms_cfg_write_int},
+ {(XmmsCfgValueReadFunc) xmms_cfg_read_float,
+ (XmmsCfgValueWriteFunc) xmms_cfg_write_float},
+ {(XmmsCfgValueReadFunc) xmms_cfg_read_boolean,
+ (XmmsCfgValueWriteFunc) xmms_cfg_write_boolean},
+ {(XmmsCfgValueReadFunc) xmms_cfg_read_string,
+ (XmmsCfgValueWriteFunc) xmms_cfg_write_string}
+};
+
+
+static ConfigSection *xmms_cfg_create_section(ConfigFile * cfg,
+ const gchar * name);
+static ConfigLine *xmms_cfg_create_string(ConfigSection * section,
+ const gchar * key,
+ const gchar * value);
+static ConfigSection *xmms_cfg_find_section(ConfigFile * cfg,
+ const gchar * name);
+static ConfigLine *xmms_cfg_find_string(ConfigSection * section,
+ const gchar * key);
+
+
+ConfigFile *xmms_cfg_new(void)
+{
+ return g_new0(ConfigFile, 1);
+}
+
+gboolean xmms_cfg_read_value(ConfigFile * config_file,
+ const gchar * section, const gchar * key,
+ XmmsCfgValueType value_type, gpointer * value)
+{
+ return xmms_cfg_value_type_func[value_type].read(config_file,
+ section, key, value);
+}
+
+void xmms_cfg_write_value(ConfigFile * config_file,
+ const gchar * section, const gchar * key,
+ XmmsCfgValueType value_type, gpointer * value)
+{
+ xmms_cfg_value_type_func[value_type].read(config_file,
+ section, key, value);
+}
+
+ConfigFile *xmms_cfg_open_file(const gchar * filename)
+{
+ ConfigFile *cfg;
+
+ gchar *buffer, **lines, *tmp;
+ gint i;
+ ConfigSection *section = NULL;
+
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ if (!g_file_get_contents(filename, &buffer, NULL, NULL))
+ return NULL;
+
+ cfg = g_malloc0(sizeof(ConfigFile));
+ lines = g_strsplit(buffer, "\n", 0);
+ g_free(buffer);
+ i = 0;
+ while (lines[i]) {
+ if (lines[i][0] == '[') {
+ if ((tmp = strchr(lines[i], ']'))) {
+ *tmp = '\0';
+ section = xmms_cfg_create_section(cfg, &lines[i][1]);
+ }
+ } else if (lines[i][0] != '#' && section) {
+ if ((tmp = strchr(lines[i], '='))) {
+ *tmp = '\0';
+ tmp++;
+ xmms_cfg_create_string(section, lines[i], tmp);
+ }
+ }
+ i++;
+ }
+ g_strfreev(lines);
+ return cfg;
+}
+
+gchar *xmms_cfg_get_default_filename(void)
+{
+ static gchar *filename = NULL;
+ if (!filename)
+ filename =
+ g_strconcat(g_get_home_dir(), "/", BMP_RCPATH, "/config",
+ NULL);
+ return filename;
+}
+
+ConfigFile *xmms_cfg_open_default_file(void)
+{
+ ConfigFile *ret;
+
+ ret = xmms_cfg_open_file(xmms_cfg_get_default_filename());
+ if (!ret)
+ ret = xmms_cfg_new();
+ return ret;
+}
+
+gboolean xmms_cfg_write_file(ConfigFile * cfg, const gchar * filename)
+{
+ FILE *file;
+ GList *section_list, *line_list;
+ ConfigSection *section;
+ ConfigLine *line;
+
+ g_return_val_if_fail(cfg != NULL, FALSE);
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ if (!(file = fopen(filename, "w")))
+ return FALSE;
+
+ section_list = cfg->sections;
+ while (section_list) {
+ section = (ConfigSection *) section_list->data;
+ if (section->lines) {
+ fprintf(file, "[%s]\n", section->name);
+ line_list = section->lines;
+ while (line_list) {
+ line = (ConfigLine *) line_list->data;
+ fprintf(file, "%s=%s\n", line->key, line->value);
+ line_list = g_list_next(line_list);
+ }
+ fprintf(file, "\n");
+ }
+ section_list = g_list_next(section_list);
+ }
+ fclose(file);
+ return TRUE;
+}
+
+gboolean xmms_cfg_write_default_file(ConfigFile * cfg)
+{
+ return xmms_cfg_write_file(cfg, xmms_cfg_get_default_filename());
+}
+
+gboolean xmms_cfg_read_string(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gchar ** value)
+{
+ ConfigSection *sect;
+ ConfigLine *line;
+
+ g_return_val_if_fail(cfg != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!(sect = xmms_cfg_find_section(cfg, section)))
+ return FALSE;
+ if (!(line = xmms_cfg_find_string(sect, key)))
+ return FALSE;
+ *value = g_strdup(line->value);
+ return TRUE;
+}
+
+gboolean xmms_cfg_read_int(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gint * value)
+{
+ gchar *str;
+
+ g_return_val_if_fail(cfg != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!xmms_cfg_read_string(cfg, section, key, &str))
+ return FALSE;
+ *value = atoi(str);
+ g_free(str);
+
+ return TRUE;
+}
+
+gboolean xmms_cfg_read_boolean(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gboolean * value)
+{
+ gchar *str;
+
+ g_return_val_if_fail(cfg != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!xmms_cfg_read_string(cfg, section, key, &str))
+ return FALSE;
+ if (!strcasecmp(str, "TRUE"))
+ *value = TRUE;
+ else
+ *value = FALSE;
+ g_free(str);
+ return TRUE;
+}
+
+gboolean xmms_cfg_read_float(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gfloat * value)
+{
+ gchar *str, *locale;
+
+ g_return_val_if_fail(cfg != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!xmms_cfg_read_string(cfg, section, key, &str))
+ return FALSE;
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ *value = strtod(str, NULL);
+ setlocale(LC_NUMERIC, locale);
+ g_free(locale);
+ g_free(str);
+
+ return TRUE;
+}
+
+gboolean xmms_cfg_read_double(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gdouble * value)
+{
+ gchar *str, *locale;
+
+ g_return_val_if_fail(cfg != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!xmms_cfg_read_string(cfg, section, key, &str))
+ return FALSE;
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ *value = strtod(str, NULL);
+ setlocale(LC_NUMERIC, locale);
+ g_free(locale);
+ g_free(str);
+
+ return TRUE;
+}
+
+void xmms_cfg_write_string(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gchar * value)
+{
+ ConfigSection *sect;
+ ConfigLine *line;
+
+ g_return_if_fail(cfg != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+ g_return_if_fail(value != NULL);
+
+ sect = xmms_cfg_find_section(cfg, section);
+ if (!sect)
+ sect = xmms_cfg_create_section(cfg, section);
+ if ((line = xmms_cfg_find_string(sect, key))) {
+ g_free(line->value);
+ line->value = g_strstrip(g_strdup(value));
+ } else
+ xmms_cfg_create_string(sect, key, value);
+}
+
+void xmms_cfg_write_int(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gint value)
+{
+ gchar *strvalue;
+
+ g_return_if_fail(cfg != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ strvalue = g_strdup_printf("%d", value);
+ xmms_cfg_write_string(cfg, section, key, strvalue);
+ g_free(strvalue);
+}
+
+void xmms_cfg_write_boolean(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gboolean value)
+{
+ g_return_if_fail(cfg != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ if (value)
+ xmms_cfg_write_string(cfg, section, key, "TRUE");
+ else
+ xmms_cfg_write_string(cfg, section, key, "FALSE");
+}
+
+void xmms_cfg_write_float(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gfloat value)
+{
+ gchar *strvalue, *locale;
+
+ g_return_if_fail(cfg != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ strvalue = g_strdup_printf("%g", value);
+ setlocale(LC_NUMERIC, locale);
+ xmms_cfg_write_string(cfg, section, key, strvalue);
+ g_free(locale);
+ g_free(strvalue);
+}
+
+void xmms_cfg_write_double(ConfigFile * cfg,
+ const gchar * section, const gchar * key,
+ gdouble value)
+{
+ gchar *strvalue, *locale;
+
+ g_return_if_fail(cfg != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ strvalue = g_strdup_printf("%g", value);
+ setlocale(LC_NUMERIC, locale);
+ xmms_cfg_write_string(cfg, section, key, strvalue);
+ g_free(locale);
+ g_free(strvalue);
+}
+
+void xmms_cfg_remove_key(ConfigFile * cfg,
+ const gchar * section, const gchar * key)
+{
+ ConfigSection *sect;
+ ConfigLine *line;
+
+ g_return_if_fail(cfg != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ if ((sect = xmms_cfg_find_section(cfg, section)) != NULL) {
+ if ((line = xmms_cfg_find_string(sect, key)) != NULL) {
+ g_free(line->key);
+ g_free(line->value);
+ g_free(line);
+ sect->lines = g_list_remove(sect->lines, line);
+ }
+ }
+}
+
+void xmms_cfg_free(ConfigFile * cfg)
+{
+ ConfigSection *section;
+ ConfigLine *line;
+ GList *section_list, *line_list;
+
+ if (cfg == NULL)
+ return;
+
+ section_list = cfg->sections;
+ while (section_list) {
+ section = (ConfigSection *) section_list->data;
+ g_free(section->name);
+
+ line_list = section->lines;
+ while (line_list) {
+ line = (ConfigLine *) line_list->data;
+ g_free(line->key);
+ g_free(line->value);
+ g_free(line);
+ line_list = g_list_next(line_list);
+ }
+ g_list_free(section->lines);
+ g_free(section);
+
+ section_list = g_list_next(section_list);
+ }
+ g_list_free(cfg->sections);
+ g_free(cfg);
+}
+
+static ConfigSection *xmms_cfg_create_section(ConfigFile * cfg,
+ const gchar * name)
+{
+ ConfigSection *section;
+
+ section = g_new0(ConfigSection, 1);
+ section->name = g_strdup(name);
+ cfg->sections = g_list_append(cfg->sections, section);
+
+ return section;
+}
+
+static ConfigLine *xmms_cfg_create_string(ConfigSection * section,
+ const gchar * key,
+ const gchar * value)
+{
+ ConfigLine *line;
+
+ line = g_new0(ConfigLine, 1);
+ line->key = g_strstrip(g_strdup(key));
+ line->value = g_strstrip(g_strdup(value));
+ section->lines = g_list_append(section->lines, line);
+
+ return line;
+}
+
+static ConfigSection *xmms_cfg_find_section(ConfigFile * cfg,
+ const gchar * name)
+{
+ ConfigSection *section;
+ GList *list;
+
+ list = cfg->sections;
+ while (list) {
+ section = (ConfigSection *) list->data;
+ if (!strcasecmp(section->name, name))
+ return section;
+ list = g_list_next(list);
+ }
+ return NULL;
+}
+
+static ConfigLine *xmms_cfg_find_string(ConfigSection * section,
+ const gchar * key)
+{
+ ConfigLine *line;
+ GList *list;
+
+ list = section->lines;
+ while (list) {
+ line = (ConfigLine *) list->data;
+ if (!strcasecmp(line->key, key))
+ return line;
+ list = g_list_next(list);
+ }
+ return NULL;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/configfile.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,101 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef XMMS_CONFIGFILE_H
+#define XMMS_CONFIGFILE_H
+
+#include <glib.h>
+
+
+typedef enum {
+ XMMS_CFG_INT,
+ XMMS_CFG_FLOAT,
+ XMMS_CFG_BOOLEAN,
+ XMMS_CFG_STRING
+} XmmsCfgValueType;
+
+
+struct _ConfigLine {
+ gchar *key;
+ gchar *value;
+};
+
+struct _ConfigSection {
+ gchar *name;
+ GList *lines;
+};
+
+struct _ConfigFile {
+ GList *sections;
+};
+
+typedef struct _ConfigLine ConfigLine;
+typedef struct _ConfigSection ConfigSection;
+typedef struct _ConfigFile ConfigFile;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ ConfigFile *xmms_cfg_new(void);
+ ConfigFile *xmms_cfg_open_file(const gchar * filename);
+ gboolean xmms_cfg_write_file(ConfigFile * cfg, const gchar * filename);
+ void xmms_cfg_free(ConfigFile * cfg);
+ ConfigFile *xmms_cfg_open_default_file(void);
+ gboolean xmms_cfg_write_default_file(ConfigFile * cfg);
+
+ gboolean xmms_cfg_read_value(ConfigFile * config_file,
+ const gchar * section, const gchar * key,
+ XmmsCfgValueType value_type,
+ gpointer * value);
+
+ void xmms_cfg_write_value(ConfigFile * config_file,
+ const gchar * section, const gchar * key,
+ XmmsCfgValueType value_type,
+ gpointer * value);
+
+ gboolean xmms_cfg_read_string(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gchar ** value);
+ gboolean xmms_cfg_read_int(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gint * value);
+ gboolean xmms_cfg_read_boolean(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gboolean * value);
+ gboolean xmms_cfg_read_float(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gfloat * value);
+ gboolean xmms_cfg_read_double(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gdouble * value);
+
+ void xmms_cfg_write_string(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gchar * value);
+ void xmms_cfg_write_int(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gint value);
+ void xmms_cfg_write_boolean(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gboolean value);
+ void xmms_cfg_write_float(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gfloat value);
+ void xmms_cfg_write_double(ConfigFile * cfg, const gchar * section,
+ const gchar * key, gdouble value);
+
+ void xmms_cfg_remove_key(ConfigFile * cfg, const gchar * section,
+ const gchar * key);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,400 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2002 Peter Alm, Mikael Alm, Olle Hallnas,
+ * Thomas Nilsson and 4Front Technologies
+ * Copyright (C) 1999-2002 Haavard Kvaalen
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#define GETTEXT_PACKAGE PACKAGE
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+
+/* XPM */
+static gchar *folder[] = {
+ "16 16 16 1",
+ " c None",
+ ". c #f4f7e4",
+ "X c #dee4b5",
+ "o c #e1e7b9",
+ "O c #c6cba4",
+ "+ c #dce2b8",
+ "@ c #e9e9ec",
+ "# c #d3d8ae",
+ "$ c #d8daca",
+ "% c #b2b2b5",
+ "& c #767862",
+ "* c #e3e6c3",
+ "= c #1b1b1a",
+ "- c #939684",
+ "; c #555555",
+ ": c #000000",
+ " ",
+ " ",
+ " :::: ",
+ " :.@@O: ",
+ ":-&&&&&::::: ",
+ ":.@@@@@*$O#O= ",
+ ":@*+XXXX+##O: ",
+ ":.*#oooXXXXX: ",
+ ":@+XoXXXXXX#: ",
+ ":@*ooXXXXXX#: ",
+ ":@**XXXXXXX#: ",
+ ":@*XXXXXXXX%: ",
+ ":$.*OOOOOO%-: ",
+ " ;::::::::::: ",
+ " ",
+ " "
+};
+
+/* Icon by Jakub Steiner <jimmac at ximian.com> */
+
+/* XPM */
+static gchar *ofolder[] = {
+ "16 16 16 1",
+ " c None",
+ ". c #a9ad93",
+ "X c #60634d",
+ "o c #dee4b5",
+ "O c #9ca085",
+ "+ c #0c0d04",
+ "@ c #2f2f31",
+ "# c #3b3d2c",
+ "$ c #c8cda2",
+ "% c #e6e6e9",
+ "& c #b3b5a5",
+ "* c #80826d",
+ "= c #292a1c",
+ "- c #fefef6",
+ "; c #8f937b",
+ ": c #000000",
+ " ",
+ " ",
+ " :::: ",
+ " :-%%&: ",
+ ":-;;;OX::::: ",
+ ":-;;;;O;O;&.: ",
+ ":-*X##@@@@@=#: ",
+ ":%*+-%%ooooooO: ",
+ ":%X;%ooooooo.*: ",
+ ":.+-%oooooooO: ",
+ ":*O-oooooooo*: ",
+ ":O-oooooooo.: ",
+ ":*-%$$$$$$OX: ",
+ " ::::::::::: ",
+ " ",
+ " "
+};
+
+#define NODE_SPACING 4
+
+typedef void (*db_handler_t) (char *);
+
+static GdkPixmap *folder_pixmap = NULL, *ofolder_pixmap;
+static GdkBitmap *folder_mask, *ofolder_mask;
+
+struct dirnode {
+ guint scanned:1;
+ gchar *path;
+};
+
+static gboolean
+check_for_subdir(gchar * path)
+{
+ DIR *dir;
+ struct dirent *dirent;
+ struct stat statbuf;
+ gchar *npath;
+
+ if ((dir = opendir(path)) != NULL) {
+ while ((dirent = readdir(dir)) != NULL) {
+ if (dirent->d_name[0] == '.')
+ continue;
+
+ npath = g_strconcat(path, dirent->d_name, NULL);
+ if (stat(npath, &statbuf) != -1 && S_ISDIR(statbuf.st_mode)) {
+ g_free(npath);
+ closedir(dir);
+ return TRUE;
+ }
+ g_free(npath);
+ }
+ closedir(dir);
+ }
+ return FALSE;
+}
+
+static void
+destroy_cb(gpointer data)
+{
+ struct dirnode *node = data;
+
+ g_free(node->path);
+ g_free(node);
+}
+
+static void
+add_dir(GtkCTree * tree, GtkCTreeNode * pnode, gchar * parent, gchar * dir)
+{
+ struct stat statbuf;
+ gchar *path;
+
+ /* Don't show hidden dirs, nor . and .. */
+ if (dir[0] == '.')
+ return;
+
+ path = g_strconcat(parent, dir, NULL);
+ if (stat(path, &statbuf) != -1 && S_ISDIR(statbuf.st_mode)) {
+ gboolean has_subdir;
+ gchar *text = "";
+ GtkCTreeNode *node;
+ struct dirnode *dirnode = g_new0(struct dirnode, 1);
+ dirnode->path = g_strconcat(path, "/", NULL);
+ has_subdir = check_for_subdir(dirnode->path);
+ node = gtk_ctree_insert_node(tree, pnode, NULL, &dir,
+ NODE_SPACING, folder_pixmap,
+ folder_mask, ofolder_pixmap,
+ ofolder_mask, !has_subdir, FALSE);
+ gtk_ctree_node_set_row_data_full(tree, node, dirnode, destroy_cb);
+ if (has_subdir)
+ gtk_ctree_insert_node(tree, node, NULL, &text,
+ NODE_SPACING, NULL, NULL,
+ NULL, NULL, FALSE, FALSE);
+ }
+ g_free(path);
+}
+
+static void
+expand_cb(GtkWidget * widget, GtkCTreeNode * parent_node)
+{
+ struct dirent *dirent;
+ GtkCTree *tree = GTK_CTREE(widget);
+ struct dirnode *parent_dirnode;
+
+ parent_dirnode = gtk_ctree_node_get_row_data(tree, parent_node);
+ if (!parent_dirnode->scanned) {
+ DIR *dir;
+
+ gtk_clist_freeze(GTK_CLIST(widget));
+ gtk_ctree_remove_node(tree, GTK_CTREE_ROW(parent_node)->children);
+ if ((dir = opendir(parent_dirnode->path)) != NULL) {
+ while ((dirent = readdir(dir)) != NULL) {
+ add_dir(tree, parent_node,
+ parent_dirnode->path, dirent->d_name);
+ }
+ closedir(dir);
+ gtk_ctree_sort_node(tree, parent_node);
+ }
+ gtk_clist_thaw(GTK_CLIST(widget));
+ parent_dirnode->scanned = TRUE;
+ }
+}
+
+static void
+select_row_cb(GtkWidget * widget, gint row, gint column,
+ GdkEventButton * bevent, gpointer data)
+{
+ struct dirnode *dirnode;
+ GtkCTreeNode *node;
+ db_handler_t handler;
+
+ if (bevent && bevent->type == GDK_2BUTTON_PRESS) {
+ node = gtk_ctree_node_nth(GTK_CTREE(widget), row);
+ dirnode = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
+ handler = (db_handler_t) gtk_object_get_user_data(GTK_OBJECT(widget));
+ if (handler)
+ handler(dirnode->path);
+ }
+}
+
+static void
+show_cb(GtkWidget * widget, gpointer data)
+{
+ GtkCTree *tree = GTK_CTREE(data);
+ GtkCTreeNode *node = gtk_object_get_data(GTK_OBJECT(tree),
+ "selected_node");
+
+ if (node)
+ gtk_ctree_node_moveto(tree, node, -1, 0.6, 0);
+}
+
+static void
+ok_clicked(GtkWidget * widget, GtkWidget * tree)
+{
+ GtkCTreeNode *node;
+ struct dirnode *dirnode;
+ GList *list_node;
+ GtkWidget *window;
+ db_handler_t handler;
+
+ window = gtk_object_get_user_data(GTK_OBJECT(widget));
+ gtk_widget_hide(window);
+ list_node = GTK_CLIST(tree)->selection;
+ while (list_node) {
+ node = list_node->data;
+ dirnode = gtk_ctree_node_get_row_data(GTK_CTREE(tree), node);
+ handler = (db_handler_t) gtk_object_get_user_data(GTK_OBJECT(tree));
+ if (handler)
+ handler(dirnode->path);
+ list_node = g_list_next(list_node);
+ }
+ gtk_widget_destroy(window);
+
+}
+
+GtkWidget *
+xmms_create_dir_browser(gchar * title, gchar * current_path,
+ GtkSelectionMode mode, void (*handler) (gchar *))
+{
+ GtkWidget *window, *scroll_win, *tree, *vbox, *bbox, *ok, *cancel, *sep;
+ gchar *root_text = "/", *text = "";
+ GtkCTreeNode *root_node, *node, *selected_node = NULL;
+ GtkCTree *ctree;
+ struct dirnode *dirnode;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_title(GTK_WINDOW(window), title);
+ gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_container_border_width(GTK_CONTAINER(window), 10);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ scroll_win = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(scroll_win, 450, 400);
+ gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0);
+ gtk_widget_show(scroll_win);
+
+ gtk_widget_realize(window);
+ if (!folder_pixmap) {
+ folder_pixmap = gdk_pixmap_create_from_xpm_d(window->window,
+ &folder_mask,
+ NULL, folder);
+ ofolder_pixmap = gdk_pixmap_create_from_xpm_d(window->window,
+ &ofolder_mask,
+ NULL, ofolder);
+ }
+
+ tree = gtk_ctree_new(1, 0);
+ ctree = GTK_CTREE(tree);
+ gtk_clist_set_column_auto_resize(GTK_CLIST(tree), 0, TRUE);
+ gtk_clist_set_selection_mode(GTK_CLIST(tree), mode);
+ gtk_ctree_set_line_style(ctree, GTK_CTREE_LINES_DOTTED);
+ g_signal_connect(G_OBJECT(tree), "tree_expand",
+ G_CALLBACK(expand_cb), NULL);
+ g_signal_connect(G_OBJECT(tree), "select_row",
+ G_CALLBACK(select_row_cb), NULL);
+ g_signal_connect(G_OBJECT(window), "show", G_CALLBACK(show_cb), tree);
+ gtk_container_add(GTK_CONTAINER(scroll_win), tree);
+ gtk_object_set_user_data(GTK_OBJECT(tree), (void *) handler);
+
+ root_node = gtk_ctree_insert_node(ctree, NULL, NULL,
+ &root_text, NODE_SPACING,
+ folder_pixmap, folder_mask,
+ ofolder_pixmap, ofolder_mask,
+ FALSE, FALSE);
+ dirnode = g_new0(struct dirnode, 1);
+ dirnode->path = g_strdup(G_DIR_SEPARATOR_S);
+ gtk_ctree_node_set_row_data_full(ctree, root_node, dirnode, destroy_cb);
+ node = gtk_ctree_insert_node(ctree, root_node, NULL,
+ &text, 4, NULL, NULL, NULL,
+ NULL, TRUE, TRUE);
+ gtk_ctree_expand(ctree, root_node);
+ gtk_widget_show(tree);
+
+ sep = gtk_hseparator_new();
+ gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
+ gtk_widget_show(sep);
+
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+
+ ok = gtk_button_new_from_stock(GTK_STOCK_OK);
+ gtk_object_set_user_data(GTK_OBJECT(ok), window);
+ GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_window_set_default(GTK_WINDOW(window), ok);
+ gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+ g_signal_connect(G_OBJECT(ok), "clicked", G_CALLBACK(ok_clicked), tree);
+ gtk_widget_show(ok);
+
+ cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+ g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(window));
+ gtk_widget_show(cancel);
+
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+ gtk_widget_show(bbox);
+ gtk_widget_show(vbox);
+
+ if (current_path && *current_path) {
+ gchar **dir;
+ gint i;
+
+ dir = g_strsplit(current_path, G_DIR_SEPARATOR_S, 0);
+ node = root_node;
+ for (i = 0; dir[i] != NULL; i++) {
+ if (dir[i][0] == '\0')
+ continue;
+
+ for (node = GTK_CTREE_ROW(node)->children; node != NULL;
+ node = GTK_CTREE_ROW(node)->sibling) {
+ gchar *tmp;
+ if (gtk_ctree_node_get_pixtext(ctree, node, 0,
+ &tmp, NULL, NULL, NULL))
+ if (!strcmp(dir[i], tmp))
+ break;
+ }
+ if (!node)
+ break;
+ if (!GTK_CTREE_ROW(node)->is_leaf && dir[i + 1])
+ gtk_ctree_expand(ctree, node);
+ else {
+ selected_node = node;
+ break;
+ }
+ }
+ g_strfreev(dir);
+ }
+
+ if (!selected_node)
+ selected_node = root_node;
+
+ gtk_ctree_select(ctree, selected_node);
+ gtk_object_set_data(GTK_OBJECT(tree), "selected_node", selected_node);
+
+ return window;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/dirbrowser.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,34 @@
+
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef XMMS_DIRBROWSER_H
+#define XMMS_DIRBROWSER_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+
+G_BEGIN_DECLS
+
+GtkWidget *xmms_create_dir_browser(gchar * title, gchar * current_path,
+ GtkSelectionMode mode,
+ void (*handler) (gchar *));
+
+G_END_DECLS
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,83 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include "formatter.h"
+
+
+Formatter *
+xmms_formatter_new(void)
+{
+ Formatter *formatter = g_new0(Formatter, 1);
+
+ xmms_formatter_associate(formatter, '%', "%");
+ return formatter;
+}
+
+void
+xmms_formatter_destroy(Formatter * formatter)
+{
+ int i;
+
+ for (i = 0; i < 256; i++)
+ if (formatter->values[i])
+ g_free(formatter->values[i]);
+ g_free(formatter);
+}
+
+void
+xmms_formatter_associate(Formatter * formatter, guchar id, char *value)
+{
+ xmms_formatter_dissociate(formatter, id);
+ formatter->values[id] = g_strdup(value);
+}
+
+void
+xmms_formatter_dissociate(Formatter * formatter, guchar id)
+{
+ if (formatter->values[id])
+ g_free(formatter->values[id]);
+ formatter->values[id] = 0;
+}
+
+gchar *
+xmms_formatter_format(Formatter * formatter, char *format)
+{
+ char *p, *q, *buffer;
+ int len;
+
+ for (p = format, len = 0; *p; p++)
+ if (*p == '%') {
+ if (formatter->values[(int) *++p])
+ len += strlen(formatter->values[(int) *p]);
+ else if (!*p) {
+ len += 1;
+ p--;
+ }
+ else
+ len += 2;
+ }
+ else
+ len++;
+ buffer = g_malloc(len + 1);
+ for (p = format, q = buffer; *p; p++)
+ if (*p == '%') {
+ if (formatter->values[(int) *++p]) {
+ strcpy(q, formatter->values[(int) *p]);
+ q += strlen(q);
+ }
+ else {
+ *q++ = '%';
+ if (*p != '\0')
+ *q++ = *p;
+ else
+ p--;
+ }
+ }
+ else
+ *q++ = *p;
+ *q = 0;
+ return buffer;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/formatter.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,22 @@
+#ifndef XMMS_FORMATTER_H
+#define XMMS_FORMATTER_H
+
+#include <glib.h>
+
+typedef struct {
+ gchar *values[256];
+} Formatter;
+
+
+G_BEGIN_DECLS
+
+Formatter *xmms_formatter_new(void);
+void xmms_formatter_destroy(Formatter * formatter);
+void xmms_formatter_associate(Formatter * formatter, guchar id,
+ gchar * value);
+void xmms_formatter_dissociate(Formatter * formatter, guchar id);
+gchar *xmms_formatter_format(Formatter * formatter, gchar * format);
+
+G_END_DECLS
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,422 @@
+/* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "rcfile.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+
+#include <unistd.h>
+#include <sys/stat.h>
+
+
+static RcSection *bmp_rcfile_create_section(RcFile * file,
+ const gchar * name);
+static RcLine *bmp_rcfile_create_string(RcSection * section,
+ const gchar * key,
+ const gchar * value);
+static RcSection *bmp_rcfile_find_section(RcFile * file, const gchar * name);
+static RcLine *bmp_rcfile_find_string(RcSection * section, const gchar * key);
+
+
+RcFile *
+bmp_rcfile_new(void)
+{
+ return g_new0(RcFile, 1);
+}
+
+void
+bmp_rcfile_free(RcFile * file)
+{
+ RcSection *section;
+ RcLine *line;
+ GList *section_list, *line_list;
+
+ if (file == NULL)
+ return;
+
+ section_list = file->sections;
+ while (section_list) {
+ section = (RcSection *) section_list->data;
+ g_free(section->name);
+
+ line_list = section->lines;
+ while (line_list) {
+ line = (RcLine *) line_list->data;
+ g_free(line->key);
+ g_free(line->value);
+ g_free(line);
+ line_list = g_list_next(line_list);
+ }
+ g_list_free(section->lines);
+ g_free(section);
+
+ section_list = g_list_next(section_list);
+ }
+ g_list_free(file->sections);
+ g_free(file);
+}
+
+RcFile *
+bmp_rcfile_open(const gchar * filename)
+{
+ RcFile *file;
+
+ gchar *buffer, **lines, *tmp;
+ gint i;
+ RcSection *section = NULL;
+
+ g_return_val_if_fail(filename != NULL, FALSE);
+ g_return_val_if_fail(strlen(filename) > 0, FALSE);
+
+ if (!g_file_get_contents(filename, &buffer, NULL, NULL))
+ return NULL;
+
+ file = g_malloc0(sizeof(RcFile));
+ lines = g_strsplit(buffer, "\n", 0);
+ g_free(buffer);
+ i = 0;
+ while (lines[i]) {
+ if (lines[i][0] == '[') {
+ if ((tmp = strchr(lines[i], ']'))) {
+ *tmp = '\0';
+ section = bmp_rcfile_create_section(file, &lines[i][1]);
+ }
+ }
+ else if (lines[i][0] != '#' && section) {
+ if ((tmp = strchr(lines[i], '='))) {
+ gchar **frags;
+ frags = g_strsplit(lines[i], "=", 0);
+ if (strlen(frags[1]) > 0) {
+ bmp_rcfile_create_string(section, frags[0], frags[1]);
+ };
+ }
+ }
+ i++;
+ }
+ g_strfreev(lines);
+ return file;
+}
+
+gboolean
+bmp_rcfile_write(RcFile * file, const gchar * filename)
+{
+ FILE *fp;
+ GList *section_list, *line_list;
+ RcSection *section;
+ RcLine *line;
+
+ g_return_val_if_fail(file != NULL, FALSE);
+ g_return_val_if_fail(filename != NULL, FALSE);
+
+ if (!(fp = fopen(filename, "w")))
+ return FALSE;
+
+ section_list = file->sections;
+ while (section_list) {
+ section = (RcSection *) section_list->data;
+ if (section->lines) {
+ fprintf(fp, "[%s]\n", section->name);
+ line_list = section->lines;
+ while (line_list) {
+ line = (RcLine *) line_list->data;
+ fprintf(fp, "%s=%s\n", line->key, line->value);
+ line_list = g_list_next(line_list);
+ }
+ fprintf(fp, "\n");
+ }
+ section_list = g_list_next(section_list);
+ }
+ fclose(fp);
+ return TRUE;
+}
+
+gboolean
+bmp_rcfile_read_string(RcFile * file, const gchar * section,
+ const gchar * key, gchar ** value)
+{
+ RcSection *sect;
+ RcLine *line;
+
+ g_return_val_if_fail(file != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!(sect = bmp_rcfile_find_section(file, section)))
+ return FALSE;
+ if (!(line = bmp_rcfile_find_string(sect, key)))
+ return FALSE;
+ *value = g_strdup(line->value);
+ return TRUE;
+}
+
+gboolean
+bmp_rcfile_read_int(RcFile * file, const gchar * section,
+ const gchar * key, gint * value)
+{
+ gchar *str;
+
+ g_return_val_if_fail(file != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!bmp_rcfile_read_string(file, section, key, &str))
+ return FALSE;
+ *value = atoi(str);
+ g_free(str);
+
+ return TRUE;
+}
+
+gboolean
+bmp_rcfile_read_bool(RcFile * file, const gchar * section,
+ const gchar * key, gboolean * value)
+{
+ gchar *str;
+
+ g_return_val_if_fail(file != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!bmp_rcfile_read_string(file, section, key, &str))
+ return FALSE;
+ if (!strcasecmp(str, "TRUE"))
+ *value = TRUE;
+ else
+ *value = FALSE;
+ g_free(str);
+ return TRUE;
+}
+
+gboolean
+bmp_rcfile_read_float(RcFile * file, const gchar * section,
+ const gchar * key, gfloat * value)
+{
+ gchar *str, *locale;
+
+ g_return_val_if_fail(file != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!bmp_rcfile_read_string(file, section, key, &str))
+ return FALSE;
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ *value = strtod(str, NULL);
+ setlocale(LC_NUMERIC, locale);
+ g_free(locale);
+ g_free(str);
+
+ return TRUE;
+}
+
+gboolean
+bmp_rcfile_read_double(RcFile * file, const gchar * section,
+ const gchar * key, gdouble * value)
+{
+ gchar *str, *locale;
+
+ g_return_val_if_fail(file != NULL, FALSE);
+ g_return_val_if_fail(section != NULL, FALSE);
+ g_return_val_if_fail(key != NULL, FALSE);
+ g_return_val_if_fail(value != NULL, FALSE);
+
+ if (!bmp_rcfile_read_string(file, section, key, &str))
+ return FALSE;
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ *value = strtod(str, NULL);
+ setlocale(LC_NUMERIC, locale);
+ g_free(locale);
+ g_free(str);
+
+ return TRUE;
+}
+
+void
+bmp_rcfile_write_string(RcFile * file, const gchar * section,
+ const gchar * key, const gchar * value)
+{
+ RcSection *sect;
+ RcLine *line;
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+ g_return_if_fail(value != NULL);
+
+ sect = bmp_rcfile_find_section(file, section);
+ if (!sect)
+ sect = bmp_rcfile_create_section(file, section);
+ if ((line = bmp_rcfile_find_string(sect, key))) {
+ g_free(line->value);
+ line->value = g_strstrip(g_strdup(value));
+ }
+ else
+ bmp_rcfile_create_string(sect, key, value);
+}
+
+void
+bmp_rcfile_write_int(RcFile * file, const gchar * section,
+ const gchar * key, gint value)
+{
+ gchar *strvalue;
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ strvalue = g_strdup_printf("%d", value);
+ bmp_rcfile_write_string(file, section, key, strvalue);
+ g_free(strvalue);
+}
+
+void
+bmp_rcfile_write_boolean(RcFile * file, const gchar * section,
+ const gchar * key, gboolean value)
+{
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ if (value)
+ bmp_rcfile_write_string(file, section, key, "TRUE");
+ else
+ bmp_rcfile_write_string(file, section, key, "FALSE");
+}
+
+void
+bmp_rcfile_write_float(RcFile * file, const gchar * section,
+ const gchar * key, gfloat value)
+{
+ gchar *strvalue, *locale;
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ strvalue = g_strdup_printf("%g", value);
+ setlocale(LC_NUMERIC, locale);
+ bmp_rcfile_write_string(file, section, key, strvalue);
+ g_free(locale);
+ g_free(strvalue);
+}
+
+void
+bmp_rcfile_write_double(RcFile * file, const gchar * section,
+ const gchar * key, gdouble value)
+{
+ gchar *strvalue, *locale;
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ locale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+ strvalue = g_strdup_printf("%g", value);
+ setlocale(LC_NUMERIC, locale);
+ bmp_rcfile_write_string(file, section, key, strvalue);
+ g_free(locale);
+ g_free(strvalue);
+}
+
+void
+bmp_rcfile_remove_key(RcFile * file, const gchar * section, const gchar * key)
+{
+ RcSection *sect;
+ RcLine *line;
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(section != NULL);
+ g_return_if_fail(key != NULL);
+
+ if ((sect = bmp_rcfile_find_section(file, section)) != NULL) {
+ if ((line = bmp_rcfile_find_string(sect, key)) != NULL) {
+ g_free(line->key);
+ g_free(line->value);
+ g_free(line);
+ sect->lines = g_list_remove(sect->lines, line);
+ }
+ }
+}
+
+static RcSection *
+bmp_rcfile_create_section(RcFile * file, const gchar * name)
+{
+ RcSection *section;
+
+ section = g_new0(RcSection, 1);
+ section->name = g_strdup(name);
+ file->sections = g_list_append(file->sections, section);
+
+ return section;
+}
+
+static RcLine *
+bmp_rcfile_create_string(RcSection * section,
+ const gchar * key, const gchar * value)
+{
+ RcLine *line;
+
+ line = g_new0(RcLine, 1);
+ line->key = g_strstrip(g_strdup(key));
+ line->value = g_strstrip(g_strdup(value));
+ section->lines = g_list_append(section->lines, line);
+
+ return line;
+}
+
+static RcSection *
+bmp_rcfile_find_section(RcFile * file, const gchar * name)
+{
+ RcSection *section;
+ GList *list;
+
+ list = file->sections;
+ while (list) {
+ section = (RcSection *) list->data;
+ if (!strcasecmp(section->name, name))
+ return section;
+ list = g_list_next(list);
+ }
+ return NULL;
+}
+
+static RcLine *
+bmp_rcfile_find_string(RcSection * section, const gchar * key)
+{
+ RcLine *line;
+ GList *list;
+
+ list = section->lines;
+ while (list) {
+ line = (RcLine *) list->data;
+ if (!strcasecmp(line->key, key))
+ return line;
+ list = g_list_next(list);
+ }
+ return NULL;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/rcfile.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,72 @@
+/* XMMS - Cross-platform multimedia player
+ * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifndef RCFILE_H
+#define RCFILE_H
+
+#include <glib.h>
+
+typedef struct {
+ gchar *key;
+ gchar *value;
+} RcLine;
+
+typedef struct {
+ gchar *name;
+ GList *lines;
+} RcSection;
+
+typedef struct {
+ GList *sections;
+} RcFile;
+
+G_BEGIN_DECLS
+
+RcFile *bmp_rcfile_new(void);
+void bmp_rcfile_free(RcFile * file);
+
+RcFile *bmp_rcfile_open(const gchar * filename);
+gboolean bmp_rcfile_write(RcFile * file, const gchar * filename);
+
+gboolean bmp_rcfile_read_string(RcFile * file, const gchar * section,
+ const gchar * key, gchar ** value);
+gboolean bmp_rcfile_read_int(RcFile * file, const gchar * section,
+ const gchar * key, gint * value);
+gboolean bmp_rcfile_read_bool(RcFile * file, const gchar * section,
+ const gchar * key, gboolean * value);
+gboolean bmp_rcfile_read_float(RcFile * file, const gchar * section,
+ const gchar * key, gfloat * value);
+gboolean bmp_rcfile_read_double(RcFile * file, const gchar * section,
+ const gchar * key, gdouble * value);
+
+void bmp_rcfile_write_string(RcFile * file, const gchar * section,
+ const gchar * key, const gchar * value);
+void bmp_rcfile_write_int(RcFile * file, const gchar * section,
+ const gchar * key, gint value);
+void bmp_rcfile_write_boolean(RcFile * file, const gchar * section,
+ const gchar * key, gboolean value);
+void bmp_rcfile_write_float(RcFile * file, const gchar * section,
+ const gchar * key, gfloat value);
+void bmp_rcfile_write_double(RcFile * file, const gchar * section,
+ const gchar * key, gdouble value);
+
+void bmp_rcfile_remove_key(RcFile * file, const gchar * section,
+ const gchar * key);
+
+G_END_DECLS
+
+#endif // RCFILE_H
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,393 @@
+/*
+ * Copyright (C) 2001, Espen Skoglund <esk at ira.uka.de>
+ * Copyright (C) 2001, Haavard Kvaalen <havardk at xmms.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
+ * 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#define GETTEXT_PACKAGE PACKAGE
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "titlestring.h"
+
+#define CHECK(input, field) \
+ (((gchar *) &input->field - (gchar *) input) < input->__size)
+
+#define VS(input, field) (CHECK(input, field) ? input->field : NULL)
+#define VI(input, field) (CHECK(input, field) ? input->field : 0)
+
+
+BmpTitleInput *
+bmp_title_input_new()
+{
+ BmpTitleInput *input;
+ input = g_new0(BmpTitleInput, 1);
+ input->__size = XMMS_TITLEINPUT_SIZE;
+ input->__version = XMMS_TITLEINPUT_VERSION;
+ return input;
+}
+
+void
+bmp_title_input_free(BmpTitleInput * input)
+{
+ if (!input)
+ return;
+
+ g_free(input->performer);
+ g_free(input->album_name);
+ g_free(input->track_name);
+ g_free(input->date);
+ g_free(input->genre);
+ g_free(input->comment);
+ g_free(input->file_name);
+ g_free(input->file_path);
+ g_free(input);
+}
+
+gchar *
+xmms_get_titlestring(const gchar * fmt, TitleInput * input)
+{
+ GString *outstr;
+ const gchar *string;
+ gchar c, convert[16];
+ gint numdigits, numpr, val, i;
+ gint f_left, f_space, f_zero, someflag, width, precision;
+ gboolean did_output = FALSE;
+ gchar digits[] = "0123456789";
+
+#define PUTCH(ch) g_string_append_c(outstr, ch)
+
+#define LEFTPAD(num) \
+ G_STMT_START { \
+ gint cnt = (num); \
+ if ( ! f_left && cnt > 0 ) \
+ while ( cnt-- > 0 ) \
+ PUTCH(f_zero ? '0' : ' '); \
+ } G_STMT_END;
+
+#define RIGHTPAD(num) \
+ G_STMT_START { \
+ gint cnt = (num); \
+ if ( f_left && cnt > 0 ) \
+ while ( cnt-- > 0 ) \
+ PUTCH( ' ' ); \
+ } G_STMT_END;
+
+ if (fmt == NULL)
+ return NULL;
+
+ outstr = g_string_new("");
+
+ for (;;) {
+ /* Copy characters until we encounter '%'. */
+ while ((c = *fmt++) != '%') {
+ if (c == '\0')
+ goto Done;
+ g_string_append_c(outstr, c);
+ }
+
+ f_left = f_space = f_zero = 0;
+ someflag = 1;
+
+
+ /* Parse flags. */
+ while (someflag) {
+ switch (*fmt) {
+ case '-':
+ f_left = 1;
+ fmt++;
+ break;
+ case ' ':
+ f_space = 1;
+ fmt++;
+ break;
+ case '0':
+ f_zero = 1;
+ fmt++;
+ break;
+ default:
+ someflag = 0;
+ break;
+ }
+ }
+
+
+ /* Parse field width. */
+ if ((c = *fmt) >= '0' && c <= '9') {
+ width = 0;
+ while ((c = *fmt++) >= '0' && c <= '9') {
+ width *= 10;
+ width += c - '0';
+ }
+ fmt--;
+ }
+ else
+ width = -1;
+
+
+ /* Parse precision. */
+ if (*fmt == '.') {
+ if ((c = *++fmt) >= '0' && c <= '9') {
+ precision = 0;
+ while ((c = *fmt++) >= '0' && c <= '9') {
+ precision *= 10;
+ precision += c - '0';
+ }
+ fmt--;
+ }
+ else
+ precision = -1;
+ }
+ else
+ precision = -1;
+
+
+ /* Parse format conversion. */
+ switch (c = *fmt++) {
+ case '}': /* close optional, just ignore */
+ continue;
+
+ case '{':{ /* optional entry: %{n:...%} */
+ char n = *fmt++;
+ if (!((n == 'a' && VS(input, album_name)) ||
+ (n == 'c' && VS(input, comment)) ||
+ (n == 'd' && VS(input, date)) ||
+ (n == 'e' && VS(input, file_ext)) ||
+ (n == 'f' && VS(input, file_name)) ||
+ (n == 'F' && VS(input, file_path)) ||
+ (n == 'g' && VS(input, genre)) ||
+ (n == 'n' && VI(input, track_number)) ||
+ (n == 'p' && VS(input, performer)) ||
+ (n == 't' && VS(input, track_name)))) {
+ int nl = 0;
+ char c;
+ while ((c = *fmt++)) /* until end of string */
+ if (c == '}') /* if end of opt */
+ if (!nl)
+ break; /* if outmost indent level */
+ else
+ --nl; /* else reduce indent */
+ else if (c == '{')
+ ++nl; /* increase indent */
+ }
+ else
+ ++fmt;
+ break;
+ }
+
+ case 'a':
+ string = VS(input, album_name);
+ goto Print_string;
+ case 'c':
+ string = VS(input, comment);
+ goto Print_string;
+ case 'd':
+ string = VS(input, date);
+ goto Print_string;
+ case 'e':
+ string = VS(input, file_ext);
+ goto Print_string;
+ case 'f':
+ string = VS(input, file_name);
+ goto Print_string;
+ case 'F':
+ string = VS(input, file_path);
+ goto Print_string;
+ case 'g':
+ string = VS(input, genre);
+ goto Print_string;
+ case 'n':
+ val = VI(input, track_number);
+ goto Print_number;
+ case 'p':
+ string = VS(input, performer);
+ goto Print_string;
+ case 't':
+ string = VS(input, track_name);
+
+ Print_string:
+ if (string == NULL)
+ break;
+ did_output = TRUE;
+
+ numpr = 0;
+ if (width > 0) {
+ /* Calculate printed size. */
+ numpr = strlen(string);
+ if (precision >= 0 && precision < numpr)
+ numpr = precision;
+
+ LEFTPAD(width - numpr);
+ }
+
+ /* Insert string. */
+ if (precision >= 0) {
+ while (precision-- > 0 && (c = *string++) != '\0')
+ PUTCH(c);
+ }
+ else {
+ while ((c = *string++) != '\0')
+ PUTCH(c);
+ }
+
+ RIGHTPAD(width - numpr);
+ break;
+
+ case 'y':
+ val = VI(input, year);
+
+ Print_number:
+ if (val == 0)
+ break;
+ if (c != 'N')
+ did_output = TRUE;
+
+ /* Create reversed number string. */
+ numdigits = 0;
+ do {
+ convert[numdigits++] = digits[val % 10];
+ val /= 10;
+ }
+ while (val > 0);
+
+ numpr = numdigits > precision ? numdigits : precision;
+
+ /* Insert left padding. */
+ if (!f_left && width > numpr) {
+ if (f_zero)
+ numpr = width;
+ else
+ for (i = width - numpr; i-- > 0;)
+ PUTCH(' ');
+ }
+
+ /* Insert zero padding. */
+ for (i = numpr - numdigits; i-- > 0;)
+ PUTCH('0');
+
+ /* Insert number. */
+ while (numdigits > 0)
+ PUTCH(convert[--numdigits]);
+
+ RIGHTPAD(width - numpr);
+ break;
+
+ case '%':
+ PUTCH('%');
+ break;
+
+ default:
+ PUTCH('%');
+ PUTCH(c);
+ break;
+ }
+ }
+
+ Done:
+ if (did_output)
+ return g_string_free(outstr, FALSE);
+ else
+ return NULL;
+}
+
+struct _TagDescription {
+ gchar tag;
+ gchar *description;
+};
+
+typedef struct _TagDescription TagDescription;
+
+static TagDescription tag_descriptions[] = {
+ {'p', N_("Performer/Artist")},
+ {'a', N_("Album")},
+ {'g', N_("Genre")},
+ {'f', N_("File name")},
+ {'F', N_("File path")},
+ {'e', N_("File extension")},
+ {'t', N_("Track name")},
+ {'n', N_("Track number")},
+ {'d', N_("Date")},
+ {'y', N_("Year")},
+ {'c', N_("Comment")}
+};
+
+gint tag_descriptions_length =
+ sizeof(tag_descriptions) / sizeof(TagDescription);
+
+GtkWidget *
+xmms_titlestring_descriptions(gchar * tags, gint columns)
+{
+ GtkWidget *table, *label;
+ gchar tag_str[5];
+ gint num = strlen(tags);
+ gint r = 0, c, i;
+
+ g_return_val_if_fail(tags != NULL, NULL);
+ g_return_val_if_fail(columns <= num, NULL);
+
+ table = gtk_table_new((num + columns - 1) / columns, columns * 2, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 5);
+
+ for (c = 0; c < columns; c++) {
+ for (r = 0; r < (num + columns - 1 - c) / columns; r++) {
+ g_snprintf(tag_str, sizeof(tag_str), "%%%c:", *tags);
+ label = gtk_label_new(tag_str);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 2 * c, 2 * c + 1, r,
+ r + 1, GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show(label);
+
+ for (i = 0; i < tag_descriptions_length; i++) {
+ if (*tags == tag_descriptions[i].tag) {
+ label = gtk_label_new(_(tag_descriptions[i].description));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 2 * c + 1,
+ 2 * c + 2, r, r + 1,
+ GTK_EXPAND | GTK_FILL,
+ GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_widget_show(label);
+ break;
+ }
+ }
+
+ if (i == tag_descriptions_length)
+ g_warning("Invalid tag: %c", *tags);
+
+ tags++;
+ }
+
+ }
+
+ label = gtk_label_new(_("%{n:...%}: Display \"...\" only if element "
+ "%n is present"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, r + 1,
+ r + 1, r + 2, GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show(label);
+
+ return table;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/titlestring.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2001, Espen Skoglund <esk at ira.uka.de>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+#ifndef XMMS_TITLESTRING_H
+#define XMMS_TITLESTRING_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+
+/*
+ * Struct which is passed to xmms_get_titlestring(). An input struct
+ * is allocated and initialized with XMMS_NEW_TITLEINPUT(). Before
+ * passing the struct to xmms_get_titlestring() it should be filled
+ * with appropriate field values.
+ */
+
+typedef struct {
+ gint __size; /* Set by XMMS_NEW_TITLEINPUT() */
+ gint __version; /* Ditto */
+
+ gchar *performer; /* %p */
+ gchar *album_name; /* %a */
+ gchar *track_name; /* %t */
+ gint track_number; /* %n */
+ gint year; /* %y */
+ gchar *date; /* %d */
+ gchar *genre; /* %g */
+ gchar *comment; /* %c */
+ gchar *file_name; /* %f */
+ const gchar *file_ext; /* %e *//* is not always strdup'ed, see xmms_input_get_song_info and plugins! */
+ gchar *file_path; /* %F */
+} TitleInput;
+
+typedef TitleInput BmpTitleInput;
+
+
+/*
+ * Using a __size field helps the library functions detect plugins
+ * that use a possibly extended version of the struct. The __version
+ * field helps the library detect possible future incompatibilities in
+ * the struct layout.
+ */
+
+#define XMMS_TITLEINPUT_SIZE sizeof(TitleInput)
+#define XMMS_TITLEINPUT_VERSION (1)
+
+#define XMMS_NEW_TITLEINPUT(input) G_STMT_START { \
+ input = g_new0(TitleInput, 1); \
+ input->__size = XMMS_TITLEINPUT_SIZE; \
+ input->__version = XMMS_TITLEINPUT_VERSION; \
+} G_STMT_END
+
+
+G_BEGIN_DECLS
+
+TitleInput *bmp_title_input_new(void);
+void bmp_title_input_free(BmpTitleInput * input);
+
+gchar *xmms_get_titlestring(const gchar * fmt, TitleInput * input);
+GtkWidget *xmms_titlestring_descriptions(gchar * tags, gint rows);
+
+G_END_DECLS
+
+#endif /* !XMMS_TITLESTRING_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,67 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+
+GtkWidget *
+xmms_show_message(const gchar * title, const gchar * text,
+ const gchar * button_text, gboolean modal,
+ GtkSignalFunc button_action, gpointer action_data)
+{
+ /* FIXME: improper border spacing, for some reason vbox and
+ * action_area not aligned, button_text totally ignored */
+
+ GtkWidget *dialog, *box, *button;
+ GtkWidget *scrolledwindow, *textview;
+ GtkTextBuffer *textbuffer;
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_modal(GTK_WINDOW(dialog), modal);
+ gtk_window_set_title(GTK_WINDOW(dialog), title);
+ gtk_window_set_default_size(GTK_WINDOW(dialog), 460, 400);
+
+ box = GTK_DIALOG(dialog)->vbox;
+
+ scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start(GTK_BOX(box), scrolledwindow, TRUE, TRUE, 0);
+
+ textview = gtk_text_view_new();
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow),
+ textview);
+
+ textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
+ gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer), text, -1);
+
+ button = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE);
+ g_signal_connect_swapped(button, "clicked",
+ G_CALLBACK(gtk_widget_destroy), dialog);
+ if (button_action)
+ g_signal_connect(button, "clicked", button_action, action_data);
+
+ GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default(button);
+
+ gtk_widget_show_all(dialog);
+
+ return dialog;
+}
+
+gboolean
+xmms_check_realtime_priority(void)
+{
+ return FALSE;
+}
+
+void
+xmms_usleep(gint usec)
+{
+ g_usleep(usec);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/util.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,32 @@
+#ifndef XMMS_UTIL_H
+#define XMMS_UTIL_H
+
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+
+/* XMMS names */
+
+#define bmp_info_dialog(title, text, button_text, model, button_action, action_data) \
+ xmms_show_message(title, text, button_text, model, button_action, action_data)
+
+#define bmp_usleep(usec) \
+ xmms_usleep(usec)
+
+#define bmp_check_realtime_priority() \
+ xmms_check_realtime_priority()
+
+
+G_BEGIN_DECLS
+
+GtkWidget *xmms_show_message(const gchar * title, const gchar * text,
+ const gchar * button_text, gboolean modal,
+ GtkSignalFunc button_action,
+ gpointer action_data);
+gboolean xmms_check_realtime_priority(void);
+void xmms_usleep(gint usec);
+
+G_END_DECLS
+
+#endif
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,43 @@
+#ifndef VFS_H
+#define VFS_H
+
+#include <glib.h>
+#include <stdio.h>
+
+typedef struct _VFSFile VFSFile;
+
+G_BEGIN_DECLS
+
+/* Reserved for private use by BMP */
+gboolean vfs_init(void);
+
+VFSFile * vfs_fopen(const gchar * path,
+ const gchar * mode);
+gint vfs_fclose(VFSFile * file);
+
+size_t vfs_fread(gpointer ptr,
+ size_t size,
+ size_t nmemb,
+ VFSFile * file);
+size_t vfs_fwrite(gconstpointer ptr,
+ size_t size,
+ size_t nmemb,
+ VFSFile *file);
+
+gint vfs_fseek(VFSFile * file,
+ glong offset,
+ gint whence);
+void vfs_rewind(VFSFile * file);
+glong vfs_ftell(VFSFile * file);
+
+gboolean vfs_file_test(const gchar * path,
+ GFileTest test);
+
+gboolean vfs_is_writeable(const gchar * path);
+
+gboolean vfs_truncate(VFSFile * file, glong length);
+
+
+G_END_DECLS
+
+#endif /* VFS_H */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_gnome.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_gnome.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_gnome.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,333 @@
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "vfs.h"
+#include <string.h>
+#include <libgnomevfs/gnome-vfs.h>
+
+
+struct _VFSFile
+{
+ GnomeVFSHandle *handle;
+};
+
+
+static void mode_to_gnome_vfs(const gchar * mode,
+ GnomeVFSOpenMode * g_mode,
+ gboolean * truncate,
+ gboolean * append);
+
+gboolean
+vfs_init(void)
+{
+ if (!gnome_vfs_init())
+ return FALSE;
+
+ g_atexit(gnome_vfs_shutdown);
+ return TRUE;
+}
+
+VFSFile *
+vfs_fopen(const gchar * path,
+ const gchar * mode)
+{
+ VFSFile *file;
+ GnomeVFSResult g_result;
+ GnomeVFSOpenMode g_mode;
+ gboolean truncate, append;
+
+ file = g_new(VFSFile, 1);
+
+ mode_to_gnome_vfs(mode, &g_mode, &truncate, &append);
+
+ if (!truncate) {
+ g_result = gnome_vfs_open(&(file->handle), path, g_mode);
+
+ if (append && g_result == GNOME_VFS_ERROR_NOT_FOUND) {
+ g_result = gnome_vfs_create(&(file->handle),
+ path, g_mode, TRUE,
+ S_IRUSR | S_IWUSR |
+ S_IRGRP | S_IWGRP |
+ S_IROTH | S_IWOTH);
+ }
+
+ if (append && g_result == GNOME_VFS_OK) {
+ g_result = gnome_vfs_seek(file->handle, GNOME_VFS_SEEK_END, 0);
+ if (g_result != GNOME_VFS_OK)
+ gnome_vfs_close(file->handle);
+ }
+ }
+ else {
+ g_result = gnome_vfs_create(&(file->handle),
+ path, g_mode, FALSE,
+ S_IRUSR | S_IWUSR |
+ S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
+ }
+
+ if (g_result != GNOME_VFS_OK)
+ file->handle = NULL;
+
+ if (file->handle == NULL) {
+ g_free(file);
+ file = NULL;
+ }
+
+ return file;
+}
+
+gint
+vfs_fclose(VFSFile * file)
+{
+ gint ret = 0;
+
+ if (file->handle) {
+ if (gnome_vfs_close(file->handle) != GNOME_VFS_OK)
+ ret = -1;
+ }
+
+ g_free(file);
+
+ return ret;
+}
+
+size_t
+vfs_fread(gpointer ptr,
+ size_t size,
+ size_t nmemb,
+ VFSFile * file)
+{
+ GnomeVFSResult result;
+ GnomeVFSFileSize bytes_read;
+
+ result = gnome_vfs_read(file->handle, ptr, size * nmemb, &bytes_read);
+ if (result == GNOME_VFS_OK)
+ return bytes_read;
+ if (result == GNOME_VFS_ERROR_EOF)
+ return 0;
+ else
+ return -1;
+}
+
+size_t
+vfs_fwrite(gconstpointer ptr,
+ size_t size,
+ size_t nmemb,
+ VFSFile * file)
+{
+ GnomeVFSResult result;
+ GnomeVFSFileSize bytes_written;
+
+ result = gnome_vfs_write(file->handle, ptr, size * nmemb, &bytes_written);
+ if (result == GNOME_VFS_OK)
+ return bytes_written;
+ else
+ return -1;
+}
+
+gint
+vfs_fseek(VFSFile * file,
+ glong offset,
+ gint whence)
+{
+ GnomeVFSResult result;
+ GnomeVFSSeekPosition g_whence;
+
+ switch (whence) {
+ case SEEK_SET:
+ g_whence = GNOME_VFS_SEEK_START;
+ break;
+ case SEEK_CUR:
+ g_whence = GNOME_VFS_SEEK_CURRENT;
+ break;
+ case SEEK_END:
+ g_whence = GNOME_VFS_SEEK_END;
+ break;
+ default:
+ g_warning("vfs_fseek: invalid whence value");
+ return -1;
+ }
+
+ result = gnome_vfs_seek(file->handle, g_whence, offset);
+
+ if (result == GNOME_VFS_OK)
+ return 0;
+ else
+ return -1;
+}
+
+void
+vfs_rewind(VFSFile * file)
+{
+ vfs_fseek(file, 0L, SEEK_SET);
+}
+
+glong
+vfs_ftell(VFSFile * file)
+{
+ GnomeVFSResult result;
+ GnomeVFSFileSize position;
+
+ result = gnome_vfs_tell(file->handle, &position);
+
+ if (result == GNOME_VFS_OK)
+ return position;
+ else
+ return -1;
+}
+
+gboolean
+vfs_file_test(const gchar * path,
+ GFileTest test)
+{
+ GnomeVFSResult result;
+ GnomeVFSFileInfo info;
+ GFileTest file_test;
+
+ result = gnome_vfs_get_file_info(path, &info,
+ GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS);
+
+ if (test == G_FILE_TEST_EXISTS)
+ return (result == GNOME_VFS_OK) ? TRUE : FALSE;
+ else if (test == G_FILE_TEST_IS_EXECUTABLE)
+ return (info.permissions & GNOME_VFS_PERM_ACCESS_EXECUTABLE)
+ ? TRUE : FALSE;
+
+ switch (info.type) {
+ case GNOME_VFS_FILE_TYPE_REGULAR:
+ file_test = G_FILE_TEST_IS_REGULAR;
+ break;
+ case GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK:
+ file_test = G_FILE_TEST_IS_SYMLINK;
+ break;
+ case GNOME_VFS_FILE_TYPE_DIRECTORY:
+ file_test = G_FILE_TEST_IS_DIR;
+ default:
+ return FALSE;
+ }
+
+ if (test == file_test)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+gboolean
+vfs_is_writeable(const gchar * path)
+{
+ GnomeVFSFileInfo info;
+
+ if (gnome_vfs_get_file_info(path, &info, GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS)
+ != GNOME_VFS_OK) {
+ return FALSE;
+ }
+
+ return (info.permissions & GNOME_VFS_PERM_ACCESS_WRITABLE ? TRUE : FALSE);
+}
+
+gint
+vfs_truncate(VFSFile * file,
+ glong length)
+{
+ GnomeVFSResult result;
+
+ result = gnome_vfs_truncate_handle(file->handle, (GnomeVFSFileSize) length);
+
+ if (result == GNOME_VFS_OK)
+ return 0;
+ else
+ return -1;
+}
+
+static gchar *strdup_exclude_chars(const gchar * s,
+ const gchar * c);
+
+static void
+mode_to_gnome_vfs(const gchar * mode,
+ GnomeVFSOpenMode * g_mode,
+ gboolean * truncate,
+ gboolean * append)
+{
+ gchar *s;
+
+ *g_mode = GNOME_VFS_OPEN_RANDOM;
+ *truncate = *append = FALSE;
+
+ s = strdup_exclude_chars(mode, "bt");
+ switch (s[0]) {
+ case 'r':
+ *g_mode |= GNOME_VFS_OPEN_READ;
+
+ if (s[1] == '+')
+ *g_mode |= GNOME_VFS_OPEN_WRITE;
+
+ break;
+ case 'w':
+ case 'a':
+ *g_mode |= GNOME_VFS_OPEN_WRITE;
+
+ if (s[0] == 'w')
+ *truncate = TRUE;
+ else
+ *append = TRUE;
+
+ if (s[1] == '+')
+ *g_mode |= GNOME_VFS_OPEN_READ;
+
+ break;
+ default:
+ g_warning("mode_to_gnome_vfs: unhandled mode character");
+ }
+ g_free(s);
+}
+
+static gchar *
+strdup_exclude_chars(const gchar * s,
+ const gchar * c)
+{
+ gint i, j, k;
+ gint newlen = 0;
+ gchar *newstr;
+ gboolean found;
+
+ /* Calculate number of chars in new string */
+ for (i = 0; s[i] != '\0'; i++) {
+ found = FALSE;
+
+ for (j = 0; j < strlen(c) && !found; j++)
+ if (s[i] == c[j])
+ found = TRUE;
+
+ if (!found)
+ newlen++;
+ }
+
+ newstr = g_malloc(newlen + 1);
+
+ /* Copy valid chars to new string */
+ for (i = k = 0; s[i] != '\0'; i++) {
+ found = FALSE;
+
+ for (j = 0; j < strlen(c) && !found; j++)
+ if (s[i] == c[j])
+ found = TRUE;
+
+ if (!found)
+ newstr[k++] = s[i];
+ }
+
+ newstr[k] = '\0';
+
+ return newstr;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_stdio.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_stdio.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/vfs_stdio.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,128 @@
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licensse 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "vfs.h"
+#include <stdio.h>
+
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+
+struct _VFSFile {
+ FILE *handle;
+};
+
+
+gboolean
+vfs_init(void)
+{
+ return TRUE;
+}
+
+VFSFile *
+vfs_fopen(const gchar * path,
+ const gchar * mode)
+{
+ VFSFile *file;
+
+ file = g_new(VFSFile, 1);
+
+ file->handle = fopen(path, mode);
+
+ if (file->handle == NULL) {
+ g_free(file);
+ file = NULL;
+ }
+
+ return file;
+}
+
+gint
+vfs_fclose(VFSFile * file)
+{
+ gint ret = 0;
+
+ if (file->handle) {
+ if (fclose(file->handle) != 0)
+ ret = -1;
+ }
+
+ g_free(file);
+
+ return ret;
+}
+
+size_t
+vfs_fread(gpointer ptr,
+ size_t size,
+ size_t nmemb,
+ VFSFile * file)
+{
+ return fread(ptr, size, nmemb, file->handle);
+}
+
+size_t
+vfs_fwrite(gconstpointer ptr,
+ size_t size,
+ size_t nmemb,
+ VFSFile * file)
+{
+ return fwrite(ptr, size, nmemb, file->handle);
+}
+
+gint
+vfs_fseek(VFSFile * file,
+ glong offset,
+ gint whence)
+{
+ return fseek(file->handle, offset, whence);
+}
+
+void
+vfs_rewind(VFSFile * file)
+{
+ rewind(file->handle);
+}
+
+glong
+vfs_ftell(VFSFile * file)
+{
+ return ftell(file->handle);
+}
+
+gboolean
+vfs_file_test(const gchar * path, GFileTest test)
+{
+ return g_file_test(path, test);
+}
+
+/* NOTE: stat() is not part of stdio */
+gboolean
+vfs_is_writeable(const gchar * path)
+{
+ struct stat info;
+
+ if (stat(path, &info) == -1)
+ return FALSE;
+
+ return (info.st_mode & S_IWUSR);
+}
+
+gint
+vfs_truncate(VFSFile * file, glong size)
+{
+ return ftruncate(fileno(file->handle), size);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,762 @@
+/*
+ * Copyright (C) 2001-2003 Haavard Kvaalen <havardk at xmms.org>
+ *
+ * Licensed under GNU LGPL version 2.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <beep/plugin.h>
+#include "xconvert.h"
+
+#define IS_BIG_ENDIAN (G_BYTE_ORDER==G_BIG_ENDIAN)
+
+struct buffer {
+ void *buffer;
+ int size;
+};
+
+struct xmms_convert_buffers {
+ struct buffer format_buffer, stereo_buffer, freq_buffer;
+};
+
+struct xmms_convert_buffers *
+xmms_convert_buffers_new(void)
+{
+ return g_malloc0(sizeof(struct xmms_convert_buffers));
+}
+
+static void *
+convert_get_buffer(struct buffer *buffer, size_t size)
+{
+ if (size > 0 && size <= buffer->size)
+ return buffer->buffer;
+
+ buffer->size = size;
+ buffer->buffer = g_realloc(buffer->buffer, size);
+ return buffer->buffer;
+}
+
+void
+xmms_convert_buffers_free(struct xmms_convert_buffers *buf)
+{
+ convert_get_buffer(&buf->format_buffer, 0);
+ convert_get_buffer(&buf->stereo_buffer, 0);
+ convert_get_buffer(&buf->freq_buffer, 0);
+}
+
+void
+xmms_convert_buffers_destroy(struct xmms_convert_buffers *buf)
+{
+ if (!buf)
+ return;
+ xmms_convert_buffers_free(buf);
+ g_free(buf);
+}
+
+static int
+convert_swap_endian(struct xmms_convert_buffers *buf, void **data, int length)
+{
+ guint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr = GUINT16_SWAP_LE_BE(*ptr);
+
+ return i;
+}
+
+static int
+convert_swap_sign_and_endian_to_native(struct
+ xmms_convert_buffers
+ *buf, void **data, int length)
+{
+ guint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr = GUINT16_SWAP_LE_BE(*ptr) ^ 1 << 15;
+
+ return i;
+}
+
+static int
+convert_swap_sign_and_endian_to_alien(struct
+ xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr = GUINT16_SWAP_LE_BE(*ptr ^ 1 << 15);
+
+ return i;
+}
+
+static int
+convert_swap_sign16(struct xmms_convert_buffers *buf, void **data, int length)
+{
+ gint16 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i += 2, ptr++)
+ *ptr ^= 1 << 15;
+
+ return i;
+}
+
+static int
+convert_swap_sign8(struct xmms_convert_buffers *buf, void **data, int length)
+{
+ gint8 *ptr = *data;
+ int i;
+ for (i = 0; i < length; i++)
+ *ptr++ ^= 1 << 7;
+
+ return i;
+}
+
+static int
+convert_to_8_native_endian(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = *input++ >> 8;
+
+ return i;
+}
+
+static int
+convert_to_8_native_endian_swap_sign(struct xmms_convert_buffers
+ *buf, void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = (*input++ >> 8) ^ (1 << 7);
+
+ return i;
+}
+
+
+static int
+convert_to_8_alien_endian(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = *input++ & 0xff;
+
+ return i;
+}
+
+static int
+convert_to_8_alien_endian_swap_sign(struct xmms_convert_buffers
+ *buf, void **data, int length)
+{
+ gint8 *output = *data;
+ gint16 *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++)
+ *output++ = (*input++ & 0xff) ^ (1 << 7);
+
+ return i;
+}
+
+static int
+convert_to_16_native_endian(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = convert_get_buffer(&buf->format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = *input++ << 8;
+
+ return i * 2;
+}
+
+static int
+convert_to_16_native_endian_swap_sign(struct
+ xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = convert_get_buffer(&buf->format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = (*input++ << 8) ^ (1 << 15);
+
+ return i * 2;
+}
+
+
+static int
+convert_to_16_alien_endian(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = convert_get_buffer(&buf->format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = *input++;
+
+ return i * 2;
+}
+
+static int
+convert_to_16_alien_endian_swap_sign(struct xmms_convert_buffers
+ *buf, void **data, int length)
+{
+ guint8 *input = *data;
+ guint16 *output;
+ int i;
+ *data = convert_get_buffer(&buf->format_buffer, length * 2);
+ output = *data;
+ for (i = 0; i < length; i++)
+ *output++ = *input++ ^ (1 << 7);
+
+ return i * 2;
+}
+
+static AFormat
+unnativize(AFormat fmt)
+{
+ if (fmt == FMT_S16_NE) {
+ if (IS_BIG_ENDIAN)
+ return FMT_S16_BE;
+ else
+ return FMT_S16_LE;
+ }
+ if (fmt == FMT_U16_NE) {
+ if (IS_BIG_ENDIAN)
+ return FMT_U16_BE;
+ else
+ return FMT_U16_LE;
+ }
+ return fmt;
+}
+
+convert_func_t
+xmms_convert_get_func(AFormat output, AFormat input)
+{
+ output = unnativize(output);
+ input = unnativize(input);
+
+ if (output == input)
+ return NULL;
+
+ if ((output == FMT_U16_BE && input == FMT_U16_LE) ||
+ (output == FMT_U16_LE && input == FMT_U16_BE) ||
+ (output == FMT_S16_BE && input == FMT_S16_LE) ||
+ (output == FMT_S16_LE && input == FMT_S16_BE))
+ return convert_swap_endian;
+
+ if ((output == FMT_U16_BE && input == FMT_S16_BE) ||
+ (output == FMT_U16_LE && input == FMT_S16_LE) ||
+ (output == FMT_S16_BE && input == FMT_U16_BE) ||
+ (output == FMT_S16_LE && input == FMT_U16_LE))
+ return convert_swap_sign16;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == FMT_U16_BE && input == FMT_S16_LE) ||
+ (output == FMT_S16_BE && input == FMT_U16_LE))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == FMT_U16_LE && input == FMT_S16_BE) ||
+ (output == FMT_S16_LE && input == FMT_U16_BE))))
+ return convert_swap_sign_and_endian_to_native;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == FMT_U16_BE && input == FMT_S16_LE) ||
+ (output == FMT_S16_BE && input == FMT_U16_LE))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == FMT_U16_LE && input == FMT_S16_BE) ||
+ (output == FMT_S16_LE && input == FMT_U16_BE))))
+ return convert_swap_sign_and_endian_to_alien;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_U16_BE) ||
+ (output == FMT_S8 && input == FMT_S16_BE))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_U16_LE) ||
+ (output == FMT_S8 && input == FMT_S16_LE))))
+ return convert_to_8_native_endian;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_S16_BE) ||
+ (output == FMT_S8 && input == FMT_U16_BE))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_S16_LE) ||
+ (output == FMT_S8 && input == FMT_U16_LE))))
+ return convert_to_8_native_endian_swap_sign;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_U16_BE) ||
+ (output == FMT_S8 && input == FMT_S16_BE))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_U16_LE) ||
+ (output == FMT_S8 && input == FMT_S16_LE))))
+ return convert_to_8_alien_endian;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_S16_BE) ||
+ (output == FMT_S8 && input == FMT_U16_BE))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == FMT_U8 && input == FMT_S16_LE) ||
+ (output == FMT_S8 && input == FMT_U16_LE))))
+ return convert_to_8_alien_endian_swap_sign;
+
+ if ((output == FMT_U8 && input == FMT_S8) ||
+ (output == FMT_S8 && input == FMT_U8))
+ return convert_swap_sign8;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == FMT_U16_BE && input == FMT_U8) ||
+ (output == FMT_S16_BE && input == FMT_S8))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == FMT_U16_LE && input == FMT_U8) ||
+ (output == FMT_S16_LE && input == FMT_S8))))
+ return convert_to_16_native_endian;
+
+ if ((IS_BIG_ENDIAN &&
+ ((output == FMT_U16_BE && input == FMT_S8) ||
+ (output == FMT_S16_BE && input == FMT_U8))) ||
+ (!IS_BIG_ENDIAN &&
+ ((output == FMT_U16_LE && input == FMT_S8) ||
+ (output == FMT_S16_LE && input == FMT_U8))))
+ return convert_to_16_native_endian_swap_sign;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == FMT_U16_BE && input == FMT_U8) ||
+ (output == FMT_S16_BE && input == FMT_S8))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == FMT_U16_LE && input == FMT_U8) ||
+ (output == FMT_S16_LE && input == FMT_S8))))
+ return convert_to_16_alien_endian;
+
+ if ((!IS_BIG_ENDIAN &&
+ ((output == FMT_U16_BE && input == FMT_S8) ||
+ (output == FMT_S16_BE && input == FMT_U8))) ||
+ (IS_BIG_ENDIAN &&
+ ((output == FMT_U16_LE && input == FMT_S8) ||
+ (output == FMT_S16_LE && input == FMT_U8))))
+ return convert_to_16_alien_endian_swap_sign;
+
+ g_warning("Translation needed, but not available.\n"
+ "Input: %d; Output %d.", input, output);
+ return NULL;
+}
+
+static int
+convert_mono_to_stereo(struct xmms_convert_buffers *buf,
+ void **data, int length, int b16)
+{
+ int i;
+ void *outbuf = convert_get_buffer(&buf->stereo_buffer, length * 2);
+
+ if (b16) {
+ guint16 *output = outbuf, *input = *data;
+ for (i = 0; i < length / 2; i++) {
+ *output++ = *input;
+ *output++ = *input;
+ input++;
+ }
+ }
+ else {
+ guint8 *output = outbuf, *input = *data;
+ for (i = 0; i < length; i++) {
+ *output++ = *input;
+ *output++ = *input;
+ input++;
+ }
+ }
+ *data = outbuf;
+
+ return length * 2;
+}
+
+static int
+convert_mono_to_stereo_8(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ return convert_mono_to_stereo(buf, data, length, FALSE);
+}
+
+static int
+convert_mono_to_stereo_16(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ return convert_mono_to_stereo(buf, data, length, TRUE);
+}
+
+static int
+convert_stereo_to_mono_u8(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint8 *output = *data, *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++) {
+ guint16 tmp;
+ tmp = *input++;
+ tmp += *input++;
+ *output++ = tmp / 2;
+ }
+ return length / 2;
+}
+static int
+convert_stereo_to_mono_s8(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ gint8 *output = *data, *input = *data;
+ int i;
+ for (i = 0; i < length / 2; i++) {
+ gint16 tmp;
+ tmp = *input++;
+ tmp += *input++;
+ *output++ = tmp / 2;
+ }
+ return length / 2;
+}
+static int
+convert_stereo_to_mono_u16le(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint16 *output = *data, *input = *data;
+ int i;
+ for (i = 0; i < length / 4; i++) {
+ guint32 tmp;
+ guint16 stmp;
+ tmp = GUINT16_FROM_LE(*input);
+ input++;
+ tmp += GUINT16_FROM_LE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GUINT16_TO_LE(stmp);
+ }
+ return length / 2;
+}
+
+static int
+convert_stereo_to_mono_u16be(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ guint16 *output = *data, *input = *data;
+ int i;
+ for (i = 0; i < length / 4; i++) {
+ guint32 tmp;
+ guint16 stmp;
+ tmp = GUINT16_FROM_BE(*input);
+ input++;
+ tmp += GUINT16_FROM_BE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GUINT16_TO_BE(stmp);
+ }
+ return length / 2;
+}
+
+static int
+convert_stereo_to_mono_s16le(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ gint16 *output = *data, *input = *data;
+ int i;
+ for (i = 0; i < length / 4; i++) {
+ gint32 tmp;
+ gint16 stmp;
+ tmp = GINT16_FROM_LE(*input);
+ input++;
+ tmp += GINT16_FROM_LE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GINT16_TO_LE(stmp);
+ }
+ return length / 2;
+}
+
+static int
+convert_stereo_to_mono_s16be(struct xmms_convert_buffers *buf,
+ void **data, int length)
+{
+ gint16 *output = *data, *input = *data;
+ int i;
+ for (i = 0; i < length / 4; i++) {
+ gint32 tmp;
+ gint16 stmp;
+ tmp = GINT16_FROM_BE(*input);
+ input++;
+ tmp += GINT16_FROM_BE(*input);
+ input++;
+ stmp = tmp / 2;
+ *output++ = GINT16_TO_BE(stmp);
+ }
+ return length / 2;
+}
+
+convert_channel_func_t
+xmms_convert_get_channel_func(AFormat fmt, int output, int input)
+{
+ fmt = unnativize(fmt);
+
+ if (output == input)
+ return NULL;
+
+ if (input == 1 && output == 2)
+ switch (fmt) {
+ case FMT_U8:
+ case FMT_S8:
+ return convert_mono_to_stereo_8;
+ case FMT_U16_LE:
+ case FMT_U16_BE:
+ case FMT_S16_LE:
+ case FMT_S16_BE:
+ return convert_mono_to_stereo_16;
+ default:
+ g_warning("Unknown format: %d" "No conversion available.", fmt);
+ return NULL;
+ }
+ if (input == 2 && output == 1)
+ switch (fmt) {
+ case FMT_U8:
+ return convert_stereo_to_mono_u8;
+ case FMT_S8:
+ return convert_stereo_to_mono_s8;
+ case FMT_U16_LE:
+ return convert_stereo_to_mono_u16le;
+ case FMT_U16_BE:
+ return convert_stereo_to_mono_u16be;
+ case FMT_S16_LE:
+ return convert_stereo_to_mono_s16le;
+ case FMT_S16_BE:
+ return convert_stereo_to_mono_s16be;
+ default:
+ g_warning("Unknown format: %d. "
+ "No conversion available.", fmt);
+ return NULL;
+
+ }
+
+ g_warning("Input has %d channels, soundcard uses %d channels\n"
+ "No conversion is available", input, output);
+ return NULL;
+}
+
+
+#define RESAMPLE_STEREO(sample_type, bswap) \
+ const int shift = sizeof (sample_type); \
+ int i, in_samples, out_samples, x, delta; \
+ sample_type *inptr = *data, *outptr; \
+ guint nlen = (((length >> shift) * ofreq) / ifreq); \
+ void *nbuf; \
+ if (nlen == 0) \
+ return 0; \
+ nlen <<= shift; \
+ if (bswap) \
+ convert_swap_endian(NULL, data, length); \
+ nbuf = convert_get_buffer(&buf->freq_buffer, nlen); \
+ outptr = nbuf; \
+ in_samples = length >> shift; \
+ out_samples = nlen >> shift; \
+ delta = (in_samples << 12) / out_samples; \
+ for (x = 0, i = 0; i < out_samples; i++) \
+ { \
+ int x1, frac; \
+ x1 = (x >> 12) << 12; \
+ frac = x - x1; \
+ *outptr++ = \
+ ((inptr[(x1 >> 12) << 1] * \
+ ((1<<12) - frac) + \
+ inptr[((x1 >> 12) + 1) << 1] * \
+ frac) >> 12); \
+ *outptr++ = \
+ ((inptr[((x1 >> 12) << 1) + 1] * \
+ ((1<<12) - frac) + \
+ inptr[(((x1 >> 12) + 1) << 1) + 1] * \
+ frac) >> 12); \
+ x += delta; \
+ } \
+ if (bswap) \
+ convert_swap_endian(NULL, &nbuf, nlen); \
+ *data = nbuf; \
+ return nlen; \
+
+
+#define RESAMPLE_MONO(sample_type, bswap) \
+ const int shift = sizeof (sample_type) - 1; \
+ int i, x, delta, in_samples, out_samples; \
+ sample_type *inptr = *data, *outptr; \
+ guint nlen = (((length >> shift) * ofreq) / ifreq); \
+ void *nbuf; \
+ if (nlen == 0) \
+ return 0; \
+ nlen <<= shift; \
+ if (bswap) \
+ convert_swap_endian(NULL, data, length); \
+ nbuf = convert_get_buffer(&buf->freq_buffer, nlen); \
+ outptr = nbuf; \
+ in_samples = length >> shift; \
+ out_samples = nlen >> shift; \
+ delta = ((length >> shift) << 12) / out_samples; \
+ for (x = 0, i = 0; i < out_samples; i++) \
+ { \
+ int x1, frac; \
+ x1 = (x >> 12) << 12; \
+ frac = x - x1; \
+ *outptr++ = \
+ ((inptr[x1 >> 12] * ((1<<12) - frac) + \
+ inptr[(x1 >> 12) + 1] * frac) >> 12); \
+ x += delta; \
+ } \
+ if (bswap) \
+ convert_swap_endian(NULL, &nbuf, nlen); \
+ *data = nbuf; \
+ return nlen; \
+
+static int
+convert_resample_stereo_s16ne(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_STEREO(gint16, FALSE);
+}
+
+static int
+convert_resample_stereo_s16ae(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_STEREO(gint16, TRUE);
+}
+
+static int
+convert_resample_stereo_u16ne(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_STEREO(guint16, FALSE);
+}
+
+static int
+convert_resample_stereo_u16ae(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_STEREO(guint16, TRUE);
+}
+
+static int
+convert_resample_mono_s16ne(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_MONO(gint16, FALSE);
+}
+
+static int
+convert_resample_mono_s16ae(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_MONO(gint16, TRUE);
+}
+
+static int
+convert_resample_mono_u16ne(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_MONO(guint16, FALSE);
+}
+
+static int
+convert_resample_mono_u16ae(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_MONO(guint16, TRUE);
+}
+
+static int
+convert_resample_stereo_u8(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_STEREO(guint8, FALSE);
+}
+
+static int
+convert_resample_mono_u8(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_MONO(guint8, FALSE);
+}
+
+static int
+convert_resample_stereo_s8(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_STEREO(gint8, FALSE);
+}
+
+static int
+convert_resample_mono_s8(struct xmms_convert_buffers *buf,
+ void **data, int length, int ifreq, int ofreq)
+{
+ RESAMPLE_MONO(gint8, FALSE);
+}
+
+
+convert_freq_func_t
+xmms_convert_get_frequency_func(AFormat fmt, int channels)
+{
+ fmt = unnativize(fmt);
+ g_message("fmt %d, channels: %d", fmt, channels);
+
+ if (channels < 1 || channels > 2) {
+ g_warning("Unsupported number of channels: %d. "
+ "Resample function not available", channels);
+ return NULL;
+ }
+ if ((IS_BIG_ENDIAN && fmt == FMT_U16_BE) ||
+ (!IS_BIG_ENDIAN && fmt == FMT_U16_LE)) {
+ if (channels == 1)
+ return convert_resample_mono_u16ne;
+ else
+ return convert_resample_stereo_u16ne;
+ }
+ if ((IS_BIG_ENDIAN && fmt == FMT_S16_BE) ||
+ (!IS_BIG_ENDIAN && fmt == FMT_S16_LE)) {
+ if (channels == 1)
+ return convert_resample_mono_s16ne;
+ else
+ return convert_resample_stereo_s16ne;
+ }
+ if ((!IS_BIG_ENDIAN && fmt == FMT_U16_BE) ||
+ (IS_BIG_ENDIAN && fmt == FMT_U16_LE)) {
+ if (channels == 1)
+ return convert_resample_mono_u16ae;
+ else
+ return convert_resample_stereo_u16ae;
+ }
+ if ((!IS_BIG_ENDIAN && fmt == FMT_S16_BE) ||
+ (IS_BIG_ENDIAN && fmt == FMT_S16_LE)) {
+ if (channels == 1)
+ return convert_resample_mono_s16ae;
+ else
+ return convert_resample_stereo_s16ae;
+ }
+ if (fmt == FMT_U8) {
+ if (channels == 1)
+ return convert_resample_mono_u8;
+ else
+ return convert_resample_stereo_u8;
+ }
+ if (fmt == FMT_S8) {
+ if (channels == 1)
+ return convert_resample_mono_s8;
+ else
+ return convert_resample_stereo_s8;
+ }
+ g_warning("Resample function not available" "Format %d.", fmt);
+ return NULL;
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xconvert.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2003 Haavard Kvaalen <havardk at xmms.org>
+ *
+ * Licensed under GNU LGPL version 2.
+ */
+
+#include <beep/plugin.h>
+
+void convert_free_buffer(void);
+
+struct xmms_convert_buffers;
+
+struct xmms_convert_buffers *xmms_convert_buffers_new(void);
+/*
+ * Free the data assosiated with the buffers, without destroying the
+ * context. The context can be reused.
+ */
+void xmms_convert_buffers_free(struct xmms_convert_buffers *buf);
+void xmms_convert_buffers_destroy(struct xmms_convert_buffers *buf);
+
+
+typedef int (*convert_func_t) (struct xmms_convert_buffers * buf,
+ void **data, int length);
+typedef int (*convert_channel_func_t) (struct xmms_convert_buffers * buf,
+ void **data, int length);
+typedef int (*convert_freq_func_t) (struct xmms_convert_buffers * buf,
+ void **data, int length, int ifreq,
+ int ofreq);
+
+
+convert_func_t xmms_convert_get_func(AFormat output, AFormat input);
+convert_channel_func_t xmms_convert_get_channel_func(AFormat fmt,
+ int output,
+ int input);
+convert_freq_func_t xmms_convert_get_frequency_func(AFormat fmt,
+ int channels);
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.c 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.c 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,372 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
+ * file for a list of people on the GTK+ Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * Small modification of the entry widget where keyboard navigation
+ * works even when the entry is not editable.
+ * Copyright 2003 Haavard Kvaalen <havardk at xmms.org>
+ */
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "xentry.h"
+
+static gint gtk_entry_key_press(GtkWidget * widget, GdkEventKey * event);
+static void gtk_entry_move_cursor(GtkOldEditable * editable, int x);
+
+static void gtk_move_forward_character(GtkEntry * entry);
+static void gtk_move_backward_character(GtkEntry * entry);
+static void gtk_move_forward_word(GtkEntry * entry);
+static void gtk_move_backward_word(GtkEntry * entry);
+static void gtk_move_beginning_of_line(GtkEntry * entry);
+static void gtk_move_end_of_line(GtkEntry * entry);
+
+
+static const GtkTextFunction control_keys[26] = {
+ (GtkTextFunction) gtk_move_beginning_of_line, /* a */
+ (GtkTextFunction) gtk_move_backward_character, /* b */
+ (GtkTextFunction) gtk_editable_copy_clipboard, /* c */
+ NULL, /* d */
+ (GtkTextFunction) gtk_move_end_of_line, /* e */
+ (GtkTextFunction) gtk_move_forward_character, /* f */
+};
+
+static const GtkTextFunction alt_keys[26] = {
+ NULL, /* a */
+ (GtkTextFunction) gtk_move_backward_word, /* b */
+ NULL, /* c */
+ NULL, /* d */
+ NULL, /* e */
+ (GtkTextFunction) gtk_move_forward_word, /* f */
+};
+
+
+static void
+xmms_entry_class_init(GtkEntryClass * class)
+{
+ GtkWidgetClass *widget_class = (GtkWidgetClass *) class;
+
+ widget_class->key_press_event = gtk_entry_key_press;
+}
+
+GtkType
+xmms_entry_get_type(void)
+{
+ static GtkType entry_type = 0;
+
+ if (!entry_type) {
+ static const GtkTypeInfo entry_info = {
+ "XmmsEntry",
+ sizeof(XmmsEntry),
+ sizeof(XmmsEntryClass),
+ (GtkClassInitFunc) xmms_entry_class_init,
+ NULL,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
+ };
+
+ entry_type = gtk_type_unique(GTK_TYPE_ENTRY, &entry_info);
+ }
+
+ return entry_type;
+}
+
+GtkWidget *
+xmms_entry_new(void)
+{
+ return GTK_WIDGET(gtk_type_new(XMMS_TYPE_ENTRY));
+}
+
+static int
+gtk_entry_key_press(GtkWidget * widget, GdkEventKey * event)
+{
+ GtkEntry *entry;
+ GtkOldEditable *editable;
+
+ int return_val;
+ guint initial_pos, sel_start_pos, sel_end_pos;
+ int extend_selection;
+ gboolean extend_start = FALSE;
+
+ g_return_val_if_fail(widget != NULL, FALSE);
+ g_return_val_if_fail(XMMS_IS_ENTRY(widget), FALSE);
+ g_return_val_if_fail(event != NULL, FALSE);
+
+ entry = GTK_ENTRY(widget);
+ editable = GTK_OLD_EDITABLE(widget);
+ return_val = FALSE;
+
+ if (editable->editable)
+ /* Let the regular entry handler do it */
+ return FALSE;
+
+ initial_pos = gtk_editable_get_position(GTK_EDITABLE(editable));
+
+ extend_selection = event->state & GDK_SHIFT_MASK;
+
+ sel_start_pos = editable->selection_start_pos;
+ sel_end_pos = editable->selection_end_pos;
+
+ if (extend_selection) {
+ if (sel_start_pos == sel_end_pos) {
+ sel_start_pos = editable->current_pos;
+ sel_end_pos = editable->current_pos;
+ }
+
+ extend_start = (editable->current_pos == sel_start_pos);
+ }
+
+ switch (event->keyval) {
+ case GDK_Insert:
+ return_val = TRUE;
+ if (event->state & GDK_CONTROL_MASK)
+ gtk_editable_copy_clipboard(GTK_EDITABLE(editable));
+ break;
+ case GDK_Home:
+ return_val = TRUE;
+ gtk_move_beginning_of_line(entry);
+ break;
+ case GDK_End:
+ return_val = TRUE;
+ gtk_move_end_of_line(entry);
+ break;
+ case GDK_Left:
+ return_val = TRUE;
+ if (!extend_selection && sel_start_pos != sel_end_pos) {
+ gtk_editable_set_position(GTK_EDITABLE(editable),
+ MIN(sel_start_pos, sel_end_pos));
+ /* Force redraw below */
+ initial_pos = -1;
+ }
+ else
+ gtk_move_backward_character(entry);
+ break;
+ case GDK_Right:
+ return_val = TRUE;
+ if (!extend_selection && sel_start_pos != sel_end_pos) {
+ gtk_editable_set_position(GTK_EDITABLE(editable),
+ MAX(sel_start_pos, sel_end_pos));
+ /* Force redraw below */
+ initial_pos = -1;
+ }
+ else
+ gtk_move_forward_character(entry);
+ break;
+ case GDK_Return:
+ return_val = TRUE;
+ gtk_widget_activate(widget);
+ break;
+ default:
+ if ((event->keyval >= 0x20) && (event->keyval <= 0xFF)) {
+ int key = event->keyval;
+
+ if (key >= 'A' && key <= 'Z')
+ key -= 'A' - 'a';
+
+ if (key >= 'a' && key <= 'z')
+ key -= 'a';
+ else
+ break;
+
+ if (event->state & GDK_CONTROL_MASK) {
+ if (control_keys[key]) {
+ (*control_keys[key]) (editable, event->time);
+ return_val = TRUE;
+ }
+ break;
+ }
+ else if (event->state & GDK_MOD1_MASK) {
+ if (alt_keys[key]) {
+ (*alt_keys[key]) (editable, event->time);
+ return_val = TRUE;
+ }
+ break;
+ }
+ }
+ }
+
+ if (return_val && (editable->current_pos != initial_pos)) {
+ if (extend_selection) {
+ int cpos = gtk_editable_get_position(GTK_EDITABLE(editable));
+ if (cpos < sel_start_pos)
+ sel_start_pos = cpos;
+ else if (cpos > sel_end_pos)
+ sel_end_pos = cpos;
+ else {
+ if (extend_start)
+ sel_start_pos = cpos;
+ else
+ sel_end_pos = cpos;
+ }
+ }
+ else {
+ sel_start_pos = 0;
+ sel_end_pos = 0;
+ }
+
+ gtk_editable_select_region(GTK_EDITABLE(editable), sel_start_pos,
+ sel_end_pos);
+ }
+
+ return return_val;
+}
+
+static void
+gtk_entry_move_cursor(GtkOldEditable * editable, int x)
+{
+ int set, pos = gtk_editable_get_position(GTK_EDITABLE(editable));
+ if (pos + x < 0)
+ set = 0;
+ else
+ set = pos + x;
+ gtk_editable_set_position(GTK_EDITABLE(editable), set);
+}
+
+static void
+gtk_move_forward_character(GtkEntry * entry)
+{
+ gtk_entry_move_cursor(GTK_OLD_EDITABLE(entry), 1);
+}
+
+static void
+gtk_move_backward_character(GtkEntry * entry)
+{
+ gtk_entry_move_cursor(GTK_OLD_EDITABLE(entry), -1);
+}
+
+static void
+gtk_move_forward_word(GtkEntry * entry)
+{
+ GtkOldEditable *editable;
+ GdkWChar *text;
+ int i;
+
+ editable = GTK_OLD_EDITABLE(entry);
+
+ /* Prevent any leak of information */
+ if (!editable->visible) {
+ gtk_editable_set_position(GTK_EDITABLE(entry), -1);
+ return;
+ }
+
+ if (entry->text && (editable->current_pos < entry->text_length)) {
+ text = (GdkWChar *) entry->text;
+ i = editable->current_pos;
+
+/* if ((entry->use_wchar && !gdk_iswalnum(text[i])) ||
+ !isalnum(text[i]))
+ for (; i < entry->text_length; i++)
+ {
+ if (entry->use_wchar)
+ {
+ if (gdk_iswalnum(text[i]))
+ break;
+ else if (isalnum(text[i]))
+ break;
+ }
+ }
+
+ for (; i < entry->text_length; i++)
+ {
+ if (entry->use_wchar)
+ {
+ if (gdk_iswalnum(text[i]))
+ break;
+ else if (isalnum(text[i]))
+ break;
+ }
+ }
+
+*/
+
+ gtk_editable_set_position(GTK_EDITABLE(entry), i);
+ }
+}
+
+static void
+gtk_move_backward_word(GtkEntry * entry)
+{
+ GtkOldEditable *editable;
+ GdkWChar *text;
+ int i;
+
+ editable = GTK_OLD_EDITABLE(entry);
+
+ /* Prevent any leak of information */
+ if (!editable->visible) {
+ gtk_editable_set_position(GTK_EDITABLE(entry), 0);
+ return;
+ }
+
+ if (entry->text && editable->current_pos > 0) {
+ text = (GdkWChar *) entry->text;
+ i = editable->current_pos;
+
+/* if ((entry->use_wchar && !gdk_iswalnum(text[i])) ||
+ !isalnum(text[i]))
+ for (; i >= 0; i--)
+ {
+ if (entry->use_wchar)
+ {
+ if (gdk_iswalnum(text[i]))
+ break;
+ else if (isalnum(text[i]))
+ break;
+ }
+ }
+ for (; i >= 0; i--)
+ {
+ if ((entry->use_wchar && !gdk_iswalnum(text[i])) ||
+ !isalnum(text[i]))
+ {
+ i++;
+ break;
+ }
+ }
+*/
+ if (i < 0)
+ i = 0;
+
+ gtk_editable_set_position(GTK_EDITABLE(entry), i);
+ }
+}
+
+static void
+gtk_move_beginning_of_line(GtkEntry * entry)
+{
+ gtk_editable_set_position(GTK_EDITABLE(entry), 0);
+}
+
+static void
+gtk_move_end_of_line(GtkEntry * entry)
+{
+ gtk_editable_set_position(GTK_EDITABLE(entry), -1);
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.h 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/libbeep/xentry.h 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,64 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
+ * file for a list of people on the GTK+ Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#ifndef XMMS_ENTRY_H
+#define XMMS_ENTRY_H
+
+
+#include <gdk/gdk.h>
+#include <gtk/gtkentry.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#define XMMS_TYPE_ENTRY (xmms_entry_get_type())
+#define XMMS_ENTRY(obj) (GTK_CHECK_CAST((obj), XMMS_TYPE_ENTRY, XmmsEntry))
+#define XMMS_ENTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST((klass), XMMS_TYPE_ENTRY, XmmsEntryClass))
+#define XMMS_IS_ENTRY(obj) (GTK_CHECK_TYPE((obj), XMMS_TYPE_ENTRY))
+#define XMMS_IS_ENTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE((klass), XMMS_TYPE_ENTRY))
+
+
+ typedef struct _XmmsEntry XmmsEntry;
+ typedef struct _XmmsEntryClass XmmsEntryClass;
+
+ struct _XmmsEntry {
+ GtkEntry entry;
+ };
+
+ struct _XmmsEntryClass {
+ GtkEntryClass parent_class;
+ };
+
+ GtkType xmms_entry_get_type(void);
+ GtkWidget *xmms_entry_new(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __GTK_ENTRY_H__ */
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ltmain.sh
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ltmain.sh 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/ltmain.sh 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,6496 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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., 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.
+
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5.16
+TIMESTAMP=" (1.1220.2.235 2005/04/25 18:13:26)"
+
+# 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
+
+# Check that we have a working $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, and then maybe $echo will work.
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit $EXIT_SUCCESS
+fi
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+ SP2NL="tr '\100' '\n'"
+ NL2SP="tr '\r\n' '\100\100'"
+ ;;
+ *) # Assume ASCII based system
+ SP2NL="tr '\040' '\012'"
+ NL2SP="tr '\015\012' '\040\040'"
+ ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+ save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ $echo "$modename: not configured to build any kind of library" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit $EXIT_FAILURE
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+quote_scanset='[[~#^*{};<>?'"'"' ]'
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+ if test "X$win32_nmres" = "Ximport" ; then
+ win32_libid_type="x86 archive import"
+ else
+ win32_libid_type="x86 archive static"
+ fi
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ CC_quoted="$CC_quoted $arg"
+ done
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ CC_quoted="$CC_quoted $arg"
+ done
+ case "$@ " in
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit $EXIT_FAILURE
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+
+ $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
+ $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
+ exit $EXIT_FAILURE
+ fi
+}
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+ my_status=""
+
+ $show "${rm}r $my_gentop"
+ $run ${rm}r "$my_gentop"
+ $show "$mkdir $my_gentop"
+ $run $mkdir "$my_gentop"
+ my_status=$?
+ if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
+ exit $my_status
+ fi
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
+ my_xdir="$my_gentop/$my_xlib"
+
+ $show "${rm}r $my_xdir"
+ $run ${rm}r "$my_xdir"
+ $show "$mkdir $my_xdir"
+ $run $mkdir "$my_xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$my_xdir"; then
+ exit $status
+ fi
+ case $host in
+ *-darwin*)
+ $show "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ if test -z "$run"; then
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
+ darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ $show "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we have a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+ lipo -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ ${rm}r unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd "$darwin_orig_dir"
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ fi # $run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ func_extract_archives_result="$my_oldobjs"
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+ arg="$1"
+ shift
+
+ case $arg in
+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ execute_dlfiles)
+ execute_dlfiles="$execute_dlfiles $arg"
+ ;;
+ tag)
+ tagname="$arg"
+ preserve_args="${preserve_args}=$arg"
+
+ # Check whether tagname contains only valid characters
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ $echo "$progname: invalid tag name: $tagname" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ case $tagname in
+ CC)
+ # Don't test for the "default" C tag, as we know, it's there, but
+ # not specially marked.
+ ;;
+ *)
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
+ taglist="$taglist $tagname"
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+ else
+ $echo "$progname: ignoring unknown tag $tagname" 1>&2
+ fi
+ ;;
+ esac
+ ;;
+ *)
+ eval "$prev=\$arg"
+ ;;
+ esac
+
+ prev=
+ prevopt=
+ continue
+ fi
+
+ # Have we seen a non-optional argument yet?
+ case $arg in
+ --help)
+ show_help=yes
+ ;;
+
+ --version)
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo
+ $echo "Copyright (C) 2005 Free Software Foundation, Inc."
+ $echo "This is free software; see the source for copying conditions. There is NO"
+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit $?
+ ;;
+
+ --config)
+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+ done
+ exit $?
+ ;;
+
+ --debug)
+ $echo "$progname: enabling shell trace mode"
+ set -x
+ preserve_args="$preserve_args $arg"
+ ;;
+
+ --dry-run | -n)
+ run=:
+ ;;
+
+ --features)
+ $echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $echo "enable shared libraries"
+ else
+ $echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $echo "enable static libraries"
+ else
+ $echo "disable static libraries"
+ fi
+ exit $?
+ ;;
+
+ --finish) mode="finish" ;;
+
+ --mode) prevopt="--mode" prev=mode ;;
+ --mode=*) mode="$optarg" ;;
+
+ --preserve-dup-deps) duplicate_deps="yes" ;;
+
+ --quiet | --silent)
+ show=:
+ preserve_args="$preserve_args $arg"
+ ;;
+
+ --tag) prevopt="--tag" prev=tag ;;
+ --tag=*)
+ set tag "$optarg" ${1+"$@"}
+ shift
+ prev=tag
+ preserve_args="$preserve_args --tag"
+ ;;
+
+ -dlopen)
+ prevopt="-dlopen"
+ prev=execute_dlfiles
+ ;;
+
+ -*)
+ $echo "$modename: unrecognized option \`$arg'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+
+ *)
+ nonopt="$arg"
+ break
+ ;;
+ esac
+done
+
+if test -n "$prevopt"; then
+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+ # Infer the operation mode.
+ if test -z "$mode"; then
+ $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+ $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
+ case $nonopt in
+ *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+ mode=link
+ for arg
+ do
+ case $arg in
+ -c)
+ mode=compile
+ break
+ ;;
+ esac
+ done
+ ;;
+ *db | *dbx | *strace | *truss)
+ mode=execute
+ ;;
+ *install*|cp|mv)
+ mode=install
+ ;;
+ *rm)
+ mode=uninstall
+ ;;
+ *)
+ # If we have no mode, but dlfiles were specified, then do execute mode.
+ test -n "$execute_dlfiles" && mode=execute
+
+ # Just use the default operation mode.
+ if test -z "$mode"; then
+ if test -n "$nonopt"; then
+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+ else
+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+ fi
+ fi
+ ;;
+ esac
+ fi
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$modename --help --mode=$mode' for more information."
+
+ # These modes are in order of execution frequency so that they run quickly.
+ case $mode in
+ # libtool compile mode
+ compile)
+ modename="$modename: compile"
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+
+ for arg
+ do
+ case "$arg_mode" in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ if test -n "$libobj" ; then
+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ arg_mode=target
+ continue
+ ;;
+
+ -static | -prefer-pic | -prefer-non-pic)
+ later="$later $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ lastarg="$lastarg $arg"
+ done
+ IFS="$save_ifs"
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ * )
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+ case $lastarg in
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, and some SunOS ksh mistreat backslash-escaping
+ # in scan sets (worked around with variable expansion),
+ # and furthermore cannot handle '|' '&' '(' ')' in scan sets
+ # at all, so we specify them separately.
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ lastarg="\"$lastarg\""
+ ;;
+ esac
+
+ base_compile="$base_compile $lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ $echo "$modename: you must specify an argument for -Xcompile"
+ exit $EXIT_FAILURE
+ ;;
+ target)
+ $echo "$modename: you must specify a target with \`-o'" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ *)
+ # Get the name of the library object.
+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ xform='[cCFSifmso]'
+ case $libobj in
+ *.ada) xform=ada ;;
+ *.adb) xform=adb ;;
+ *.ads) xform=ads ;;
+ *.asm) xform=asm ;;
+ *.c++) xform=c++ ;;
+ *.cc) xform=cc ;;
+ *.ii) xform=ii ;;
+ *.class) xform=class ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+ *.f90) xform=f90 ;;
+ *.for) xform=for ;;
+ *.java) xform=java ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+ case $libobj in
+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *)
+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -static)
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
+ case $qlibobj in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ qlibobj="\"$qlibobj\"" ;;
+ esac
+ if test "X$libobj" != "X$qlibobj"; then
+ $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
+ exit $EXIT_FAILURE
+ fi
+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$obj"; then
+ xdir=
+ else
+ xdir=$xdir/
+ fi
+ lobj=${xdir}$objdir/$objname
+
+ if test -z "$base_compile"; then
+ $echo "$modename: you must specify a compilation command" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ $run $rm $removelist
+ trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ removelist="$removelist $output_obj $lockfile"
+ trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $run ln "$progpath" "$lockfile" 2>/dev/null; do
+ $show "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+ $echo "$srcfile" > "$lockfile"
+ fi
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+ qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
+ case $qsrcfile in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ qsrcfile="\"$qsrcfile\"" ;;
+ esac
+
+ $run $rm "$libobj" "${libobj}T"
+
+ # Create a libtool object file (analogous to a ".la" file),
+ # but don't create it if we're doing a dry run.
+ test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ if test ! -d "${xdir}$objdir"; then
+ $show "$mkdir ${xdir}$objdir"
+ $run $mkdir ${xdir}$objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $status
+ fi
+ fi
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ $run $rm "$lobj" "$output_obj"
+
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ test -n "$output_obj" && $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ $show "$mv $output_obj $lobj"
+ if $run $mv $output_obj $lobj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the PIC object to the libtool object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ else
+ # No PIC object so indicate it doesn't exist in the libtool
+ # object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ $run $rm "$obj" "$output_obj"
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ $show "$mv $output_obj $obj"
+ if $run $mv $output_obj $obj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+ else
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+ fi
+
+ $run $mv "${libobj}T" "${libobj}"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $run $rm "$lockfile"
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ # libtool link mode
+ link | relink)
+ modename="$modename: link"
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args="$nonopt"
+ base_compile="$nonopt $@"
+ compile_command="$nonopt"
+ finalize_command="$nonopt"
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -all-static | -static)
+ if test "X$arg" = "X-all-static"; then
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ else
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ fi
+ build_libtool_libs=no
+ build_old_libs=yes
+ prefer_static_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ shift
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+ ;;
+ *) qarg=$arg ;;
+ esac
+ libtool_args="$libtool_args $qarg"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ compile_command="$compile_command @OUTPUT@"
+ finalize_command="$finalize_command @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ compile_command="$compile_command @SYMFILE@"
+ finalize_command="$finalize_command @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ if test ! -f "$arg"; then
+ $echo "$modename: symbol file \`$arg' does not exist"
+ exit $EXIT_FAILURE
+ fi
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat $save_arg`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit $EXIT_FAILURE
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ done
+ else
+ $echo "$modename: link input file \`$save_arg' does not exist"
+ exit $EXIT_FAILURE
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ compile_command="$compile_command $wl$qarg"
+ finalize_command="$finalize_command $wl$qarg"
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ darwin_framework)
+ compiler_flags="$compiler_flags $arg"
+ prev=
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ compile_command="$compile_command $link_static_flag"
+ finalize_command="$finalize_command $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+ continue
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: more than one -exported-symbols argument is not allowed"
+ exit $EXIT_FAILURE
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=darwin_framework
+ compiler_flags="$compiler_flags $arg"
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-mingw* | *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs -framework System"
+ continue
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ -model)
+ compile_command="$compile_command $arg"
+ compiler_flags="$compiler_flags $arg"
+ finalize_command="$finalize_command $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+ compiler_flags="$compiler_flags $arg"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
+ # -q* pass through compiler args for the IBM compiler
+ # -m* pass through architecture-specific compiler args for GCC
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*)
+
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ if test "$with_gcc" = "yes" ; then
+ compiler_flags="$compiler_flags $arg"
+ fi
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -static)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Wl,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $wl$flag"
+ linker_flags="$linker_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit $EXIT_FAILURE
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+ done # argument parsing loop
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$output_objdir" = "X$output"; then
+ output_objdir="$objdir"
+ else
+ output_objdir="$output_objdir/$objdir"
+ fi
+ # Create the object directory.
+ if test ! -d "$output_objdir"; then
+ $show "$mkdir $output_objdir"
+ $run $mkdir $output_objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $status
+ fi
+ fi
+
+ # Determine the type of output
+ case $output in
+ "")
+ $echo "$modename: you must specify an output file" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplications in $postdeps and $predeps
+ duplicate_compiler_generated_deps=yes
+ ;;
+ *)
+ duplicate_compiler_generated_deps=$duplicate_deps
+ ;;
+ esac
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+ case $linkmode in
+ lib)
+ passes="conv link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+ for pass in $passes; do
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $deplib"
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+ continue
+ fi
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if (${SED} -e '2q' $lib |
+ grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ library_names=
+ old_library=
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ *)
+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ if eval $echo \"$deplib\" 2>/dev/null \
+ | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=yes
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=yes
+ ;;
+ esac
+ if test "$valid_a_lib" != yes; then
+ $echo
+ $echo "*** Warning: Trying to link with static lib archive $deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because the file extensions .$libext of this argument makes me believe"
+ $echo "*** that it is just a static archive that I should not used here."
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the"
+ $echo "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi
+ fi # $installed = yes
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath " in
+ *" $dir "*) ;;
+ *" $absdir "*) ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on
+ # some systems (darwin)
+ if test "$shouldnotlink" = yes && test "$pass" = link ; then
+ $echo
+ if test "$linkmode" = prog; then
+ $echo "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $echo "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $echo "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+ libname=`eval \\$echo \"$libname_spec\"`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw*)
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+ newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ $show "extracting exported symbol list from \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ cmds=$extract_expsyms_cmds
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ $show "generating import library for \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ cmds=$old_archive_from_expsyms_cmds
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a module then we can not link against
+ # it, someone is ignoring the new warnings I added
+ if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
+ $echo "** Warning, lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $echo
+ $echo "** And there doesn't seem to be a static archive available"
+ $echo "** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ $echo "$modename: configuration error: unsupported hardcode properties"
+ exit $EXIT_FAILURE
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes && \
+ test "$hardcode_minus_L" != yes && \
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $echo
+ $echo "*** Warning: This system can not link to static lib archive $lib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $echo "*** But as you try to build a module library, libtool will still create "
+ $echo "*** a static module, that should work as long as the dlopening application"
+ $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$deplib" && dir="."
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ if test "$absdir" != "$libdir"; then
+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+ fi
+ path="$absdir"
+ fi
+ depdepl=
+ case $host in
+ *-*-darwin*)
+ # we do not want to link against static libs,
+ # but need to link against shared
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$path/$depdepl" ; then
+ depdepl="$path/$depdepl"
+ fi
+ # do not add paths which are already there
+ case " $newlib_search_path " in
+ *" $path "*) ;;
+ *) newlib_search_path="$newlib_search_path $path";;
+ esac
+ fi
+ path=""
+ ;;
+ *)
+ path="-L$path"
+ ;;
+ esac
+ ;;
+ -l*)
+ case $host in
+ *-*-darwin*)
+ # Again, we only want to link against shared libraries
+ eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+ for tmp in $newlib_search_path ; do
+ if test -f "$tmp/lib$tmp_libs.dylib" ; then
+ eval depdepl="$tmp/lib$tmp_libs.dylib"
+ break
+ fi
+ done
+ path=""
+ ;;
+ *) continue ;;
+ esac
+ ;;
+ *) continue ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ case " $deplibs " in
+ *" $depdepl "*) ;;
+ *) deplibs="$depdepl $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+ fi
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ if test "$module" = no; then
+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+ exit $EXIT_FAILURE
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
+ $echo "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ if test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+ fi
+
+ set dummy $rpath
+ if test "$#" -gt 2; then
+ $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+ fi
+ install_libdir="$2"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+ fi
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ IFS="$save_ifs"
+
+ if test -n "$8"; then
+ $echo "$modename: too many parameters to \`-version-info'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$2"
+ number_minor="$3"
+ number_revision="$4"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ current=`expr $number_major + $number_minor - 1`
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ esac
+ ;;
+ no)
+ current="$2"
+ revision="$3"
+ age="$4"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+ verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current";
+ ;;
+
+ irix | nonstopux)
+ major=`expr $current - $age + 1`
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ iface=`expr $revision - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ major=.`expr $current - $age`
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ iface=`expr $current - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+
+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+ fi
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$echo "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ if test -n "$removelist"; then
+ $show "${rm}r $removelist"
+ $run ${rm}r $removelist
+ fi
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ for path in $notinst_path; do
+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+ deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+ done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs -framework System"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $rm conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $rm conftest
+ $LTCC -o conftest conftest.c $deplibs
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" -ne "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which I believe you do not have"
+ $echo "*** because a test_compile did reveal that the linker did not use it for"
+ $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $rm conftest
+ $LTCC -o conftest conftest.c $i
+ # Did it work?
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because a test_compile did reveal that the linker did not use this one"
+ $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null \
+ | grep " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test -n "$name" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval $echo \"$potent_lib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+ -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+ done
+ fi
+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
+ | grep . >/dev/null; then
+ $echo
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $echo
+ $echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $echo "*** dependencies of module $libname. Therefore, libtool will create"
+ $echo "*** a static module, that should work as long as the dlopening"
+ $echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $echo "*** The inter-library dependencies that have been dropped here will be"
+ $echo "*** automatically added whenever a program is linked with this library"
+ $echo "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $echo
+ $echo "*** Since this library must not contain undefined symbols,"
+ $echo "*** because either the platform does not support them or"
+ $echo "*** it was explicitly requested with -no-undefined,"
+ $echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ if len=`expr "X$cmd" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ $show "using reloadable object file for export list..."
+ skipped_export=:
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex"; then
+ $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+ $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+ $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ libobjs="$libobjs $func_extract_archives_result"
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise.
+ $echo "creating reloadable object files..."
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ output_la=`$echo "X$output" | $Xsed -e "$basename"`
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ delfiles=
+ last_robj=
+ k=1
+ output=$output_objdir/$output_la-${k}.$objext
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+ if test "X$objlist" = X ||
+ { len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; }; then
+ objlist="$objlist $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ k=`expr $k + 1`
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=$obj
+ len=1
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+ if ${skipped_export-false}; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+ fi
+
+ # Set up a command to remove the reloadable object files
+ # after they are used.
+ i=0
+ while test "$i" -lt "$k"
+ do
+ i=`expr $i + 1`
+ delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
+ done
+
+ $echo "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+
+ # Append the command to remove the reloadable object files
+ # to the just-reset $cmds.
+ eval cmds=\"\$cmds~\$rm $delfiles\"
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+ fi
+
+ case $output in
+ *.lo)
+ if test -n "$objs$old_deplibs"; then
+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ libobj="$output"
+ obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $run $rm $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${obj}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ cmds=$reload_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $run eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ cmds=$reload_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+ esac
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+ fi
+
+ if test "$preload" = yes; then
+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+ test "$dlopen_self_static" = unknown; then
+ $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+ fi
+ fi
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ case $host in
+ *darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ if test "$tagname" = CXX ; then
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ fi
+ ;;
+ esac
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ dlsyms=
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ dlsyms="${outputname}S.c"
+ else
+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+ fi
+ fi
+
+ if test -n "$dlsyms"; then
+ case $dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${outputname}.nm"
+
+ $show "$rm $nlist ${nlist}S ${nlist}T"
+ $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+ # Parse the name list into a source file.
+ $show "creating $output_objdir/$dlsyms"
+
+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ $show "generating symbol list for \`$output'"
+
+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for arg in $progfiles; do
+ $show "extracting global C symbols from \`$arg'"
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $run $rm $export_symbols
+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ else
+ $run eval "${SED} -e 's/\([ ][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ $run eval 'mv "$nlist"T "$nlist"'
+ fi
+ fi
+
+ for arg in $dlprefiles; do
+ $show "extracting global C symbols from \`$arg'"
+ name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+ $run eval '$echo ": $name " >> "$nlist"'
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -z "$run"; then
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $mv "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if grep -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ grep -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+ else
+ $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+ fi
+
+ $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+"
+
+ case $host in
+ *cygwin* | *mingw* )
+ $echo >> "$output_objdir/$dlsyms" "\
+/* DATA imports from DLLs on WIN32 can't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs */
+struct {
+"
+ ;;
+ * )
+ $echo >> "$output_objdir/$dlsyms" "\
+const struct {
+"
+ ;;
+ esac
+
+
+ $echo >> "$output_objdir/$dlsyms" "\
+ const char *name;
+ lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+ $echo >> "$output_objdir/$dlsyms" "\
+ {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ fi
+
+ pic_flag_for_symtable=
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+ esac;;
+ *-*-hpux*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag";;
+ esac
+ esac
+
+ # Now compile the dynamic symbol file.
+ $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+ # Clean up the generated files.
+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+ # Transform the symbol file into the correct name.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ ;;
+ *)
+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ # Replace the output file specification.
+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ $show "$link_command"
+ $run eval "$link_command"
+ status=$?
+
+ # Delete the generated files.
+ if test -n "$dlsyms"; then
+ $show "$rm $output_objdir/${outputname}S.${objext}"
+ $run $rm "$output_objdir/${outputname}S.${objext}"
+ fi
+
+ exit $status
+ fi
+
+ if test -n "$shlibpath_var"; then
+ # We should set the shlibpath_var
+ rpath=
+ for dir in $temp_rpath; do
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*)
+ # Absolute path.
+ rpath="$rpath$dir:"
+ ;;
+ *)
+ # Relative path: add a thisdir entry.
+ rpath="$rpath\$thisdir/$dir:"
+ ;;
+ esac
+ done
+ temp_rpath="$rpath"
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $run $rm $output
+ # Link the executable and exit
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+ $echo "$modename: \`$output' will be relinked during installation" 1>&2
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+
+ # Now create the wrapper script.
+ $show "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $echo for shipping.
+ if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
+ case $progpath in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+ esac
+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if our run command is non-null.
+ if test -z "$run"; then
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ cwrappersource=`$echo ${objdir}/lt-${outputname}.c`
+ cwrapper=`$echo ${output}.exe`
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int i;
+
+ program_name = (char *) xstrdup ((char *) basename (argv[0]));
+ newargz = XMALLOC(char *, argc+2);
+EOF
+
+ cat >> $cwrappersource <<EOF
+ newargz[0] = "$SHELL";
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = fnqualify(argv[0]);
+ /* we know the script has the same name, without the .exe */
+ /* so make sure newargz[1] doesn't end in .exe */
+ strendzap(newargz[1],".exe");
+ for (i = 1; i < argc; i++)
+ newargz[i+1] = xstrdup(argv[i]);
+ newargz[argc+1] = NULL;
+EOF
+
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",newargz);
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void * p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha (name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+ size_t size;
+ char *p;
+ char tmp[LT_PATHMAX + 1];
+
+ assert(path != NULL);
+
+ /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha (path[0]) && path[1] == ':')
+ return xstrdup (path);
+#endif
+ if (IS_DIR_SEPARATOR (path[0]))
+ return xstrdup (path);
+
+ /* prepend the current directory */
+ /* doesn't handle '~' */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+ p = XMALLOC(char, size);
+ sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+ return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert(str != NULL);
+ assert(pat != NULL);
+
+ len = strlen(str);
+ patlen = strlen(pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp(str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+ const char * message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $run $LTCC -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+
+ $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# 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
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variable:
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$echo are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ echo=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$echo works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$echo will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $echo >> $output "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $echo >> $output "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" || \\
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $mkdir \"\$progdir\"
+ else
+ $rm \"\$progdir/\$file\"
+ fi"
+
+ $echo >> $output "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $echo \"\$relink_command_output\" >&2
+ $rm \"\$progdir/\$file\"
+ exit $EXIT_FAILURE
+ fi
+ fi
+
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $rm \"\$progdir/\$program\";
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $rm \"\$progdir/\$file\"
+ fi"
+ else
+ $echo >> $output "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $echo >> $output "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $echo >> $output "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $echo >> $output "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $echo >> $output "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2*)
+ $echo >> $output "\
+ exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $echo >> $output "\
+ exec \$progdir/\$program \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $echo >> $output "\
+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ exit $EXIT_FAILURE
+ fi
+ else
+ # The program doesn't exist.
+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+ \$echo \"This script is just a wrapper for \$program.\" 1>&2
+ $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit $EXIT_FAILURE
+ fi
+fi\
+"
+ chmod +x $output
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $addlibs
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ cmds=$old_archive_from_new_cmds
+ else
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "copying selected object files to avoid basename conflicts..."
+
+ if test -z "$gentop"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ fi
+
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ counter=`expr $counter + 1`
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ $run ln "$obj" "$gentop/$newobj" ||
+ $run cp "$obj" "$gentop/$newobj"
+ oldobjs="$oldobjs $gentop/$newobj"
+ ;;
+ *) oldobjs="$oldobjs $obj" ;;
+ esac
+ done
+ fi
+
+ eval cmds=\"$old_archive_cmds\"
+
+ if len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ $echo "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ for obj in $save_oldobjs
+ do
+ oldobjs="$objlist $obj"
+ objlist="$objlist $obj"
+ eval test_cmds=\"$old_archive_cmds\"
+ if len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ eval cmd=\"$cmd\"
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$generated"; then
+ $show "${rm}r$generated"
+ $run ${rm}r$generated
+ fi
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ $show "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+
+ # Only create the output if not a dry run.
+ if test -z "$run"; then
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+ for lib in $dlfiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ newdlfiles="$newdlfiles $libdir/$name"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlfiles="$newdlfiles $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlprefiles="$newdlprefiles $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $rm $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $echo >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ fi
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+ ;;
+
+ # libtool install mode
+ install)
+ modename="$modename: install"
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+ # Aesthetically quote it.
+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$arg "
+ arg="$1"
+ shift
+ else
+ install_prog=
+ arg="$nonopt"
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog$arg"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest="$arg"
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f) prev="-f" ;;
+ -g) prev="-g" ;;
+ -m) prev="-m" ;;
+ -o) prev="-o" ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*) ;;
+
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest="$arg"
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog $arg"
+ done
+
+ if test -z "$install_prog"; then
+ $echo "$modename: you must specify an install program" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prev' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ $echo "$modename: no file or destination specified" 1>&2
+ else
+ $echo "$modename: you must specify a destination" 1>&2
+ fi
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Strip any trailing slash from the destination.
+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$destdir" = "X$dest" && destdir=.
+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files
+ if test "$#" -gt 2; then
+ $echo "$modename: \`$dest' is not a directory" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ library_names=
+ old_library=
+ relink_command=
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+ test "X$dir" = "X$file/" && dir=
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ if test "$inst_prefix_dir" = "$destdir"; then
+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names
+ if test -n "$2"; then
+ realname="$2"
+ shift
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ $show "$install_prog $dir/$srcname $destdir/$realname"
+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$striplib $destdir/$realname"
+ $run eval "$striplib $destdir/$realname" || exit $?
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ for linkname
+ do
+ if test "$linkname" != "$realname"; then
+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ fi
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ cmds=$postinstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Install the pseudo-library for information purposes.
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ instname="$dir/$name"i
+ $show "$install_prog $instname $destdir/$name"
+ $run eval "$install_prog $instname $destdir/$name" || exit $?
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ if test -n "$destfile"; then
+ $show "$install_prog $file $destfile"
+ $run eval "$install_prog $file $destfile" || exit $?
+ fi
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+ $show "$install_prog $staticobj $staticdest"
+ $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin*|*mingw*)
+ wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+ notinst_deplibs=
+ relink_command=
+
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ # Check the variables that should have been set.
+ if test -z "$notinst_deplibs"; then
+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ # If there is no directory component, then add one.
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ fi
+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ if test "$finalize" = yes && test -z "$run"; then
+ tmpdir="/tmp"
+ test -n "$TMPDIR" && tmpdir="$TMPDIR"
+ tmpdir="$tmpdir/libtool-$$"
+ save_umask=`umask`
+ umask 0077
+ if $mkdir "$tmpdir"; then
+ umask $save_umask
+ else
+ umask $save_umask
+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+ continue
+ fi
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ ${rm}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ $echo "$modename: warning: cannot relink \`$file'" 1>&2
+ fi
+ else
+ # Install the binary that we compiled earlier.
+ file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyways
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+ ;;
+ esac
+ ;;
+ esac
+ $show "$install_prog$stripme $file $destfile"
+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+ test -n "$outputname" && ${rm}r "$tmpdir"
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ $show "$install_prog $file $oldlib"
+ $run eval "$install_prog \$file \$oldlib" || exit $?
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ $show "$old_striplib $oldlib"
+ $run eval "$old_striplib $oldlib" || exit $?
+ fi
+
+ # Do each command in the postinstall commands.
+ cmds=$old_postinstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$future_libdirs"; then
+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+ fi
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ test -n "$run" && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+ ;;
+
+ # libtool finish mode
+ finish)
+ modename="$modename: finish"
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ cmds=$finish_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || admincmds="$admincmds
+ $cmd"
+ done
+ IFS="$save_ifs"
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $run eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ test "$show" = : && exit $EXIT_SUCCESS
+
+ $echo "----------------------------------------------------------------------"
+ $echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $echo " $libdir"
+ done
+ $echo
+ $echo "If you ever happen to want to link against installed libraries"
+ $echo "in a given directory, LIBDIR, you must either use libtool, and"
+ $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ $echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $echo " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $echo " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $echo
+ $echo "See any operating system documentation about shared libraries for"
+ $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ $echo "----------------------------------------------------------------------"
+ exit $EXIT_SUCCESS
+ ;;
+
+ # libtool execute mode
+ execute)
+ modename="$modename: execute"
+
+ # The first argument is the command name.
+ cmd="$nonopt"
+ if test -z "$cmd"; then
+ $echo "$modename: you must specify a COMMAND" 1>&2
+ $echo "$help"
+ exit $EXIT_FAILURE
+ fi
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ if test ! -f "$file"; then
+ $echo "$modename: \`$file' is not a file" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+ ;;
+
+ *)
+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+ args="$args \"$file\""
+ done
+
+ if test -z "$run"; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ if test "${save_LC_ALL+set}" = set; then
+ LC_ALL="$save_LC_ALL"; export LC_ALL
+ fi
+ if test "${save_LANG+set}" = set; then
+ LANG="$save_LANG"; export LANG
+ fi
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
+ fi
+ $echo "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+ ;;
+
+ # libtool clean and uninstall mode
+ clean | uninstall)
+ modename="$modename: $mode"
+ rm="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) rm="$rm $arg"; rmforce=yes ;;
+ -*) rm="$rm $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ if test -z "$rm"; then
+ $echo "$modename: you must specify an RM program" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$dir" = "X$file"; then
+ dir=.
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if (test -L "$file") >/dev/null 2>&1 \
+ || (test -h "$file") >/dev/null 2>&1 \
+ || test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ . $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+ if test "$mode" = uninstall; then
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ cmds=$postuninstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ cmds=$old_postuninstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+ # Read the .lo file
+ . $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" \
+ && test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" \
+ && test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ noexename=`$echo $name|${SED} 's,.exe$,,'`
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ relink_command=
+ . $dir/$noexename
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles || exit_status=1
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ $show "rmdir $dir"
+ $run rmdir $dir >/dev/null 2>&1
+ fi
+ done
+
+ exit $exit_status
+ ;;
+
+ "")
+ $echo "$modename: you must specify a MODE" 1>&2
+ $echo "$generic_help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ if test -z "$exec_cmd"; then
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+ eval exec $exec_cmd
+ exit $EXIT_FAILURE
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+-n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --finish same as \`--mode=finish'
+ --help display this help message and exit
+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
+ --quiet same as \`--silent'
+ --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ --version print version information
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool at gnu.org>."
+ exit $EXIT_SUCCESS
+ ;;
+
+clean)
+ $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+compile)
+ $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -static always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+execute)
+ $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+finish)
+ $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+install)
+ $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+link)
+ $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -static do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+uninstall)
+ $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+*)
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit $?
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ChangeLog
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ChangeLog 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ChangeLog 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,1211 @@
+
+Wed Nov 26 09:20:47 SGT 2003 Chong Kai Xiong <descender at phreaker.net>
+
+ * Makefile.in.in: New file, from gettext-0.12.1.
+
+ * en at boldquot.header: New file, from gettext-0.12.1.
+
+ * en at quot.header: New file, from gettext-0.12.1.
+
+Fri Aug 8 17:12:10 CEST 2003 Håvard Kvålen <havardk at xmms.org>
+
+ * sl.po: New translation by Tadej Panjtar <panjtar at email.si>
+
+ * LINGUAS: Add "sl" (Slovenian).
+
+Wed Jul 16 01:41:20 CEST 2003 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated.
+
+Mon Jul 14 00:34:06 CEST 2003 Håvard Kvålen <havardk at xmms.org>
+
+ * en.po: New "translation". The only things that are translated
+ are non-ascii characters.
+
+ * LINGUAS: Add "en".
+
+Sat Jul 5 02:18:03 CEST 2003 Håvard Kvålen <havardk at xmms.org>
+
+ * LINGUAS: Add Belarusian (be) and Welsh (cy).
+
+ * cy.po: New translation by:
+ Rhoslyn Prys <rhoslyn.prys at meddal.org.uk>
+
+ * be.po: New translation by: Smaliakou Zmicer <damaviku at pisem.net>
+
+ * pt.po: Updated translation by Jorge Costa <Jorgercosta at netc.pt>
+
+ * uk.po: Updated translation by
+ Dmytro Koval'ov <kov at tokyo.email.ne.jp>
+
+Tue Jan 7 23:43:10 CET 2003 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by Hiroshi Takekawa <sian at big.or.jp>.
+
+Wed Dec 11 23:17:10 CET 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * zh_TW.po: Updated translation by
+ Chun-Chung Chen <cjj at u.washington.edu>
+
+Fri Nov 22 22:10:48 BRST 2002 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Sun Oct 27 20:17:45 CET 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * ca.po: Updated translation by
+ Albert Astals Cid <astals11 at terra.es>
+
+ * ro.po: Updated translation by Miºu Moldovan <dumol at go.ro>
+
+ * no.po: Updated translation.
+
+Wed Sep 11 11:25:37 CEST 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * nl.po: Fixed two errors that new gettext's would abort on.
+
+Tue Jul 30 23:24:12 BRT 2002 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Some language names were missing the ':'.
+
+Tue Jul 30 23:04:05 BRT 2002 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Mon Jul 29 12:56:24 CEST 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * ru.po: Updated translation by
+ Alexandr P. Kovalenko <never at nevermind.kiev.ua>
+
+ * nl.po: Updated translation by Bart Coppens <coppensbart at pi.be>
+
+Tue May 21 02:09:36 BRT 2002 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Sun May 12 17:41:35 CEST 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * mk.po: New translation by Stojcev Darko <atom1c at linux.net.mk>
+
+Mon May 6 16:50:28 CEST 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated translation by
+ Terje Bjerkelia <terje at bjerkelia.com>
+
+Wed Apr 10 15:19:22 CEST 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * ru.po: Updated translation by
+ Alexandr P. Kovalenko <never at nevermind.kiev.ua>
+
+Tue Mar 26 15:20:20 CET 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * cs.po: One string updated.
+ Patch by Martin Macok <martin.macok at underground.cz>
+
+2002-03-14 Christian Rose <menthos at menthos.com>
+
+ * sv.po: Changed Swedish translation.
+
+Tue Mar 5 15:47:41 CET 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * es.po: Updated translation by
+ Jordi Mallach <jordi at sindominio.net>
+
+2002-03-03 Christian Rose <menthos at menthos.com>
+
+ * sv.po: Changed Swedish translation.
+
+2002-03-02 Christian Rose <menthos at menthos.com>
+
+ * sv.po: Updated Swedish translation.
+
+Mon Feb 11 13:08:44 CET 2002 Thomas Nilsson <thomas at xmms.org>
+
+ * *.po: Updated copyright year.
+
+Fri Jan 25 18:48:08 CET 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * ru.po: Updated translation by
+ Alexandr P. Kovalenko <never at nevermind.kiev.ua>
+
+Thu Jan 24 19:48:47 BRST 2002 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Sun Jan 20 21:35:24 CET 2002 Håvard Kvålen <havardk at xmms.org>
+
+ * ru.po: Updated translation by
+ Alexandr P. Kovalenko <never at nevermind.kiev.ua>
+
+2002-01-04 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated.
+
+Sat Dec 29 19:36:18 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * fr.po: Updated translation by
+ Arnaud Boissinot <arnaud.boissinot at wanadoo.fr>
+
+2001-12-29 Christian Rose <menthos at menthos.com>
+
+ * POTFILES.in: Sorted.
+ * sv.po: Updated Swedish translation.
+
+Fri Dec 14 22:36:08 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * ro.po: Updated translation by
+ Miºu Moldovan <dumol at go.ro>
+
+ * az.po: Updated translation by
+ Vasif Cabbarli <azerb_linux at hotmail.com>
+
+Tue Dec 11 23:44:35 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * uk.po: Updated translation by Dmytro Koval'ov
+
+ * de.po: Updated translation by
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * ro.po: Updated translation by
+ Miºu Moldovan <dumol at go.ro>
+
+ * tr.po: Updated translation by
+ Ömer Fadýl USTA <omer_fad at hotmail.com>
+
+ * cs.po: Updated translation by
+ Radek Vybiral <Radek.Vybiral at vsb.cz>
+
+ * hu.po: Updated translation by Arpad Biro <biro_arpad at yahoo.com>
+
+ * th.po: Updated translation by
+ Supphachoke Suntiwichaya <webmaster at mrchoke.f2s.com>
+
+Sat Dec 8 12:08:22 BRST 2001 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Fixed inconsistencies in menu translation.
+
+Sat Dec 8 12:11:58 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * zh_TW.po: Updated translation by
+ Chun-Chung Chen <cjj at u.washington.edu>
+
+ * el.po: Updated translation by
+ Thanos Kyritsis <djart at hellug.gr>
+
+ * pl.po: Updated translation by
+ GNOME PL Team <translators at gnome.pl>
+
+ * de.po: Updated translation by
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * hr.po: Updated translation by
+ Vlatko Kosturjak <kost at iname.com>
+
+ * es.po: Updated translation by
+ Jordi Mallach <jordi at sindominio.net>
+
+ * fr.po: Updated translation by
+ Arnaud Boissinot <arnaud.boissinot at wanadoo.fr>
+
+ * gl.po: Updated translation by
+ Alberto García <berto at gpul.org>
+
+ * nn.po: Updated translation by
+ Roy-Magne Mo <rmo at sunnmore.net>
+
+2001-12-07 Christian Rose <menthos at menthos.com>
+
+ * sv.po: Updated Swedish translation.
+
+Tue Dec 4 19:42:25 BRST 2001 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+2001-12-03 Christian Rose <menthos at menthos.com>
+
+ * sv.po: Updated Swedish translation.
+
+2001-11-27 Christian Rose <menthos at menthos.com>
+
+ * sv.po: Updated Swedish translation.
+
+Thu Nov 15 22:06:11 BRST 2001 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Wed Nov 14 00:02:51 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Mon Nov 12 22:44:20 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+Sat Nov 10 22:11:37 BRST 2001 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Sat Nov 10 18:46:14 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+ * pl.po: Updated translation by
+ GNOME PL Team <translators at gnome.pl>
+
+Wed Nov 7 01:26:26 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * th.po: New translation by
+ Supphachoke Suntiwichaya <webmaster at mrchoke.f2s.com>
+
+Fri Sep 21 10:57:54 BRT 2001 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Tue Sep 18 21:03:21 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * es.po: Updated translation by
+ Jordi Mallach <jordi at sindominio.net>
+
+ * tr.po: Updated translation by
+ Ömer Fadýl USTA <omer_fad at hotmail.com>
+
+ * sk.po: Updated translation by Jan Matis <damned at hq.sk>
+
+ * lv.po: Updated translation by Juris Kudiòð <cooker at inbox.lv>
+
+ * ko.po: Updated translation by Jaegeum <baedaron at hananet.net>
+
+ * ga.po: Updated translation by
+ Alastair McKinstry <mckinstry at computer.org>
+
+ * es.po: Updated translation by
+ Juan Manuel García Molina <juanmagm at mail.com>
+
+ * da.po: Updated translation by Keld Simonsen <keld at dkuug.dk>
+
+ * eu.po: New translation by
+ Iñigo Salvador Azurmendi <xalba at euskalnet.net>
+
+ * tg.po: New translation by
+ Dilshod Marupov <abdula at khujandcomptech.dyn.tj> and
+ Roger Kovacs <rkovacs at khujandcomptech.dyn.tj>
+
+ * vi.po: New translation by Trinh Minh Thanh <tmthanh at yahoo.com>
+
+ * nn.po: Fixed one error.
+
+Tue Sep 18 00:28:00 BRT 2001 Juan Carlos C. y Castro <jcastro at vialink.com.br>
+
+ * pt_BR.po: Updated translation.
+
+Sun Aug 26 19:20:02 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * nn.po: New translation by Roy-Magne Mo <rmo at sunnmore.net>.
+
+Sun Aug 19 19:07:04 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * sk.po: Updated translation by
+ Pavol Cvengros <orpheus at hq.alert.sk>
+
+ * hu.po: Updated translation by
+ Arpad Biro <biro_arpad at yahoo.com>
+
+ * es.po: Updated translation by
+ Juan Manuel García Molina <juanmagm at mail.com>
+
+ * eo.po: Updated translation by
+ D. Dale Gulledge <dsplat at rochester.rr.com>
+
+ * no.po: Updated translation by
+ Andreas Bergstrøm <abergstr at halden.net>
+
+Thu Jun 21 01:23:37 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * *.po: Update the bugreport url for all translations.
+ Patch by Thomas Nilsson <thomas at xmms.org>.
+
+Mon Jun 18 18:50:37 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+Wed Jun 13 16:59:34 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * az.po, es.po, fr.po, ko.po, no.po, sk.po: Fixed some typos in
+ menus.
+
+Sun Jun 10 23:20:21 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * pl.po: Updated translation by
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+ * az.po, da.po, es.po, fr.po, ga.po, hr.po, ro.po, uk.po: Fixed
+ errors with menus.
+
+ * no.po: Updated.
+
+Thu Jun 7 18:31:40 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * de.po: Updated translation by
+ Colin Marquardt <colin at marquardt-home.de>
+
+Wed Jun 6 14:15:09 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * hu.po: Commit the right version this time. Update by
+ Arpad Biro <biro_arpad at yahoo.com>
+
+Tue Jun 5 15:44:08 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated.
+
+ * da.po: Updated translation by
+ Nikolaj Berg Amodsen <mr_nba at rapanden.dk>
+
+ * zh_TW.po: File renamed from "zh_TW.Big5.po" and updated by
+ Chun-Chung Chen <cjj at u.washington.edu> and
+ Jouston Huang <jouston at housediy.com>
+
+Sun Jun 3 22:35:40 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * es.po: Updated translation by
+ Jordi Mallach <jordi at sindominio.net>
+
+ * uk.po: Dmytro Kovalov <dmytro.kovalov at nssmb.com>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * hu.po: Updated translation by
+ Arpad Biro <biro_arpad at yahoo.com>
+
+ * az.po: Updated translation by
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+ * lt.po: Updated translation by
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+ * cs.po: Updated translation by
+ Radek Vybiral <Radek.Vybiral at vsb.cz>
+
+ * hr.po: Updated translation by
+ Vlatko Kosturjak <kost at iname.com>
+
+ * tr.po: Updated translation by
+ Ömer Fadýl USTA <omer_fad at hotmail.com>
+
+ * ru.po: Updated translation by
+ Maxim Koshelev <chuchelo at krasu.ru>
+
+ * gl.po: Updated translation by
+ Alberto García <berto at gpul.org>
+
+ * ro.po: Updated translation by Misu Moldovan <dumol at go.ro>
+
+ * sk.po: Updated translation by
+ Pavol Cvengros <orpheus at hq.alert.sk>
+
+ * fr.po: Updated translation by
+ Arnaud Boissinot <arnaud.boissinot at wanadoo.fr>
+
+ * ko.po: Updated translation by
+ Jaegeum Choe <baedaron at hananet.net>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+ * el.po: Updated translation by
+ Kyritsis Athanasios <djart at linux.gr>
+
+Wed May 9 00:52:48 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * *.po: Ran 'make update-po'.
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+Tue Apr 10 17:29:14 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * bg.po: Updated translation by
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+ * az.po: Updated translation by
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+Mon Mar 26 03:36:41 CEST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * sr.po: New translation by Tomislav Jankovic_<tomaja at net.yu>
+
+ * wa.po: Updated translation by
+ Pablo Saratxaga <pablo at mandrakesoft.com>
+
+ * tr.po: Updated translation by
+ Ömer Fadýl USTA <omer_fad at hotmail.com>
+
+ * ko.po: Updated translation by
+ Jaegeum Choe <baedaron at hananet.net>
+
+ * id.po: Updated translation by Budi Rachmanto <rac at techie.com>
+
+ * hr.po: Updated translation by Vlatko Kosturjak <kost at iname.com>
+
+ * de.po: Updated translation by
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * az.po: Updated translation by
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+Tue Mar 20 17:08:41 EST 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated translation.
+
+Tue Mar 20 01:22:44 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Tue Mar 13 22:00:03 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * pt.po: New translation by Jorge Costa <Jorgercosta at netc.pt>
+
+Fri Mar 9 01:47:22 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by
+ Fuad Sabanovic <manijak at telia.com>
+
+ * sk.po: Updated translation by
+ Pavol Cvengros <orpheus at hq.alert.sk>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * lt.po: Updated translation by
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * bg.po: Updated translation by
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+Fri Mar 2 18:32:16 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * tr.po: Updated translation by
+ Ömer Fadýl USTA <omer_fad at hotmail.com>
+
+ * ru.po: Updated translation by Valek Filippov <frob at df.ru>
+
+ * pl.po: Updated translation by
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+ * id.po: New translation by Budi Rachmanto <rac at techie.com>
+
+Fri Feb 16 23:21:53 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * gl.po: Updated translation by Alberto García <berto at gpul.org>
+
+ * wa.po: Updated translation by
+ Pablo Saratxaga <pablo at mandrakesoft.com>
+
+ * tr.po: Updated translation by Nazmi Savga <savga at catlover.com>
+
+ * no.po: Updated translation by
+ Terje Bjerkelia <terje at bjerkelia.com>
+
+ * hr.po: Updated translation by Vlatko Kosturjak <kost at iname.com>
+
+ * az.po: Updated traslation by
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+Wed Feb 7 20:34:54 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * hr.po: Updated translation by Vlatko Kosturjak <kost at iname.com>
+
+ * de.po: Updated translation by
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * da.po: Updated translation by Keld Simonsen <keld at dkuug.dk>
+
+ * cs.po: Updated translation by
+ Radek Vybiral <Radek.Vybiral at vsb.cz>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Thu Jan 4 21:54:46 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Tue Jan 2 00:19:16 CET 2001 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * ru.po: Updated translation by
+ Alexandr P. Kovalenko <never at nevermind.kiev.ua>
+
+Tue Dec 19 18:36:10 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ru.po: Updated translation by
+ Alexandr P. Kovalenko <never at nevermind.kiev.ua>
+
+Sun Dec 10 23:44:00 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * wa.po: Updated translation by
+ Pablo Saratxaga <pablo at mandrakesoft.com>
+
+ * ru.po: Updated translation by
+ Aleksey Smirnov <smi at logic.ru>
+
+ * ga.po: The charset was slightly wrong.
+ Fix by Pablo Saratxaga <pablo at mandrakesoft.com>.
+
+ * es.po: Updated translation by
+ Fabian Mandelbaum <fabman at einstein.com.ar>
+
+ * az.po: Converted to UTF-8. Supposed to work better. Thanks to
+ Pablo Saratxaga <pablo at mandrakesoft.com>
+
+ * no.po: Updated translation by
+ Andreas Bergstrøm <abergstr(at)halden.net>
+
+ * it.po: Fixed a couple of errors. One of them caused segfaults
+ with XMMS 1.2.4.
+
+Wed Nov 29 12:46:20 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * gl.po: New translation by Alberto García <berto at gpul.org>
+
+Mon Nov 27 15:17:08 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * es.po: Fixed a typo.
+
+Mon Nov 27 14:52:43 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ro.po: Updated translation by
+ Miºu Moldovan <dumol at go.ro>
+
+ * sk.po: Updated translation by
+ Pavol Cvengros <orpheus at hq.alert.sk>
+
+ * pl.po: Updated translation by
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+ * no.po: Updated translation by
+ Terje Bjerkelia <terje at bjerkelia.com>
+
+ * lv.po: Updated translation by Vitauts Stochka <vit at dpu.lv>
+
+ * cs.po: Updated translation by
+ Vladimír Marek <vlmarek at volny.cz>
+
+ * ca.po: Updated translation by
+ Quico Llach <tradgnome at softcatala.org>
+
+ * da.po: Some corrections by
+ Kenneth Christiansen <kenneth at gnu.org> and
+ Keld Simonsen <keld at dkuug.dk>
+
+ * az.po: Updated translation by
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+ * it.po: Updated translation by Paolo Lorenzin <pasusu at tin.it>
+
+Tue Nov 21 23:22:02 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * uk.po: Updated translation by
+ Dmytro Koval'ov <kov at tokyo.email.ne.jp>
+
+ * it.po: Updated translation by Paolo Lorenzin <pasusu at tin.it>
+
+ * zh_TW.Big5.po: One correction.
+
+Tue Nov 21 01:34:15 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * zh_TW.Big5.po: Updated translation by
+ Chun-Chung Chen <cjj at u.washington.edu>
+
+ * hu.po: Updated translation by
+ Arpad BIRO <biro_arpad at hotmail.com>
+
+ * de.po: Updated translation by
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * da.po: Updated translation by
+ Nikolaj Berg Amondsen <mr_nba at get2net.dk>
+
+Sun Nov 19 17:08:16 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * lt.po: Updated translation by
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+Fri Nov 17 14:39:39 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ko.po: Updated translation by
+ Man-Yong Lee <yong at linuxkorea.co.kr>
+
+ * bg.po: Updated translation by
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+ * sv.po: Updated translation by
+ Christian Rose <menthos at menthos.com>
+
+Fri Nov 17 00:20:08 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * el.po: Updated translation by
+ Kyritsis Athanasios <djart at linux.gr>
+
+Wed Nov 8 22:07:11 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * tr.po: Updated translation by
+ Nazmi Savga <savga at catlover.com>
+
+ * sv.po: Updated translations by
+ Christian Rose <menthos at menthos.com>
+
+ * pl.po: Updated translation by
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+ * es.po: Updated translation by
+ Fabian Mandelbaum <fabman at einstein.com.ar>
+
+ * az.po: Updated translation by
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+ * zh_CN.GB2312.po: A missing slash was causing crashes on start.
+
+Wed Oct 25 18:41:51 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * uk.po: Updated translation by
+ Dmytro Koval'ov <kov at tokyo.email.ne.jp>
+
+ * ja.po: Updated translation by
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Wed Oct 18 13:35:48 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * tr.po: New translation by Nazmi Savga <savga at catlover.com>
+
+Mon Oct 2 11:37:24 2000 Espen Skoglund <esk at ira.uka.de>
+
+ * ja.po: Update strings for 3DNow! patch:
+ Osamu Kayasono <kayasono at mb.infoweb.ne.jp>
+
+Sun Oct 1 19:45:07 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * da.po: Updated translation by:
+ Nikolaj Berg Amondsen <mr_nba at get2net.dk>
+
+ * ga.po: Updated translation by:
+ Alastair McKinstry <mckinstry at computer.org>
+
+Tue Sep 26 23:03:21 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * it.po: New translation by: Paolo Lorenzin <pasusu at tin.it>
+
+ * az.po: New translation by:
+ Vasif Ismailoglu <azerb_linux at hotmail.com>
+
+ * eo.po: Updated translation by:
+ D. Dale Gulledge <dsplat at rochester.rr.com>
+
+ * sk.po: Updated translation by:
+ Pavol Cvengros <orpheus at hq.alert.sk>
+
+Tue Sep 26 00:40:31 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ko.po: Updated translation by:
+ Byeong-Chan Kim <redhands at linux.sarang.net>
+
+Tue Sep 19 17:11:41 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * cs.po: Update by Vladimír Marek <vlmarek at volny.cz>.
+
+Mon Sep 18 02:03:32 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * lv.po: New translation by: Vitauts Stochka <vit at dpu.lv>
+
+ * af.po: Updated translation by:
+ Schalk W. Cronjé <schalkc at ntaba.co.za>
+
+ * nl.po: Updated translation by:
+ Tom Laermans <sidewinder at linuxfreak.com>
+
+ * ga.po: Updated translaion by:
+ Alastair McKinstry <mckinstry at computer.org>
+
+ * pl.po: Updated translation by:
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+ * ca.po: Updated translation by:
+ Quico Llach <tradgnome at softcatala.org>
+
+ * zh_TW.Big5.po: Fixed two duplicate strings.
+
+Mon Sep 11 23:18:20 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ga.po: New translation by:
+ Alastair McKinstry <mckinstry at computer.org>
+
+ * zh_TW.Big5.po: Updated translation by:
+ Jouston Huang <jouston at housediy.com> and others.
+
+ * zh_CN.GB2312.po: Updated translation by:
+ Danny Zeng <danny at zeng.com.cn>
+
+ * wa.po: Updated translation by:
+ Pablo Saratxaga <pablo at mandrakesoft.com>
+
+ * uk.po: Updated translation by:
+ Dmytro Kovalov <kov at tokyo.email.ne.jp>
+
+ * ru.po: Updated translation by:
+ Maxim Koshelev <mdem at chat.ru>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+ * pl.po: Updated translation by:
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+ * no.po: Updated translation by:
+ Terje Bjerkelia <terje at bjerkelia.com>
+
+ * lt.po: Updated translation by:
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+ * ja.po: Updated translation by:
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+ * hu.po: Updated translation by:
+ Arpad BIRO <biro_arpad at hotmail.com>
+
+ * fr.po: Updated translation by:
+ Eric Fernandez-Bellot <fernandez at cgm.cnrs-gif.fr>
+
+ * es.po: Updated translation by:
+ Fabian Mandelbaum <fabman at einstein.com.ar>
+
+ * el.po: el_GR.po renamed to el.po. Also updated by:
+ Kyritsis Athanasios <djart at linux.gr>
+
+ * de.po: Updated translation by:
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * cs.po: Updated translation by:
+ Radek Vybiral <Radek.Vybiral at vsb.cz>
+
+ * bg.po: Updated translation by:
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+Sun Sep 3 22:24:28 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by:
+ Christian Rose <menthos at menthos.com>
+
+ * *.po: Ran 'make update-po'.
+
+Fri Aug 11 20:20:27 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by:
+ Christian Rose <menthos at menthos.com>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Wed Aug 9 23:54:22 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Wed Aug 9 16:47:33 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by: Thomas Nilsson <thomas at xmms.org>
+
+Mon Aug 7 17:38:26 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by:
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Fri Jul 28 18:39:18 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Fri Jul 14 01:24:03 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by:
+ Christian Rose <menthos at menthos.com>
+
+Tue Jul 4 19:21:59 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * bg.po: Updated translation by:
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+ * cs.po: Updated translation by:
+ Radek Vybiral <Radek.Vybiral at vsb.cz>
+
+Tue Jun 27 16:07:18 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * el_GR.po: New translation by:
+ Kyritsis Athanasios <djart at linux.gr>
+
+ * pl.po: New translation by:
+ Grzegorz Kowal <g_kowal at poczta.onet.pl>
+
+Sat Jun 17 19:54:49 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sv.po: Updated translation by: Thomas Nilsson <thomas at xmms.org>
+
+Sat Jun 17 18:38:14 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * eo.po: New translation by:
+ D. Dale Gulledge <dsplat at rochester.rr.com>
+
+ * hr.po, ja.po, ko.po, ru.po, sv.po, uk.po, wa.po, zh_TW.Big5.po,
+ zh_CN.GB2312.po: Various small fixes by Pablo Saratxaga
+ <pablo at mandrakesoft.com>
+
+ * no.po: Updated translation by:
+ Terje Bjerkelia <terje at bjerkelia.com>. A couple of strings altered
+ by me.
+
+Tue Jun 13 23:40:15 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by:
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Mon Jun 12 16:56:55 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: One string added by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Mon Jun 12 15:39:23 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * *.po: Ran 'make update-po' and updated the copyright string from
+ about.c for all translations.
+
+Fri Jun 9 10:40:42 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * zh_CN.GB2312.po: Updated translation by:
+ Danny Zeng <danny at zeng.com.cn>
+
+ * fr.po: Update which fixes a incorrect string (again).
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Wed May 31 00:58:34 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * cs.po: New translation by: Radek Vybiral <Radek.Vybiral at vsb.cz>
+
+ * fr.po: Updated translation by:
+ Eric Fernandez-Bellot <fernandez at cgm.cnrs-gif.fr>
+
+ * da.po: Updated translation by:
+ Nikolaj Berg Amondsen <mr_nba at get2net.dk>
+
+ * ro.po: Updated translation by:
+ Florin Grad <florin at mandrakesoft.com>
+
+ * es.po: Updated translation by:
+ Fabian Mandelbaum <fabman at einstein.com.ar>
+
+ * sk.po: Updated translation by:
+ Jan Matis <damned at hq.alert.sk>
+
+ * lt.po: Updated translation by:
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+ * hu.po: Updated tranlation by:
+ Arpad BIRO <biro_arpad at hotmail.com>
+
+ * ca.po: Updated translation by:
+ Quico Llach <quico at softcatala.org>
+
+ * af.po: Update translation by:
+ Schalk W. Cronjé <schalkc at ntaba.co.za>
+
+Tue May 30 01:50:32 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * de.po: Updated translation by:
+ Colin Marquardt <colin at marquardt-home.de>
+
+Mon May 22 22:10:54 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * fr.po: Updated translation by:
+ Eric Fernandez-Bellot <fernandez at cgm.cnrs-gif.fr>
+
+ * wa.po: Updated translation by:
+ Pablo Saratxaga <pablo at mandrakesoft.com>,
+ Lucyin Mahin
+
+ * bg.po: Updated translation by:
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+ * ca.po: Updated translation by:
+ Quico Llach <quico at softcatala.org>
+
+ * uk.po: Updated translation by:
+ Dmytro Koval'ov <kov at tokyo.email.ne.jp>
+
+ * hu.po: New translation by: Arpad BIRO <biro_arpad at hotmail.com>
+
+ * af.po: New translation by:
+ Schalk W. Cronjé <schalkc at ntaba.co.za>
+
+ * es.po: Updated translation by:
+ Fabian Mandelbaum <fabman at einstein.com.ar>
+
+Fri May 19 13:36:02 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sk.po: Updated translation by: Jan Matis <damned at hq.alert.sk>
+
+ * lt.po: Updated translation by:
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+ * hr.po: Updated translation by: Vladimir Vuksan <vuksan at veus.hr>
+
+Tue May 9 00:05:04 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * uk.po: Updated translation by:
+ Dmytro Kovalov <kov at tokyo.email.ne.jp>
+
+Wed May 3 14:21:47 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ro.po: New translation by: Florin Grad <florin at mandrakesoft.com>
+
+ * hr.po: New translation by: Vladimir Vuksan <vuksan at veus.hr>
+
+ * es.po: New translation by:
+ Fabian Mandelbaum <fabman at einstein.com.ar>
+
+ * no.po: Fixed a typo that affected the Visualization menu.
+
+Wed Apr 12 13:55:01 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * da.po: Updated translation by:
+ Nikolaj Berg Amondsen <mr_nba at get2net.dk>,
+ Kenneth Christiansen,
+ Troels Liebe Bentsen <tlb at iname.com>
+
+Mon Apr 3 00:54:10 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * lt.po: New translation by:
+ Gediminas Paulauskas <menesis at delfi.lt>
+
+ * sk.po: Updated translation by: Jan Matis <damned at hq.alert.sk>
+
+Thu Mar 30 00:42:05 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * zh_TW.Big5.po: Updated translation by:
+ Jouston Huang <jouston at housediy.com>
+
+Tue Mar 28 11:26:57 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * sk.po: New translation by:
+ TOMAS HORNICEK <dumber at hq.alert.sk>,
+ Jan Matis <damned at hq.alert.sk>
+
+Mon Mar 27 02:26:29 CEST 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated translation by:
+ Terje Bjerkelia <terje at bjerkelia.com>
+
+Fri Mar 24 17:37:10 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * bg.po: Updated translation by:
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+ * ru.po: Updated translation by: Maxim Koshelev <mdem at chat.ru>
+
+Thu Mar 23 13:21:17 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * fr.po: One string corrected. Thanks to:
+ Guillaume Cottenceau <gc at mandrakesoft.com>
+
+Tue Mar 21 23:05:19 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * de.po: Updated translation by:
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * ja.po: Updated translation by:
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Mon Mar 20 23:27:51 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * bg.po: Updated translation by:
+ Yovko D. Lambrev <yovko at sdf.lonestar.org>
+
+Mon Mar 20 18:50:23 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ca.po: Updated translation by:
+ Quico Llach <quico at softcatala.org>
+
+ * da.po: Updated translation by:
+ Nikolaj Berg Amondsen <mr_nba at get2net.dk>
+
+ * zh_CN.GB2312.po: Updated translation by:
+ Danny Zeng <danny at zeng.com.cn>
+
+Sun Mar 19 01:36:19 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * wa.po: Updated translation by:
+ Pablo Saratxaga <pablo at mandrakesoft.com>
+
+ * nl.po: New translation by:
+ Tom Laermans <sidewinder at linuxfreak.com>
+
+ * da.po: New translation by:
+ Nikolaj Berg Amondsen <mr_nba at get2net.dk>
+
+Thu Mar 9 15:41:20 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ko.po: Updated translation by:
+ Byeong-Chan Kim <redhands at linux.sarang.net>
+
+Tue Mar 7 23:17:24 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ja.po: Updated translation by:
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Mon Mar 6 15:57:58 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated translation.
+
+ * fr.po: Updated translation by:
+ Eric Fernandez-Bellot <fernandez at cgm.cnrs-gif.fr>
+
+ * ca.po: Updated translation by:
+ Quico Llach <quico at softcatala.org>
+
+Sun Mar 5 00:20:11 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * uk.po: Updated translation by:
+ Dmytro Koval'ov <kov at tokyo.email.ne.jp>
+
+ * de.po: Updated translation by:
+ Colin Marquardt <colin at marquardt-home.de>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Sat Feb 26 00:35:44 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ca.po: New translation by: Quico Llach <quico at softcatala.org>
+
+ * bg.po: New translation by:
+ Yovko D. Lambrev <yovko at plov.omega.bg>
+
+ * sv.po: New translation by: Olle Hällnäs <olle at xmms.org>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Thu Feb 17 10:50:41 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ko.po: Updated translation by:
+ Byeong-Chan Kim <redhands at linux.sarang.net>
+
+Wed Feb 16 22:19:51 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: Updated translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Wed Feb 16 02:09:22 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * no.po: Updated translation.
+
+Wed Feb 16 00:00:20 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * pt_BR.po: New translation by:
+ Juan Carlos Castro y Castro <jcastro at appi.com.br>
+
+Tue Feb 15 21:13:03 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ko.po: Updated translation by:
+ Byeong-Chan Kim <redhands at linux.sarang.net>
+
+Thu Feb 10 22:15:00 CET 2000 Håvard Kvålen <havardk at xmms.org>
+
+ * ko.po: New translation by:
+ Sang-Jin Hwang <accel at accellinux.org>,
+ Updated by: Byeong-Chan Kim <redhands at linux.sarang.net>
+
+Thu Feb 10 14:14:48 CET 2000 Håvard Kvålen <havardk at sol.no>
+
+ * ru.po: New translation by: Koshelev Maxim <mdem at chat.ru>
+
+Mon Feb 7 22:48:26 CET 2000 Håvard Kvålen <havardk at sol.no>
+
+ * de.po: Updated translation by:
+ Colin Marquardt <colin at marquardt-home.de>
+
+Mon Feb 7 14:15:42 CET 2000 Håvard Kvålen <havardk at sol.no>
+
+ * ja.po: New translation by:
+ Hiroshi Takekawa <takekawa at sr3.t.u-tokyo.ac.jp>
+
+Sun Feb 6 13:33:35 CET 2000 Håvard Kvålen <havardk at sol.no>
+
+ * zh_CN.GB2312.po: Added translation by:
+ Jouston Huang <jouston at linuxfab.cx>,
+ Andrew Lee <andrew at cle.linux.org.tw>,
+ Chih-Wei Huang <cwhuang at linux.org.tw>.
+
+ * zh_TW.Big5.po: Added translation by:
+ Jouston Huang <http://Linuxfab.cx> <jouston at linuxfab.cx>,
+ Andrew Lee <andrew at cle.linux.org.tw>,
+ Chih-Wei Huang <cwhuang at linux.org.tw>.
+
+ * wa.po: Added translation by:
+ Pablo Saratxaga <srtxg at chanae.alphanet.ch>
+
+ * uk.po: Added translation by:
+ "Dmytro Koval'ov" <kov at tokyo.email.ne.jp>
+
+ * fr.po: Added translation by:
+ Eric Fernandez-Bellot <fernandez at cgm.cnrs-gif.fr>
+
+ * de.po: Added translation by:
+ Colin Marquardt <colin at marquardt-home.de>
+
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/LINGUAS
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/LINGUAS 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/LINGUAS 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,29 @@
+# sorted in alphabetical order
+br
+cs
+cy
+de
+el
+#en at boldquot
+#en at quot
+es
+fi
+fr
+hi
+hu
+it
+ja
+ka
+ko
+lt
+mk
+nl
+pl
+pt_BR
+ro
+ru
+sk
+sv
+uk
+zh_CN
+zh_TW
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,17 @@
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.
+COPYRIGHT_HOLDER = Translator <translator at invalid>
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars.template
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars.template 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Makevars.template 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/POTFILES.in
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/POTFILES.in 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/POTFILES.in 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,101 @@
+
+# CD audio input plugin
+Input/cdaudio/cdaudio.c
+Input/cdaudio/cddb.c
+Input/cdaudio/cdinfo.c
+Input/cdaudio/configure.c
+Input/cdaudio/http.c
+
+# mp3 input plugin
+Input/mpg123/common.c
+Input/mpg123/configure.c
+Input/mpg123/fileinfo.c
+Input/mpg123/http.c
+Input/mpg123/mpg123.c
+
+# vorbis input plugin
+Input/vorbis/configure.c
+Input/vorbis/fileinfo.c
+Input/vorbis/http.c
+Input/vorbis/vorbis.c
+
+# wav input plugin
+Input/wav/wav.c
+
+# OSS output plugin
+Output/OSS/OSS.c
+Output/OSS/about.c
+Output/OSS/audio.c
+Output/OSS/configure.c
+Output/OSS/init.c
+Output/OSS/mixer.c
+
+# ESD output plugin
+Output/esd/about.c
+Output/esd/audio.c
+Output/esd/configure.c
+Output/esd/esd.c
+Output/esd/init.c
+Output/esd/mixer.c
+
+# ALSA output plugin
+Output/alsa/about.c
+Output/alsa/alsa.c
+Output/alsa/configure.c
+
+# Blurscope visualization plugin
+Visualization/blur_scope/blur_scope.c
+Visualization/blur_scope/config.c
+
+# libbeep
+libbeep/dirbrowser.c
+libbeep/titlestring.c
+libbeep/util.c
+libbeep/beepctrl.c
+
+# Beep
+beep/about.c
+beep/controlsocket.c
+beep/dock.c
+beep/effect.c
+beep/eq_graph.c
+beep/eq_slider.c
+beep/equalizer.c
+beep/fft.c
+beep/fullscreen.c
+beep/general.c
+beep/getopt.c
+beep/getopt1.c
+beep/hints.c
+beep/hslider.c
+beep/input.c
+beep/logger.c
+beep/main.c
+beep/mainwin.c
+beep/menurow.c
+beep/monostereo.c
+beep/number.c
+beep/output.c
+beep/pbutton.c
+beep/playlist.c
+beep/playlist_list.c
+beep/playlist_popup.c
+beep/playlist_slider.c
+beep/playlistwin.c
+beep/playstatus.c
+beep/pluginenum.c
+beep/prefswin.c
+beep/sbutton.c
+beep/skin.c
+beep/skinwin.c
+beep/svis.c
+beep/tbutton.c
+beep/textbox.c
+beep/util.c
+beep/vis.c
+beep/visualization.c
+beep/widget.c
+
+# Glade files
+beep/glade/prefswin.glade
+beep/glade/addfiles.glade
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Rules-quot
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Rules-quot 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/Rules-quot 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,42 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en at quot.header en at boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en at quot.po-update: en at quot.po-update-en
+en at boldquot.po-update: en at boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en at quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en at quot.header/g' $(srcdir)/insert-header.sin > en at quot.insert-header
+
+en at boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en at boldquot.header/g' $(srcdir)/insert-header.sin > en at boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/bmp.pot
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/bmp.pot 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/bmp.pot 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3267 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Translator <translator at invalid>
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr ""
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr ""
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr ""
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr ""
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr ""
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr ""
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr ""
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr ""
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr ""
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr ""
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr ""
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr ""
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr ""
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr ""
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr ""
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr ""
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr ""
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr ""
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr ""
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr ""
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr ""
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr ""
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr ""
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr ""
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr ""
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr ""
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr ""
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr ""
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr ""
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr ""
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr ""
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr ""
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr ""
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr ""
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr ""
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr ""
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr ""
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr ""
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr ""
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr ""
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr ""
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr ""
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr ""
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr ""
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr ""
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr ""
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr ""
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr ""
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr ""
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr ""
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr ""
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr ""
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr ""
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr ""
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr ""
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr ""
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr ""
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr ""
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr ""
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr ""
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr ""
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr ""
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr ""
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr ""
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr ""
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr ""
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr ""
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr ""
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr ""
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr ""
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr ""
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr ""
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr ""
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr ""
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr ""
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr ""
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr ""
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr ""
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr ""
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr ""
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr ""
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr ""
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr ""
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr ""
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr ""
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr ""
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr ""
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr ""
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr ""
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr ""
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr ""
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr ""
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr ""
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr ""
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr ""
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr ""
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr ""
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr ""
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr ""
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr ""
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr ""
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr ""
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr ""
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr ""
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr ""
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr ""
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr ""
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr ""
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr ""
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr ""
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr ""
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr ""
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr ""
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:402
+msgid "Thread buffer time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr ""
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr ""
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr ""
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr ""
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr ""
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr ""
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr ""
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr ""
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr ""
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr ""
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr ""
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr ""
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr ""
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr ""
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr ""
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr ""
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr ""
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr ""
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr ""
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr ""
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr ""
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr ""
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr ""
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr ""
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr ""
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr ""
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr ""
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr ""
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr ""
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr ""
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr ""
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr ""
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr ""
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr ""
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr ""
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr ""
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr ""
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr ""
+
+#: beep/about.c:114
+msgid "German:"
+msgstr ""
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr ""
+
+#: beep/about.c:117
+msgid "Georgian: "
+msgstr ""
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr ""
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr ""
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr ""
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr ""
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr ""
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr ""
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr ""
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr ""
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr ""
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr ""
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr ""
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr ""
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr ""
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr ""
+
+#: beep/about.c:165
+msgid "Ukrainian:"
+msgstr ""
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr ""
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr ""
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr ""
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr ""
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr ""
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr ""
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr ""
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr ""
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr ""
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr ""
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr ""
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr ""
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr ""
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr ""
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr ""
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr ""
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr ""
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr ""
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr ""
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr ""
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr ""
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr ""
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr ""
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr ""
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr ""
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr ""
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr ""
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr ""
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr ""
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr ""
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr ""
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr ""
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr ""
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr ""
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr ""
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr ""
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr ""
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr ""
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr ""
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr ""
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr ""
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr ""
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr ""
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr ""
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr ""
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr ""
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr ""
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr ""
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr ""
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr ""
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr ""
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr ""
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr ""
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr ""
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr ""
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr ""
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr ""
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr ""
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr ""
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr ""
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr ""
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr ""
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr ""
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr ""
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr ""
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr ""
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr ""
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr ""
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr ""
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr ""
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr ""
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr ""
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr ""
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr ""
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr ""
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr ""
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr ""
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr ""
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr ""
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr ""
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr ""
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr ""
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr ""
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr ""
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr ""
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr ""
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr ""
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr ""
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr ""
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr ""
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr ""
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr ""
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr ""
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr ""
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr ""
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr ""
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr ""
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr ""
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr ""
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr ""
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr ""
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr ""
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr ""
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr ""
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr ""
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr ""
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr ""
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr ""
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr ""
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr ""
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr ""
+
+#: beep/mainwin.c:1364
+msgid "Un_queue"
+msgstr ""
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+msgid "_Queue"
+msgstr ""
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr ""
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr ""
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr ""
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr ""
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr ""
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr ""
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr ""
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr ""
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr ""
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr ""
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr ""
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr ""
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr ""
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr ""
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr ""
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr ""
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr ""
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr ""
+
+#: beep/playlistwin.c:161
+msgid "/Add Folders..."
+msgstr ""
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr ""
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr ""
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr ""
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr ""
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr ""
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr ""
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr ""
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr ""
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr ""
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr ""
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr ""
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr ""
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr ""
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr ""
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr ""
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr ""
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr ""
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr ""
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr ""
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr ""
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr ""
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr ""
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr ""
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr ""
+
+#: beep/playlistwin.c:818
+#, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+
+#: beep/playlistwin.c:928
+msgid "Load Playlist"
+msgstr ""
+
+#: beep/playlistwin.c:940
+msgid "Save Playlist"
+msgstr ""
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr ""
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr ""
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr ""
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr ""
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr ""
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr ""
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr ""
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr ""
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr ""
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr ""
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr ""
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr ""
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr ""
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr ""
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr ""
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr ""
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr ""
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr ""
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1499
+msgid "Changes volume by"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1547
+msgid "Scrolls playlist by"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr ""
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr ""
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr ""
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/boldquot.sed
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/boldquot.sed 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/boldquot.sed 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/â\1â/g
+s/`\([^`']*\)'/â\1â/g
+s/ '\([^`']*\)' / â\1â /g
+s/ '\([^`']*\)'$/ â\1â/g
+s/^'\([^`']*\)' /â\1â /g
+s/ââ/""/g
+s/â/â[1m/g
+s/â/[0mâ/g
+s/â/â[1m/g
+s/â/[0mâ/g
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/br.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3357 @@
+# Bmp e brezhoneg
+# Copyright (C) 2004 Thierry Vignaud
+# Thierry Vignaud <tvignaud at mandrakesoft.com>, 2004
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-08-25 17:10+0200\n"
+"Last-Translator: Thierry Vignaud <tvignaud at mandrakesoft.com>\n"
+"Language-Team: Brezhoneg <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"NPOT-Creation-Date: 2003-08-08 19:35+0200\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr ""
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Roudenn CD son %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(dianav)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr ""
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Ne m'eus ket digeriñ an drobarzhell %s\n"
+"Fazi : %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d roudennoù ar roadoù)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Hirder hollek : %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Fazi : endeo eo %s, met n'eo ket ur renkell"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Mad eo ar renkell %s."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Trobarzhell :"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Trobarzhell :"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_Renkell :"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr ""
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr ""
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Mesker ebet"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr ""
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Mesker OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr ""
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr ""
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr ""
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr ""
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Trobarzhell"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDBÂ :"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Implijit CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Tigas roll ar servijerien"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Diskouez prenestr ar rouedad"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Servijer CDDBÂ :"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr ""
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Anvioù ar roudennoù :"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr ""
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Furmad an anv :"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Titouroù war ar CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr ""
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Kefluniadur al lugent MPEG son"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Spister :"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanolioù :"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr ""
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Unvouezh"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr ""
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr ""
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr ""
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Dibarzhoù"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Endalc'had"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr ""
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr ""
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Krubuilh :"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Ment ar grubuilh (ko)Â :"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr ""
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proksi :"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Implijit ur proksi"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Ostiz :"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Porzh :"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Implijit dilesadur"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Anv an arveriad :"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Tremenger :"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Enrollañ al lanv d'ar bladenn :"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Enrollañ al lanv d'ar bladenn"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Hent :"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Furchal"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast :"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr ""
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Lanv"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Liketennoù ID3 :"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr ""
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "Kodadur ID3Â :"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Furmad ID3Â :"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titl"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Ne m'eus ket skrivañ ar restr : %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Ne m'eus ket skrivañ al liketenn !"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Ne m'eus ket digeriñ ar restr : %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Titouroù war ar restr"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Mat eo"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Ne m'eus ket lemel al liketenn !"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "N'eus liketenn da lemel !"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Divouezh"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Hini ebet"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "N'eo ket"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ya"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Anv :"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " Titouroù war MPEG "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "Live MPEGÂ :"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Sternoù :"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Ment ar restr :"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Kentañ :"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " Liketenn ID3 "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titl :"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Arzour :"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Albom :"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Askelenn :"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Bloavezh :"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Niverenn ar roudenn :"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Rumm :"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Eilañ liketennoù al albom"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Okted"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Fazi"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr ""
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr ""
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "Emaon o kevreañ ouzh %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Ne m'eus ket kevreañ ouzh an ostiz %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr ""
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Rok da gustum"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Bro"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dañs"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disko"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Gruñj"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "All"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Rege"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Steredigoù"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Tekno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Roudenn son"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "Ti"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "C'hoari"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Fospeol"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Trouz"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Egor"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gotek"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Elektronek"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Hunvre"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Rap kristen"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "Gwag nevez"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rok"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rok"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Keltiek"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Laz-Kanañ"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Komzet"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Kan"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Troiad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Spont"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Gangsta Rap kristen"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Rok kristen"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Diwar-benn al lugent MPEG Audio"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Lugent MPEG son"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr ""
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr ""
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Liketennoù Ogg Vorbis :"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Furmad an titl :"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr ""
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr ""
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr ""
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr ""
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr ""
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Fazi !"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Ne m'eus ket kemmañ al liketenn (digeriñ)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Ne m'eus ket kemmañ al liketenn (seriñ)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Ne m'eus ket kemmañ al liketenn"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Liketenn Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Deiziad :"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Deskrivadur :"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Lec'hiadur :"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Doare :"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Niverenn ISRCÂ :"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Aozadur :"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Titouroù war Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Hirder :"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Okted"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Lugent son Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Diwar-benn al lugent son Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Lugent son WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "Lugent ezkas OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "A-brepoz ar sturier OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Dre ziouer (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Dre ziouer"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Kefluniadur ar sturier OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Trobarzhell son :"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Implijit an drobarzhell all :"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Trobarzhell ar Mesker :"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Trobarzhelloù"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Ment ar grubuilh (ms)Â :"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Krubuilh"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Dibaboù ar Mesker :"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr ""
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mesker"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Diwar-benn al lugent ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr ""
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Implijit an ostiz a-bell"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr ""
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Servijer"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Lugent ezkas eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "A-brepoz ar sturier ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "Lugent ezkas ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Dianav eo ar gartenn son"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Trobarzhell PCM dre ziouer (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Kefluniadur ar sturier ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mesker :"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr ""
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Kartenn ar mesker :"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Kefluniadur an trobarzhell"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Kefluniadur barek :"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Ment ar grubuilh (ms)Â :"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mode mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Kefluniadur barek"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Diskouez-Kuzhat ar glinkadur"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Serriñ"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Dibarzhoù :"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Arzour"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Albom"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Rumm"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Anv ar restr"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Hent ar restr"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr ""
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Anv ar roudenn"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Niverenn ar roudenn"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Deiziad"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Bloavezh"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Askelenn"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Diorroerien :"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr ""
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr ""
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Sineg :"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+#, fuzzy
+msgid "Czech:"
+msgstr "Galleg :"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Nederlandeg :"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Spagnoleg :"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Galleg :"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Alamaned :"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Alamaned :"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "Rumm :"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Italianeg :"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japaneg :"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Koreeg :"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lituaneg :"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Poloneg :"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+#, fuzzy
+msgid "Romanian:"
+msgstr "Lituaneg :"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Rusianeg :"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Spagnoleg :"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Svedeg :"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Aozadur :"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Kembraeg :"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "A-brepoz BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Garedon"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Trelatourion "
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 Hz"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 Hz"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 Hz"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 KHz"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3 kHz"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 kHz"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 kHz"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 kHz"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 kHz"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Kargañ"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr ""
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Kargañ/Dre ziouer"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Kargañ/Mann"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Kargañ/Eus ar restr"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Kargañ/Eus ar restr WinAMP EQF"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Enporzh"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr ""
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Enrollañ"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr ""
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Enrollañ/Dre ziouer"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Enrollañ/D'ar restr"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Enrollañ/D'ar restr WinAMP EQF"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Dilemel"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr ""
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr ""
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr ""
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr ""
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr ""
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr ""
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr ""
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr ""
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr ""
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr ""
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr ""
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr ""
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr ""
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Diskouez titouroù muioc'h"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Anv ar restr"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp : %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Anv ar restr :"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr ""
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Lugent engas : %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr ""
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "N'hellan ket krouiñ ar renkell (%s) : %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr ""
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr ""
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr ""
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr ""
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr ""
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr ""
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr ""
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr ""
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ne c'houllonderit ket ar roll tonioù"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr ""
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr ""
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr ""
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr ""
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Sellout ouzh titouroù war ar roudenn"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr ""
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr ""
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr ""
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr ""
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr ""
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr ""
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr ""
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr ""
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr ""
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr ""
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr ""
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr ""
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr ""
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr ""
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr ""
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr ""
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr ""
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr ""
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr ""
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr ""
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr ""
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr ""
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr ""
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr ""
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr ""
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr ""
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr ""
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr ""
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr ""
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr ""
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Adseniñ"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/En dizurzh"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Seniñ"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Ehan"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Plaenaozañ"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Diaraok"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/A-heul"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr ""
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Lammat d'ar restr"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr ""
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Dibaboù"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Diwar-benn BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Kuitaat"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "Ouzhpennañ/Restroù ..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Ouzhpennañ/Lec'hiadur war ar genrouedad ..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr ""
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr ""
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr ""
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr ""
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr ""
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr ""
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr ""
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr ""
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr ""
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Hirder ar roudenn :"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Lost"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Lost"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Lammat d'ar roudenn"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Sil : "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Ouzhpennañ Renkelloù"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr ""
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr ""
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "NERZHÂ : %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr ""
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr ""
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr ""
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr ""
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr ""
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr ""
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr ""
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr ""
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr ""
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr ""
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "Ouzhpennañ/Restroù ..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Ouzhpennañ/Lec'hiadur war ar genrouedad ..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Ouzhpennañ/Renkelloù ..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "Ouzhpennañ/Restroù ..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr ""
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr ""
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Listenn nevez"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "Kargañ ar roll tonioù"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Listenn nevez"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr ""
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Ouzhpennañ/Lec'hiadur war ar genrouedad ..."
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "Diuz an Holl"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "Diuz an Holl"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr ""
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr ""
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr ""
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr ""
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr ""
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr ""
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr ""
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr ""
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr ""
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr ""
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr ""
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr ""
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Fazi en ur skrivañ ar roll tonioù « %s » : %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr ""
+
+#: beep/playlistwin.c:818
+#, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Kargañ ar roll tonioù"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Enrollañ ar roll tonioù"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Aozer ar roll tonioù BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Neuziadur"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr ""
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Logodenn"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Roll tonioù"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Lugentoù"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Arzour"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Niverennroudenn"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Hent ar restr"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Bev"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Deskrivadur"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Rumm"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Prenestr ar gefluniadur"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "Ouzhpennañ Restro¹"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "Ouzhpennañ Restro¹"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Ouzhpennañ Restro¹"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (n'eo ket mat UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr ""
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Neuziadur</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Kroc'hen</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Nodrezhoù</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_C'hoarier :"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Roll tonioù :"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Dibabit nodrezh prenestr kentañ ar soner :"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Dibabit nodrezh ar roll tonioù :"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_A bep seurt</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Diskouez niverennoù ar roudenn er roll tonioù"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Logodenn</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Rodell al logodenn</b>"
+
+#: beep/glade/prefswin.glade:1499
+msgid "Changes volume by"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "dre gant"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Kargañ ar roll tonioù"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "linennoù"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Anv ar restr</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "eilennoù"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TITL\n"
+"ARZOUR - TITL\n"
+"ARZOUR - ALBOM - TITL\n"
+"ALBOM - TITL\n"
+"Diouzhoc'h"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr ""
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Diuz an Holl"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Andibab an holl re"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "Default skin:"
+#~ msgstr "Default skin:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Seniñ CD"
+
+#~ msgid "/Add"
+#~ msgstr "/Ouzhpennañ"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Dibarzhoù"
+
+#~ msgid "Add URL"
+#~ msgstr "Ouzhpennañ un URL"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Roll tonioù"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Serriñ ar prenestr"
+
+#~ msgid "Play Files"
+#~ msgstr "Seniñ Restro¹"
+
+#~ msgid "Load"
+#~ msgstr "Kargañ"
+
+#~ msgid "Zero"
+#~ msgstr "Mann"
+
+#~ msgid "From file"
+#~ msgstr "Eus ar restr"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "Eus ar restr WinAMP EQF"
+
+#~ msgid "Import"
+#~ msgstr "Enporzh"
+
+#~ msgid "To file"
+#~ msgstr "D'ar restr"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "D'ar restr WinAMP EQF"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cs.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3434 @@
+# Czech translation for BMP
+# Copyright (C) 2004 Jan Nárovec <finn at sendmail.cz>
+# This file is distributed under the same license as the BMP package.
+# Jan Nárovec <finn at sendmail.cz>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-04 17:15+0100\n"
+"Last-Translator: Jan Nárovec <finn at sendmail.cz>\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD Audio modul"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD audio stopa %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(nenà známo)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Mechanika %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"NepodaÅilo se otevÅÃt %s\n"
+"Chyba: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"NepodaÅilo se naÄÃst obsah disku.\n"
+"Je disk opravdu v mechanice?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"ZaÅÃzenà %s je v poÅádku.\n"
+"Disk obsahuje %d stop."
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr "(%d datových stop)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Celková délka: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr "Ätenà zvuku netestováno - tento disk neobsahuje zvukové sotpy.\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Test Ätenà zvuku: v poÅádku.\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Test Ätenà zvuku selhal: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"NepodaÅilo se naÄÃst adresáŠ%s.\n"
+"Chyba: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Chyba: %s existuje, ale nenà adresáÅem."
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "AdresáŠ%s je v poÅádku."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "ZaÅÃzenÃ:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_ZaÅÃzenÃ:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_AdresáÅ:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Způsob pÅehrávánÃ:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "AnalogovÄ"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "DigitálnÄ"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Ovládánà hlasitosti:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "NepoužÃvat žádný mixér"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM mechanika"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS mixér"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Zkontrolovat mechaniku..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Odstranit mechaniku"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Nastavenà pÅehrávaÄe CD Audio"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "PÅidat mechaniku"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "ZaÅÃzenÃ"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "PoužÃvat CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "ZÃskat seznam serverů"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Výpis sÃÅ¥ového provozu"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB server:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "PoužÃt server s databázà CD"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Server s databázà CD:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Názvy skladeb:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "PÅepsat původnà názvy"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Formát názvu:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Informace o CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Vyberte adresáÅ, do nÄhož chcete vysÃlánà uložit:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Nastavenà modulu MPEG Audio"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "RozliÅ¡enÃ:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16bitové"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8bitové"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanálů"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (pokud existuje)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "SnÞit vzorkovacà kmitoÄet:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekodér:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatický výbÄr"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Dekodér optimalizovaný pro 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Dekodér optimalizovaný pro MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU dekodér"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "NastavenÃ"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Obsah"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "PÅÃpona"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Obsah i pÅÃpona"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekodér"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "PÅednaÄÃtánÃ"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Velikost vyrovnávacà pamÄti (kB):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "NaÄÃst pÅedem (v procentech):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "PoužÃt proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Adresa:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Autorizovat se"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "PÅÃstupové jméno:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Heslo:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Uložit vysÃlánà na disk:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Uložit vysÃlánà na disk:"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Cesta:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Procházet:"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Povolit Icecast Metadata UDP Channel"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "VysÃlánÃ"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 informace:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Zakázat ID3v2 informace"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "PÅevést ID3 info z jiných kódovánà do UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "Kódovánà ID3:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Formát ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Název:"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Nelze zapsat soubor: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Informace nelze zapsat!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Nelze otevÅÃt soubor: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Informace o souboru"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "OK"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"NepodaÅilo se upravit soubor: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Informace nelze odstranit!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Žádný tag k odstranÄnÃ!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Joint stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Dva kanály"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Jeden kanál"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d kb/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Žádný"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Ne"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ano"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Jméno:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG informace"
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Datový tok:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Vzorkovacà kmitoÄet:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Rámců:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Velikost souboru:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Chybová ochrana:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Autorská práva:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Originál:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "ZesÃlenÃ:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 popis:"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Název:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "UmÄlec:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "KomentáÅ:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Rok:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "ÄÃslo stopy:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Žánr:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "KopÃrovat spoleÄné položky"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Vložit spoleÄné položky"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "nenà známo"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"PromÄnný,\n"
+"průmÄrný datový tok: %d kb/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu bajtů"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Chyba"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "Vyhledávám %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Nelze najÃt server %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "PÅipojuji se k %s: %d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Nelze se pÅipojit k %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "PÅipojen: Äekám na odpovÄÄ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"NepodaÅilo se pÅipojit k serveru %s\n"
+"Server odpovÄdÄl: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "PÅednaÄteno: %d kB/%d kB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Klasický rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "TaneÄnÃ"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disko"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Jiný"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternativnà hudba"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "VokálnÃ"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fúze"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klasika"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "InstrumentálnÃ"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Hra"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Zvukový klip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Å um"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Alternativnà rock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "MeditativnÃ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumentálnà pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumentálnà Rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Etnická hudba"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gotická hudba"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Elektronická"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Jižanský rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Komedie"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Kult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "KÅesÅ¥anský rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Indiánská hudba"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Kabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "Nová vlna"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelická"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Muzikál"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock'n roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Národnà lidová"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latinská"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Keltská hudba"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "AvantgardnÃ"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gotický rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progresivnà rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelický rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symfonický rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Ploužák"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chór"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "PÅÃjemné poslouchánÃ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Akustická"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Mluvené"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Å anson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Komornà hudba"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonáta"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symfonie"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satira"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Klub"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklór"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Balada"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Rocková balada"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rytmický soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "Britpop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "KÅesÅ¥anský Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Modernà kÅesÅ¥anská"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "KÅesÅ¥anský rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "O modulu MPEG Audio"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 dekodér vytvoÅil Michael Hipp <mh at mpg123.de>\n"
+"Modul pocházà od The XMMS team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Modul MPEG Audio"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Vyberte adresáÅ, do nÄjž bude ukládáno vysÃlánà ve formátu Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Nastavenà modulu Ogg Vorbis Audio"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis Info:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Formát názvu:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Nastavenà pro zesÃlenà pÅehrávánÃ:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Povolit prevenci pÅed oÅÃznutÃm"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Zapnout zesÃlenà pro pÅehrávánÃ"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Typ zesÃlenà pro pÅehrávánÃ:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "použÃt zesÃlenÃ/vrcholu skladby"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "použÃt zesÃlenÃ/vrchol alba"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Povolit 6 dB boost + tvrdé omezenÃ"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ZesÃlenà pÅehrávánÃ"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Nastala chyba:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Chyba!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "ZmÄna tagu se nezdaÅila (otevÅenÃ)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "ZmÄna tagu se nezdaÅila (zavÅenÃ)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "NepodaÅilo se upravit informace"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "Popis Ogg Vorbis souboru"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Datum:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Popis:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "UmÃstÄnÃ:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Verze:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ÄÃslo ISRC"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organizace:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " ZesÃlenà Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "ZesÃlenà stopy:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Vrchol skladby:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "ZesÃlenà alba:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Vrchol alba:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis Info "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Délka:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d kb/s (jmenovitý tok)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d bajtů"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Modul Ogg Vorbis Audio"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "O modulu Ogg Vorbis Audio"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Modul Ogg Vorbis od the \"the Xiph.org Foundation\"\n"
+"\n"
+"Původnà kód napsal\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"PÅispÄli\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Navštivte stránky \"the Xiph.org Foundation\": http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Modul WAV Audio"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS výstupnà modul"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "O modulu OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS ovladaÄ\n"
+"\n"
+" Tento program je svobodný software; můžete jej Å¡ÃÅit a/nebo mÄnit\n"
+"pokud dodržÃte podmÃnky GNU General Public License (GPL) vydané\n"
+"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaÅ¡Ã volby)\n"
+"libovolné novÄjÅ¡Ã.\n"
+"\n"
+"Program je Å¡ÃÅen v nadÄji, že bude užiteÄný, ale BEZ JAKÃKOLIV\n"
+"ZÃRUKY a to ani záruky obchodovatelnosti nebo vhodnosti pro\n"
+"JAKÃKOLIV úÄel. VÃce informacà najdete v GNU GPL.\n"
+"\n"
+"S tÃmto programem byste mÄli obdržet kopii GNU GPL. Pokud se\n"
+"tak nestalo, obraťte se na Free Software Foundation,\n"
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA. Äeský pÅeklad naleznete na webové adrese\n"
+"http://www.gnu.cz/licence.html."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "StandardnÄ (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "StandardnÄ"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Nastavenà ovaldaÄe OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Zvukové zaÅÃzenÃ:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "PoužÃt jiné zaÅÃzenÃ:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mixér:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "ZaÅÃzenÃ"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Velikost vyrovnávacà pamÄti (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "PÅednaÄÃtánÃ"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Nastavenà mixéru:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Hlasitost ovládána Master kanálem mÃsto PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixér"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "O modulu ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Modul XMMS ESounD\n"
+"\n"
+" Tento program je svobodný software; můžete jej Å¡ÃÅit a/nebo mÄnit\n"
+"pokud dodržÃte podmÃnky GNU General Public License (GPL) vydané\n"
+"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaÅ¡Ã volby)\n"
+"libovolné novÄjÅ¡Ã.\n"
+"\n"
+"Program je Å¡ÃÅen v nadÄji, že bude užiteÄný, ale BEZ JAKÃKOLIV\n"
+"ZÃRUKY a to ani záruky obchodovatelnosti nebo vhodnosti pro\n"
+"JAKÃKOLIV úÄel. VÃce informacà najdete v GNU GPL.\n"
+"\n"
+"S tÃmto programem byste mÄli obdržet kopii GNU GPL. Pokud se\n"
+"tak nestalo, obraťte se na Free Software Foundation,\n"
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA. Äeský pÅeklad naleznete na webové adrese\n"
+"http://www.gnu.cz/licence.html."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Nastavenà výstupnÃho modulu ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "PoužÃt vzdálený poÄÃtaÄ"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Hlasitost ovládána OO mixérem"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Server"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Výstupnà modul eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "O ovladaÄi ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA ovladaÄ\n"
+"\n"
+" Tento program je svobodný software; můžete jej Å¡ÃÅit a/nebo mÄnit\n"
+"pokud dodržÃte podmÃnky GNU General Public License (GPL) vydané\n"
+"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaÅ¡Ã volby)\n"
+"libovolné novÄjÅ¡Ã.\n"
+"\n"
+"Program je Å¡ÃÅen v nadÄji, že bude užiteÄný, ale BEZ JAKÃKOLIV\n"
+"ZÃRUKY a to ani záruky obchodovatelnosti nebo vhodnosti pro\n"
+"JAKÃKOLIV úÄel. VÃce informacà najdete v GNU GPL.\n"
+"\n"
+"S tÃmto programem byste mÄli obdržet kopii GNU GPL. Pokud se\n"
+"tak nestalo, obraťte se na Free Software Foundation,\n"
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA. Äeský pÅeklad naleznete na webové adrese\n"
+"http://www.gnu.cz/licence.html.\n"
+"Autor: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "Výstupnà modul ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Neznámá zvuková karta"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Implicitnà PCM zaÅÃzenà (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Nastavenà ovladaÄe ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mixér:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Hlasitost nastavit softwarovÄ"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixovacà zaÅÃzenÃ:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Nastavenà zaÅÃzenÃ"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "PokroÄilé nastavenÃ:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Velikost vyrovnávacà pamÄti (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Perioda (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Velikost vyrovnávacà pamÄti (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mód mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "PokroÄilé nastavenÃ"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/PÅepnout zobrazenà dekoracÃ"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ZavÅÃt"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur scope: výbÄr barvy"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Volby:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Interpret/umÄlec"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Žánr"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Jméno souboru"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Cesta k souboru"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "PÅÃpona souboru"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Název stopy"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "ÄÃslo stopy"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Datum"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Rok"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "KomentáÅ"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Zobraz \"...\" pouze pokud %n nechybÃ"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Multimediálnà pÅehrávaÄ založený na XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "VývojáÅi:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Dále pomáhali:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Webové stránky a grafika:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Brazilská portugalština:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Bretonština:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Äinský:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "ÄeÅ¡tina:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Holandský:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Å panÄlský:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francouzský:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "NÄmecký:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "NÄmecký:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "ÅeÄtina:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "MaÄarÅ¡tina:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Itaský:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japonský:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Korejský:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Litevký:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Makedonština:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polský:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Rumunština:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Ruský:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Slovenština:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Å panÄlský:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Švédský:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Rumunština:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Welšský:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "O BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Zásluhy"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "PÅeklady"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 Hz"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 Hz"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 Hz"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 Hz"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 kHz"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3 kHz"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 kHz"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 kHz"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 kHz"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 kHz"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/NaÄÃst"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/NaÄÃst/Uloženou pÅedvolbu"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/NaÄÃst/Souborovou pÅedvolbu"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/NaÄÃst/Standardnà pÅedvolbu"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/NaÄÃst/Vynulovat"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/NaÄÃst/Ze souboru"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/NaÄÃst/Ze souboru WinAMP EQF"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importovat"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importovat/PÅedvolbu WinAMPu"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Uložit"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Uložit/PÅedvolbu"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Uložit/PÅiÅadit k souboru"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Uložit/Jako standardnÃ"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Uložit/Do souboru"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Uložit/Do souboru WinAMP EQF"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Smazat"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Smazat/PÅedvolbu"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Smazat/Souborovou pÅedvolbu"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP ekvalizér"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "PÅedvolba"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "PÅedvolby"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "NaÄÃst pÅedvolby"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "NaÄÃst souborovou pÅedvolbu"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "NaÄÃst nastavenà ekvalizéru"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Uložit pÅedvolbu"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Uložit souborovou pÅedvolbu"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Uložit nastavenà ekvalizéru"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Smazat pÅedvolbu"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Smazat souborovou pÅedvolbu"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: volba `%s' je nejasná\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: volba `--%s' nemá parametr\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: volba `%c%s' nemá parametr\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: volba `%s' vyžaduje parametr\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: neznámá volba `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: neznámá volba `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: nepÅÃpustný parametr -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: neplatný parametr -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: volba vyžaduje parametr -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: volba `-W %s' je nejasná\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: volba `-W %s' nemá parametr\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Soubory nelze pÅehrát</big></b>\n"
+"\n"
+"NásledujÃcà soubory nelze pÅehrát. Zkontrolujte zda:\n"
+"1. jsou pÅÃstupné,\n"
+"2. máte povolené pÅÃsluÅ¡né moduly."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "PÅÃÅ¡tÄ již nevarovat"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Ukaž podrobné _informace"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Jméno souboru"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Jméno souboru:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Soubor nebyl rozpoznán žádným vstupnÃm modulem"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Vstupnà modul: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "NepodaÅilo se vytvoÅit logovacà soubor (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "NepodaÅilo se vytvoÅit adresáŠ(%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"PoužitÃ: beep-media-player [volby] [soubory] ...\n"
+"\n"
+"Volby:\n"
+"------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Zobrazà tento text a skonÄÃ"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "VýbÄr BMP/XMMS sezenà (standardnÄ: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "PÅejÃt zpÄt v seznamu skladeb"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "PÅehrát skladby v aktuálnÃm seznamu"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pozastavit pÅehrávanou skladbu"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Zastavit pÅehrávanou skladbu"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pozastavit pÅi pÅehrávánÃ; spustit pokud je BMP zastaven"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "PÅejÃt na dalÅ¡Ã skladbu"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Nemazat seznam skladeb"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Zobrazit hlavnà okno"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "Aktivovat BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID pÅedchozÃho sezenÃ"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Zobrazà ÄÃslo verze a skonÄÃ\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Zachycen SIGSEGV\n"
+"\n"
+"Asi jste narazili na chybu v BMP. Pokud netuÅ¡Ãte proÄ, kontaktujte vývojáÅe "
+"(anglicky) na beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Nelze naÄÃst skin.</big></b>\n"
+"\n"
+"Zkontrolujte, zda skin v '%s' je použitelný a zda je standardnà skin správnÄ "
+"nainstalován v '%s'.\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Verze knihovny GTK+ (%d.%d.%d) nenà kompatibilnàs BMP.\n"
+"Použijte GTK+ %s nebo novÄjÅ¡Ã.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Bohužel, váš systém nepodporuje vlákna.\n"
+"\n"
+"Pokud máte linux založený na libc5 a knihovny Glib a GTK+ byly nainstalovány "
+"dÅÃve\n"
+"než LinuxThreads, budete muset Glib a GTK+ pÅeložit znovu.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: NepodaÅilo se otevÅÃt displej. KonÄÃm."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Zobrazit inforamce o skladbÄ"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Automatický posun názvu skladby"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Typ zobrazenÃ"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Typ zobrazenÃ/Analyzér"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Typ zobrazenÃ/Vlnovka"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Typ zobrazenÃ/Vypnout"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Sloupce"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Sloupce/NormálnÃ"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Sloupce/OheÅ"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Sloupce/Barva výšky"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Sloupce/Tenké"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Sloupce/Silné"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Sloupce/Vrcholky"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Sinusovka"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Sinusovka/Bodová"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Sinusovka/Äárová"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Sinusovka/Plná"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Minimalizovaný režim"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Minimalizovaný režim/NormálnÃ"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Minimalizovaný režim/Jemný"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ObnovovánÃ"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/ObnovovánÃ/Plnou rychlostà (~50 Hz)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/ObnovovánÃ/PoloviÄnà rychlostà (~25 Hz)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/ObnovovánÃ/Ätvrtinovou rychlostà (~13 Hz)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ObnovovánÃ/Osminovou rychlostà (~6 Hz)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Klesánà sloupců"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Klesánà sloupců/NejpomalejÅ¡Ã"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Klesánà sloupců/Pomalé"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Klesánà sloupců/StÅednÃ"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Klesánà sloupců/Rychlé"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Klesánà sloupců/NejrychlejÅ¡Ã"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Klesánà vrcholků"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Klesánà vrcholků/NejpomalejÅ¡Ã"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Klesánà vrcholků/Pomalé"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Klesánà vrcholků/StÅednÃ"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Klesánà vrcholků/Rychlé"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Klesánà vrcholků/NejrychlejÅ¡Ã"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Opakovat"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Náhodné pÅehrávánÃ"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Hrát"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pozastavit"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Zastavit"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/PÅedchozÃ"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/DalÅ¡Ã"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/PÅejÃt na zaÄátek seznamu skladeb"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/PÅejÃt na soubor"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/PÅejÃt na Äas"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/NastavenÃ"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_ZobrazenÃ"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/O BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Konec"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Soubory..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Internetová adresa..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Zobrazit editor seznamu skladeb"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Zobrazit ekvalizér"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Dosažený Äas"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/ZbývajÃcà Äas"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Vždy na vrchu"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Zobrazit na všech plochách"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Sbalit pÅehrávaÄ"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Sbalit editor seznamu skladeb"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Sbalit ekvalizér"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "PÅejÃt na Äas"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuty:sekundy"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Délka stopy:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Fronta"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Fronta"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "SkoÄit na stopu"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtr:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "PÅidat adresáÅe"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "PÅidat internetovou adresu"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "PÅEJÃT NA %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "Hlasitost: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "VYROVNÃNÃ: %d%% VLEVO"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "VYROVNÃNÃ: NA STÅED"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "VYROVNÃNÃ: %d%% VPRAVO"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "NASTAVENÃ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ZAKÃZAT FCI \"VŽDY NA VRCHU\" (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "POVOLIT FCI \"VŽDY NA VRCHU\" (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ZAKÃZAT FCI \"VŽDY NA VRCHU\""
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "POVOLIT FCI \"VŽDY NA VRCHU\""
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "INFORMACE O SOUBORU"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** FUNKCE ZDVOJNÃSOBENÃ VELIKOSTI BYLA ODSTRANÄNA **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "NASTAVENÃ ZOBRAZENÃ"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Nebylo nalezeno pÅehratelné CD.</big></b>\n"
+"\n"
+"Nenà vloženo CD, nebo vložené CD nenà typu Audio CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Nelze pÅehrávat.</big></b>\n"
+"\n"
+"Zkontrolujte, zda:\n"
+"1. máte vybrán správný výstupnà modul,\n"
+"2. žádný jiný program neblokuje zvukovou kartu,\n"
+"3. vaÅ¡e karta je správnÄ nakonfigurována.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Odebrat oznaÄené"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Odebrat neoznaÄené"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Odebrat všechny"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/PÅepnout frontu"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/PÅidat CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/PÅidat internetovou adresu..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/PÅidat soubory..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/PÅidat soubory..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Vyprázdnit frontu"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Odstranit nedostupné soubory"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nový seznam"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/NaÄÃst seznam"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Uložit seznam"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Obnovit seznam"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Invertovat výbÄr"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Nevybrat žádné"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Vybrat vše"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/SeÅadit náhodnÄ"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/OtoÄit seznam"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/ÅazenÃ"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/ÅazenÃ/Podle názvu"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Åadit/Podle jména souboru"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Åadit/Podle cesty a jména souboru"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Åadit/Podle data"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/SetÅÃdit vybrané"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/SetÅÃdit vybrané/Podle názvu"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/SetÅÃdit vybrané/Podle jména souboru"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/SetÅÃdit vybrané/Podle cesty a jména souboru"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/SetÅÃdit vybrané/Podle Äasu"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Chyba pÅi zapisovánà seznamu skladeb \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s už existuje. PokraÄovat?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Nelze uložit seznam skladeb. Neznámý typ souboru %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "NaÄÃst seznam skladeb"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Uložit seznam skladeb"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Editor seznamu skladeb"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Vzhled"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Ekvalizér"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Myš"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Seznam skladeb"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Moduly"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "UmÄlec"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "ÄÃslo stopy"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Cesta k souboru"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Povolený"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Popis"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Kategorie"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Okno nastavenÃ"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "PÅidat/otevÅÃt soubory"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "OtevÅÃt soubory"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "ZavÅÃt dialog pÅi otevÅenÃ"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "PÅidat soubory"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "ZavÅÃt dialog pÅi pÅidánÃ"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (neplatné UTF8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Nastavenà BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Moduly</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Seznam pÅehrávacÃch modulů"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Média</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Seznam obecných modulů:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Obecné</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Seznam vizualizaÄnÃch modulů"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>VizualizaÄnÃ</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Seznam efektových modulů"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efekty</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_SouÄasný výstupnà modul"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"ZmÄny jsou uloženy ale projevà se až pÅi pÅehrávánà dalÅ¡Ã skladby.\n"
+"\n"
+"Po zastavenà a znovuspuÅ¡tÄnà se zmÄny samozÅejmÄ projevà i u souÄasné "
+"skladby."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Výstup</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Vzhled</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Fonty</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "V oknÄ _pÅehrávaÄe:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "V seznamu sklade_b:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Font v hlavnÃm oknÄ pÅehrávaÄe:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Font v seznamu skladeb:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Různé</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Zobrazit ÄÃsla stop v seznamu skladeb"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "PoužÃt vlastnà kurzory"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Myš</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>KoleÄko myÅ¡i</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "MyÅ¡Ã koleÄko zmÄnà hlasitost o"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "procent."
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Myš posune seznam skladeb o"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "Åádek"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Seznam skladeb</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Jméno souboru</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "PÅevést podtržÃtka na mezery"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "PÅevést %20 na mezery"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadata</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "NaÄÃst metadata (tagy) z hudebnÃch souborů."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "NaÄÃst metadata ze seznamů skladeb a souborů"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"NaÄÃst metadata pÅi vloženà souboru do seznamu skladeb nebo pÅi otevÅenÃ"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "PÅi nahránÃ"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "NaÄÃst metadata na vyžádánà pÅi zobrazenà souboru v seznamu skladeb"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "PÅi zobrazenÃ"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>PÅehrávánÃ</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "Po pÅehránà skladby nepÅecházet automaticky na následujÃcÃ."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ne v seznamu skladeb"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pauza mezi skladbami"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pozastavit na"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "sec."
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Zobrazenà skladby</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Vlastnà ÅetÄzec:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"NÃZEV\n"
+"INTERPRET - NÃZEV\n"
+"INTERPRET - ALBUM - NÃZEV\n"
+"ALBUM - NÃZEV\n"
+"VlastnÃ"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Zobrazit informace o formátu titulku"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ekvalizér</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>PÅedvolby</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "AdresáŠs pÅedvolbami:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "PÅÃpony souborů s pÅedvolbami:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "Dostupné _pÅedvolby:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "ZavÅÃt dialog pÅi pÅidánÃ"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Vybrat vše"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Odebrat vše"
+
+#~ msgid "Default skin:"
+#~ msgstr "Standardnà skin:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "NepodaÅilo se inicializovat gnome-vfs.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/NepÅecházet na dalÅ¡Ã skladbu"
+
+#~ msgid "/By extension"
+#~ msgstr "/Podle pÅÃpony"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/cy.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3926 @@
+# Welsh translation of BMP.
+# Copyright (C) 2004 Edward Brocklesby <ejb at goth.net>
+# This file is distributed under the same license as the BMP package.
+# ejb <ejb at goth.net>, 2004.
+#
+# Based on XMMS from Rhoslyn Prys <rhoslyn.prys at meddal.org.uk>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-02-03 23:28+0000\n"
+"Last-Translator: Edward Brocklesby <ejb at goth.net>\n"
+"Language-Team: Welsh\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Ategyn sain CD"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Trac CD Sain %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(anhysbys)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Gyrrwr %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Meth agor dyfais %s\n"
+"Gwall: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Methu darllen \"Tabl Cynnwys\"\n"
+"Efallai bod dim disg yn y gyrrwr?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Dyfais %s Iawn.\n"
+"%d trac ar y ddisg"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d trac data)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Cyfanswm hyd: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Prawf o'r echdyniad sain digidol: Iawn.\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Methwyd y prawf o'r echdyniad sain digidol: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Methu gwirio'r cyfeiradur %s\n"
+"Gwall: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Gwall: %s yn bodoli ond nid yw'n gyfeiradur"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Cyfeiriadur %s Iawn"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Dyfais:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Dyfais:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Cyfeiriadur:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Modd Chwarae:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analog"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Echdyniad sain digidol"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Rheolydd Lefel Sain:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Dim cymysgwr"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "Gyrrwr CDROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Cymysgwr OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Gwirio'r gyrrwr..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Tynnu gyrrwr"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Ffurfweddiad Chwareydd CD Sain"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Ychwaneg gyrrwr"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Dyfais"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Defnyddiwch CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Estyn rhestr gwasanaethwr"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Dangos ffenestr rhwydwaith"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Gweinydd CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "Mynegai CD:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Defnyddiwch Fynegai'r CD"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Gwasanaethwr Mynegai CD:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Enwau'r Traciau:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Diystyru'r teitlau cyffredinol"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Fformat enw:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Gwybodaeth am yr CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Dewis y cyfeiriadur lle rydych am gadw llif MPEG:"
+
+#: Input/mpg123/configure.c:344
+#, fuzzy
+msgid "MPEG Audio Plugin Configuration"
+msgstr "bmp: Ffurfweddu Ategyn sain MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Cydraniad:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 did"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 did"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Sianeli:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (os ar gael)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Unsain"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Sampl i lawr:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1·(44·kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2·(22·kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4·(11·kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dadgodiwr:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Canfod Awtomatig"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Dadgodiwr optimeiddiedig 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Dadgodiwr optimeiddiedig-MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "Dadgodiwr FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Dewisiadau"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Cynnwys"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Estyniad"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Estyniad a chynnwys"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dadgodiwr"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Byfferio:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Maint y byffer (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Cyn fyffer (y cant):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Dirprwy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Defnyddiwch ddirprwy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Gwesteiwr:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Porth:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Defnyddiwch ddilysu"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Enw defnyddiwr:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Cyfinair:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Cadw'r llif i ddisg:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Cadw'r llif i ddisg"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Llwybr:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Pori"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Galluogi Sianel Icecast Metadata UDP"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Llifol"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Tagiau ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Analluogi tagiau ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr ""
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Fformat ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Teitl"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr "%sMethu ysgrifennu i ffeil: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Methu ysgrifennu'r tag!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Methu agor ffeil '%s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Gwybodaeth Ffeil"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Iawn"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Meu tocio ffeil: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Methu tynnu'r tag!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Dim tagiau i'w tynnu!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Stereo ar y cyd"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Sianel deuol"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Sianel sengl"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d·KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld·Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Dim"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15·ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT·J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "No"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Yes"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Enw:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " Gwybodaeth MPEG:"
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "Math MPEG"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+#, fuzzy
+msgid "Bit rate:"
+msgstr "Bitrate:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Gradd samplo:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Fframiau:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Maint Ffeil:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Amddiffyniad gwall:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Hawlfraint:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Gwreiddiol:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Pwyslais:"
+
+#: Input/mpg123/fileinfo.c:851
+#, fuzzy
+msgid " ID3 Tag "
+msgstr " Tag ID3"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Teitl:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artist:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Albwm:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Sylw:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Blwyddyn:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Rhif y Trac:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Math:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "Amherthnasol"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Anrywiad,\n"
+"avg. bitrate: %d Kbit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu beit"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Gwall"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "CHWILIO %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Methu chwilio am westeiwr %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "CYSYLLTU A %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Methu cysylltu â gwesteiwr %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "WEDI CYSYLLTU: AROS AM ATEB"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Methu cysylltu â'r gwesteiwr %s\n"
+"Adroddod y gwasanaethwr: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "RHAG-BYFFYRIO: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Y Felan"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Roc Clasurol"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dawns"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disgo"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Ffync"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grynj"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "Oes Newydd"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Rhai Hen"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Arall"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Roc"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Tecno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranciau"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Trac Sain"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Lleisiol"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Clasurol"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Offerynnol"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Asid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Gêm"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Clip Sain"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Efengyl"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Swn"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bas"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Pync"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Gofod"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Synfyfyriol"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Pop Offerynnol"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Roc Offerynnol"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ethnig"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothig"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Tecno-Diwylliannol"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electronig"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop Gwerin"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Breuddwyd"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Roc y De"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedi"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cwlt"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "40 Uchaf"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Rap Cristnogol"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Ffync"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jyngl"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Pync Asid"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Jazz Asid"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Cerddorol"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Roc a Rol"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Roc Caled"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Gwerin"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Gwerin/Roc"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Gwerin Cenedlaethol"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Lladin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtaidd"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Roc Gothig"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Roc Araf"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustig"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Hiwmor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Llafar"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Cerdd cerddorfa fechan"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Simffoni"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Bas Bwti"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primws"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Grwf Porn"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Gwatwar"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Jam Araf"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Clwb"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Llen werin"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Balad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Balad Pwer"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Sôl â rhythm"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Agored"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Deuawd"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Pync"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Unawd drymiau"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Ewro-Hows"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Neuadd Ddawns"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drwm a Bas"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Clwb-Hows"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Annibyn"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpync"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Pync"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Bît"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Gangsta Rap Cristnogol"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Hefi Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Metal ddu"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Cristnogol Diweddar"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Roc cristnogol"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Cweir metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Ynghylch ategyn sain MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"injan dadgodio mpg123 gan Michael Hipp \n"
+"Atodyn gan The XMMS team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Ategyn sain MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Dewiswch y cyfeiriadur lle rydych am gadw'r llif Ogg Vorbid:"
+
+#: Input/vorbis/configure.c:275
+#, fuzzy
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "bmp: Ffurfwedd Ategyn sain Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Tagiau Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Fformat y teitl:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Gosodiadau'r ReplayGain:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Galluogi Atal Clipio"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Galluogi ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Math ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "defnyddiwch Cynnydd/Brig Trac"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "defnddio Cynnydd/Brig Albwm"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Galluogi Chwydd 6dB a Hard Limiting"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Digwyddodd gwall:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Gwall!"
+
+#: Input/vorbis/fileinfo.c:242
+#, fuzzy
+msgid "Failed to modify tag (open)"
+msgstr "Methu newid tag"
+
+#: Input/vorbis/fileinfo.c:295
+#, fuzzy
+msgid "Failed to modify tag (close)"
+msgstr "Methu newid tag"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Methu newid tag"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Tag Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Dyddiad:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Disgrifiad:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Lleoliad:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Fersiwn:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Rhif ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Sefydliad:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " ReplayGain Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Cynnydd trac:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Brig trac:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Cynydd albwm:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Brig albwm:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Gwybodaeth am Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Hyd:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d Kbit/s (enwol)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d·Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Beit"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ategyn sain Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ynghylch ategyn sain Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis Plugin gan y Xiph.org Foundation\n"
+"\n"
+"Cod gwreiddiol gan\n"
+"Tony·Arcieri·<bascule at inferno.tusculum.edu>\n"
+"Contributions·from\n"
+"Chris·Montgomery·<monty at xiph.org>\n"
+"Peter·Alm·<peter at xmms.org>\n"
+"Michael·Smith·<msmith at labyrinth.edu.au>\n"
+"Jack·Moffitt·<jack at icecast.org>\n"
+"Jorn·Baayen·<jorn at nl.linux.org>\n"
+"Haavard·Kvaalen·<havardk at xmms.org>\n"
+"Gian-Carlo·Pascutto·<gcp at sjeng.org>\n"
+"\n"
+"Ewch i Xiph.org Founfation yn http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Ategyn sain WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "Ategyn Allbwn OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Ynghylch Gyrrwr OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Gyrrwr OSS XMMS\n"
+"\n"
+"Mae'r rhaglen hwn yn feddalwedd rhydd; cewch ei ailddosbarthu a/neu\n"
+"ei newid o dan amodau'r Drwydded Gyhoeddus Gyffredinol GNU fel y'i\n"
+"cyhoeddwyd gan y Free Software Foundation; un ai fersiwn 2 o'r\n"
+"drwydded neu yn ôl eich dewis) unrhyw fersiwn arall.\n"
+"\n"
+"Mae'r rhaglen yn cael ei ddosbarthu yn y gobaith y byddwch yn ei gael\n"
+"yn ddefnyddiol, on HEB UNRHYW WARANT; heb hyd yn oed awgrym\n"
+"o warant MASNACHOL neu ADDASRWYDD AR GYFER UNRHYW\n"
+"BWRPAS. Gw. y drwydded Gyhoeddus Gyffredin am ragor o wybodaeth.\n"
+"\n"
+"Dylech fod wedi derbyn copi o'r Drwydded gyda'r rhaglen; os nad cysylltwch\n"
+"â 'r Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Rhagosodedig (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Rhagosodedig"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr " Ffurfweddu'r Gyrrwr OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Dyfais sain:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Defnyddiwr ddyfais arall:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Dyfais cymysgu:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Dyfeisiau"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Maint y byffer (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Byfferio"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Gosodiadau Cymysgu:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Nid yw'r Prif rheolwr sain yn PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Cymysgydd"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Ynghylch Ategyn ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Ategyn ESounD XMMS\n"
+"Mae'r·rhaglen·hwn·yn·feddalwedd·rhydd;·cewch·ei·ailddosbarthu·a/neu\n"
+"ei·newid·o·dan·amodau'r·Drwydded·Gyhoeddus·Gyffredinol·GNU·fel·y'i\n"
+"cyhoeddwyd·gan·y·Free·Software·Foundation;·un·ai·fersiwn·2·o'r\n"
+"drwydded·neu·yn·ôl·eich·dewis)·unrhyw·fersiwn·arall.\n"
+"\n"
+"Mae'r·rhaglen·yn·cael·ei·ddosbarthu·yn·y·gobaith·y·byddwch·yn·ei·gael\n"
+"yn·ddefnyddiol,·on·HEB·UNRHYW·WARANT;·heb·hyd·yn·oed·awgrym\n"
+"o·warant·MASNACHOL·neu·ADDASRWYDD·AR·GYFER·UNRHYW\n"
+"BWRPAS.·Gw.·y·drwydded·Gyhoeddus·Gyffredin·am·ragor·o·wybodaeth.\n"
+"\n"
+"Dylech·fod·wedi·derbyn·copi·o'r·Drwydded·gyda'r·rhaglen;·os·nad·cysylltwch\n"
+"â·'r·Free·Software·Foundation,·Inc.,·59·Temple·Place·-·Suite·330,·Boston,\n"
+"MA·02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Ffurfwedd Ategyn Allbwn ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Defnyddio gwesteiwr pell"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Rheolwr sain cymysgydd OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Gweinydd"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Ategyn Allbwn eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Ynghylch Gyrrydd ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"Ategyn ALSA XMMS\n"
+"\n"
+"Mae'r rhaglen hon yn feddalwedd rhydd; medrwch ei ailddosbarthu\n"
+"a/neu ei newid o dan amodau Trwydded Gyhoeddus Gyffredinol GNU\n"
+"fel sydd wedi ei gyhoeddi gan y Free Software Foundation; un ai fersiwn\n"
+"2 neu (yn ôl eich dewis) unrhyw fersiwn diweddarach.\n"
+"\n"
+"Mae'r rhaglen yn cael ei ddosbarthu yn y gobaith y bydd yn ddefnyddiol,\n"
+"ond HEB UNRHYW WARANT; heb hyd yn oed awgrym o warant o\n"
+"FASNACHEIDDRWYDD nag ADDASRWYDD AR GYFER PWRPAS\n"
+"PENODOL. Gweler Trwydded Gyhoeddus Gyffredinol GNU am fwy o\n"
+"wybodaeth.\n"
+"\n"
+"Dylech fod wedi derbyn copi o Drwydded Gyhoeddus Gyffredinol GNU\n"
+"gyda'r rhaglen; os nad, ysgrifennwch at:\n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"MA 02111-1307, USA\n"
+"Awdur: Matthieu·Sozeau·(mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, fuzzy, c-format
+msgid "ALSA %s output plugin"
+msgstr "Ategyn Allbwm ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr ""
+
+#: Output/alsa/configure.c:217
+#, fuzzy, c-format
+msgid "Default PCM device (%s)"
+msgstr "Rhagosodedig (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Ffurfwedd Ategyn ALSA"
+
+#: Output/alsa/configure.c:308
+#, fuzzy
+msgid "Mixer:"
+msgstr "Cymysgydd"
+
+#: Output/alsa/configure.c:316
+#, fuzzy
+msgid "Use software volume control"
+msgstr "Rheolydd Lefel Sain:"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Dyfais cymysgu:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Gosodiadau Dyfais"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Gosodiadau Uwch:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Amser byffer (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Cyfnod Amser (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Amser byffer (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Modd Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Gosodiadau Uwch"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Newid Addurniadau Ffenestr"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Cau"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Dewis lliw"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Dewisiadau:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Perfformiwr/Artist"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Albwm"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Math"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Enw ffeil"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Llwybr ffeil"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Estyniad ffeil"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Enw trac"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Rhif y Trac"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Dyddiad"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Blwyddyn"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Sylwad"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+
+#: beep/about.c:48
+#, fuzzy
+msgid "Developers:"
+msgstr "Dadgodiwr:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr ""
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr ""
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr ""
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr ""
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr ""
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr ""
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr ""
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr ""
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr ""
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr ""
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr ""
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr ""
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr ""
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr ""
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr ""
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr ""
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr ""
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr ""
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+#, fuzzy
+msgid "Chinese:"
+msgstr "Sianeli:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr ""
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+#, fuzzy
+msgid "Dutch:"
+msgstr "Deuawd"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr ""
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr ""
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr ""
+
+#: beep/about.c:114
+#, fuzzy
+msgid "German:"
+msgstr "Math:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr ""
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Math:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "Math:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr ""
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr ""
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr ""
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr ""
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr ""
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr ""
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr ""
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr ""
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr ""
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr ""
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr ""
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr ""
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr ""
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Sefydliad:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr ""
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Ynghylch BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr ""
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "CYNAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Llwytho"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Llwytho/Rhagosod"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Llwytho/Awtolwytho rhagosod"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Llwytho/Rhagosodedig"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Llwytho/Sero"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Llwytho/O'r ffeil"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Llwytho/O'r ffeil WinAMP EQF"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "Mewnforio"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Mewnforio/Rhagosodiadau WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Cadw"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Cadw/Rhagosodiadau"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Llwytho/Awtolwytho rhagosod"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "Cadw/Rhagosodedig"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Cadw/I ffeil"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Cadw/I ffeil WinAMP EQF"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Dileu"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Dileu/Rhagosodiadau"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Dileu/Awtolwytho Rhagosodiadau"
+
+#: beep/equalizer.c:741
+#, fuzzy
+msgid "BMP Equalizer"
+msgstr "bmp: Hafalydd"
+
+#: beep/equalizer.c:1366
+#, fuzzy
+msgid "Preset"
+msgstr "Rhagosodau"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Rhagosodau"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Llwytho'r rhagosodiadau"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Llwytho'r awto-rhagosodiadau"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Llwytho rhagosodiadau'r hafalydd"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Cadw'r rhagosodiadau"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Cadw'r awto-ragosodiadau"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Cadw rhagosodiadau'r hafalydd"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Dileu'r rhagosodiadau"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Dileu'r awto-ragosodiadau"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: dewis `%s' yn aneglur\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: dewis `- nid yw -%s' yn caniatáu ymresymiad\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: dewis `- nid yw -%c%s' yn caniatáu ymresymiad\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: dewis `%s' angen ymresymiad\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: dewis heb ei adnabod `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: dewis heb ei adnabod `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: dewis anghyfreithlon -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: dewis annilys-- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: dewis angen ymresymiad -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: dewis `-W %s' yn aneglur\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: dewis `- nid yw -W %s' yn caniatáu ymresymiad\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Peidio â dangos y r rhybydd yma eto."
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr ""
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Enw ffeil"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Enw ffeil:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Ategyn mewnbwn heb adnabod y ffeil"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Ategyn mewnbwn: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Methu creu'r ffeil gofnod (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Chwaraewr Cyfryngau Beep"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Methu Creu Cyfrifiadur (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Defnydd: beep-media-player [dewisiadau] [ffeiliau]...\n"
+"\n"
+"Dewisiadau:\n"
+"--------\n"
+
+#: beep/main.c:630
+#, fuzzy
+msgid "Display this text and exit"
+msgstr "Dangos y testun hwn a gadael."
+
+#: beep/main.c:633
+#, fuzzy
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Dewis sesiwn XMMS (Rhagosodedig: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Sgipio nôl yn y rhestr chwarae"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Cychwyn chwarae'r rhestr chwarae"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Oedi'r gân"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Atal y gân"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Oedi os yn chwarae, chwarae fel arall"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Sgipio mlaen yn y rhestr chwarae"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Peidio clirio'r rhestr chwarae"
+
+#: beep/main.c:657
+#, fuzzy
+msgid "Show the main window"
+msgstr "Dangos y brif ffenestr."
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "Dynodwr sesiwn blaenorol"
+
+#: beep/main.c:666
+#, fuzzy
+msgid "Print version number and exit\n"
+msgstr "Argraffu rhif y fersiwn a gadael."
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Yn anffodus ni fydd eich fersiwn o GTK+ (%d.%d.%d) yn gweithio gyda BMP\n"
+"Defnyddiwch GTK+ %s neu ddiweddarach.\n"
+
+#: beep/main.c:910
+#, fuzzy
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Ymddiheuriad, nid yw'r trywydd yn cael ei gynnal ar eich platfform\n"
+"\n"
+"Os ydych ar system linux libc5 ac wedi gosod GLIB a GTK cyn gosod "
+"LinuxThreads\n"
+"bydd angen i chi ailgrynhoi GLIB a GTK+\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BPM: Methu agor dangosydd, yn gadael."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Dangos Manylion Trac"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Awtosgrolio Enw Cân"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Modd Delweddu"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Modd Delweddu/Dadansoddwr"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Modd Delweddu/Cwmpas"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Modd Delweddu/Diffodd"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Modd Dadansoddwr"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Modd Dadansoddwr/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Modd Dadansoddwr/Tân"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Modd Dadansoddwr/Llinellau Fertigol"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Modd Dadansoddwr/Llinellau"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Modd Dadansoddwr/Barau"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Modd Dadansoddwr/Brigau"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Modd Cwmpas"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Modd Cwmpas/Cwmpas Dot"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Modd Cwmpas/Cwmpas Llinell"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Modd Cwmpas/Cwmpas Solet"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Modd WindowShade VU"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Modd WindowShade VU/Normal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Modd WindowShade VU/Llyfn"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Graddfa Adnewyddu"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Graddfa Adnewyddu/Llawn (~50fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Graddfa Adnewyddu/Hanner (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Graddfa Adnewyddu/Chwarter (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Graddfa Adnewyddu/Wythfed (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Cwymp Dadansoddwr"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Cwymp Dadansoddwr/Arafaf"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Cwymp Dadansoddwr/Araf"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Cwymp Dadansoddwr/Canolig"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Cwymp Dadansoddwr/Cyflym"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Cwymp Dadansoddwr/Cyflymaf"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Cwymp Brigau"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Cwymp Brigau/Arafaf"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Cwymp Brigau/Araf"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Cwymp Brigau/Canolig"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Cwymp Brigau/Cyflym"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Cwymp Brigau /Cyflymaf"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Ailadrodd"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Cymysgu"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Chwarae"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Seibio"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Atal"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Blaenorol"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Nesaf"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Neidio i dechrau'r rhestr chwarae"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Neidio i Ffeil"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Neidio i Amser"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Dewisiadau"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Ynghylch BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Gadael"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Dangos Golygydd Rhestr Chwarae"
+
+#: beep/mainwin.c:403
+#, fuzzy
+msgid "/Show Equalizer"
+msgstr "bmp: Hafalydd"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Amser aeth Heibio"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Amser yn Weddill"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Bob Tro ar yr Wyneb"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+#, fuzzy
+msgid "/Roll up Playlist Editor"
+msgstr "/Dangos Golygydd Rhestr Chwarae"
+
+#: beep/mainwin.c:420
+#, fuzzy
+msgid "/Roll up Equalizer"
+msgstr "/Ffurfweddiu'r Hafalydd"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr ""
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+#, fuzzy
+msgid "Jump to Time"
+msgstr "/Neidio i Amser"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "munudau:eiliadau"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Hyd trac:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "/_Ychwanegu"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "/_Ychwanegu"
+
+#: beep/mainwin.c:1618
+#, fuzzy
+msgid "Jump to Track"
+msgstr "bmp: Neidio i drac"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Hidl:"
+
+#: beep/mainwin.c:1884
+#, fuzzy
+msgid "Add Folders"
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "CHWILIO HYD: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "LEFEL SAIN: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "CYDBWYSEDD: %d%% CHWITH"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "CYDBWYSEDD: CANOL"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "CYDBWYSEDD: %d%% DE"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "DEWISLEN DEWIS"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ANALLUOGI AR YR WYNEB BOB TRO"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "GALLUOGI AR YR WYNEB BOB TRO"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ANALLUOGI AR YR WYNEB"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "GALLUOGI AR YR WYNEB"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "BLWCH GWYBODAETH FFEIL"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "DEWISLEN DELWEDDU"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+
+#: beep/mainwin.c:2627
+#, fuzzy
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"Methu agor y sain\n"
+"Gwiriwch:\n"
+"\n"
+"1. Eich bod wedi dewis yr ategyn allbwn cywir\n"
+"2. Nid oes rhaglen arall yn rhwystro'r cerdyn sain\n"
+"3. Bod eich cerdyn sain wedi ei ffurfweddu'n gywir"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Tynnu'r Dewis"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/Tynnu'r Dewis"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "Tynnu gyrrwr"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Ychwanegu neu Dynnu i/o'r Ciw"
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/Ychwanegu·URL..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Clirio'r Rhes"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Gwaredu Ffeiliau Annilys"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Rhestr Newydd"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/Rhestr Didoli"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Rhestr Newydd"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Diweddaru Gweld"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Dewis Didoli"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/Dewis Didoli"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr ""
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Hapio'r Rhestr"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Cildroi'r Rhestr"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Rhestr Didoli"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Rhestr Didoli/Yn ôl Teitl"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Rhestr Didoli/Yn ôl Enw Ffeil"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Rhestr Didoli/Yn ôl Llwybr + Enw ffeil"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Rhestr Didoli/Yn ôl Dyddiad"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Dewis Didoli"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Dewis Didoli/Yn ôl Teitl"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Dewis Didoli/Yn ôl Enw Ffeil"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Dewis Didoli/Yn ôl LLwybr + Enw Ffeil"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Dewis Didoli/Yn ôl Dyddiad"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Gwall ysgrifennu'r rhestr chwarae \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, fuzzy, c-format
+msgid "%s already exist. Continue?"
+msgstr "Mae'r ffeil %s yn bodoli eisioes."
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Methu cadw'r rhestr chwarae"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Llwytho'r rhestr chwarae"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Cadw'r Rhestr Chwarae"
+
+#: beep/playlistwin.c:1675
+#, fuzzy
+msgid "BMP Playlist Editor"
+msgstr "/Dangos Golygydd Rhestr Chwarae"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+#, fuzzy
+msgid "Appearance"
+msgstr "Trance"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+#, fuzzy
+msgid "Equalizer"
+msgstr "bmp: Hafalydd"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+#, fuzzy
+msgid "Mouse"
+msgstr "House"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+#, fuzzy
+msgid "Playlist"
+msgstr "/Rhestr Chwarae"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+#, fuzzy
+msgid "Plugins"
+msgstr "Ategynnau Mewnbwn"
+
+#: beep/prefswin.c:93
+#, fuzzy
+msgid "Artist"
+msgstr "Artist:"
+
+#: beep/prefswin.c:96
+#, fuzzy
+msgid "Tracknumber"
+msgstr "Rhif y Trac"
+
+#: beep/prefswin.c:99
+#, fuzzy
+msgid "Filepath"
+msgstr "Llwybr ffeil"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+#, fuzzy
+msgid "Enabled"
+msgstr " (galluog)"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+#, fuzzy
+msgid "Description"
+msgstr "Disgrifiad:"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr ""
+
+#: beep/prefswin.c:1630
+#, fuzzy
+msgid "Preferences Window"
+msgstr "/Dewisiadau"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/Tocio Ffeil"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+#, fuzzy
+msgid "Add Files"
+msgstr "/Ychwanegu Ffeiliau..."
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (UTF-8 annilys)"
+
+#: beep/glade/prefswin.glade:8
+#, fuzzy
+msgid "BMP Preferences"
+msgstr "/Dewisiadau"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:147
+#, fuzzy
+msgid "_Media plugin list:"
+msgstr "Swing"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:282
+#, fuzzy
+msgid "_General plugin list:"
+msgstr "Ategynnau cyffredinol"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:417
+#, fuzzy
+msgid "_Visualization plugin list:"
+msgstr "Ategynnau delweddu"
+
+#: beep/glade/prefswin.glade:514
+#, fuzzy
+msgid "<b>Visualization</b>"
+msgstr "/Modd Delweddu"
+
+#: beep/glade/prefswin.glade:552
+#, fuzzy
+msgid "_Effect plugin list:"
+msgstr "Ategynnau effeithiau"
+
+#: beep/glade/prefswin.glade:649
+#, fuzzy
+msgid "<b>Effects</b>"
+msgstr "Rhagosodau"
+
+#: beep/glade/prefswin.glade:693
+#, fuzzy
+msgid "_Current output plugin:"
+msgstr "Ategyn Allbwn eSound"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:951
+#, fuzzy
+msgid "<b>_Skin</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:1039
+#, fuzzy
+msgid "<b>_Fonts</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:1092
+#, fuzzy
+msgid "_Player:"
+msgstr "/Chwarae"
+
+#: beep/glade/prefswin.glade:1131
+#, fuzzy
+msgid "_Playlist:"
+msgstr "/Rhestr Chwarae"
+
+#: beep/glade/prefswin.glade:1159
+#, fuzzy
+msgid "Select main player window font:"
+msgstr "Dewis ffont y prif ffenestr"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Dewis ffont y rhestr chwarae:"
+
+#: beep/glade/prefswin.glade:1233
+#, fuzzy
+msgid "<b>_Miscellaneous</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:1285
+#, fuzzy
+msgid "Show track numbers in playlist"
+msgstr "Dangos rhifau ar y rhestr chwarae"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1455
+#, fuzzy
+msgid "<b>Mouse wheel</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Olwyn y llygoden yn newid Sain yn ôl (%)"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Llwytho'r rhestr chwarae"
+
+#: beep/glade/prefswin.glade:1596
+#, fuzzy
+msgid "lines"
+msgstr "Rhai Hen"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1751
+#, fuzzy
+msgid "<b>Filename</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:1789
+#, fuzzy
+msgid "Convert underscores to blanks"
+msgstr "Trosi tan linell yn ofod"
+
+#: beep/glade/prefswin.glade:1824
+#, fuzzy
+msgid "Convert %20 to blanks"
+msgstr "Trosi %20 yn ofod"
+
+#: beep/glade/prefswin.glade:1864
+#, fuzzy
+msgid "<b>Metadata</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:1901
+#, fuzzy
+msgid "Load metadata (tag information) from music files."
+msgstr "Darllen gwybodaeth tag o ffeil ar:"
+
+#: beep/glade/prefswin.glade:1903
+#, fuzzy
+msgid "Load metadata from playlists and files"
+msgstr "Defnyddio meta data mewn rhestrau chwarae"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1963
+#, fuzzy
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Darllen teitl a hyd cân pan yw'r gân i'w gweld ar y rhestr chwarae"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2013
+#, fuzzy
+msgid "<b>Playback</b>"
+msgstr "/Chwarae Nôl"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+
+#: beep/glade/prefswin.glade:2052
+#, fuzzy
+msgid "Don't advance in the playlist"
+msgstr "Peidio clirio'r rhestr chwarae"
+
+#: beep/glade/prefswin.glade:2087
+#, fuzzy
+msgid "Pause between songs"
+msgstr "Oedi rhwng caneuon am"
+
+#: beep/glade/prefswin.glade:2125
+#, fuzzy
+msgid "Pause for"
+msgstr "/Seibio"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "eiliad"
+
+#: beep/glade/prefswin.glade:2215
+#, fuzzy
+msgid "<b>Song display</b>"
+msgstr "_Hidl:"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2479
+#, fuzzy
+msgid "<b>Presets</b>"
+msgstr "Rhagosodau"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Ffeil rhagosodiadau'r cyfeiriadur:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Estyniad rhagosodiadau'r ffeil:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr ""
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr ""
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr ""
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "Galluogi llifo teitl SSHOUT/Icecast"
+
+#, fuzzy
+#~ msgid "Default skin:"
+#~ msgstr "Rhagosodedig (%s)"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/Ategynnau Delweddu"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Chwarae CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/Nôl 5 eiliad"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/Ymlaen 5 Eiliad"
+
+#~ msgid "/Playback"
+#~ msgstr "/Chwarae Nôl"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Dewisiadau"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/Dangos EQ Graffigol"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/Ail-lwytho'r croen"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Dim Symud Ymlaen Trwy'r Rhestr Chwarae"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/Dangos-ar bob penbwrdd"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/Modd WindowShade"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/Rhestr Chwarae Modd WindowShade"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/Modd WindowShade yr Hafalydd"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/Maint Dwbwl"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/Easy Move"
+
+#~ msgid "Jump to:"
+#~ msgstr "Neidio i:"
+
+#~ msgid "Jump"
+#~ msgstr "Neidio"
+
+#, fuzzy
+#~ msgid "Add URL"
+#~ msgstr "Ychwanegu URL..."
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "ANALLUOGI DOUBLESIZE"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "GALLUOGI DWBL MAINT"
+
+#~ msgid "/By extension"
+#~ msgstr "/Yn ôl estyniad"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Rhestr Chwarae"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Cau'r Ffenest"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Didoli yn ôl Teitl"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "Didoli yn ôl enw ffeil"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Didoli yn ôl dyddiad"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Methu dileu \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d o %d fefiliau wedi eu dileu'n llwyddiannus"
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "XMMS: Ffeiliau wedi eu dileu"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "Dileu ffeiliau %d go iawn?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "Dileu \"%s\"?"
+
+#, fuzzy
+#~ msgid "Play Files"
+#~ msgstr "bmp: Ffeiliau chwarae"
+
+#~ msgid "Load"
+#~ msgstr "Llwytho"
+
+#, fuzzy
+#~ msgid "Auto-load preset"
+#~ msgstr "/Llwytho/Awtolwytho rhagosod"
+
+#, fuzzy
+#~ msgid "Zero"
+#~ msgstr "Retro"
+
+#, fuzzy
+#~ msgid "From file"
+#~ msgstr "/Llwytho/O'r ffeil"
+
+#, fuzzy
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "/Llwytho/O'r ffeil WinAMP EQF"
+
+#, fuzzy
+#~ msgid "Import"
+#~ msgstr "Mewnforio"
+
+#, fuzzy
+#~ msgid "WinAMP presets"
+#~ msgstr "/Mewnforio/Rhagosodiadau WinAMP"
+
+#, fuzzy
+#~ msgid "To file"
+#~ msgstr "/Cadw/I ffeil"
+
+#, fuzzy
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "/Cadw/I ffeil WinAMP EQF"
+
+#, fuzzy
+#~ msgid "Configure Equalizer"
+#~ msgstr "/Ffurfweddiu'r Hafalydd"
+
+#, fuzzy
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "Scrolio teitl yn llyfn"
+
+#, fuzzy
+#~ msgid "Directory"
+#~ msgstr "Cyfeiriadur:"
+
+#, fuzzy
+#~ msgid "Directory browser"
+#~ msgstr "Ffeil rhagosodiadau'r cyfeiriadur:"
+
+#, fuzzy
+#~ msgid "Unplayable files - BMP"
+#~ msgstr "bmp: Ffeiliau sydd dim yn gallu gael eu chwarae"
+
+#, fuzzy
+#~ msgid "/Add/Directories..."
+#~ msgstr "/Ychwanegu Ffeiliau..."
+
+#, fuzzy
+#~ msgid "Add Directories... "
+#~ msgstr "/Ychwanegu Ffeiliau..."
+
+#, fuzzy
+#~ msgid "Look into sub_folders"
+#~ msgstr "Cynnwys is-gyfeiriaduron"
+
+#, fuzzy
+#~ msgid "<b>_Filter:</b>"
+#~ msgstr "_Hidl:"
+
+#, fuzzy
+#~ msgid "<b>Other options</b>"
+#~ msgstr "_Hidl:"
+
+#, fuzzy
+#~ msgid "Update playlist"
+#~ msgstr "Cadw'r Rhestr Chwarae"
+
+#~ msgid "Delete"
+#~ msgstr "Dileu"
+
+#~ msgid "Close"
+#~ msgstr "Cau"
+
+#, fuzzy
+#~ msgid "BMP Equalizer Preferences"
+#~ msgstr "bmp: Hafalydd"
+
+#, fuzzy
+#~ msgid "/Jump to Track"
+#~ msgstr "bmp: Neidio i drac"
+
+#~ msgid "/Save as..."
+#~ msgstr "/Cadw Fel..."
+
+#, fuzzy
+#~ msgid "A_dd all"
+#~ msgstr "Ychwanegu Popeth"
+
+#~ msgid "Play"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "<b>_Playlist font:</b>"
+#~ msgstr "Ffont Rhestr Chwarae:"
+
+#, fuzzy
+#~ msgid "<b>_Main window font:</b>"
+#~ msgstr "Ffont Prif Ffenestr"
+
+#~ msgid "User defined:"
+#~ msgstr "Diffiniwyd gan y Defnyddiwr:"
+
+#~ msgid "Mixer device"
+#~ msgstr "Dyfais cymysgu"
+
+#, fuzzy
+#~ msgid "Settings"
+#~ msgstr "Gosodiadau Cymysgu:"
+
+#, fuzzy
+#~ msgid "BMP: Add Directories... "
+#~ msgstr "/Ychwanegu Ffeiliau..."
+
+#~ msgid "Import equalizer presets"
+#~ msgstr "Mewnforio rhagosodiadau'r hafalydd"
+
+#~ msgid "Version: %s"
+#~ msgstr "Fersiwn: %s"
+
+#~ msgid "/Skin Browser"
+#~ msgstr "/Porwr Croen"
+
+#~ msgid "Plugin Name"
+#~ msgstr "Enw Ategyn"
+
+#~ msgid "Enable plugin"
+#~ msgstr "Galluogu atodyn"
+
+#~ msgid "Output Plugin"
+#~ msgstr "Ategyn Allbwn"
+
+#~ msgid "Effects Plugins"
+#~ msgstr "Ategynnau Effeithiau"
+
+#~ msgid "Configure"
+#~ msgstr "Ffurfweddu"
+
+#~ msgid "About"
+#~ msgstr "Ynghylch"
+
+#~ msgid "General Plugins"
+#~ msgstr "Ategynnau Cyffredinol"
+
+#~ msgid "Visualization Plugins"
+#~ msgstr "Ategynnau Delweddu"
+
+#, fuzzy
+#~ msgid "Read song information only when starting to play"
+#~ msgstr "Darllen teitl a hyd cân wrth gychwyn canu yn unig"
+
+#~ msgid "Demand"
+#~ msgstr "Gofyn"
+
+#, fuzzy
+#~ msgid "Read song information as soon as the song is loaded to the playlist"
+#~ msgstr ""
+#~ "Darllen teitl a hyd câ gynted a'i bod yn cael ei llwytho i'r rhestr "
+#~ "chwarae"
+
+#~ msgid "Sort \"Jump to file\" alphabetically"
+#~ msgstr "Trefnu \"Neidio i ffeil\" yn ôl trefn yr wyddor"
+
+#~ msgid "Allow multiple instances"
+#~ msgstr "Caniatáu engrheifftiau aml"
+
+#, fuzzy
+#~ msgid "Show window decorations"
+#~ msgstr "Dangos addurniadau'r rheolwr ffenestr"
+
+#~ msgid "Always show clutterbar"
+#~ msgstr "Dangos y bar deunydd"
+
+#, fuzzy
+#~ msgid ""
+#~ "The \"clutterbar\" is the row of buttons at the left side of the main "
+#~ "window"
+#~ msgstr ""
+#~ "Y \"bar clwstwr\" yw'r rhes o ftotymau ar ochr chwith y brif ffenestr"
+
+#~ msgid "Save window positions"
+#~ msgstr "Cadw safleoedd ffenestri"
+
+#~ msgid "Dim titlebar when inactive"
+#~ msgstr "Tywyllu'r bar teitl pan yn segur"
+
+#~ msgid "Equalizer doublesize linked"
+#~ msgstr "Cysylltwyd cydrannydd maintdwbl"
+
+#~ msgid "Use '\\' as a directory delimiter"
+#~ msgstr "Defnyddiwch '\\' fel amffinydd cyfeiriadur"
+
+#~ msgid "pixels"
+#~ msgstr "picseli"
+
+#, fuzzy
+#~ msgid "%"
+#~ msgstr "%d"
+
+#~ msgid "Audio I/O Plugins"
+#~ msgstr "Ategynnau Allbwn/Mewnbwn Sain"
+
+#~ msgid "Fonts"
+#~ msgstr "Wynebfathau"
+
+#, fuzzy
+#~ msgid "BMP Skin Browser"
+#~ msgstr "/Porwr Croen"
+
+#~ msgid "Select random skin on play"
+#~ msgstr "Dewis croen ar hap wrth chwarae"
+
+#, fuzzy
+#~ msgid "/_Collapse"
+#~ msgstr "/Cau"
+
+#, fuzzy
+#~ msgid "/Rename"
+#~ msgstr "Enw ffeil"
+
+#~ msgid "/New Playlist"
+#~ msgstr "/Rhestr Chwarae Newydd"
+
+#~ msgid "Searching folders..."
+#~ msgstr "Chwilio ffolderi..."
+
+#~ msgid "bmp: Jump to time"
+#~ msgstr "bmp: Neidio i'r Amser"
+
+#~ msgid "Cannot play CD"
+#~ msgstr "Methu chwarae CD"
+
+#~ msgid "bmp: Add Files..."
+#~ msgstr "bmp: Ychwanegu·Ffeiliau..."
+
+#~ msgid "bmp: Configure Equalizer"
+#~ msgstr "bmp: Ffurfweddu'r Cyfartalydd"
+
+#~ msgid "bmp"
+#~ msgstr "bmp"
+
+#~ msgid "Unable to write playlist!"
+#~ msgstr "Methu ysgrifennu i'r rhestr chwarae!"
+
+#~ msgid "bmp: Error: File exists!"
+#~ msgstr "bmp: Gwall: Ffeil yn bod!"
+
+#~ msgid "Overwrite"
+#~ msgstr "Trosysgrifo"
+
+#~ msgid "Unknown filetype for %s"
+#~ msgstr "Math anhysbys o ffeil ar gyfer %s"
+
+#~ msgid "Save options"
+#~ msgstr "Dewisiadau cadw"
+
+#~ msgid "Determine file type:"
+#~ msgstr "Penderfynnu'r math o ffeil:"
+
+#~ msgid "bmp: Error: Delete files?"
+#~ msgstr "bmp: Gwall: Dileu ffeiliau?"
+
+#~ msgid "Warning"
+#~ msgstr "Rhybudd"
+
+#~ msgid ""
+#~ "Realtime priority is a way for BMP to get a higher\n"
+#~ "priority for CPU time. This might give less \"skips\".\n"
+#~ "\n"
+#~ "This requires that BMP is run with root privileges and\n"
+#~ "may, although it's very unusal, lock up your computer.\n"
+#~ "Running BMP with root privilegies might also have\n"
+#~ "security implications.\n"
+#~ "\n"
+#~ "Using this feature is not encouraged.\n"
+#~ "To activate this you need to restart BMP."
+#~ msgstr ""
+#~ "Mae blaenoriaeth Realtime yn ffordd i BMP gael\n"
+#~ "blaenoriaeth uwch o amser y CPU. Efallai bydd hyn yn\n"
+#~ " rhoi llai o \"sgipio\"\n"
+#~ "\n"
+#~ "Mae hyn yn gofyn i BMP gael ei redeg heb freintiau gwraidd\n"
+#~ "a gall gloi eich cyfrifiadur, er bod hynny'n anarferol.\n"
+#~ "Mae i redeg BMP gyda breintiau gwraidd yn codi peryglon\n"
+#~ "diogelwch\n"
+#~ "\n"
+#~ "Nid ydym yn argymell hyn\n"
+#~ "I'w gychwyn rhaid ail gychwyn BMP."
+
+#~ msgid "Transparent playlist window"
+#~ msgstr "Ffenestr rhestr chwara tryloyw"
+
+#~ msgid "Use realtime priority when available"
+#~ msgstr "Defnyddio blaenoriaeth realtime pan yw ar gael"
+
+#~ msgid "Run BMP with higher priority (not recomended)"
+#~ msgstr "Rhedeg BMP gyda blaenoriaeth uwch (anghymeradwy)"
+
+#~ msgid "Snap windows at"
+#~ msgstr "Taro ffenestr yn"
+
+#~ msgid "bmp: Preferences and Settings"
+#~ msgstr "bmp: Dewisiadau a Gosodiadau"
+
+#~ msgid "(none)"
+#~ msgstr "(dim)"
+
+#~ msgid "bmp: Add Url..."
+#~ msgstr "bmp: Ychwanegu·URL..."
+
+#~ msgid "bmp: Load files"
+#~ msgstr "bmp: Llwytho ffeiliau"
+
+#~ msgid "Bitrate:"
+#~ msgstr "Bitrate:"
+
+#~ msgid "n/a"
+#~ msgstr "amh."
+
+#~ msgid "Samplerate:"
+#~ msgstr "Graddfa samplio"
+
+#~ msgid "Filesize:"
+#~ msgstr "Maint Ffeil"
+
+#~ msgid "Files: %d"
+#~ msgstr "Ffeiliau: %d"
+
+#~ msgid "/View Track details"
+#~ msgstr "/Dangos Manylion Trac"
+
+#~ msgid "bmp: Playlist editor"
+#~ msgstr "bmp: Golygydd Rhestr Chwarae"
+
+#~ msgid "bmp: Skin browser"
+#~ msgstr "bmp: Porwr Croen"
+
+#~ msgid "bmp: Skin Browser"
+#~ msgstr "bmp: Porwr Croen"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/de.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3481 @@
+# German translation for BMP
+# Copyright (C) 2004 Matthias Debus <psic4t at netbands.de>
+# This file is distributed under the same license as the BMP package.
+# Matthias Debus <psic4t at netbands.de>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: de\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-11-19 04:17+0100\n"
+"Last-Translator: Matthias Debus <psic4t at netbands.de>\n"
+"Language-Team: german <psic4t at netbands.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD Audio-Plugin "
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD Audio-Titel %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(unbekannt)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Laufwerk %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Konnte Gerät %s nicht öffnen\n"
+"Fehler: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Konnte Inhaltsverzeichnis nicht öffnen\n"
+"Ist kein Medium im Laufwerk?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Gerät %s OK.\n"
+"Auf dem Medium sind %d Titel"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d Daten-Tracks)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Komplette Länge: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Die digitale Audioextraktion wurde nicht getestet, da sich keine Audiotracks "
+"auf der Disk befinden\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Test der digitalen Audioextraktion: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Test der digitalen Audioextraktion fehlgeschlagen: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Ãberprüfung des Verzeichnisses %s fehlgeschlagen\n"
+"Fehler: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Fehler: %s existiert, ist aber kein Verzeichnis"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Verzeichnis: %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Gerät:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Gerät:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Verz_eichnis:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Wiedergabemodus:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analog"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Digitale Audioextraktion"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Lautstärke anpassen:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Kein Mixer"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM-Laufwerk"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS-Mixer"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Laufwerk überprüfen..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Laufwerk entfernen "
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD Audio-Player Konfiguration"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Laufwerk hinzufügen"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Gerät"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "CDDB benutzen"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Serverliste holen"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Netzwerkfenster zeigen"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB-Server"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD-Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "CD-Index benutzen"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD-Index-Server:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Titelnamen:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Generische Titel nicht berücksichtigen"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Namensformat:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD-Info"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Wählen Sie das Verzeichnis, wo Sie die MPEG-Streams speichern wollen:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG Audio-Plugin-Konfiguration"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Auflösung:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 Bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 Bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanäle:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (falls verfügbar)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Downsamplen:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekoder:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatische Erkennung"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow!-optimierter Dekoder"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX-optimierter Dekoder"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU-Dekoder"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Optionen"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Inhalt"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Dateiendung"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Dateiendung und Inhalt"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekoder"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Zwischenspeichern:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "ZwischenspeichergröÃe (KB):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Vorspeichern (Prozent):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Proxy benutzen"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Host:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Authentisierung benutzen"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Username:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Passwort:"
+
+# * Save to disk config.
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Stream auf Platte speichern:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Stream auf Platte speichern"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Pfad:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Durchsuchen"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "UDP-Kanal für Icecast-Metadaten aktivieren"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Streaming"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3-Tags:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ID3V2-Tags deaktivieren"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Nicht-UTF8 ID3 Tags zu UTF8 konvertieren"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3-Enkodierung:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3-Format:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titel"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Konnte nicht in Datei %s schreiben"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Konnte Tag nicht schreiben!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Konnte Datei %s nicht öffnen"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Dateiinfo"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Konnte Datei %s nicht abbrechen"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Konnte Tag nicht entfernen!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Kein Tag zum entfernen!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Joint Stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Zweikanal"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Einkanal"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Keine"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nein"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ja"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Name:"
+
+# MPEG-Info window
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG-Info "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG-Level:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bitrate:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Samplerate:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Frames:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "DateigröÃe:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Fehlerschutz:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Original:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Emphase:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3-Tag "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titel:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artist:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Jahr:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Titelnummer:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Genre:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Album-Tags kopieren"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Album-Tags einfügen"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Variabel,\n"
+"mittlere Bitrate: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Fehler"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "AUFLÃSEN DES HOSTNAMENS %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Konnte Host %s nicht finden"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "MIT %s:%d VERBINDEN"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Konnte nicht mit Host %s verbinden"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "VERBUNDEN: WARTE AUF ANTWORT"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Konnte nicht mit Host %s verbinden\n"
+"Der Server antwortete: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ZWISCHENSPEICHERN: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Classic Rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Other"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Classical"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumental"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumental Pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumental Rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ethnic"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electronic"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtic"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Speech"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber Music"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphony"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Christian Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Ãber MPEG Audio Plugin"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123-Dekoder von Michael Hipp <mh at mpg123.de>\n"
+"Plugin vom XMMS-Team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG Audio Plugin"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr ""
+"Wählen Sie das Verzeichnis, in dem Sie die Ogg-Vorbis-Streams speichern "
+"wollen:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis Audio-Plugin-Konfiguration"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis Tags:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Titelformat:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain-Einstellungen:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Clipping-Schutz aktivieren"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "ReplayGain aktivieren"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ReplayGain-Typ:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "Titel-Steigerung/Spitze benutzen"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "Album-Steigerung/Spitze benutzen"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "6dB Boost + Hard Limiting aktivieren"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Ein Fehler trat auf:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Fehler!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Konnte Tag nicht modifizieren (öffnen)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Konnte Tag nicht modifizieren (schlieÃen)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Konnte Tag nicht modifizieren"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis Tag "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Datum:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Beschreibung:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Ort:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Version:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC-Nummer:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organisation:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Titel-Steigerung:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Titel-Spitze:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Album-Steigerung:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Album-Spitze:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis Info "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Länge:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis Audio Plugin"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ãber Ogg Vorbis Audio-Plugin"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis Plugin von der Xiph.org Foundation\n"
+"\n"
+"Originalcode von\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Besuchen Sie die Xiph.org Foundation auf http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV Audio Plugin"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS Output Plugin"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Ãber OSS-Treiber"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Standard (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Standard"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS-Treiber-Konfiguration"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Audiogerät:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Alternatives Gerät benutzen:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mixergerät:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Geräte"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "ZwischenspeichergröÃe (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Zwischenspeichern"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Mixereinstellungen"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Lautstärke verändert Master und nicht PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixer"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Ãber ESounD-Plugin"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD Output Plugin Konfiguration"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Entfernten Host benutzen"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Lautstärke kontolliert OSS-Mixer"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Server"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound Output Plugin"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Ãber ALSA-Treiber"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s Output-Plugin"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Unbekannte Soundkarte"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Standard-PCM-Gerät (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA-Treiber-Konfiguration"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mixer:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Softwareseitige Lautstärkenreglung benutzen"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixerkarte:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Geräteeinstellungen:"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Erweiterte Einstellungen:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Zwischenspeicherzeit (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Periodische Zeit (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Zwischenspeicherzeit (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap-Modus"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Erweiterte Einstellungen"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Dekorationen ein- und ausschalten"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/SchlieÃen"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Farbwahl"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Optionen:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Performer/Artist"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Genre"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Dateiname"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Dateipfad"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Dateiendung"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Titelname"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Titelnummer"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Datum"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Jahr"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Kommentar"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: \"...\" nur zeigen, wenn Element %n vorhanden ist"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Ein auf XMMS basierender Medien-Abspieler\n"
+"\n"
+"Copyright (C) 2003-2004 BMP-Enwicklerteam\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Entwickler:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Mit zusätzlicher Hilfe von:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Homepage und Grafiken:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Brasilianisches Portugiesisch:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Bretonisch:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Chinesisch:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Tschechisch:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Niederländisch:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Spanisch:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Französisch:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Deutsch:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Deutsch:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Griechisch:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Ungarisch:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Italienisch:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japanisch:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Koreanisch:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lettisch:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Makedonisch:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polnisch:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Rumänisch:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Russisch:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Slovakisch:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Spanisch:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Schwedisch:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Rumänisch:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Walisisch:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Ãber BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Credits"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Ãbersetzer"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Laden"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Laden/Voreinstellung"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Laden/Autolade-Voreinstellung"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Laden/Standard"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Laden/Zero"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Laden/aus Datei"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Laden/von WinAMP-EQF-Datei"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Import"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Import/WinAMP-Voreinstellungen"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Speichern"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Speichern/Voreinstellung"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Speichern/Autolade-Voreinstellung"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Speichern/Standard"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Speichern/in Datei"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Speichern/als WinAMP EQF-Datei"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Löschen"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Löschen/Voreinstellung"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Löschen/Autolade-Voreinstellung"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP-Equalizer"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Voreinstellung"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Voreinstellungen"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Lade Voreinstellung"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Lade Auto-Voreinstellung"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Lade Equalizer-Voreinstellung"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Speichere Voreinstellung"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Speichere Auto-Voreinstellung"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Speichere Equalizer-Voreinstellung"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Lösche Voreinstellung"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Lösche Auto-Voreinstellung"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Option `%s' ist mehrdeutig\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Option `--%s' erlaubt kein Argument\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Option `%c%s' erlaubt kein Argument\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Option `%s' benötigt ein Argument\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: unbekannte Option `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: unbekannte Option `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: illegale Option -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ungültige Option -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Option benötigt ein Argument -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: Option `-W %s' ist mehrdeutig\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: Option `-W %s' erlaubt kein Argument\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Dateien konnten nicht wiedergegeben werden.</big></b>\n"
+"\n"
+"Die folgenden Dateien konnten nicht wiedergegeben werden. Bitte stellen Sie "
+"sicher, dass:\n"
+"1. sie abrufbar sind.\n"
+"2. die benötigten Medien-Plugins aktiviert wurden."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Diese Warnung nicht noch einmal anzeigen"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Mehr _Details anzeigen"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Dateiname"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Dateiname:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Kein Input-Plugin konnte diese Datei erkennen"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Input-Plugin: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Konnte Logfile nicht erstellen (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Konnte Verzeichnis nicht erstellen (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Benutzung: beep-media-player [Optionen] [Dateien] ...\n"
+"\n"
+"Optionen:\n"
+"--------\n"
+
+# -h, --help switch
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Diesen Text zeigen und beenden"
+
+# -n, --session switch
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Wähle BMP/XMMS-Session (Standard: 0)"
+
+# -r, --rew switch
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Rückwärts in der Wiedergabeliste springen"
+
+# -p, --play switch
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Abspielen der aktuellen Wiedergabeliste beginnen"
+
+# -u, --pause switch
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Aktuellen Song unterbrechen"
+
+# -s, --stop switch
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Aktuellen Song stoppen"
+
+# -t, --play-pause switch
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pause falls beim abspielen, andernfalls Wiedergabe starten"
+
+# -f, --fwd switch
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Vorwärts in der Wiedergabeliste springen"
+
+# -e, --enqueue switch
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Playliste nicht entfernen"
+
+# -m, --show-main-window switch
+# -m, --show-main-window switch
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Das Hauptfenster zeigen."
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "BMP aktivieren"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "Vorherige Session-ID"
+
+# -v, --version switch
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Die Versionsnummer zeigen und beenden\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"SIGSEGV empfangen\n"
+"\n"
+"Das könnte ein Bug in BMP sein. Wenn Sie nicht wissen warum das passiert "
+"ist, senden Sie ein Mail zu uns unter beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Konnte Skin nicht laden.</big></b>\n"
+"\n"
+"Ãberprüfen Sie, dass der Skin in '%s' benutzbar ist und der Default-Skin "
+"ordnungsgemäà in '%s' installiert wurde.\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Tut uns Leid, aber Ihre GTK+-Version (%d.%d.%d) funktioniert nicht mit BMP.\n"
+"Bitte benutzen Sie GTK+ %s oder neuer.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Tut uns Leid, aber Threads werden auf Ihrer Plattform nicht unterstützt.\n"
+"\n"
+"Wenn Sie auf einem libc5-basierten Linux-System arbeiten und Glib und GTK+ "
+"vor LinuxThreads installiert haben, müssen Sie Glib und GTK+ erneut "
+"kompilieren.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Kann Display nicht öffnen, beende."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Titel-Details anzeigen"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Songname automatisch scrollen"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Visualisierungsmodus"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Visualisierungsmodus/Analyzer"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Visualisierungsmodus/Scope"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Visualisierungsmodus/Aus"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Analyzer-Modus"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Analyzer-Modus/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Analyzer-Modus/Fire"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Analyzer-Modus/Vertikale Linien"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Analyzer-Modus/Linien"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Analyzer-Modus/Leiste"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Analyzer-Modus/Spitzen"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Scope-Modus"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Scope-Modus/Dot Scope"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Scope-Modus/Line Scope"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Scope-Modus/Solid Scope"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/WindowShade VU Modus"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/WindowShade VU Modus/Normal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/WindowShade VU Modus/Smooth"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Wiederholrate"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Wiederholrate/Voll (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Wiederholrate/Halb (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Wiederholrate/Viertel (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Wiederholrate/Achtel (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Analyzer-Falloff"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Analyzer-Falloff/Langsamster"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Analyzer Falloff/Langsam"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Analyzer-Falloff/Mittel"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Analyzer-Falloff/Schnell"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Analyzer-Falloff/Schnellster"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Spitzen-Falloff"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Spitzen-Falloff/Langsamster"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Spitzen-Falloff/Langsam"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Spitzen-Falloff/Mittel"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Spitzen-Falloff/Schnell"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Spitzen-Falloff/Schnellster"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Wiederholen"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Zufällige Wiedergabe"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Wiedergeben"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pause"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Stop"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Vorheriger"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Nächster"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Zum Anfang der Wiedergabeliste springen"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Zu Datei springen"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Zu Zeitpunkt springen"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Einstellungen"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Ansicht"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Ãber BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Beenden"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Dateien..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Internetadresse..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Wiedergabeliste zeigen"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Equalizer anzeigen"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Vergangene Zeit"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Verbleibende Zeit"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Immer im Vordergrund"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Auf allen Arbeitsflächen anzeigen"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Player aufrollen"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Wiedergabeliste aufrollen"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Equalizer aufrollen"
+
+# FIXME: Convert this all to GtkDrawingArea
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Zu Zeitpunkt springen"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "Minuten:Sekunden"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Titellänge:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Queue"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Queue"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Zu Titel springen"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filter: "
+
+#: beep/mainwin.c:1884
+#, fuzzy
+msgid "Add Folders"
+msgstr "Dateien hinzufügen"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Internetadresse hinzufügen..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "SUCHE NACH: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "Lautstärke: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANCE: %d%% LINKS"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANCE: MITTE"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANCE: %d%% RECHTS"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "OPTIONS-MENÃ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "IMMER IM VORDERGRUND AUS (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "IMMER IM VORDERGRUND AN (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "IMMER IM VORDERGRUND AUS"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "IMMER IM VORDERGRUND AN"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "DATEI-INFORMATIONSBOX"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** DOPPELTE-GRÃSSE-FEATURE WURDE ENTFERNT **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "VISUALISIERUNGSMENÃ"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Keine abspielbare CD gefunden.</big></b>\n"
+"\n"
+"Keine CD eingelegt, oder die eingelegte CD ist keine Audio-CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Kann Audio nicht öffnen.</big></b>\n"
+"\n"
+"Bitte überprüfen Sie, dass:\n"
+"1. das korrekte Output-Plugin gewählt wurde\n"
+"2. keine anderen Programme die Soundkarte blockieren\n"
+"3. Ihre Soundkarte richtig konfiguriert ist\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Ausgewählte entfernen"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Nicht Ausgewählte entfernen"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Alle entfernen"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Queue An\\/Aus"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/CD hinzufügen..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Internetadresse hinzufügen..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Dateien hinzufügen..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Dateien hinzufügen..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Queue löschen"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Nicht verfügbare Dateien entfernen"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Neue Liste"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Liste laden"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Liste speichern"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Ansicht auffrischen"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Auswahl umkehren"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Nichts auswählen"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Alle auswählen"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Liste zufällig ordnen"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Liste umkehren"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Liste sortieren"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Liste sortieren/Nach Titel"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Liste sortieren/Nach Dateiname"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Liste sortieren/Nach Pfad + Dateinamen"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Liste sortieren/Nach Datum"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Auswahl sortieren"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Auswahl sortieren/Nach Titel"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Auswahl sortieren/Nach Dateiname"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Auswahl sortieren/Nach Pfad + Dateiname"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Auswahl sortieren/Nach Datum"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Fehler beim Schreiben der Wiedergabeliste \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s existiert bereits. Trotzdem fortfahren?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Konnte Wiedergabeliste nicht speichern! Unbekannter Dateityp für %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Wiedergabeliste laden"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Wiedergabeliste speichern"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP Wiedergabelisteneditor"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Aussehen"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Equalizer"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Maus"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Wiedergabeliste"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Plugins"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Artist"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Titelnummer"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Dateipfad"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Aktiv"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Beschreibung"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Kategorie"
+
+# load the interface
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Einstellungsfenster"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Dateien hinzufügen/öffnen - Dialog"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "/Dateien öffnen"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Dialog nach dem Ãffnen schlieÃen"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Dateien hinzufügen"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Dialog nach dem Hinzufügen schlieÃen"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (ungültiges UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP-Einstellungen"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Plugins</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Medien-Plugin-Liste:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Medien</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Allgemeine-Plugin-Liste:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Allgemein</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Visualisierungs-Plugin-Liste:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualisierungsmodus</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Effekt-Plugin-Liste:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Effekte</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Momentanes Ausgabe-Plugin"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Die Ãnderung ist nun aktiv in der Konfigurationsdatenbank von BMP,\n"
+"aber wird wich erst auf den nächsten abgespielten Song auswirken!\n"
+"\n"
+"Optional können Sie die Wiedergabe beenden und neustarten, damit die\n"
+"Ãnderung wirksam wird."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Ausgabe</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Aussehen</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Schriftarten</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Player:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Wiedergabeliste:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Hauptfenster-Schriftart wählen:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Wiedergabelisten-Schriftart wählen:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Verschiedenes</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Nummern in der Wiedergabeliste zeigen"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Eigenen Cursor benutzen"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Maus</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Mausrad</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Mausrad verstellt die Lautstärke um"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "Prozent"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Mausrad bewegt die Wiedergabeliste um"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "Zeilen"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Wiedergabeliste</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Dateiname</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Unterstriche zu Leerzeichen konvertieren"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "%20 zu Leerzeichen konvertieren"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadaten</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Metadaten (Tag-Informationen) aus Dateien lesen"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Metadaten aus Wiedergabelisten und Dateien lesen"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"Metadaten laden, wenn eine Datei zur Wiedergabeliste hinzugefügt oder "
+"geöffnet wird"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Beim Laden"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+"Songtitel und -länge lesen, wenn der Song in der Wiedergabeliste angezeigt "
+"wird"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Bei Anzeige"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Wiedergabe</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Nicht automatisch beim nächsten fortfahren, wenn ein Song zuende gespielt "
+"worden ist."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Nicht an die Wiedergabeliste anfügen"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Zwischen Songs unterbrechen"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Unterbrechen für"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "Sekunden"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Titelanzeige</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Eigene Zeichenkette:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TITEL\n"
+"ARTIST - TITEL\n"
+"ARTIST - ALBUM - TITEL\n"
+"ALBUM - TITEL\n"
+"Eigene"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Informationen über das Format der Titelzeile anzeigen"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Equalizer</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Voreinstellungen</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Verzeichnis für Voreinstellungs-Dateien:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Endung von Voreinstellungs-Dateien:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "Verfügbare _Voreinstellungen:"
+
+#: beep/glade/addfiles.glade:77
+#, fuzzy
+msgid "Close Dialog on Add"
+msgstr "Dialog nach dem Hinzufügen schlieÃen"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Alle auswählen"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Auswahl löschen"
+
+#~ msgid "Default skin:"
+#~ msgstr "Standard-Skin:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Konnte gnome-vfs nicht initialisieren.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Keine Wiedergabelisten-Bevorzugung"
+
+#~ msgid "Add Folders - BMP"
+#~ msgstr "Ordner hinzufügen - BMP"
+
+#~ msgid "Add URL"
+#~ msgstr "URL hinzufügen"
+
+#~ msgid "/By extension"
+#~ msgstr "/Nach Endung"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Nach Titel sortieren"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Nach Dateinamen sortieren"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Nach Datum sortieren"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/el.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3389 @@
+# Greek language translation for beep-media-player
+# Copyright (C) 2003 Kouzinopoulos Haris (ironhell3) <haris at mpa.gr>
+# ironhell3 <haris at mpa.gr>, 2004.
+# Stavros Giannouris <stavrosg2002 at freemail.gr>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-10-16 14:19+0200\n"
+"Last-Translator: Stavros Giannouris <stavrosg2002 at freemail.gr>\n"
+"Language-Team: Greek <nls at tux.hellug.gr> \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"NPOT-Creation-Date: 2003-08-08 19:35+0200\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Î ÏÏÏθεÏο CD ÎÏοÏ
"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "ÎομμάÏι CD ÎÏοÏ
%02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(άγνÏÏÏο)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "ΣÏ
ÏκεÏ
ή %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Îεν ήÏαν δÏ
ναÏÏ Ïο άνοιγμα ÏÎ·Ï ÏÏ
ÏκεÏ
Î®Ï %s\n"
+"ΣÏάλμα: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Îεν ήÏαν δÏ
ναÏή η ανάγνÏÏη ÏοÏ
Ïίνακα ÏεÏιεÏομÎνÏν\n"
+"ΠιθανÏÏ Î´ÎµÎ½ Ï
ÏάÏÏει δίÏÎºÎ¿Ï ÏÏη ÏÏ
ÏκεÏ
ή;\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"ΣÏ
ÏκεÏ
ή %s OK.\n"
+"ΠδίÏÎºÎ¿Ï ÎÏει %d κομμάÏια"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d κομμάÏια δεδομÎνÏν)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"ΣÏ
νολική διάÏκεια: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Î ÏηÏιακή εξαγÏγή ήÏοÏ
δεν δοκιμάÏÏηκε καθÏÏ Î¿ δίÏÎºÎ¿Ï Î´ÎµÎ½ ÎÏει κομμάÏια "
+"ήÏοÏ
\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Îοκιμή ÏηÏÎ¹Î±ÎºÎ®Ï ÎµÎ¾Î±Î³ÏÎ³Î®Ï Î®ÏοÏ
: ÎÎΤÎÎÎÎ\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Îοκιμή ÏηÏÎ¹Î±ÎºÎ®Ï ÎµÎ¾Î±Î³ÏÎ³Î®Ï Î®ÏοÏ
αÏÎÏÏ
Ïε: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Îεν ήÏαν δÏ
ναÏÏÏ Î¿ ÎλεγÏÎ¿Ï ÏοÏ
καÏαλÏγοÏ
%s\n"
+"ΣÏάλμα: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "ΣÏάλμα: Το %s Ï
ÏάÏÏει αλλά δεν είναι καÏάλογοÏ"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ÎαÏÎ¬Î»Î¿Î³Î¿Ï %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "ΣÏ
ÏκεÏ
ή:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_ΣÏ
ÏκεÏ
ή:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "ÎαÏ_άλογοÏ:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "ÎÎÎ¸Î¿Î´Î¿Ï Î±Î½Î±ÏαÏαγÏγήÏ:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "ÎναλογικÏÏ"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "ΨηÏιακή αναÏαÏαγÏγή ήÏοÏ
"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "ÎλεγÏÎ¿Ï ÎνÏαÏηÏ:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Îεν Ï
ÏάÏÏει MίκÏηÏ"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "ΣÏ
ÏκεÏ
ή CDROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "MίκÏÎ·Ï OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "ÎλεγÏÎ¿Ï ÏÏ
ÏκεÏ
ήÏ..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "ÎÏομάκÏÏ
νÏη ÏÏ
ÏκεÏ
ήÏ"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "ΠαÏαμεÏÏοÏοίηÏη ÎναÏαÏαγÏγÎα CD ÎÏοÏ
"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Î ÏοÏθήκη ÏÏ
ÏκεÏ
ήÏ"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "ΣÏ
ÏκεÏ
ή"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "ΧÏήÏη CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "ÎνάκÏηÏη λίÏÏÎ±Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏÏν"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "ÎμÏάνιÏη ÏαÏαθÏÏοÏ
δικÏÏοÏ
"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "ÎιακομιÏÏÎ®Ï CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "ΧÏήÏη CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "ÎιακομιÏÏÎ®Ï CD Index"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "ÎνÏμαÏα αÏÏείÏν:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "ΠαÏάκαμÏη γενικÏν ÏίÏλÏν"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "ÎοÏÏή ÎνÏμαÏÎ¿Ï ÎÏÏείοÏ
:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "ΠληÏοÏοÏÎ¯ÎµÏ CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "ÎÏιλÎξÏε Ïον καÏάλογο ÏοÏ
θÎλεÏε να αÏοθηκεÏ
ÏοÏν Ïα MPEG streams:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "ΠαÏαμεÏÏοÏοίηÏη Î ÏοÏθÎÏοÏ
MPEG ÎÏοÏ
"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "ÎνάλÏ
Ïη:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Îανάλια:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (αν είναι διαθÎÏιμο)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+#, fuzzy
+msgid "Down sample:"
+msgstr "ΡÏ
θμÏÏ Î´ÎµÎ¹Î³Î¼Î±ÏοληÏίαÏ:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "ÎÏοκÏδικοÏοιηÏήÏ:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "ÎÏ
ÏÏμαÏη ανίÏνεÏ
Ïη"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr ""
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "ÎÏιλογÎÏ"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ΠεÏιεÏÏμενο"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "ÎÏÎκÏαÏη"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "ÎÏÎκÏαÏη και ÏεÏιεÏÏμενο"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "ÎÏοκÏδικοÏοιηÏήÏ"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr ""
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "ÎÎÎ³ÎµÎ¸Î¿Ï buffer (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr ""
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "ÎιακομιÏÏήÏ:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "ΧÏήÏη διακομιÏÏή"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "ÎιακομιÏÏήÏ:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "ΧÏήÏη ÏιÏÏοÏοίηÏηÏ"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Îνομα ÏÏήÏÏη:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "ÎÏδικÏÏ:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "ÎÏοθήκεÏ
Ïη ÏοÏ
stream ÏÏο δίÏκο:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "ÎÏοθήκεÏ
Ïη ÏοÏ
stream ÏÏο δίÏκο"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "ÎιαδÏομή:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "ΠεÏιήγηÏη"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr ""
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+#, fuzzy
+msgid "Streaming"
+msgstr "(Streaming)"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 Tags:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ÎÏενεÏγοÏοίηÏη εÏικεÏÏÏν ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "ÎεÏαÏÏοÏή μη-UTF8 ID3 εÏικεÏÏÏν Ïε UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ÎÏδικοÏοίηÏη ID3:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ÎοÏÏή ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "ΤίÏλοÏ"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Îεν ήÏαν δÏ
ναÏή η εγγÏαÏή ÏÏο αÏÏείο: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "ÎδÏ
ναμία εγγÏαÏÎ®Ï ÎµÏικÎÏÏαÏ!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Îεν ήÏαν δÏ
ναÏÏ Ïο άνοιγμα ÏοÏ
αÏÏείοÏ
: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "ΠληÏοÏοÏÎ¯ÎµÏ ÎÏÏείοÏ
"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "ÎνÏάξει"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"ÎδÏ
ναμία ÏεÏικοÏÎ®Ï Î±ÏÏείοÏ
: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "ÎδÏ
ναμία διαγÏαÏÎ®Ï ÏÎ·Ï ÎµÏικÎÏÏαÏ!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Îεν Ï
ÏάÏÏει εÏικÎÏÏα για να αÏαιÏεθεί!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Joint stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "ÎιÏÎ»Ï ÎºÎ±Î½Î¬Î»Î¹"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "ÎÎ¿Î½Ï ÎºÎ±Î½Î¬Î»Î¹"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "ÎανÎνα"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "ÎÏι"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Îαι"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Îνομα:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " ΠληÏοÏοÏÎ¯ÎµÏ MPEG "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "ΤÏÏÎ¿Ï MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bit rate:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Sample rate:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Frames:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "ÎÎÎ³ÎµÎ¸Î¿Ï Î±ÏÏείοÏ
:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Î ÏοÏÏαÏία ΣÏαλμάÏÏν:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "ÎÏ
θενÏικÏ:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "ÎμÏαÏη:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ÎÏικÎÏÏα ID3"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "ΤίÏλοÏ:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "ÎαλλιÏÎÏνηÏ:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "ΣÏÏλιο:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "ÎÏοÏ:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "ÎÏιθμÏÏ ÎομμαÏιοÏ:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "ÎίδοÏ:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "ÎνÏιγÏαÏή εÏικεÏÏν άλμÏοÏ
μ"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "ÎÏικÏλληÏη εÏικεÏÏν άλμÏοÏ
μ"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"ÎεÏαβληÏÏ,\n"
+"μÎÏο bitrate: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "ΣÏάλμα"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "ÎΥΡÎΣΠ%s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Îεν ήÏαν δÏ
ναÏή η εÏÏεÏη ÏοÏ
%s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "ΣΥÎÎÎΣΠΣΤΠ%s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Îεν ήÏαν δÏ
ναÏή η ÏÏνδεÏη ÏÏο %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "ΣΥÎÎÎÎÎÎÎ: ÎÎÎÎÎÎÎ ÎÎÎ ÎÎ ÎÎΤÎΣÎ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Îεν ήÏαν δÏ
ναÏή η ÏÏνδεÏη ÏÏο %s\n"
+"ΠδιακομιÏÏÎ®Ï Î±Î½ÎÏεÏε: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "ÎλαÏÎ¹ÎºÏ Î¡Î¿Îº"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Îλλο"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Ροκ"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "ÎναλλακÏική"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "ÎλαÏική ÎοÏ
Ïική"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "ÎÏÏηÏÏÏική"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Bruit"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "ÎναλλακÏÎ¹ÎºÏ Î¡Î¿Îº"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Musique Méditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Pop Instrumentale"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Rock Instrumental"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ethnic"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "ÎλεκÏÏονική ÎοÏ
Ïική"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celte"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Discours"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber Music"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphony"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Christian Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "SynthPop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "ΠεÏί ÏοÏ
ÏÏÏÏθεÏοÏ
ήÏοÏ
MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Î ÏÏÏθεÏο ÎÏοÏ
MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr ""
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "ΠαÏαμεÏÏοÏοίηÏη Î ÏοÏθÎÏοÏ
ÎÏοÏ
Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "ÎÏικÎÏÏÎµÏ Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "ÎοÏÏή ÏίÏλοÏ
:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain Settings:"
+
+#: Input/vorbis/configure.c:511
+#, fuzzy
+msgid "Enable Clipping Prevention"
+msgstr "ÎνεÏγοÏοίηÏη ÏαÏακολοÏθηÏη αÏοÏ
ÏιÏν"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "ÎνεÏγοÏοίηÏη ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ΤÏÏÎ¿Ï ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr ""
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Î ÏοÎκÏ
Ïε ÏÏάλμα:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "ΣÏάλμα!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "ÎδÏ
ναμία ÏÏοÏοÏοίηÏÎ·Ï ÎµÏικÎÏÏÎ±Ï (άνοιγμα)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "ÎδÏ
ναμία ÏÏοÏοÏοίηÏÎ·Ï ÎµÏικÎÏÏÎ±Ï (κλείÏιμο)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "ÎδÏ
ναμία ÏÏοÏοÏοίηÏÎ·Ï ÎµÏικÎÏÏαÏ"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " ÎÏικÎÏÏα Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ÎμεÏομηνία:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "ΠεÏιγÏαÏή:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ΤοÏοθεÏία:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "ÎκδοÏη:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ÎοÏμεÏο ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ÎÏγανιÏμÏÏ:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+#, fuzzy
+msgid "Track gain:"
+msgstr "ÎγνÏÏÏο κομμάÏι"
+
+#: Input/vorbis/fileinfo.c:771
+#, fuzzy
+msgid "Track peak:"
+msgstr "Granite Peak"
+
+#: Input/vorbis/fileinfo.c:782
+#, fuzzy
+msgid "Album gain:"
+msgstr "ÎγνÏÏÏÎ¿Ï ÎίÏκοÏ"
+
+#: Input/vorbis/fileinfo.c:792
+#, fuzzy
+msgid "Album peak:"
+msgstr "Granite Peak"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "ΠληÏοÏοÏÎ¯ÎµÏ Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "ÎιάÏκεια:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Î ÏÏÏθεÏο ÎÏοÏ
Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "ΠεÏί ÏοÏ
Î ÏÏÏθεÏοÏ
ÎÏοÏ
Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Î ÏÏÏθεÏο Ogg Vorbis αÏÏ Ïο Xiph.org Foundation\n"
+"\n"
+"ÎÏÏικÏÏ ÎºÏÎ´Î¹ÎºÎ±Ï Î±ÏÏ\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Î ÏοÏÎ¸Î®ÎºÎµÏ Î±ÏÏ\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"ÎÏιÏκεÏÏείÏε Ïο Xiph.org Foundation ÏÏο http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Î ÏÏÏθεÏο ÎÏοÏ
Wav"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "ÎÏθÏÏμα ÎξÏδοÏ
OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "ΠεÏί ÏοÏ
Î¿Î´Î·Î³Î¿Ï OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Î ÏοκαθοÏιÏμÎνο (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Î ÏοκαθοÏιÏμÎνο"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "ΡÏθμιÏη OÎ´Î·Î³Î¿Ï OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "ΣÏ
ÏκεÏ
ή ήÏοÏ
:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "ΧÏήÏη εναλλακÏÎ¹ÎºÎ®Ï ÏÏ
ÏκεÏ
ήÏ:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "ΣÏ
ÏκεÏ
ή μείκÏη"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "ΣÏ
ÏκεÏ
ÎÏ"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "ÎÎÎ³ÎµÎ¸Î¿Ï buffer (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+#, fuzzy
+msgid "Buffering"
+msgstr "Buffering"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "ΠαÏάμεÏÏοι ÎείκÏη:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr ""
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "ÎείκÏηÏ"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "ΠεÏί ÏοÏ
ÎÏθÏÏμαÏÎ¿Ï ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Î ÏÏÏθεÏο ESounD ÏοÏ
XMMS\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ΡÏ
θμίÏÎµÎ¹Ï ÎÏθÏÏμαÏÎ¿Ï ÎξÏδοÏ
ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "ΧÏήÏη αÏομακÏÏ
ÏμÎνοÏ
διακομίÏÏη"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr ""
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "ÎιακομιÏÏήÏ"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "ÎÏθÏÏμα εξÏδοÏ
eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "ΠεÏί ÏοÏ
Î¿Î´Î·Î³Î¿Ï ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s άÏθÏÏμα εξÏδοÏ
"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "ÎγνÏÏÏη κάÏÏα ήÏοÏ
"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Î ÏοεÏιλεγμÎνη ÏÏ
ÏκεÏ
ή PCM (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ΡÏθμιÏη Î¿Î´Î·Î³Î¿Ï ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "ÎείκÏηÏ:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "ΧÏήÏη ελεγκÏή ήÏοÏ
λογιÏμικοÏ"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "ÎάÏÏα ÎείκÏη:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "ΡÏ
θμίÏÎµÎ¹Ï ÏÏ
ÏκεÏ
ήÏ"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Î ÏοÏÏÏημÎÎ½ÎµÏ ÏÏ
θμίÏειÏ:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "ÎÎÎ³ÎµÎ¸Î¿Ï buffer (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "ÎαÏάÏÏαÏη Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Î ÏοÏÏÏημÎÎ½ÎµÏ ÏÏ
θμίÏειÏ"
+
+#: Visualization/blur_scope/blur_scope.c:57
+#, fuzzy
+msgid "/Toggle Decorations"
+msgstr "κοÏ
μÏί εναλλαγήÏ"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ÎλείÏιμο"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+#, fuzzy
+msgid "Blur Scope: Color selection"
+msgstr "Î ÏίÏÎ»Î¿Ï ÏοÏ
διαλÏγοÏ
εÏÎ¹Î»Î¿Î³Î®Ï ÏÏÏμαÏοÏ"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "ÎÏιλογÎÏ:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "ÎαλλιÏÎÏνηÏ"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "ÎÎνοÏ"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Îνομα αÏÏείοÏ
"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "ÎιαδÏομή αÏÏείοÏ
"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "ÎÏÎκÏαÏη αÏÏείοÏ
"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Îνομα κομμαÏιοÏ"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "ÎοÏμεÏο κομμαÏιοÏ"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ÎμεÏομηνία"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "ÎÏοÏ"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "ΣÏÏλιο"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"ÎÎ½Î±Ï Î±Î½Î±ÏαÏαγÏγÎÎ±Ï ÏολÏ
μÎÏÏν βαÏιÏμÎÎ½Î¿Ï ÏÏο XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 Πομάδα ανάÏÏÏ
Î¾Î·Ï ÏοÏ
BMP\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "ÎημιοÏ
Ïγοί:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Îε ÎÏιÏλÎον Îοήθεια:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastien Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "ÎÏÏοÏελίδα και ÎÏαÏικά: "
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ÎινÎζικα:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "ΤÏÎÏικα:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Îλλανδική:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr "Φινλανδικά:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Îαλλικά:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "ÎεÏμανικά:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+msgid "Georgian: "
+msgstr "ÎεÏÏγιανά:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Îλληνικά:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "ÎÏ
γγÏική:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "ÎÏαλικά:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "ÎαÏÏνικά:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "ÎοÏεάÏικα:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ÎιθοÏ
ανικά:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Σλαβομακεδονική:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "ΠολÏνική:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "ΡοÏ
μανικά:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "ΡÏÏικα:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Σλοβακική:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "ÎÏÏανικά:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "ΣοÏ
ηδικά:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+msgid "Ukrainian:"
+msgstr "ÎÏ
κÏανικά:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "ÎÏ
αλλική:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "ΠεÏί ÏοÏ
BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Îνεία"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ÎεÏαÏÏαÏÏÎÏ"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/ΦÏÏÏÏμα"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr ""
+
+#: beep/equalizer.c:130
+#, fuzzy
+msgid "/Load/Auto-load preset"
+msgstr "ÏÏι αÏ
ÏÏμαÏο ÏÏÏÏÏμα ÏÏοÏθÎÏÏν"
+
+#: beep/equalizer.c:132
+#, fuzzy
+msgid "/Load/Default"
+msgstr "ΦÏÏÏÏÏη ÏÏοεÏιλεγμÎνÏν ÏÏοÏιμήÏεÏν"
+
+#: beep/equalizer.c:135
+#, fuzzy
+msgid "/Load/Zero"
+msgstr "Îνοιγμα ÎÏÏ"
+
+#: beep/equalizer.c:138
+#, fuzzy
+msgid "/Load/From file"
+msgstr "ÎÏÏείο core αÏÏ ÎµÏαÏμογή"
+
+#: beep/equalizer.c:140
+#, fuzzy
+msgid "/Load/From WinAMP EQF file"
+msgstr "ΠκαÏÎ¬Î»Î¿Î³Î¿Ï Î±ÏÏ Ïον οÏοίο θα ÏοÏÏÏνονÏαι αÏÏεία ÏÎ·Î³Î®Ï gok."
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/ÎιÏαγÏγή"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/ÎιÏαγÏγή/Presets ÏοÏ
WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/ÎÏοθήκεÏ
Ïη"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/ÎÏοθήκεÏ
Ïη/Preset"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/ÎÏοθήκεÏ
Ïη/ÎÏ
ÏÏμαÏο ÏÏÏÏÏμα ÏοÏ
preset"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/ÎÏοθήκεÏ
Ïη/Î ÏοκαθοÏιÏμÎνο"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/ÎÏοθήκεÏ
Ïη/Σε αÏÏείο"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/ÎÏοθήκεÏ
Ïη/Σε αÏÏείο EQF ÏοÏ
WinAMP"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/ÎιαγÏαÏή"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/ÎιαγÏαÏή/Preset"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/ÎιαγÏαÏή/Preset ÏοÏ
ÏοÏÏÏνεÏαι αÏ
ÏÏμαÏα"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "ÎÏοÏÏαθμιÏÏÎ®Ï BMP"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Î ÏοκαθοÏιÏμÎνο"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Î ÏοκαθοÏιÏμÎνα"
+
+#: beep/equalizer.c:1468
+#, fuzzy
+msgid "Load preset"
+msgstr "Îνοιγμα ÎÏÏ"
+
+#: beep/equalizer.c:1482
+#, fuzzy
+msgid "Load auto-preset"
+msgstr "ÏÏι αÏ
ÏÏμαÏο ÏÏÏÏÏμα ÏÏοÏθÎÏÏν"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+#, fuzzy
+msgid "Load equalizer preset"
+msgstr "Îεν ήÏαν δÏ
ναÏÏ Î½Î± ÏοÏÏÏθεί Ïο %s: %s"
+
+#: beep/equalizer.c:1529
+#, fuzzy
+msgid "Save preset"
+msgstr "ÎÏοθήκεÏ
Ïη λίÏÏαÏ"
+
+#: beep/equalizer.c:1548
+#, fuzzy
+msgid "Save auto-preset"
+msgstr "ÎεÏοδιάÏÏημα ÎÏ
ÏÏμαÏÎ·Ï ÎÏοθήκεÏ
ÏηÏ"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+#, fuzzy
+msgid "Save equalizer preset"
+msgstr "ÎÏοθήκεÏ
Ïη ΡÏ
θμίÏεÏν ÏÏÏα"
+
+#: beep/equalizer.c:1609
+#, fuzzy
+msgid "Delete preset"
+msgstr "ÎιαγÏαÏή θÎμαÏÎ¿Ï \"%s\";"
+
+#: beep/equalizer.c:1625
+#, fuzzy
+msgid "Delete auto-preset"
+msgstr "ÎÏ
ÏÏμαÏη ÎÏοδοÏή ÎÏÏείÏν"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: η εÏιλογή `%s' είναι αÏαÏήÏ\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: η εÏιλογή `--%s' δεν εÏιÏÏÎÏει οÏίÏμαÏα\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: η εÏιλογή `%c%s' δεν εÏιÏÏÎÏει οÏίÏμαÏα\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: η εÏιλογή `%s' αÏαιÏεί Îνα ÏÏιÏμα\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: δεν αναγνÏÏίζεÏαι η εÏιλογή `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: δεν αναγνÏÏίζεÏαι η εÏιλογή `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: άκÏ
Ïη εÏιλογή -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: λανθαÏμÎνη εÏιλογή -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: η εÏιλογή αÏαιÏεί Îνα ÏÏιÏμα -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: η εÏιλογή `-W %s' είναι αÏαÏήÏ\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: η εÏιλογή `-W \"%s` δεν εÏιÏÏÎÏει οÏίÏμαÏα\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Îεν ήÏαν δÏ
ναÏή η αναÏαÏαγÏγή αÏÏείÏν.</big></b>\n"
+"\n"
+"Τα ακÏλοÏ
θα αÏÏεία δεν ήÏαν δÏ
ναÏÏν να αναÏαÏαγÏθοÏν. ΠαÏακαλοÏμε ελÎγξÏε "
+"ÏÏι:\n"
+"1. είναι ÏÏοÏβάÏιμα.\n"
+"2. ÎÏεÏε ενεÏγοÏοιήÏει Ïα ÏÏÏÏθεÏα ÏοÏ
αÏαιÏοÏνÏαι."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Îα μην ξαναεμÏανιÏÏεί αÏ
Ïή η ÏÏοειδοÏοίηÏη"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Î Ïοβολή ÏεÏιÏÏÏÏεÏÏν _λεÏÏομεÏειÏν"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Îνομα αÏÏείοÏ
"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Îνομα αÏÏείοÏ
:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr ""
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "ÎÏθÏÏμα ειÏÏδοÏ
: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Îεν είναι δÏ
ναÏή η δημιοÏ
Ïγία ÏοÏ
αÏÏείοÏ
καÏαγÏαÏÎ®Ï (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Îεν ήÏαν δÏ
ναÏή η δημιοÏ
Ïγία ÏοÏ
καÏαλÏγοÏ
(%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ΧÏήÏη: beep-media-player [εÏιλογÎÏ] [αÏÏεία] ...\n"
+"\n"
+"ÎÏιλογÎÏ:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "ÎμÏάνιÏη αÏ
ÏÎ¿Ï ÏοÏ
κειμÎνοÏ
και ÎξοδοÏ"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "ÎÏιλογή ÏÏ
νεδÏÎ¯Î±Ï BMP/XMMS (Î ÏοκαθοÏιÏμÎνη: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr ""
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "ÎναÏξη αναÏαÏαγÏÎ³Î®Ï ÏÎ·Ï ÏÏÎÏοÏ
ÏÎ±Ï Î»Î¯ÏÏαÏ"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "ΠαÏÏη ÏοÏ
ÏÏÎÏονÏÎ¿Ï ÎºÎ¿Î¼Î¼Î±ÏιοÏ"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "ΣÏαμάÏημα ÏοÏ
ÏÏÎÏονÏÎ¿Ï ÎºÎ¿Î¼Î¼Î±ÏιοÏ"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "ΠαÏÏη αν Ïαίζει,αλλιÏÏ Î±Î½Î±ÏαÏαγÏγή"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "ÎεÏάβαÏη μÏÏοÏÏά ÏÏη λίÏÏα ÏÏαγοÏ
διÏν"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "ÎκÏÏÏÏη καθαÏιÏÎ¼Î¿Ï Î»Î¯ÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏγήÏ"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "ÎμÏάνιÏη ÏοÏ
κÏ
ÏίÏÏ ÏαÏαθÏÏοÏ
"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "ÎνεÏγοÏοίηÏη BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID ÏÏοηγοÏÎ¼ÎµÎ½Î·Ï ÏÏ
νεδÏίαÏ"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ÎμÏάνιÏη ÏοÏ
αÏÎ¹Î¸Î¼Î¿Ï ÎκδοÏÎ·Ï ÎºÎ±Î¹ ÎξοδοÏ\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Î ÎκδοÏη ÏοÏ
GTK+ ÏοÏ
ÎÏεÏε (%d.%d.%d) δεν είναι ÏÏ
μβαÏή με Ïο BMP.\n"
+"ΧÏηÏιμοÏοιείÏÏε Ïο GTK+ %s ή νεÏÏεÏο.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr ""
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/ÎμÏάνιÏη ΠληÏοÏοÏιÏν ÎÏÏείοÏ
"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr ""
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/ÎÏÏικοÏοίηÏη"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/ÎÏÏικοÏοίηÏη/ÎναλÏ
ÏήÏ"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/ÎÏÏικοÏοίηÏη/ΦάÏμα"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/ÎÏÏικοÏοίηÏη/ÎλειÏÏή"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/ÎναλÏ
ÏήÏ"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/ÎναλÏ
ÏήÏ/ÎανονικÏÏ"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/ÎναλÏ
ÏήÏ/ΦÏÏιά"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr ""
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/ÎναλÏ
ÏήÏ/ÎÏαμμÎÏ"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/ÎναλÏ
ÏήÏ/ÎÏάÏεÏ"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/ÎναλÏ
ÏήÏ/ÎοÏÏ
ÏÎÏ"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/ΦάÏμα"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/ΦάÏμα/ΤελείεÏ"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/ΦάÏμα/ÎÏαμμÎÏ"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/ΦάÏμα/ΣÏ
μÏαγÎÏ"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr ""
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr ""
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ΡÏ
θμÏÏ Î±Î½Î±Î½ÎÏÏηÏ"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr ""
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr ""
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr ""
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ΡÏ
θμÏÏ Î±Î½Î±Î½ÎÏÏηÏ/Îγδοα (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr ""
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Î ÏÏÏη αναλÏ
Ïή/ÎÏγή"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Î ÏÏÏη αναλÏ
Ïή/ÎÎÏη"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Î ÏÏÏη αναλÏ
Ïή/ÎÏήγοÏη"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr ""
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Î ÏÏÏη κοÏÏ
ÏÏν/ÎÏγή"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Î ÏÏÏη κοÏÏ
ÏÏν/ÎÎÏη"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Î ÏÏÏη κοÏÏ
ÏÏν/ÎÏήγοÏη"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/ÎÏανάληÏη"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/ΤÏ
Ïαία ÎναÏαÏαγÏγή"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ÎναÏαÏαγÏγή"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ΠαÏÏη"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/ΣÏαμάÏημα"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Î ÏοηγοÏμενο"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/ÎÏÏμενο"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/ÎεÏαÏήδηÏη ÏÏην αÏÏή ÏÎ·Ï Î»Î¯ÏÏÎ±Ï ÏÏαγοÏ
διÏν"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/ÎεÏαÏήδηÏη Ïε αÏÏείο"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/ÎεÏαÏήδηÏη Ïε ÏÏÏνο"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Î ÏοÏιμήÏειÏ"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Î Ïοβολή"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/ΠεÏί ÏοÏ
BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_ÎξοδοÏ"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/ÎÏÏεία..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/ΤοÏοθεÏία internet..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/ÎμÏάνιÏη λίÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏγήÏ"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/ÎμÏάνιÏη ÎÏοÏÏαθμιÏÏή"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/ΧÏÏÎ½Î¿Ï ÏοÏ
ÏÎÏαÏε"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Î¥ÏολοιÏÏÎ¼ÎµÎ½Î¿Ï ÏÏÏνοÏ"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/ΠάνÏα ÏÏην ÎοÏÏ
Ïή"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/ΤοÏοθÎÏηÏη Ïε ÏλοÏ
Ï ÏοÏ
Ï ÏÏÏοÏ
Ï ÎµÏγαÏίαÏ"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/ΤÏλιγμα ÏοÏ
αναÏαÏαγÏγÎα"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/ΤÏλιγμα ÏÎ·Ï Î»Î¯ÏÏÎ±Ï ÏÏαγοÏ
διÏν"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/ΤÏλιγμα ÏοÏ
ιÏοÏÏαθμιÏÏή"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "ÎεÏάβαÏη Ïε ÏÏÏνο"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "λεÏÏά:δεÏ
ÏεÏÏλεÏÏα"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "ÎιάÏκεια κομμαÏιοÏ:"
+
+#: beep/mainwin.c:1364
+msgid "Un_queue"
+msgstr ""
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+msgid "_Queue"
+msgstr ""
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "ÎεÏαÏήδηÏη ÏÏο κομμάÏι"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "ΦίλÏÏο:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Î ÏοÏθήκη ΦακÎλÏν"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "Î ÏοÏθήκη ÎιεÏθÏ
νÏÎ·Ï internet"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ÎÎΤÎÎÎΣÎ: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "ÎÎΤÎΣÎ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANCE: %d%% ÎΡÎΣΤÎΡÎ"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANCE: ÎÎÎΤΡÎ"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANCE: %d%% ÎÎÎÎÎ"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "ÎÎ ÎÎÎÎÎΣ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ÎÎ ÎÎÎΡÎÎÎ ÎÎÎΣΠÏοÏ
Î ÎÎΤΠΣΠΠΡΩΤΠΠÎÎÎÎ (Î/Î)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ÎÎÎΡÎÎÎ ÎÎÎΣΠÏοÏ
Î ÎÎΤΠΣΠΠΡΩΤΠΠÎÎÎÎ (Î/Î)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ÎÎ ÎÎÎΡÎÎÎ ÎÎÎΣΠÏοÏ
Î ÎÎΤΠΣΠΠΡΩΤΠΠÎÎÎÎ"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ÎÎÎΡÎÎÎ ÎÎÎΣΠÏοÏ
Î ÎÎΤΠΣΤΠΠΡÎΣÎÎÎÎÎ"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "Î ÎÎΡÎΦÎΡÎÎΣ ÎΡΧÎÎÎÎ¥"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** ÎΦÎÎΡÎÎÎÎÎΠΤΠÎÎÎ ÎÎÎÎÎÎÎÎ **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "ÎÎÎÎÎ¥ ÎΠΤÎÎÎÎ ÎÎÎΣÎΣ"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/ÎÏομάκÏÏ
νÏη εÏιλεγμÎνÏν"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/ÎÏομάκÏÏ
νÏη μη-εÏιλεγμÎνÏν"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/ÎÏομάκÏÏ
νÏη ÎλÏÏ"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Eναλλαγή οÏ
ÏάÏ"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/Î ÏοÏθήκη CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Î ÏοÏθήκη ÎιεÏθÏ
νÏÎ·Ï internet"
+
+#: beep/playlistwin.c:161
+msgid "/Add Folders..."
+msgstr "/Î ÏοÏθήκη ΦακÎλÏν..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Î ÏοÏθήκη ÎÏÏείÏν..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/ÎαθαÏιÏμÏÏ Î¿Ï
ÏάÏ"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/ÎÏομάκÏÏ
νÏη μη διαθÎÏιμÏν αÏÏείÏν"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/ÎÎα λίÏÏα"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/ΦÏÏÏÏÏη λίÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏγήÏ"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/ÎÏοθήκεÏ
Ïη λίÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏγήÏ"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/ÎνανÎÏÏη ÏÏοβολήÏ"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/ÎνÏιÏÏÏοÏή εÏιλογήÏ"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/ÎανÎνα εÏιλεγμÎνο"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/ÎÏιλογή ÎλÏν"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/ΤÏ
ÏαιοÏοίηÏη λίÏÏαÏ"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/ÎνÏιÏÏÏοÏή ÏÎ·Ï ÏειÏÎ¬Ï ÏÎ·Ï Î»Î¯ÏÏαÏ"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/ΤαξινÏμηÏη ÎίÏÏαÏ"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "ΤαξινÏμηÏη λίÏÏαÏ/ÎαÏά Ïνομα"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "ΤαξινÏμηÏη λίÏÏαÏ/ÎαÏά Ïνομα αÏÏείοÏ
"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/ΤαξινÏμηÏη λίÏÏαÏ/ÎαÏά διαδÏομή + Ïνομα αÏÏείοÏ
"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/ΤαξινÏμηÏη λίÏÏαÏ/ÎαÏά ÏÏονολογία"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/ΤαξινÏμηÏη εÏιλογήÏ"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/ΤαξινÏμηÏη εÏιλογήÏ/ÎαÏά Ïνομα"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/ΤαξινÏμηÏη εÏιλογήÏ/ÎαÏά Ïνομα αÏÏείοÏ
"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr ""
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/ΤαξινÏμηÏη εÏιλογήÏ/ÎαÏά ÏÏονολογία"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "ΣÏάλμα εγγÏαÏÎ®Ï ÏÎ·Ï Î»Î¯ÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏÎ³Î®Ï \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s Ï
ÏάÏÏει ήδη. ΣÏ
νÎÏεια ;"
+
+#: beep/playlistwin.c:818
+#, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+
+#: beep/playlistwin.c:928
+msgid "Load Playlist"
+msgstr "ΦÏÏÏÏÏη λίÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏγήÏ"
+
+#: beep/playlistwin.c:940
+msgid "Save Playlist"
+msgstr "ÎÏοθήκεÏ
Ïη λίÏÏÎ±Ï Î±Î½Î±ÏαÏαγÏγήÏ"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "ÎίÏÏα αναÏαÏαγÏÎ³Î®Ï ÏοÏ
BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "ÎμÏάνιÏη"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "ÎÏοÏÏαθμιÏÏήÏ"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "ΠονÏίκι"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "ÎίÏÏα αναÏαÏαγÏγήÏ"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Î ÏÏÏθεÏα"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "ÎαλλιÏÎÏνηÏ"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "ÎοÏμεÏο ÎÏÏείοÏ
"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "ÎιαδÏομή αÏÏείοÏ
"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "ÎνεÏγοÏοιημÎνο"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "ΠεÏιγÏαÏή"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "ÎαÏηγοÏία"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "ΠαÏάθÏ
Ïο Î ÏοÏιμήÏεÏν "
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "ΠαÏαθÏÏο διαλÏγοÏ
ÏÏοÏθήκηÏ/ανοίγμαÏÎ¿Ï Î±ÏÏείÏν"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Îνοιγμα ÎÏÏείÏν"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "ÎλείÏιμο ÏαÏαθÏÏοÏ
διαλÏγοÏ
καÏά Ïο άνοιγμα"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Î ÏοÏθήκη ÎÏÏείÏν"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "ÎλείÏιμο ÏοÏ
διαλÏγοÏ
καÏά Ïην Î ÏοÏθήκη"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (Îη ÎγκÏ
Ïο UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Î ÏοÏιμήÏÎµÎ¹Ï ÏοÏ
BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Î ÏÏÏθεÏα</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "ÎίÏÏα αÏθÏÏμάÏÏν _μÎÏÏν:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>ÎÎÏα</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "ÎίÏÏα _γενικÏν αÏθÏÏμάÏÏν:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Îενικά</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "ÎίÏÏα αÏθÏÏμάÏÏν _οÏÏικοίηÏηÏ:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>ÎÏÏικοÏοίηÏη</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "ÎίÏÏα αÏθÏÏμάÏÏν _εÏÏÎ:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>ÎÏÎ</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_ΤÏÎÏον άÏθÏÏμα εξÏδοÏ
"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>ÎξοδοÏ</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÎμÏάνιÏη</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_ÎÏαμμαÏοÏειÏÎÏ</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_ΠαίκÏηÏ:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_ÎίÏÏα ÏÏαγοÏ
διÏν:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "ÎÏιλογή γÏαμμαÏοÏειÏÎ¬Ï ÎºÏ
ÏίοÏ
ÏαÏαθÏÏοÏ
:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "ÎÏιλογή γÏαμμαÏοÏειÏÎ¬Ï Î³Î¹Î± Ïην λίÏÏα ÏÏαγοÏ
διÏν:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_ÎιάÏοÏα</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "ÎμÏάνιÏη Î/ΠκομμαÏÎ¹Î¿Ï ÏÏη λίÏÏα αναÏαÏαγÏγήÏ"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "ΧÏήÏη ÏÏοÏαÏμοÏμÎνÏν δεικÏÏν ÏονÏικιοÏ"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>ΠονÏίκι</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Ροδάκι ÏονÏικιοÏ</b>"
+
+#: beep/glade/prefswin.glade:1499
+msgid "Changes volume by"
+msgstr "Îλλάζει Ïην ÎνÏαÏη καÏά"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "ÏοÏοÏÏÏ"
+
+#: beep/glade/prefswin.glade:1547
+msgid "Scrolls playlist by"
+msgstr "Î ÏοÏÏÏά Ïη λίÏÏα ÏÏαγοÏ
διÏν καÏά"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "γÏαμμÎÏ"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÎίÏÏα ÎναÏαÏαγÏγήÏ</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Îνομα αÏÏείοÏ
</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "ÎεÏαÏÏοÏή κάÏÏ ÏαÏÎ»Î±Ï Ïε κενÏ"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "ÎεÏαÏÏοÏή %20 Ïε κενÏ"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ÎεÏαληÏοÏοÏίεÏ</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "ÎαÏά Ïο άνοιγμα"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "ÎαÏά Ïην ÏÏοβολή"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ÎναÏαÏαγÏγή</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "ΠαÏÏη μεÏÎ±Î¾Ï ÏÏν ÏÏαγοÏ
διÏν"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "ΠαÏÏη για"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "δεÏ
ÏεÏÏλεÏÏα"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Î Ïοβολή ΤÏαγοÏ
διοÏ</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Î ÏοÏαÏμοÏμÎνο αλÏαÏιθμηÏικÏ:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"ΤÎΤÎÎΣ\n"
+"ÎÎÎÎÎΤÎΧÎÎΣ - ΤÎΤÎÎΣ\n"
+"ÎÎÎÎÎΤÎΧÎÎΣ - ÎÎÎÎ ÎΥΠ- ΤÎΤÎÎΣ\n"
+"ÎÎÎÎ ÎΥΠ- ΤÎΤÎÎΣ\n"
+"Î ÏοÏαÏμοÏμÎνο"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "ÎμÏάνιÏη ÏληÏοÏοÏιÏν για Ïη μοÏÏή ÏοÏ
αλÏαÏιθμηÏÎ¹ÎºÏ ÏίÏλοÏ
"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÎÏοÏÏαθμιÏÏήÏ</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Î ÏοκαθοÏιÏμÎνα</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "ÎÏÏείο καÏαλÏγοÏ
ÏÏ
θμήÏεÏν:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "ÎÏÎκÏαÏη αÏÏείοÏ
ÏÏ
θμήÏεÏν:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ÎιαθÎÏÎ¹Î¼ÎµÏ _ΡÏ
θμήÏειÏ: "
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "ÎλείÏιμο ÏοÏ
διαλÏγοÏ
καÏά Ïην Î ÏÏÏθεÏη"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "ÎÏιλογή ÎλÏν"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "ÎÏοεÏιλογή ÎλÏν"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at boldquot.header
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at boldquot.header 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at boldquot.header 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at quot.header
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at quot.header 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/en at quot.header 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/es.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3443 @@
+# Spanish translation for BMP
+# Copyright (C) 2004, Francisco Javier F. Serrador <serrador at cvs.gnome.org>
+# This file is distributed under the same license as the BMP package.
+# Francisco Javier F. Serrador <serrador at cvs.gnome.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: es\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-05 01:20+0100\n"
+"Last-Translator: Carlos Fenollosa Bielsa <topopardo at topopardo.com>\n"
+"Language-Team: Spanish <traductores at es.gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Complemento para CD's de audio"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Pista de CD de Audio %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(desconocido)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Unidad %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Fallo al abrir el dispositivo «%s»: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Error leyendo la Tabla de Contenidos\n"
+"Es posible que no haya ningún disco en la unidad\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Accesso correcto al dispositivo %s\n"
+"El disco tiene %d pistas"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d pistas de datos)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Longitud total: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"La extracción de audio digital no se comprobó. El disco no tiene pistas de "
+"audio\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Pasó correctamente la prueba de extracción de audio digital\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Fallo en la prueba de extracción de audio digital: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Fallo al comprobar el directorio %s\n"
+"Error: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Error: %s existe, pero no es un directorio"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "El directorio «%s» es válido"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Dispositivo:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "D_irectorio:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Modo de reproducción:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analógico"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Extracción de audio digital"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Control de volumen:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Sin mezclador"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "Unidad CD-ROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Mezclador OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Comprobar unidad..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Eliminar unidad"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Configuración del reproductor de CD Audio"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Añadir unidad"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Dispositivo"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Usar CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Obtener lista de servidores"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Mostrar la ventana de red"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Servidor CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "Ãndice del CD:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Usar Ãndice del CD"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Servidor de Ãndice del CD:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Nombres de las pistas:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Sustituir tÃtulos genéricos"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Formato del nombre:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Información sobre el CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Seleccione el directorio donde desea almacenar los flujos MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Configuración del complemento MPEG Audio"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Resolución:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bits"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bits"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Canales:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Estéreo (si está disponible)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Reducción de muestreo:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 khz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 khz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 khz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Decodificador:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Detección automática"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "decodificador optimizado 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "decodificador optimizado MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "decodificador FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Opciones"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Contenido"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Extensión"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Extensión y contenido"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Decodificador"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Buffering:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Tamaño del búfer (Kib):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Pre-búfer (porcentaje):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Usar proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Host:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Puerto:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Usar autenticación"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Usuario:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Guardar el flujo en el disco:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Guardar el flujo en el disco"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Ruta:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Examinar"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Habilitar el Canal UDP de Metadatos"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Flujo"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Etiquetas ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Deshabilitar etiquetas ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Convertir etiquetas ID3 que no sean UTF8 a UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "Codificación ID3:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Formato ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titulación"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"No se puede escribir al archivo: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "¡No se pudo escribir la etiqueta!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"no se puede abrir archivo: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Información sobre el archivo"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Aceptar"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"No se puede truncar archivo: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "¡No se pudo quitar la etiqueta!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "¡No hay etiqueta para quitar!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Estéreo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Estéreo junto"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Canal dual"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Canal único"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Ninguno"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "No"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "SÃ"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nombre:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG Info "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "Nivel MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Tasa de bits:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Tasa de muestreo:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Fotogramas:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Tamaño del archivo:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Protección contra errores:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Original:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Ãnfasis:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr "Etiqueta ID3"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "TÃtulo:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artista:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Ãlbum:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Comentario:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Año:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Número de pista:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Género:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Copiar etiquetas del álbum"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Pegar etiquetas del álbum"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "No disponible"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Tasa de bits\n"
+"media variable: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Error"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "BUSCANDO A %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "No se pudo ubicar al servidor %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "CONECTANDO A %s: %d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "No se pudo conectar al servidor %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "CONECTADO: ESPERANDO RESPUESTA"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"No se pudo conectar al servidor %s\n"
+"El servidor reportó: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "PRE-BUFFERING: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Rock clásico"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Antiguos"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Otro"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternativa"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Banda Sonora"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusión"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Clásica"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumental"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Juego"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Clip de sonido"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Ruido"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Rock alternativo"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Espacio"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditativa"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Pop instrumental"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Rock instrumental"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ãtnica"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gótica"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Tecno-industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electrónica"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Rock sureño"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedia"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Culto"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Primeros 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Rap cristiano"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Nativa americana"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psicodélica"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Jazz ácido"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folclore"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folclore/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Folklore nacional"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "LatÃn"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celta"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Rock gótico"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Rock progresivo"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Rock Psicodélico"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Rock sinfónico"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Rock lento"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Coral"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Escucha fácil"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acústica"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Discurso"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Música de cámara"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "SinfonÃa"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Sátira"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folclore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Balada"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Soul rÃtmico"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Estilo libre"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Dueto"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Rock Punk"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Solo de baterÃa"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Bajo y baterÃa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Cristiana contemporánea"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Rock cristiano"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Acerca del complemento MPEG Audio"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"motor de decodificación mpg123 por Michael Hipp <mh at mpg123.de>\n"
+"Complemento por el Equipo XMMS"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Complemento MPEG Audio"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Seleccione el directorio donde desea almacenar los flujos Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Configuración del complemento Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Etiquetas Ogg Vorbis"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Formato del tÃtulo:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Configuraciones de repetición de ganancia:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Activar prevención de sujeción"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Activar repetición de ganancia"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Tipo de repetición de ganancia"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "usar ganancia de pista/pico"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "usar ganancia de álbum/pico"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Activar refuerzo de 6dB + limitación dura"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "Repetición de ganancia"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Ocurrió un error:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "¡Error!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Fallo al abrir la etiqueta. No se pudo modificar."
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Fallo al cerrar la etiqueta. No se pudo modificar"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "No se pudo modificar la etiqueta"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "Etiqueta Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Fecha:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Descripción:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Lugar:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versión:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Número ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organización:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Ganancia de pista:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Pico de pista:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Ganancia de álbum:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Pico de álbum:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "Info Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Largo:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Complemento Ogg Vorbis Audio"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Acerca del complemento Ogg Vorbis Audio"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Complemento de Ogg Vorbis por Xiphophorus\n"
+"\n"
+"Código original por\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contribuciones de\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Håvard Kvålen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visita Xiphophorus en http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Complemento de audio WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "Complemento de salida OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Acerca del controlador OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Controlador OSS de XMMS\n"
+"\n"
+" Este programa es software libre; Ud. lo puede redistribuir y/o modificarlo\n"
+"bajo los términos de la Licencia Pública General GNU como está publicada "
+"por\n"
+"la Free Software Foundation; ya sea la versión 2 de la Licencia, o\n"
+"(a su gusto) cualquier versión posterior.\n"
+"\n"
+"Este programa se distribuye con la esperanza de que sea útil,\n"
+"pero SIN GARANTÃA ALGUNA; incluso sin la garantÃa implÃcita de\n"
+"COMERCIABILIDAD o ADECUACIÃN PARA UN PROPÃSITO EN PARTICULAR. Ver la\n"
+"Licencia Pública General GNU para más detalles.\n"
+"\n"
+"Ud. deberÃa haber recibido una copia de la Licencia Pública General GNU\n"
+"junto con este programa; de no ser asÃ, escriba a la Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Predeterminado (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Predeterminado"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Configuración del controlador OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Dispositivo de audio:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Usar dispositivo alternativo:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Dispositivo mezclador"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Tamaño del búfer (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Buffering"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Configuraciones del mezclador:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "El volumen controla al Maestro no al PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mezclador"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Acerca del complemento ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Controlador ESounD de XMMS\n"
+"\n"
+" Este programa es software libre; Ud. lo puede redistribuir y/o modificarlo\n"
+"bajo los términos de la Licencia Pública General GNU como está publicada "
+"por\n"
+"la Free Software Foundation; ya sea la versión 2 de la Licencia, o\n"
+"(a su gusto) cualquier versión posterior.\n"
+"\n"
+"Este programa se distribuye con la esperanza de que sea útil,\n"
+"pero SIN GARANTÃA ALGUNA; incluso sin la garantÃa implÃcita de\n"
+"COMERCIABILIDAD o ADECUACIÃN PARA UN PROPÃSITO EN PARTICULAR. Ver la\n"
+"Licencia Pública General GNU para más detalles.\n"
+"\n"
+"Ud. deberÃa haber recibido una copia de la Licencia Pública General GNU\n"
+"junto con este programa; de no ser asÃ, escriba a la Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Configuración del complemento de salida ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Usar servidor remoto"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "El volumen controla al mezclador OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Servidor"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Complemento de salida eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Acerca del controlador ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"Controlador ALSA de XMMS\n"
+"\n"
+" Este programa es software libre; Ud. lo puede redistribuir y/o modificarlo\n"
+"bajo los términos de la Licencia Pública General GNU como está publicada "
+"por\n"
+"la Free Software Foundation; ya sea la versión 2 de la Licencia, o\n"
+"(a su gusto) cualquier versión posterior.\n"
+"\n"
+"Este programa se distribuye con la esperanza de que sea útil,\n"
+"pero SIN GARANTÃA ALGUNA; incluso sin la garantÃa implÃcita de\n"
+"COMERCIABILIDAD o ADECUACIÃN PARA UN PROPÃSITO EN PARTICULAR. Ver la\n"
+"Licencia Pública General GNU para más detalles.\n"
+"\n"
+"Ud. deberÃa haber recibido una copia de la Licencia Pública General GNU\n"
+"junto con este programa; de no ser asÃ, escriba a la Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "Complemento de salida ALSA «%s»"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Tarjeta de sonido desconocida"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Dispositivo PCM predeterminado (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Configuración del controlador ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mezclador:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Usar control de volumen por software"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Dispositivo mezclador:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Configuraciones del dipositivo"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Configuración avanzada:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Tiempo del búfer (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "PerÃdodo del búfer (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Tiempo del búfer (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Modo Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Opciones avanzadas"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Intercambiar decoración"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Cerrar"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Osciloscopio borroso"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Seleccionar color del osciloscopio borroso"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Opciones:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Intérprete/Artista"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Ãlbum"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Género"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Nombre de archivo"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Ruta hasta el archivo"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Extensión de archivos"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Nombre de la pista"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Número de pista"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Fecha"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Año"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Comentario"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Mostrar «...» solamente si aparece el elemento %n"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Un reproductor multimedia basado en XMMS\n"
+"\n"
+"Copyright (C) 2003-2004, el Equipo de Desarrollo de BMP\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Desarrolladores:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Con la inestimable ayuda de:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Página web y gráficos:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Brazilian Portuguese:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Bretón:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Chino:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Checo:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Holandés:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Español:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francés:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Alemán:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Alemán:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Griego:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Húngaro:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Italiano:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japonés:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Coreano:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lituano:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Macedonio:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polaco:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Rumano:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Ruso:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Eslovaco:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Español:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+"Francisco Javier F. Serrador\n"
+"Carlos Fenollosa Bielsa"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Sueco:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Rumano:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Galés:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Acerca de BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Créditos:"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Traductores"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Cargar"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Cargar/Preconfigurado"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Cargar/Autocargar preconfigurado"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Cargar/Predeterminado"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Cargar/Cero"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Cargar/Desde archivo"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Cargar/Desde archivo EQF de WinAMP"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importar"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importar/Preconfigurado de WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Guardar"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Guardar/Preconfigurado"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Guardar/Preconfigurado autocargado"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Guardar/Predeterminado"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Guardar/En archivo"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Guardar/En archivo EQF de WinAMP"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Borrar"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Borrar/Preconfigurado"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Borrar/Preconfigurado autocargado"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "Ecualizador BMP"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Preconfigurado"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Preconfigurados"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Cargar preconfigurado"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Cargar auto-preconfigurado"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Cargar preconfigurado del ecualizador"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Guardar preconfigurado"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Guardar auto-preconfigurado"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Guardar preconfigurado del ecualizador"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Borrar preconfigurado"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Borrar auto-preconfigurado"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: la opción `%s' es ambigua\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: la opción `--%s' no permite un argumento\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: la opción `%c%s' no permite un argumento\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: la opción `%s' necesita un argumento\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opción `--%s' desconocida\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opción `%c%s' desconocida\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opción -- %c ilegal\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opción -- %c inválida\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: la opción necesita un argumento -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: la opción `-W %s' es ambigua\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: la opción `-W %s' no permite un argumento\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>No es posible reproducir los archivos</big></b>\n"
+"\n"
+"No se pudieron reproducir los archivos. Por favor, comprueba que:\n"
+"1. Se tenga acceso de lectura\n"
+"2. Los complementos necesarios estén activados"
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "No mostrar más esta advertencia"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Ver más _detalles"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Nombre de archivo"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Nombre del archivo:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Ningún complemento de entrada reconoció a este archivo"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Complemento de entrada: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "No se pudo crear el archivo log (%s)\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "No se pudo crear el directorio «%s»: %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Uso: beep-media-player [opciones] [archivos] ...\n"
+"\n"
+"Opciones:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Mostrar este texto y salir"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Seleccionar la sesión de BMP/XMMS (Por defecto: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Saltar hacia atrás en la lista de reproducción"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Empezar la reproducción de la lista de reproducción actual"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pausar la canción actual"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Parar la canción actual"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pausar si se está reproduciendo, o reproducir"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Saltar hacia adelante en la lista de reproducción"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "No limpiar la lista de reproducción"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Mostrar la ventana principal"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "Activar BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID de sesión previa"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Imprimir el número de versión y salir.\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Se recibió SIGSEGV\n"
+"\n"
+"Esto podrÃa ser un fallo en BMP. Si no sabe cómo ocurrió esto,\n"
+"envÃe un correo-e a beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>No es posible cargar la piel</big></b>\n"
+"\n"
+"Por favor, comprueba que la piel «%s» sea válida y que la piel por defecto "
+"esté instalada correctamente en «%s»\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Lo siento, la versión de GTK %d.%d.%d no funciona con BMP.\n"
+"Por favor, use GTK+ %s o más nuevo.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Lo siento, su plataforma no soporta hilos.\n"
+"\n"
+"Si está en un sistema linux basado en libc5 e instaló Glib & GTK+ antes de "
+"instalar LinuxThreads, necesita recompilar GLIB y GTK+\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: No se pudo abrir el display, abortando"
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Ver detalles de pista"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Desplazar Nombre de canción"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Modo de visualización"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Modo de visualización/Analizador"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Modo de visualización/Osciloscopio"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Modo de visualización/Apagado"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Modo del analizador"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Modo del analizador/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Modo del analizador/Fuego"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Modo del analizador/LÃneas verticales"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Modo del analizador/LÃneas"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Modo del analizador/Barras"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Modo del analizador/Picos"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Modo del osciloscopio"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Modo del osciloscopio/Puntos"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Modo del osciloscopio/LÃneas"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Modo del osciloscopio/Sólido"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Modo de sombreado de ventana"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Modo de sombreado de ventana/Normal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Modo de sombreado de ventana/Suave"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Frecuencia de refresco"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Frecuencia de refresco/Completa (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Frecuencia de refresco/Media (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Frecuencia de refresco/Cuarta parte (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Frecuencia de refresco/Octava parte (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/CaÃda del analizador"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/CaÃda del analizador/LentÃsima"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/CaÃda del analizador/Lenta"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/CaÃda del analizador/Media"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/CaÃda del analizador/Rápida"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/CaÃda del analizador/RapidÃsima"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/CaÃda de los picos"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/CaÃda de los picos/LentÃsima"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/CaÃda de los picos/Lenta"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/CaÃda de los picos/Media"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/CaÃda de los picos/Rápida"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/CaÃda de los picos/RapidÃsima"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Repetir"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Orden aleatorio"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Reproducir"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pausa"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Parar"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Anterior"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Siguiente"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Saltar al inicio de la lista de reproducción"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Saltar al archivo"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Saltar al tiempo"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Preferencias"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Ver"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Acerca de BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Salir"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Archivos..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Dirección de internet..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Mostrar el editor de listas de reproducción"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Mostrar ecualizador"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Tiempo corrido"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Tiempo restante"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Siempre encima"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Mostrar en todos los espacios de trabajo"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Enrollar reproductor"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Enrollar lista de reproducción"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Enrollar ecualizador"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Saltar al tiempo"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minutos:segundos"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Longitud de pista:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Cola"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Cola"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Saltar a la pista"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "filtro:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Añadir directorios"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "Añadir dirección de Internet"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "BUSCAR HASTA: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLUMEN: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANCE: %d%% IZQUIERDO"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANCE: CENTRO"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANCE: %d%% DERECHO"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "MENÃ DE OPCIONES"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "DESACTIVAR «SIEMPRE ENCIMA (N/D)»"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ACTIVAR «SIEMPRE ENCIMA (N/D)»"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "DESACTIVAR «SIEMPRE ENCIMA»"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ACTIVAR «SIEMPRE ENCIMA»"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "INFORMACIÃN DEL ARCHIVO"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "SE HA DESACTIVADO EL TAMAÃO DOBLE"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "MENÃ DE VISUALIZACIÃN"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>No se encontró ningún CD de audio</big></b>\n"
+"\n"
+"No se insertó ningún CD, o el CD insertado no es de audio\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>No se pudo abrir el audio</big></b>\n"
+"\n"
+"Por favor, comprueba que:\n"
+"1. Esté seleccionado el complemento de salida correcto\n"
+"2. Ningún programa está bloqueando la tarjeta de sonido\n"
+"3. La tarjeta de sonido esté bien configurada\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Eliminar los seleccionados"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Eliminar los no-seleccionados"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Eliminar todos"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Activar cola"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/Añadir CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Añadir dirección de Internet..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Añadir archivos..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Añadir archivos..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Vaciar cola"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Eliminar archivos no disponibles "
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Lista nueva"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Cargar lista"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Guardar lista"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Actualizar vista"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Invertir selección"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Deseleccionar todo"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Seleccionar todo"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Mezclar lista"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Invertir lista"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Ordenar lista"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Ordenar lista/Por tÃtulo"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Ordenar lista/Por nombre de archivo"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Ordenar lista/por ruta + nombre de archivo"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Ordenar lista/Por Fecha"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Ordenar selección"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Ordenar selección/Por tÃtulo"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Ordenar selección/Por nombre de archivo"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Ordenar selección/Por ruta + nombre de archivo"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Ordenar selección/Por fecha"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Error escribiendo lista de reproducción«%s»: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s ya existe. Continuar?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+"No se puede guardar la lista de reproducción. Tipo de archivo desconocido "
+"para «%s»"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Cargar lista de reproducción"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Guardar lista de reproducción"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Editor de lista de reproducción de BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Apariencia"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Ecualizador"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Ratón"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Lista de reproducción"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Complementos"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Artista"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Número de pista"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Ruta hasta el archivo"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Activado"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Descripción"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "CategorÃa"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Ventana de preferencias"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Añadir/Abrir diálogo de selección de archivos..."
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Abrir archivos"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Cerrar diálogo al abrir"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Añadir archivos..."
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Cerrar diálogo al añadir"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (UTF-8 inválido)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Preferencias de BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Complementos</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Lista de complementos para los tipos de archivo"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Tipos de archivo</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "Lista de complementos _generales:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>General</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "Lista de _complementos de visualización:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualización</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "Lista de complementos con _efectos:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efectos</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Complemento de salida actual:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Se han guardado los cambios, pero no se aplicarán hasta la reproducción de "
+"la siguiente canción\n"
+"\n"
+"También se puede parar y volver a reproducir la misma canción para que se "
+"apliquen los cambios"
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Salida</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Aspecto</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Pieles</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Fuentes</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Reproductor:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Lista de reproducción:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Seleccione la tipografÃa de la ventana principal:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Seleccione la tipografÃa de la lista de reproducción:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Varios</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Mostrar números en la lista de reproducción"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Usar cursores personalizados"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ratón</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Rueda del ratón</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "La rueda del ratón ajusta el volumen en un (%)"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "porcentaje"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "El ratón desplaza la lista en"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "lÃneas"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Lista de reproducción</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Nombre de archivo</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Convertir el guión bajo a espacios"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Convertir %20 a espacios"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadatos</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Leer información de etiqueta desde los archivos."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Cargar metadatos de las listas de reproducción y archivos"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Cargar metadatos al añadir el archivo a la lista o al abrirlo"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Al cargar"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+"Leer tÃtulo y duración de la canción cuando la misma se vea en la lista de "
+"reproducción"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Al mostrar"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Reproducción</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Al acabar de reproducir una canción, no saltar a la siguiente automáticamente"
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "No avanzar en la lista de reproducción"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pausa entre canciones de"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pausa de"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "Segundos"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Mostrar canción</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Cadena personalizada:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TÃTULO\n"
+"ARTISTA - TÃTULO\n"
+"ARTISTA - ÃLBUM - TÃTULO\n"
+"ÃLBUM - TÃTULO\n"
+"Personalizado"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Mostrar información acerca del formato del tÃtulo"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ecualizador</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Preconfigurados</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Directorio de archivos de preconfiguración:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Extensión de archivos de preconfiguración:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "_Preconfigurados disponibles:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Cerrar diálogo al añadir"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Seleccionar todo"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Deseleccionar todo"
+
+#~ msgid "Default skin:"
+#~ msgstr "Piel por defecto:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "No se pudo inicializar gnome-vfs\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/No avanzar en la lista de reproducción"
+
+#~ msgid "/By extension"
+#~ msgstr "/Por extensión"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fi.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3590 @@
+# fi Finnish translation
+# Beep Media Player Finnish translation
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as Beep Media Player.
+# Pauli Virtanen <pauli.virtanen at hut.fi>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: fi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-03-13 21:31+0200\n"
+"Last-Translator: Pauli Virtanen <pauli.virtanen at hut.fi>\n"
+"Language-Team: Finnish <lokalisointi-laatu at linux-aktivaattori.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD-soitinliitännäinen"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD:n ääniraita %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(tuntematon)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Asema %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Laitteen %s avaaminen epäonnistui.\n"
+"Virhe: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Levyn \"sisällysluettelon\" luku epäonnistui.\n"
+"Ehkäpä asemassa ei ole levyä?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Laite %s on kunnossa.\n"
+"Levyllä on %d raitaa"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d dataraitaa)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Kokonaispituus: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Digitaalista äänen lukua ei yritetty koska levyllä ei ole ääniraitoja\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Digitaalisen äänen lukutesti: kunnossa\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Digitaalisen äänen lukutesti epäonnistui: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Kansion %s tarkistus epäonnistui.\n"
+"Virhe: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Virhe: %s on olemassa, mutta ei ole kansio."
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Kansio %s on kunnossa."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Laite:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Laite:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_Kansio:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Soittotapa:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analoginen"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Digitaalinen äänen luku"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Ãänenvoimakkuus:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Ei mikseriä"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CD-asema"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS:n mikseri"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Tarkista asema..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Poista asema"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD-soittimen asetukset"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Lisää asema"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Laite"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Käytä CDDB:tä"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Hae palvelinluettelo"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Näytä verkkoikkuna"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB-palvelin:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD-hakemisto:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Käytä CD-hakemistoa"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD-hakemistopalvelin:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Kappaleiden nimet:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Sivuuta yleisnimitykset"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Nimien muoto:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD-tiedot"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Valitse hakemisto, johon haluat tallentaa MPEG-virrat:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG-ääniliitännäisen asetukset"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Tarkkuus:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bittiä"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bittiä"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanavia:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (jos saatavilla)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Alinäytteistys:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekooderi:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automaattinen tunnistus"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow!-optimoitu purku"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX-optimoitu purku"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU-purku"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Asetukset"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Sisältö"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Pääte"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Pääte ja sisältö"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekooderi"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Puskurointi:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Puskurin koko (kt):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Esipuskurointi (%):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Välityspalvelin:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Käytä välityspalvelinta"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Konenimi:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Portti:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Käytä todennusta"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Käyttäjänimi:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Salasana:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Tallenna virta levylle:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Tallenna virta levylle"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Polku:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Selaa"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Käytä Icecastin UDP-metatietokanavaa"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Virrat"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3-tiedot:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Poista ID3v2-tiedot käytöstä"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Muunna ID3-tietojen merkistö UTF-8:ksi jos muussa muodossa"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3-merkistö:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3-muoto:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Nimi"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Tiedostoon ei voi kirjoittaa: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Tietojen kirjoittaminen epäonnistui!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Tiedostoa ei voi avata: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Tiedoston tiedot"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "OK"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Tiedostoa ei voi typistää: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Tietoa ei voi poistaa!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Poistettavaa tietoa ei ole!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Yhdistetty stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Kaksikanavainen"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Yksikanavainen"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d kbit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Ei mikään"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Ei"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Kyllä"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nimi:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG-tietoja "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG-taso:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bittinopeus:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Näytetaajuus:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Kehyksiä:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Tiedostokoko:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Virheenesto:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Tekijänoikeus:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Alkuperäinen:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Korostus:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3-tieto "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Nimi:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Esittäjä:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Levy:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Kommentti:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Vuosi:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Kappalenumero:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Tyylilaji:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Kopioi levyn tiedot"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Liitä levyn tiedot"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "ei"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Vaihteleva,\n"
+"keskimäärin %d kbit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu tavua"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Virhe"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "HAETAAN %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Konenimen %s haku epäonnistui"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "YHDISTETÃÃN OSOITTEESEEN %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Koneeseen %s yhdistäminen epäonnistui-"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "YHDISTETTY: ODOTTAA VASTAUSTA"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Koneeseen %s yhdistäminen epäonnistui\n"
+"Palvelimen ilmoitus: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ESIPUSKUROINTI: %d/%d kt"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Klassinen rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Kantri"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Tanssi"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disko"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metalli"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Klassikot"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Muu"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Tekno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Vaihtoehtoinen"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pilat"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Ãäniraita"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-tekno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Laulu"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fuusio"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klassinen"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumentaali"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Peli"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Ãänileike"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Melu"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Vaihtoehtorock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Basso"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Avaruus"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditaatio"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumentaalipop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumentaalirock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Etninen"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Goottilainen"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Tekno-industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Elektroninen"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Uni"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Eteläinen rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Komedia"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Kultti"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta-rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Kristillinen rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Alkuperäisamerikkalainen"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Kabaree"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psykedeelinen"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showmusiikki"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Esittely"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Heimo"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polkka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Muusikaali"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock'n'Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Kansallinen folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Nopea fuusio"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latinalainen"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Kelttiläinen"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Goottirock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressiivinen rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psykedeelinen rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Sinfoninen rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Hidas rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Kuoro"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Kevyt kuunneltava"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Akustinen"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Huumori"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Puhe"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Ooppera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Kamarimusiikki"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonetti"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Sinfonia"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Pornogroove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satiiri"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Hidas jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Klubi"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Kansantaru"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Balladi"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Voimaballadi"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rytminen soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Vapaamuotoinen"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duetto"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Rumpusoolo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Tanssihalli"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Kulbi-house"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Kauhu"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Riippumaton"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "Brittipop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Musta punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Puolapunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Kristinllinen gangsta-rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Hevi"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Sekoitus"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Nykyaikainen kristillinen"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Kristillinen rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "MPEG-ääniliitännäisestä"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 purkaja, tehnyt: Michael Hipp <mh at mpg123.de>\n"
+"Liitännäisen tekijä: XMMS-ryhmä."
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG-ääniliitännäinen"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Valitse hakemisto, johon Ogg Vorbis -virrat tallentuvat:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis -ääniliitännäisen asetukset"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis -tiedot:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Nimikkeen muoto:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain-asetukset:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Estä huippujen leikkautuminen"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Käytä ReplayGainia"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ReplayGainin tyyppi:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "Käytä kappaleen vahvistusta ja huippuarvoa"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "Käytä levyn vahvistusta ja huippuarvoa"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Ota 6:n dB:n vahvistus ja vahva rajoitus käyttöön"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Virhe tapahtui:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Virhe!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Tietojen muokkaus (avaus) epäonnistui"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Tietojen muokkaus (sulkeminen) epäonnistui"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Tietojen muokkaus epäonnistui"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis -tiedot"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Päiväys:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Kuvaus:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Sijainti:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versio:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC-numero:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organisaatio:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis -ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Kappaleen vahvistus:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Kappaleen huippuarvo:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Levyn vahvistus:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Levyn huippuarvo:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis -tietoja"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Kesto:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d kbit/s (nimellinen)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d tavua"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis -ääniliitännäinen"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis -ääniliitännäisestä"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Xiph.org-säätiön Ogg Vorbis -liitännäinen:\n"
+"\n"
+"Alkuperäisen ohjelman tekijät:\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Avustuksia seuraavilta:\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Håvard Kvålen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Vieraile Xiph.org-säätiön sivuilla osoitteessa http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV-ääniliitännäinen"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS-ulostuloliitännäinen"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "OSS-liitännäisestä"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS:n OSS-liitännäinen\n"
+"\n"
+"Tämä ohjelma on vapaaohjelma, ja sitä saa levittää ja muokata Free\n"
+"Software Foundationin julkaiseman GNU General Public License\n"
+"-lisenssin version 2 tai valinnaisesti myöhemmän version ehtojen\n"
+"mukaisesti.\n"
+"\n"
+"Tätä ohjelmaa levitetään toivoen, että se olisi hyödyllinen, mutta\n"
+"ILMAN MINKÃÃNLAISTA TAKUUTA, ei edes takuuta MYYNTIKELPOISUUDESTA tai\n"
+"SOPIVUUDESTA TIETTYYN KÃYTTÃÃN. Lisätietoja on GNU General Public\n"
+"Licence -lisenssissä.\n"
+"\n"
+"GNU General Public Licence -lisenssin kopion tulisi olla toimitettuna\n"
+"tämän ohjelman mukana. Jos näin ei ole, kirjoita Free Software\n"
+"Foundationille, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Oletus (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Oletus"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS-liitännäisen asetukset"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Ãänilaite:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Käytä vaihtoehtoista äänilaitetta:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mikserilaite:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Laitteet"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Puskurin koko (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Puskurointi"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Mikserin asetukset:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Ãänenvoimakkuuden säädin muuttaa pää-, eikä PCM-äänenvoimakkuutta"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mikseri"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Tietoja Esound-liitännäisestä"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS:n Esound-liitännäinen\n"
+"\n"
+"Tämä ohjelma on vapaaohjelma, ja sitä saa levittää ja muokata Free\n"
+"Software Foundationin julkaiseman GNU General Public License\n"
+"-lisenssin version 2 tai valinnaisesti myöhemmän version ehtojen\n"
+"mukaisesti.\n"
+"\n"
+"Tätä ohjelmaa levitetään toivoen, että se olisi hyödyllinen, mutta\n"
+"ILMAN MINKÃÃNLAISTA TAKUUTA, ei edes takuuta MYYNTIKELPOISUUDESTA tai\n"
+"SOPIVUUDESTA TIETTYYN KÃYTTÃÃN. Lisätietoja on GNU General Public\n"
+"Licence -lisenssissä.\n"
+"\n"
+"GNU General Public Licence -lisenssin kopion tulisi olla toimitettuna\n"
+"tämän ohjelman mukana. Jos näin ei ole, kirjoita Free Software\n"
+"Foundationille, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD-ulostuloliitännäisen asetukset"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Käytä etäkonetta"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Ãänenvoimakkuus säätää pää-äänenvoimakkuutta"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Palvelin"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Esound-ulostuloliitännäinen"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Alsa-liitännäisestä"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS:n Alsa-liitännäinen\n"
+"Tekijä: Matthieu Sozeau (mattam at altern.org)\n"
+"\n"
+"Tämä ohjelma on vapaaohjelma, ja sitä saa levittää ja muokata Free\n"
+"Software Foundationin julkaiseman GNU General Public License\n"
+"-lisenssin version 2 tai valinnaisesti myöhemmän version ehtojen\n"
+"mukaisesti.\n"
+"\n"
+"Tätä ohjelmaa levitetään toivoen, että se olisi hyödyllinen, mutta\n"
+"ILMAN MINKÃÃNLAISTA TAKUUTA, ei edes takuuta MYYNTIKELPOISUUDESTA tai\n"
+"SOPIVUUDESTA TIETTYYN KÃYTTÃÃN. Lisätietoja on GNU General Public\n"
+"Licence -lisenssissä.\n"
+"\n"
+"GNU General Public Licence -lisenssin kopion tulisi olla toimitettuna\n"
+"tämän ohjelman mukana. Jos näin ei ole, kirjoita Free Software\n"
+"Foundationille, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307\n"
+"USA."
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s -ulostuloliitännäinen"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Tuntematon äänikortti"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Oletusarvoinen PCM-laite (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Alsa-liitännäisen asetukset"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mikseri:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Käytä ohjelmiston äänenvoimakkuussäätöä"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mikserikortti:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Laitteen asetukset"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Lisäasetukset:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Puskuri ms:"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Jakson aika (ms):"
+
+#: Output/alsa/configure.c:402
+msgid "Thread buffer time (ms):"
+msgstr "Säikeen puskuriaika (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr "Monisäikeinen tila"
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "MMap-tila"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Lisäasetukset"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Ikkunareunukset käyttöön tai pois"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Sulje"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Sumea oskilloskooppi"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Sumean oskilloskoopin väri"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Asetukset:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Tekijä/Esittäjä"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Levy"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Tyylilaji"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Tiedostonimi"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Tiedoston polku"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Tiedostopääte"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Kappaleen nimi"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Kappaleen numero"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Päiväys"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Vuosi"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Kommentti"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Näytä \"...\" vain jos kohta %n on olemassa"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"XMMS:än perustuva musiikkisoitin\n"
+"\n"
+"Copyright (C) 2003-2004 BMP-kehittäjäryhmä\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Kehittäjät:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Avustajat:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Kotisivu ja grafiikka:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "portugali (Brasilia):"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "bretoni:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "kiina:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr "Chao-Hsiung Liao"
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "tšekki:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "hollanti:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "espanja:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "ranska:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "saksa:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "saksa:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "kreikka:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "unkari:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "italia:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "japani:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "korea:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "liettua:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "makedonia:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "puola:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "romania:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "venäjä:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "slovakki:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "espanja:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "ruotsi:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "romania:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "kymri:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "BMP:stä"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Tekijät"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Kääntäjät"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "ESIVAHVISTUS"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 Hz"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 Hz"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 Hz"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 Hz"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 kHz"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "30 kHz"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 kHz"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 kHz"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 kHz"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 kHz"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Lataa"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Lataa/Asetus"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Lataa/Automaattinen asetus"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Lataa/Oletus"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Lataa/Nolla"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Lataa/Tiedosto"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Lataa/Winampin EQF-tiedosto"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Tuo"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Tuo/Winampin asetukset"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Tallenna"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Tallenna/Asetus"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Tallenna/Automaattinen asetus"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Tallenna/Oletus"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Tallenna/Tiedosto"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Tallenna/Winampin EQF-tiedosto"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Poista"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Poista/Asetus"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Poista/Automaattinen asetus"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP:n taajuuskorjain"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Asetus"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Asetukset"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Lataa asetus"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Lataa automaattinen asetus"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Lataa taajuuskorjaimen asetus"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Tallenna asetus"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Tallenna automaattinen asetus"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Tallenna taajuuskorjaimen asetus"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Poista asetus"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Poista automaattinen asetus"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: valitsin `%s' ei ole yksiselitteinen\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: valitsin `--%s' ei tarvitse parametria\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: valitsin `%c%s' ei tarvitse parametria\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: valitsin `%s' vaatii parametrin\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: tuntematon valitsin `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: tuntematon valitsin `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ei-sallittu valitsin -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: virheellinen valitsin -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: valitsin tarvitsee parametrin -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: valitsin `-W %s' ei ole yksiselitteinen\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: valitsin `-W %s' ei tarvitse parametria\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Tiedostojen soittaminen ei onnistu.</big></b>\n"
+"\n"
+"Seuraavien tiedostojen soittaminen ei onnistunut. Tarkista että:\n"
+"1. Tiedostoja voi käyttää.\n"
+"2. Tarpeelliset liitännäiset ovat käytössä."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Ãlä näytä tätä varoitusta enää"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Näytä _lisätietoja"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Tiedostonimi"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Tiedostonimi:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Yksikään liitännäinen ei tunnistanut tätä tiedostoa"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Syöteliitännäinen: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Lokitiedoston (%s) luominen ei onnistu.\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep-mediasoitin"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Kansion (%s) luominen epäonnistui: %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Käyttö: beep-media-player [valitsimet] [tiedostot] ...\n"
+"\n"
+"Valitsimet:\n"
+"-----------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Näytä tämä teksti ja lopeta"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Valitse BMP:n tai XMMS:n istuntonumero (oletus: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Siirry taaksepäin soittolistassa"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Soita nykyistä soittolistaa"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Aloita tauko nykyisessä kappaleessa"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Pysäytä nykyisen kappaleen soittaminen"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pidä tauko jos kappale soi, muuten aloita soittaminen"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Siirry eteenpäin soittolistassa"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ãlä tyhjennä soittolistaa"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Näytä pääikkuna"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "Aktivoi BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "Edellisen istunnon tunniste"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Tulosta versionumero ja lopeta\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Signaali SIGSEGV vastaanotettu\n"
+"\n"
+"Tämä voi merkitä ohjelmistovirhettä BMP:ssä. Jos et tiedä miksi tämä "
+"tapahtui, ota yhteyttä kehittäjiin sähköpostiosoitteessa beepmp-devel at lists."
+"sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Teeman lataaminen ei onnistunut.</big></b>\n"
+"\n"
+"Tarkista että teema \"%s\" on käytettävissä, ja että oletusarvoinen teema on "
+"asennettu kunnolla kansioon \"%s\"\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Tietokoneellesi asennettu GTK+:n versio (%d.%d.%d) ei ole yhteensopiva BMP:n "
+"kanssa.\n"
+"Käytä GTK+:n versiota %s tai uudempaa.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Järjestelmäsi ei tue säikeitä.\n"
+"\n"
+"Jos käytät libc5-pohjaista Linux-järjestelmää ja asensit Glibin ja GTK+:n "
+"ennen\n"
+"LinuxThreadsia, niin Glib ja GTK+ täytyy kääntää uudestaan.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: näytön avaaminen ei onnistu, sulkeutuu."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Näytä kappaleen tiedot"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Vieritä kappaleen nimeä"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Visualisointitapa"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Visualisointitapa/Taajuusspektri"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Visualisointitapa/Oskilloskooppi"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Visualisointitapa/Ei käytössä"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Taajuusspektri"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Taajuusspektri/Tavallinen"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Taajuusspektri/Tuli"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Taajuusspektri/Pystyviivat"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Taajuusspektri/Viivat"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Taajuusspektri/Palkit"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Taajuusspektri/Huiput"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Oskilloskooppi"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Oskilloskooppi/Pisteet"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Oskilloskooppi/Viiva"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Oskilloskooppi/Yhtenäinen"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Rullattu ikkuna"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Rullattu ikkuna/Tavallinen"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Rullattu ikkuna/Pehmeä"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Päivitystaajuus"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Päivitystaajuus/Täysi (~50 Hz)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Päivitystaajuus/Puolet (~25 Hz)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Päivitystaajuus/Neljäsosa (~13 Hz)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Päivitystaajuus/Kahdeksasosa (~6 Hz)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Taajuusspektrin nopeus"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Taajuusspektrin nopeus/Hitain"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Taajuusspektrin nopeus/Hidas"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Taajuusspektrin nopeus/Keskinopea"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Taajuusspektrin nopeus/Nopea"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Taajuusspektrin nopeus/Nopein"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Huippujen nopeus"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Huippujen nopeus/Hitain"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Huippujen nopeus/Hidas"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Huippujen nopeus/Keskinopea"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Huippujen nopeus/Nopea"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Huippujen nopeus/Nopein"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Toisto"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Sekaisin"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Soita"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Tauko"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Pysäytä"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Edellinen"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Seuraava"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Siirry soittolistan alkuun"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Siirry tiedoston kohdalle"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Siirrä ajanhetkeä"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Asetukset"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Näytä"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/BMP:stä"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Lopeta"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Tiedostot..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Internet-osoite..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Näytä soittolistan muokkain"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Näytä taajuuskorjain"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Kulunut aika"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Aikaa jäljellä"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Aina päällimmäisenä"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Näkyy kaikissa työtiloissa"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Rullaa soittoikkuna"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Rullaa soittolistan muokkausikkuna"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Rullaa taajuuskorjainikkuna"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Siirry hetkeen"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuutti:sekunti"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Kappaleen kesto:"
+
+#: beep/mainwin.c:1364
+msgid "Un_queue"
+msgstr "_Poista jonosta"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Lisää jonoon"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Siirry kappaleeseen"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Suodatin:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Lisää kansioita"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "Lisää internet-osoite"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "SIIRRY: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "ÃÃNENVOIMAKKUUS: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "TASAPAINO: %d%% VASEN"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "TASAPAINO: KESKELLÃ"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "TASAPAINO: %d%% OIKEA"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "ASETUSVALIKKO"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ÃLÃ PIDÃ AINA PÃÃLLIMMÃISENÃ (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "PIDÃ AINA PÃÃLLIMMÃISENÃ (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ÃLÃ PIDÃ AINA PÃÃLLIMMÃISENÃ"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "PIDÃ AINA PÃÃLLIMMÃISENÃ"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "TIEDOSTOTIEDOT"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** KOKO ON NYT YKSINKERTAINEN **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "VISUALISOINTIVALIKKO"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Soitettavaa CD:tä ei löydy.</big></b>\n"
+"\n"
+"CD:tä ei joko ole asemassa, tai asemassa oleva CD ei sisällä ääntä.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Ãänilaitteen avaaminen epäonnistui.</big></b>\n"
+"\n"
+"Tarkista että:\n"
+"1. Oikea ulostuloliitännäinen on valittu.\n"
+"2. Muut ohjelmat eivät käytä juuri nyt äänikorttia.\n"
+"3. Ãänikortin asetukset ovat oikein.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Poista valitut"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Poista valitsemattomat"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Poista kaikki"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Muuta soittojonoa"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/Lisää CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Lisää internet-osoite..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Lisää tiedostoja..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Lisää tiedostoja..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Tyhjennä jono"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Poista kappaleet, jotka eivät ole saatavilla"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Uusi lista"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Avaa lista"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Tallenna lista"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Päivitä näkymä"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Käänteinen valinta"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Tyhjä valinta"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Valitse kaikki"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Sekoita lista"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Käänteinen järjestys"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Järjestä lista"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Järjestä lista/Nimen mukaan"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Järjestä lista/Tiedostonimen mukaan"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Järjestä lista/Täydellisen tiedostonimen mukaan"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Järjestä lista/Päiväyksen mukaan"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Järjestä valittu osa"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Järjestä valittu osa/Nimien mukaan"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Järjestä valittu osa/Tiedostonimien mukaan"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Järjestä valittu osa/Täydellisten tiedostonimien mukaan"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Järjestä valittu osa/Päiväyksen mukaan"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Virhe soittolistan \"%s\" kirjoittamisessa: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s on jo olemassa. Jatketaanko?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+"Soittolistan tallentaminen epäonnistui. Tuntematon tiedoston \"%s\" tyyppi."
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Avaa soittolista"
+
+#: beep/playlistwin.c:940
+msgid "Save Playlist"
+msgstr "Tallenna soittolista"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP:n soittolistan muokkain"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Ulkonäkö"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Taajuuskorjain"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Hiiri"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Soittolista"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Liitännäiset"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Esittäjä"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Kappalenumero"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Tiedostopolku"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Käytössä"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Kuvaus"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Luokka"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Asetusikkuna"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Lisää/avaa tiedostoja -ikkuna"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Avaa tiedostoja"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Sulje ikkuna kun tiedostot avattu"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Lisää tiedostoja"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Sulje ikkuna kun tiedostot lisätty"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (virheellistä UTF-8:aa)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP:n asetukset"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Liitännäiset</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Tallenneliitännäisten luettelo:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Tallenteet</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Yleisten liitännäisten luettelo:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Yleinen</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Visualisointiliitännäisten luettelo:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualisointi</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Efektiliitännäisten luettelo:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Tehosteet</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Nykyinen ulostuloliitännäinen:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Muutos on tallentunut BMP:n asetuksiin, mutta tulee voimaan vasta kun "
+"seuraava kappale alkaa soida.\n"
+"\n"
+"Asetukset saa voimaan myös pysäyttämällä ja jatkamalla kappaleen soittamista."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Ulostulo</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ulkonäkö</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Teema</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Kirjasimet</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Soitin:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Soittolista:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Valitse pääikkunan kirjasinlaji:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Valitse soittolistan kirjasinlaji:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Sekalaista</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Näytä kappaleiden numerot soittolistassa"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Käytä muita osoittimia"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Hiiri</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Hiiren rulla</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Hiiren rulla muuttaa äänenvoimakkuutta määrällä"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "prosenttia"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Hiiren rulla vierittää soittolistaa (rivejä)"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "riviä"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Soittolista</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Tiedostonimi</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Muunna alaviivat väleiksi"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Muunna %20 väleiksi"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metatiedot</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Lataa metatiedot (lisätiedot) musiikkitiedostoista."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Lataa metatiedot soittolistoista ja musiikkitiedostoista"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Lataa metatiedot kun tiedosto lisätään soittolistaan tai avataan"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Avattaessa"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Lataa metatiedot, kun tiedosto näytetään soittolistassa"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Näytettäessä"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Soitto</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "Kun kappale on soinut, älä soita seuraavaa itsestään."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ãlä siirry eteenpäin soittolistassa"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Kappaleiden välinen tauko"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Tauotus"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "sekuntia"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Kappaleen näyttö</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Muu merkkijono:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"NIMI\n"
+"ESITTÃJÃ - NIMI\n"
+"ESITTÃJÃ - ALBUMI - NIMI\n"
+"ALBUMI - NIMI\n"
+"Muu"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Näytä tietoja kappaleiden nimiketekstin muodosta"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Taajuuskorjain</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Asetukset</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Asetushakemistotiedosto:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Asetustiedostojen pääte:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "Mahdolliset _asetukset:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Sulje ikkuna kun lisätty"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Valitse kaikki"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Poista valinta"
+
+#~ msgid "Default skin:"
+#~ msgstr "Oletusteema:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Gnome-vfs:n käynnistys ei onnistunut.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Ãlä etene soittolistassa"
+
+#~ msgid "/By extension"
+#~ msgstr "/Tiedostopäätteen mukaan"
+
+#~ msgid "Save playlist"
+#~ msgstr "Tallenna soittolista"
+
+#~ msgid "Toggle repeat mode"
+#~ msgstr "Soitetaanko soittolista uudelleen"
+
+#~ msgid "Toggle shuffle mode"
+#~ msgstr "Soitetaanko kappaleet satunnaisessa järjestyksessä"
+
+#~ msgid "Toggle playlist editor window"
+#~ msgstr "Näytä tai piilota soittolistan muokkausikkuna"
+
+#~ msgid "Toggle equalizer window"
+#~ msgstr "Näytä tai piilota taajuuskorjain"
+
+#~ msgid "Keep BMP windows above all others"
+#~ msgstr "Pidä BMP-ikkunat muiden ikkunoiden päällä"
+
+#~ msgid "Show BMP windows on all workspaces"
+#~ msgstr "Näytä BMP-ikkunat kaikissa työtiloissa"
+
+#~ msgid "Roll up player window"
+#~ msgstr "Rullaa soittoikkuna"
+
+#~ msgid "Roll up playlist editor window"
+#~ msgstr "Rullaa soittolistan muokkausikkuna"
+
+#~ msgid "Roll up equalizer window"
+#~ msgstr "Rullaa taajuuskorjainikkuna"
+
+#~ msgid "Autoscroll track tittle"
+#~ msgstr "Vieritä kappaleen nimeä"
+
+#~ msgid "Display time from beginning of track"
+#~ msgstr "Näytä kappaleen alusta kulunut aika"
+
+#~ msgid "Display time to end of track"
+#~ msgstr "Näytä kappaleen loppuun saakka jäljellä oleva aika"
+
+#~ msgid "Start playing"
+#~ msgstr "Aloita soittaminen"
+
+#~ msgid "Pause track"
+#~ msgstr "Pidä tauko"
+
+#~ msgid "Stop playing"
+#~ msgstr "Pysäytä soittaminen"
+
+#~ msgid "Play previous track"
+#~ msgstr "Soita edellinen kappale"
+
+#~ msgid "Play next track"
+#~ msgstr "Soita seuraava kappale"
+
+#~ msgid "Play first track in list"
+#~ msgstr "Soita soittolistan ensimmäinen kappale"
+
+#~ msgid "Jump to Track..."
+#~ msgstr "Siirry kappaleeseen..."
+
+#~ msgid "Jump to another track"
+#~ msgstr "Siirry toiseen kappaleeseen"
+
+#~ msgid "Jump to Time..."
+#~ msgstr "Siirry hetkeen..."
+
+#~ msgid "Jump to time"
+#~ msgstr "Siirry ajanhetkeen"
+
+#~ msgid "View track information"
+#~ msgstr "Näytä kappaleen tiedot"
+
+#~ msgid "Open preferences dialog"
+#~ msgstr "Avaa asetusikkuna"
+
+#~ msgid "View BMP project information"
+#~ msgstr "Näytä BMP-projektin tietoja"
+
+#~ msgid "Exit BMP"
+#~ msgstr "Lopeta BMP"
+
+#~ msgid "New playlist"
+#~ msgstr "Uusi soittolista"
+
+#~ msgid "Refresh List"
+#~ msgstr "Päivitä lista"
+
+#~ msgid "Refresh playlist"
+#~ msgstr "Päivitä soittolista"
+
+#~ msgid "Add CD tracks"
+#~ msgstr "Lisää kappaleita CD-levyltä"
+
+#~ msgid "Add Remote Track"
+#~ msgstr "Lisää verkossa oleva kappale"
+
+#~ msgid "Add Local Tracks"
+#~ msgstr "Lisää paikallisissa tiedostoissa olevia kappaleita"
+
+#~ msgid "Remove selected tracks"
+#~ msgstr "Poista valitut kappaleet"
+
+#~ msgid "Remove tracks that are not selected"
+#~ msgstr "Poista valitsemattomat kappaleet"
+
+#~ msgid "Remove all tracks"
+#~ msgstr "Poista kaikki kappaleet"
+
+#~ msgid "Remove tracks that are not longer accessible"
+#~ msgstr "Poista kappaleet, jotka eivät enää ole saatavilla"
+
+#~ msgid "Queue/unqueue selected track"
+#~ msgstr "Lisää tai poista valittu kappale soittojonosta"
+
+#~ msgid "Randomize track order"
+#~ msgstr "Sekoita kappaleiden järjestys"
+
+#~ msgid "Reverse track order"
+#~ msgstr "Järjestä kappaleet käänteiseen järjestykseen"
+
+#~ msgid "By Title"
+#~ msgstr "Nimen mukaan"
+
+#~ msgid "Sort all by title"
+#~ msgstr "Järjestä kaikki nimen mukaan"
+
+#~ msgid "By Filename"
+#~ msgstr "Tiedostonimen mukaan"
+
+#~ msgid "Sort all by filename"
+#~ msgstr "Järjestä kaikki tiedostonimen mukaan"
+
+#~ msgid "Sort all by full path"
+#~ msgstr "Järjestä kappaleet täydellisen tiedostonimen mukaan"
+
+#~ msgid "By Date"
+#~ msgstr "Päiväyksen mukaan"
+
+#~ msgid "Sort selected by date"
+#~ msgstr "Järjestä valittu osa päiväyksen mukaan"
+
+#~ msgid "Clear queued tracks"
+#~ msgstr "Tyhjennä kappaleet jonosta"
+
+#~ msgid "Invert selection"
+#~ msgstr "Käänteinen valinta"
+
+#~ msgid "Cancel selection"
+#~ msgstr "Peru valinta"
+
+#~ msgid "Select all"
+#~ msgstr "Valitse kaikki"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/fr.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3455 @@
+# French language translation for beep-multimedia-player
+# Copyright (C) 2003 David Le Brun <david at dyn-ns.net>
+# David Le Brun <david at dyn-ns.net>, 2003.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-04 13:19+0200\n"
+"Last-Translator: David Le Brun <david at dyn-ns.net>\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"NPOT-Creation-Date: 2003-08-08 19:35+0200\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Plugin CD Audio"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Piste %02u du CD"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(inconnu)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Lecteur %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Impossible d'accéder au périphérique %s\n"
+"Erreur: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Impossible de lire la liste des pistes\n"
+"Vérifiez la présence d'un CD dans le lecteur\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Périphérique %s OK.\n"
+"Le disque a %d pistes"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d pistes de données)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Durée totale: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Extraction audio numérique non testée comme le disque ne contient aucune "
+"piste audio\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Test de l'extraction audio numérique: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Ãchec du test de l'extraction audio numérique: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Impossible de contrôler le répertoire %s\n"
+"Erreur: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Erreur: %s existe mais n'est pas un répertoire"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Répertoire %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Périphérique:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Périphérique:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Rép_ertoire:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Mode de lecture:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analogique"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Extraction audio numérique"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Contrôle du volume:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Pas de mixer"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "Lecteur CDROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Mixer OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Vérifier le lecteur..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Supprimer le lecteur"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Configuration du lecteur de CD Audio"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Ajouter un lecteur"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Périphérique"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Utiliser CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Récupérer la liste du serveur"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Voir la fenêtre réseau"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Serveur CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Utiliser CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Serveur CD Index"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Noms des morceaux"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Ãcraser les titres génériques"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Format du nom:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Info CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Sélectionner le répertoire où vous voulez stocker les flux MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Configuration du plugin audio MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Résolution:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bits"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bits"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Canaux:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stéréo (si possible)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Ré-échantilloner:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Décodeur:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Détection automatique"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Décodeur optimisé 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Décodeur optimisé MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "Décodeur FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Options"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Contenu"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Extension"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Extension et contenu"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Décodeur"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Mémoire tampon:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Taille du tampon (ko):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Pré-tampon (pourcent):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Utiliser un proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Hôte:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "S'authentifier"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Compte:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Mot de passe:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Sauver le flux sur le disque:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Sauver le flux sur le disque"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Chemin:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Parcourir"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Activer le canal de méta-données UDP Icecast"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Lecture du flux"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Tags ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Désactiver les tags ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Convertir les tags ID3 au format UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "Encodage ID3:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Format ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titre"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Impossible d'écrire dans le fichier: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Impossible d'écrire le tag!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Impossible d'ouvrir le fichier: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Info fichier"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Impossible de vider le fichier: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Impossible d'enlever le tag!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Aucun tag à enlever"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stéréo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Stéréo mêlée"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Double canal"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Simple canal"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d kbit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Aucun"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Non"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Oui"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nom:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " Info MPEG "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "Type MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Débit:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Fréq. Ãchantillonage:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Trames:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Taille du fichier:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Protection d'erreurs:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Original:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Accentuation:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " Tag ID3 "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titre:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artiste:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Commentaire:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Année:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Piste n°:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Genre:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Copier les tags album"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Coller les tags album"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Variable,\n"
+"débit moyen: %d kbit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Octets"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Erreur"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "RECHERCHE DE %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Impossible de trouver l'hôte %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "CONNEXION Ã %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Impossible de se connecter à l'hôte %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "CONNECTÃ: ATTENTE DE REPONSE"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Impossible de se connecter à l'hôte %s\n"
+"Le serveur a déploré: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "MISE EN TAMPON: %dKO/%dKO"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Rock classique"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Autre"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternatif"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Bande son"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Musique Classique"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Musique Instrumentale"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Musique de jeu"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Bruit"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Rock Alternatif"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Musique Méditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Pop Instrumentale"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Rock Instrumental"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Musique Ethnique"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Musique Ãlectronique"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Sketch"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Culte"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Musique Indienne"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Reprise"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celte"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Rock Gothique"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Rock Progressif"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Rock Psychedelique"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Rock Symphonique"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Choeur"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Discours"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Musique de chambre"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonate"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphonie"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Pron Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Solo de batterie"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Christian Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "SynthPop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "A propos du plugin audio MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"Décodeur mpg123 par Michael Hipp <mh at mpg123.de>\n"
+"Plugin par l'équipe XMMS"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Plugin MPEG Audio"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Sélectionner le répertoire où enregister les flux Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Configuration du plugin audio Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Tags Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Format du titre:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Réglages ReplayGain:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Activer la prévention des coupures"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Activer ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Type ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "utiliser le rapport Gain/Crête du morceau"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "utiliser le rapport Gain/Crête de l'album"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Activer le Boost 6dB + Limitation Hard"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Une erreur est survenue:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Erreur!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Impossible de modifier le tag (ouverture)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Impossible de modifier le tag (fermeture)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Impossible de modifier le tag"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Tag Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Date:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Description:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Localisation:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Version:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Numéro ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organisation:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " ReplayGain Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Gain du morceau:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Crête du morceau:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Gain de l'album:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Crête de l'album:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Info Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Durée:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d kbit/s (nominal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d octets"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Plugin Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "A propos du plugin audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Plugin Ogg Vorbis par la fondation Xiph.org\n"
+"\n"
+"Code originel par\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions de\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visiter la fondation Xiph.org sur http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Plugin Wav"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "Plugin de sortie OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Ã propos du pilote OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Pilote OSS de XMMS\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Par défaut (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Par défaut"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Configuration du pilote OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Périphérique audio:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Utiliser un autre périphérique:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Périphérique de mixage:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Périphériques:"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Taille du tampon (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Mémoire tampon"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Réglages du mixer:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Le Volume contrôle Master et non pas PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixer"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Ã propos du plugin EsounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"Plugin ESounD de XMMS\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Configuration du plugin de sortie ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Utiliser l'hôte distant"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Le Volume contrôle le mixer OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Serveur"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Plugin de sortie eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Ã propos du pilote ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"Pilote ALSA de XMMS\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Auteur: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "Plugin de sortie ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Carte son inconnue"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Périphérique PCM par défaut (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Configuration du pilote ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mixeur:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Utiliser le contrôle de volume logiciel"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Carte de mixage:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Paramètres du périphérique"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Réglages avancés:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Temps du tampon (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Temps de la période (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Temps du tampon (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mode Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Réglages avancés"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Basculer décorations"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Fermer"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Sélection de la couleur"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Options:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Artiste"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Genre"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Nom du fichier"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Chemin du fichier"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Extension du fichier"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Nom du morceau"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Numéro de piste"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Date"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Année"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Commentaire"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Affiche \"...\" si plus de %n éléments sont présents"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Un lecteur multimédia basé sur XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 L'équipe de développement de BMP\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Développeurs:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Avec l'aide de:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastien Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Site Internet: "
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Brésilien:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Breton:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Chinois:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Tchèque:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Néerlandais:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Espagnol:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Français:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Allemand:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Allemand:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Grec:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Hongrois:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Italien:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japonais:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Coréen:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lituanien:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Macédonien:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polonais:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Roumain:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Russe:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Slovaque:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Espagnol:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Suèdois:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Roumain:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Gallois:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Ã propos de BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Crédits"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Traducteurs"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Charger"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Charger/un pré-réglage"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Charger/le pré-réglage chargé auto."
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Charger/le pré-réglage par défaut"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Charger/remise à zéro"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Charger/Ã partir d'un fichier"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Charger/Ã partir d'un fichier EQF de Winamp"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importer"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importer/les pré-réglages Winamp"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Sauver"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Sauver/le pré-réglage"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Save/le pré-réglage chargé auto."
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Sauver/le pré-réglage par défaut"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Sauver/dans un fichier"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Sauver/dans un fichier EQF de Winamp"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Effacer"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Effacer/le pré-réglage"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Effacer/le pré-réglage chargé auto."
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP Ãqualiseur"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Pré-réglage"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Pré-réglages"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Charger pré-réglages"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Charger pré-réglages auto."
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Charger pré-réglages de l'équaliseur"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Sauver pré-réglages"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Sauver pré-réglages auto."
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Sauver pré-réglages de l'équaliseur"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Effacer pré-réglages"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Effacer pré-réglages auto."
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'option '%s' est ambigüe\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s l'option '--%s' n'accepte pas de paramètre\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'option '%c%s' n'accepte pas de paramètre\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'optio, '%s' nécessite un paramètre\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: option '--%s' inconnue\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: option '%c%s' inconnue\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: option interdite -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: option incorrecte -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: option nécessitant un paramètre -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'option `-W %s' est ambigüe\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: l'option '-W %s' n'accepte pas de paramètre\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Impossible de jouer des fichiers.</big></b>\n"
+"\n"
+"Les fichiers suivants ne peuvent être lus. Veuillez vérifier que:\n"
+"1. ils sont accessibles.\n"
+"2. vous avez activé le plugin pour le média correspondant."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Ne plus afficher cet avertissement"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Afficher plus de _détails"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Nom du ficher"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Nom du ficher:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Aucun plugin d'entrée ne supporte ce type de fichier"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Plugin d'entrée: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Impossible d'écrire le fichier de log (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Impossible de créer le répertoire (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Usage: beep-media-player [options] [fichiers] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Affiche ce message et quitte"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Sélectionne la session BMP/XMMS (Par défaut: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Recule dans la liste d'écoute"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Commence à jouer la liste d'écoute courante"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Met en pause la lecture du morceau"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Stoppe la lecture du morceau"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Met en pause sinon joue le morceau"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Avance dans la liste d'écoute"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ne vide pas la liste d'écoute"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Affiche la fenêtre principale"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "Active BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID de la session précédente"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Affiche le numéro de version et quitte\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"SIGSEGV reçu\n"
+"\n"
+"C'est possible que ce soit un bug de BMP. Si vous ne comprenez pas comment \n"
+"c'est arrivé, envoyez un mail (en anglais) expliquant clairement vos \n"
+"manipulations à beepmp-devel at lists.sourceforge.net\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Impossible de charger le thème.</big></b>\n"
+"\n"
+"Vérifier que le thème '%s' soit correct et que le thème par défaut soit bien "
+"installé dans '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Désolé, votre version de GTK+ (%d.%d.%d) ne fonctionne pas avec BMP.\n"
+"Mettez à jour GTK+ vers la version %s ou plus.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Désolé, les threads ne sont pas supportés par votre système d'exploitation.\n"
+"\n"
+"Si vous êtes sur un système Linux basé sur libc5 et que vous avez installé \n"
+"GLIB et GTK+ avant les LinuxThreads, vous devez recompiler GLIB et GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Impossible d'accéder à la session d'affichage."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Afficher le détail"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Défilement du titre"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Type de graphique"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Type de graphique/Analyseur"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Type de graphique/Scope"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Type de graphique/Aucun"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Type Analyseur"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Type Analyseur/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Type Analyseur/Feu"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Type Analyseur/Lignes verticales"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Type Analyseur/Lignes"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Type Analyseur/Barres"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Type Analyseur/Crêtes"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Type Scope"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Type Scope/Point"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Type Scope/Ligne"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Type Scope/Solide"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Mode Fenêtre Réduite"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Mode Fenêtre Réduite/Normale"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Mode Fenêtre Réduite/Lissée"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Taux de Rafraîchissement"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Taux de Rafraîchissement/Max (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Taux de Rafraîchissement/Haut (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Taux de Rafraîchissement/Moyen (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Taux de Rafraîchisement/Bas (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Effet Retombée Analyseur"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Effet Retombée Analyseur/Le plus lent"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Effet Retombée Analyseur/Lent"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Effet Retombée Analyseur/Moyen"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Effet Retombée Analyseur/Rapide"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Effet Retombée Analyseur/Le plus rapide"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Effet Retombée Crêtes"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Effet Retombée Crêtes/Le plus lent"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Effet Retombée Crêtes/Lent"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Effet Retombée Crêtes/Moyen"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Effet Retombée Crêtes/Rapide"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Effet Retombée Crêtes/Le plus rapide"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Répéter"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Mélanger"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Lecture"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pause"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Stop"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Précédent"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Suivant"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Retourner au début de la liste"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Aller au Fichier"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Aller au Temps"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Préférences"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Affichage"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Ã propos de BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Quitter"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Fichiers..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Adresse Internet..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Ãditeur de liste d'écoute"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Ãqualiseur"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Temps écoulé"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Temps restant"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Toujours au-dessus"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Visible partout"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Enrouler le lecteur"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Enrouler l'éditeur de liste"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Enrouler l'équaliseur"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Aller au Temps"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minutes:secondes"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Durée du morceau:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Mettre dans la file"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Mettre dans la file"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Aller au morceau"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtre:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Ajouter des répertoires"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "Ajouter une adresse Internet..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "POS.: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLUME: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANCE: %d%% GAUCHE"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANCE: CENTREE"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANCE: %d%% DROITE"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "MENU OPTIONS"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "DESACTIVER TOUJOURS AU-DESSUS (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ACTIVER TOUJOURS AU-DESSUS (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "DESACTIVER TOUJOURS AU-DESSUS"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ACTIVER TOUJOURS AU-DESSUS"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "INFOS FICHIER"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "FONCTION TAILLE DOUBLE SUPPRIMÃE"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "MENU DES EFFETS VISUELS"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Pas de CD jouable.</big></b>\n"
+"\n"
+"Pas de CD à lire, ou le CD inséré n'est pas un CD audio.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Problème d'utilisation audio.</big></b>\n"
+"\n"
+"Veuillez vérifier que:\n"
+"1. vous avez choisi le bon plugin de sortie.\n"
+"2. aucun programme n'utilise déjà la carte son.\n"
+"3. votre carte son est correctement configurée.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Enlever la sélection"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Garder la sélection"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Vider la liste"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Basculer dans la file"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/Ajouter les pistes d'un CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Ajouter une adresse Internet..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Ajouter des fichiers..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Ajouter des fichiers..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Vider la file"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Enlever les fichiers inexistants"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nouvelle liste"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Charger une liste"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Sauver la liste"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Rafraîchir la liste"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Inverser la sélection"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Sélectionner rien"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Sélectionner tout"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Mélanger la Liste"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Inverser la Liste"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Trier la liste"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Trier la liste/Par titre"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Trier la liste/Par nom de fichier"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Trier la liste/Par chemin et nom de fichier"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Trier la liste/Par date"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Trier la sélection"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Trier la sélection/Par titre"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Trier la sélection/Par nom de fichier"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Trier la sélection/Par chemin + nom de fichier"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Trier la sélection/Par date"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Erreur à l'écriture de la liste \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s existe déjà . Continuer ?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Impossible de sauver la liste! Type de fichier inconnu pour %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Charger la liste d'écoute"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Sauver la liste d'écoute"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP Ãditeur de liste d'écoute"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Apparence"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Ãqualiseur"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Souris"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Liste d'écoute"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Plugins"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Artiste"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Numéro de piste"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Chemin du fichier"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Actif"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Description"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Rubrique"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Fenêtre des Préférences"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Fenêtre d'Ajout/Ouverture de fichiers"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Ouvrir les fichiers"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Fermer la fenêtre après l'ouverture"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Ajouter des fichiers"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Fermer la fenêtre après l'ajout"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (format UTF-8 invalide)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP Préférences"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Plugins</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "Liste des plugins des support de _médias:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Média</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "Liste des plugins _généraux:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Général</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "Liste des plugins _d'effets visuels:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visuel</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "Liste des plugins d'_effets sonores:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Effets</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "Plugin de sortie audio _actuel:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Le changement a été pris en compte dans la\n"
+"configuration de BMP, mais ne sera effectif\n"
+"pour la lecture qu'au prochain morceau!\n"
+"\n"
+"Vous pouvez aussi arrêter et redémarrer la lecture\n"
+"pour que le changement soit pris en compte."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Sortie</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Apparence</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Thème</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Polices</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "Lecteur:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "Liste:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Sélectionner la police de la fenêtre principale:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Sélectionner la police de la liste d'écoute:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Divers</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Afficher la position des morceaux dans la liste d'écoute"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Utiliser les curseurs du thème"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Souris</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Molette de la souris</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Changement du volume avec la molette de"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "pourcents"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Défilement dans la liste de lecture de"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "lignes"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Liste d'écoute</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Nom de fichier</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Convertir underscore en blancs"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Convertir %20 en blancs"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Méta-données</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Charger les meta-données (tags) des fichiers"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Charger les méta-données des listes et fichiers"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Charger les méta-données lors de l'ajout du fichier dans la liste"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Au chargement"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Charger les méta-données lors de l'affichage du morceau dans la liste"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Ã l'affichage"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Enchaînement</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Lors de la fin de lecture d'un morceau, ne pas passer automatiquement au "
+"morceau d'après."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ne pas avancer dans la liste"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pause entre chaque morceau"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pause de"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "secondes"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Affichage des infos</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Format personnalisé:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TITRE\n"
+"ARTISTE - TITRE\n"
+"ARTISTE - ALBUM - TITRE\n"
+"ALBUM - TITRE\n"
+"Personnalisé"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Afficher les informations disponibles pour formater le titre"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ãqualiseur</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Pré-réglages</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Répertoire des fichiers de pré-réglages:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Extension des fichiers de pré-réglages:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "_Pré-réglages disponibles:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Fermer la fenêtre après l'ajout"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Tous"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Aucun"
+
+#~ msgid "Default skin:"
+#~ msgstr "Thème de base:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Impossible d'initialiser gnome-vfs.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Ne pas avancer dans la liste"
+
+#~ msgid "/By extension"
+#~ msgstr "/Par extension"
+
+#~ msgid "Add Folders - BMP"
+#~ msgstr "Ajouter des répertoires"
+
+#~ msgid "Add URL"
+#~ msgstr "Ajouter URL"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Trier par titre"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Trier par nom de fichier"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Trier par date"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hi.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3440 @@
+# translation of bmp-hi.po to Hindi, India
+# translation of bmp-hi.po to हिनà¥à¤¦à¥, à¤à¤¾à¤°à¤¤ (Hindi, India)
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# धनà¤à¥à¤à¤¯ शरà¥à¤®à¤¾ (Dhananjaya Sharma) <dysxhi at yahoo.co.in>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp-hi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-08-20 21:59+0530\n"
+"Last-Translator: धनà¤à¥à¤à¤¯ शरà¥à¤®à¤¾ (Dhananjaya Sharma) <dysxhi at yahoo.co.in>\n"
+"Language-Team: Hindi, India <dysxhi at yahoo.co.in>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "सà¥à¤¡à¥ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "सà¥à¤¡à¥ à¤à¤¡à¤¿à¤¯à¥ à¤à¥à¤°à¥à¤ %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(à¤
à¤à¥à¤à¤¾à¤¤)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "à¤à¤¾à¤²à¤ %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"%s à¤à¤ªà¤à¤°à¤£ à¤à¥ à¤à¥à¤²à¤¨à¥ मà¥à¤ à¤
सà¥à¤²à¤¤à¤¾\n"
+"तà¥à¤°à¥à¤à¤¿: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"\"विषय-वसà¥à¤¤à¥ सà¥à¤à¥\" à¤à¥ पà¥à¤¨à¥ मà¥à¤ à¤
सà¥à¤²à¤¤à¤¾\n"
+"हॠसà¤à¤¤à¤¾ हॠà¤à¤¿ डà¥à¤°à¤¾à¤à¤µ मà¥à¤ à¤à¥à¤ डिसà¥à¤ नहà¥à¤ हà¥?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"%s à¤à¤ªà¤à¤°à¤£ ठà¥à¤ हà¥à¥¤\n"
+"डिसà¥à¤ मà¥à¤ %d à¤à¥à¤°à¥à¤ हà¥à¤ ।"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d डाà¤à¤¾ à¤à¥ à¤à¥à¤°à¥à¤)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"à¤à¥à¤² लà¤à¤¬à¤¾à¤: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"à¤
à¤à¤à¥à¤¯ à¤à¤¡à¤¿à¤¯à¥ निषà¥à¤à¤°à¥à¤·à¤£ à¤à¤¾ परà¥à¤à¥à¤·à¤£ नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ à¤à¥à¤¯à¥à¤à¤à¤¿ डिसà¥à¤ मà¥à¤ à¤à¥à¤ à¤à¤¡à¤¿à¤¯à¥ à¤à¥à¤°à¥à¤ नहà¥à¤ हà¥\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"à¤
à¤à¤à¥à¤¯ à¤à¤¡à¤¿à¤¯à¥ निषà¥à¤à¤°à¥à¤·à¤£ परà¥à¤à¥à¤·à¤£: ठà¥à¤ हà¥\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"à¤
à¤à¤à¥à¤¯ à¤à¤¡à¤¿à¤¯à¥ निषà¥à¤à¤°à¥à¤·à¤£ परà¥à¤à¥à¤·à¤£ à¤
सà¥à¤² रहा: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"%s निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ à¤à¥ à¤à¤¾à¤à¤ à¤à¤°à¤¨à¥ मà¥à¤ à¤
सà¥à¤²à¤¤à¤¾ \n"
+"तà¥à¤°à¥à¤à¤¿: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "तà¥à¤°à¥à¤à¤¿: %s विदà¥à¤¯à¤®à¤¾à¤¨ हà¥, परनà¥à¤¤à¥ à¤à¤ निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ नहà¥à¤ हà¥"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "%s निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ ठà¥à¤ हà¥à¥¤"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "à¤à¤ªà¤à¤°à¤£:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "à¤à¤ªà¤à¤°à¤£ (_D):"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ (_e):"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "पà¥à¤²à¥ मà¥à¤¡:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "à¤à¤¨à¥à¤²à¥à¤"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "à¤
à¤à¤à¥à¤¯ à¤à¤¡à¤¿à¤¯à¥ निषà¥à¤à¤°à¥à¤·à¤£"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "वालà¥à¤¯à¥à¤® नियà¤à¤¤à¥à¤°à¤:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "à¤à¥à¤ मिशà¥à¤°à¤ नहà¥à¤"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "सà¥à¤¡à¥à¤°à¥à¤® डà¥à¤°à¤¾à¤à¤µ"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "à¤à¥¦à¤à¤¸à¥¦à¤à¤¸à¥¦ मिà¤à¥à¤¸à¤°"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "डà¥à¤°à¤¾à¤à¤µ à¤à¥ à¤à¤¾à¤à¤..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "डà¥à¤°à¤¾à¤à¤µ à¤à¥ हà¤à¤¾à¤¨à¤¾"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "सà¥à¤¡à¥ शà¥à¤°à¤µà¥à¤¯ पà¥à¤²à¥à¤¯à¤° सà¤à¤°à¤à¤¨à¤¾"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "डà¥à¤°à¤¾à¤à¤µ à¤à¥ à¤à¥à¥à¤¨à¤¾"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "à¤à¤ªà¤à¤°à¤£"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "सà¥à¥¦à¤¡à¥à¥¦à¤¡à¥à¥¦à¤¬à¥à¥¦:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "सà¥à¥¦à¤¡à¥à¥¦à¤¡à¥à¥¦à¤¬à¥à¥¦ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "सरà¥à¤µà¤° सà¥à¤à¥ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¥à¤"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "नà¥à¤à¤µà¤°à¥à¤ विणà¥à¤¡à¥ à¤à¥ दिà¤à¤¾à¤¯à¥à¤"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "सà¥à¥¦à¤¡à¥à¥¦à¤¡à¥à¥¦à¤¬à¥à¥¦ सरà¥à¤µà¤°:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "सà¥à¤¡à¥ सà¥à¤à¤:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "सà¥à¤¡à¥ सà¥à¤à¤ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "सà¥à¤¡à¥ सà¥à¤à¤ सरà¥à¤µà¤°:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "à¤à¥à¤°à¥à¤à¥à¤ à¤à¤¾ नाम:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "सामानà¥à¤¯ शà¥à¤°à¥à¤·à¤à¥à¤ à¤à¥ à¤
धिवहित"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "नाम à¤à¤¾ पà¥à¤°à¤¾à¤°à¥à¤ª:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "सà¥à¤¡à¥ à¤à¥ बारॠमà¥à¤ सà¥à¤à¤¨à¤¾"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "à¤à¤¸ निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤°à¥à¤ à¤à¤¹à¤¾à¤ à¤à¤ª à¤à¤®à¥¦à¤ªà¥à¥¦à¤à¥¦à¤à¥à¥¦ धाराà¤à¤ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¤¾ à¤à¤¾à¤¹à¤¤à¥ हà¥:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "à¤à¤®à¤ªà¥à¤à¤à¥ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨ सà¤à¤°à¤à¤¨à¤¾"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "विà¤à¤à¤¨:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "१६ बिà¤"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "८ बिà¤"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "à¤
नà¥à¤ à¤à¥à¤¨à¤²:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "सà¥à¤à¥à¤°à¤¿à¤¯à¥ (यदि à¤à¤ªà¤²à¤¬à¥à¤§ हà¥)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "मà¥à¤¨à¥"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "डाà¤à¤¨ à¤à¤¦à¤¾à¤¹à¤°à¤£:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "१:१ (४४ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "१:२ (२२ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "१:४ (११ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "à¤à¥à¤à¤µà¤¾à¤à¤:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "सà¥à¤µà¤à¤¾à¤²à¤¿à¤¤ पहà¤à¤¾à¤¨"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "३डà¥à¤¨à¤¾à¤! सà¤à¤¤à¥à¤²à¤¿à¤¤ à¤à¥à¤à¤µà¤¾à¤à¤"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "à¤à¤®à¤à¤®à¤à¤à¥à¤¸ सà¤à¤¤à¥à¤²à¤¿à¤¤ à¤à¥à¤à¤µà¤¾à¤à¤"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "à¤à¥à¥¦à¤ªà¥à¥¦à¤¯à¥à¥¦ à¤à¥à¤à¤µà¤¾à¤à¤"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "विà¤à¤²à¥à¤ª"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "विषय-वसà¥à¤¤à¥"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "à¤à¤ªà¤¨à¤¾à¤®"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "à¤à¤ªà¤¨à¤¾à¤® व विषय-वसà¥à¤¤à¥"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "à¤à¥à¤à¤µà¤¾à¤à¤"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "बà¥à¤°à¤¿à¤à¤:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "बà¥à¤° à¤à¤¾ à¤à¤à¤¾à¤° (à¤à¥à¤¬à¥):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "पà¥à¤°à¥-बà¥à¤° (पà¥à¤°à¤¤à¤¿à¤¶à¤¤):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "पà¥à¤°à¥à¤à¥à¤¸à¥"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "पà¥à¤°à¥à¤à¥à¤¸à¥ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "हà¥à¤¸à¥à¤"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "पà¥à¤°à¥à¤"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "पà¥à¤°à¤®à¤¾à¤£à¥à¤à¤°à¤£ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "à¤à¤ªà¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾ à¤à¤¾ नाम:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "à¤à¥à¤à¤¶à¤¬à¥à¤¦:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "धारा à¤à¥ डिसà¥à¤ पर सà¥à¤°à¤à¥à¤·à¤¿à¤¤:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "धारा à¤à¥ डिसà¥à¤ पर सà¥à¤°à¤à¥à¤·à¤¿à¤¤"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "पथ:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "बà¥à¤°à¤¾à¤à¤"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "à¤à¤¸à¥¦à¤à¤à¥¦à¤à¥¦à¤¯à¥à¥¦à¤à¥à¥¦/à¤à¤à¤¸à¥à¤à¤¾à¤¸à¥à¤:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "à¤à¤à¤¸à¥à¤à¤¾à¤¸à¥à¤ मà¥à¤à¤¾à¤¡à¤¾à¤à¤¾ यà¥à¥¦à¤¡à¥à¥¦à¤ªà¥à¥¦ à¤à¥à¤¨à¤² à¤à¥ समरà¥à¤¥à¤¨"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "सà¥à¤à¥à¤°à¥à¤®à¤¿à¤à¤"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "à¤à¤à¤¡à¥-३ à¤à¥ à¤à¥à¤:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "à¤à¤à¤¡à¥-३वà¥-२ à¤à¥ à¤à¥à¤à¥à¤ à¤à¥ à¤
समरà¥à¤¥à¤¨"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "नà¥à¤¨-यà¥à¤à¥à¤à¥à¥® à¤à¤à¤¡à¥à¥© à¤à¥à¤à¥à¤ à¤à¥ यà¥à¤à¥à¤à¥à¥® मà¥à¤ परिवरà¥à¤¤à¤¿à¤¤ à¤à¤°à¥à¤"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "à¤à¤à¤¡à¥à¥© à¤à¤¨à¤à¥à¤¡à¤¿à¤à¤:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "à¤à¤à¤¡à¥-३ पà¥à¤°à¤¾à¤°à¥à¤ª:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "शà¥à¤°à¥à¤·à¤"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"सà¤à¤à¤¿à¤à¤¾ पर लिà¤à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "à¤à¥à¤ à¤à¥ नहà¥à¤ लिà¤à¤¾ à¤à¤¾ सà¤à¤¾ !"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"सà¤à¤à¤¿à¤à¤¾ à¤à¥ à¤à¥à¤²à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "सà¤à¤à¤¿à¤à¤¾ सà¥à¤à¤¨à¤¾"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "ठà¥à¤"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"सà¤à¤à¤¿à¤à¤¾ à¤à¥ à¤à¤¾à¤à¤à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "à¤à¥à¤ à¤à¥ हà¤à¤¾à¤¯à¤¾ नहà¥à¤ à¤à¤¾ सà¤à¤¾ !"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "हà¤à¤¾à¤¨à¥ à¤à¥ लिठà¤à¥à¤ à¤à¥à¤ नहà¥à¤ !"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "सà¥à¤à¥à¤°à¤¿à¤¯à¥"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "सà¤à¤¯à¥à¤à¥à¤¤ सà¥à¤à¥à¤°à¤¿à¤¯à¥"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "दà¥à¤µà¤¿-à¤à¥à¤¨à¤² "
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "à¤à¤à¤² à¤à¥à¤¨à¤²"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d à¤à¤¿à¤²à¥à¤¬à¤¾à¤à¤à¥à¤¸ पà¥à¤°à¤¤à¤¿ सà¥à¤à¤£à¥à¤¡"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld हरà¥à¤à¥"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "à¤à¥à¤ नहà¥à¤"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "५०/१५ मिलà¥à¤¸à¥à¤à¤£à¥à¤¡"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "सà¥à¥¦à¤¸à¥à¥¦à¤à¤à¥¦à¤à¥à¥¦ à¤à¥.१à¥"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "नहà¥à¤"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "हाà¤"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "नाम:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr "à¤à¤®à¤ªà¥à¤à¤à¥ सà¥à¤à¤¨à¤¾ "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "à¤à¤®à¤ªà¥à¤à¤à¥ सà¥à¤¤à¤°:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "बिà¤-दर:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "सà¥à¤®à¥à¤ªà¤² à¤à¥ दर:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "à¥à¥à¤°à¥à¤®à¥à¤¸:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "सà¤à¤à¤¿à¤à¤¾ à¤à¤¾ à¤à¤à¤¾à¤°:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "तà¥à¤°à¥à¤à¤¿ सà¤à¤°à¤à¥à¤·à¤£:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "सरà¥à¤µà¤¾à¤§à¤¿à¤à¤¾à¤°:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "मà¥à¤²:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "à¤à¥à¤°:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr "à¤à¤à¤¡à¥à¥© à¤à¥à¤ "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "शà¥à¤°à¥à¤·à¤:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "à¤à¤²à¤¾à¤à¤¾à¤°:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "à¤à¤²à¤¬à¤®:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "à¤à¤¿à¤ªà¥à¤ªà¤£à¥:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "वरà¥à¤·:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "à¤à¥à¤°à¥à¤ à¤à¥ सà¤à¤à¥à¤¯à¤¾:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "पà¥à¤°à¤à¤¾à¤°:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "à¤à¤²à¥à¤¬à¤® à¤à¥à¤à¥à¤ à¤à¥ पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ बनाà¤à¤"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "à¤à¤²à¥à¤¬à¤® à¤à¥à¤à¥à¤ à¤à¥ à¤à¤¿à¤ªà¤à¤¾à¤à¤"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "à¤
मानà¥à¤¯"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"à¤à¤°,\n"
+"à¤à¤¸à¤¤ बिà¤à¤¦à¤°: %d à¤à¥à¤¬à¥ /सà¥à¤à¤£à¥à¤¡"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu बाà¤à¤à¥à¤¸"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "तà¥à¤°à¥à¤à¤¿"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "%s à¤à¥ लिठà¤à¥à¤à¤¾ à¤à¤¾ रहा हà¥"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "%s à¤à¥ à¤à¥à¤à¤¾ नहà¥à¤ à¤à¤¾ सà¤à¤¾"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "%s:%d सॠà¤à¥à¥à¤¾ à¤à¤¾ रहा हà¥"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "%s हà¥à¤¸à¥à¤ सॠà¤à¥à¥à¤¾ नहà¥à¤ à¤à¤¾ सà¤à¤¾"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "à¤à¥à¥ à¤à¤¯à¤¾: à¤à¤¤à¥à¤¤à¤° à¤à¥ पà¥à¤°à¤¤à¥à¤à¥à¤·à¤¾ मà¥à¤"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"%s हà¥à¤¸à¥à¤ सॠà¤à¥à¥à¤¾ नहà¥à¤ à¤à¤¾ सà¤à¤¾\n"
+"सरà¥à¤µà¤° दà¥à¤µà¤¾à¤°à¤¾ रिपà¥à¤°à¥à¤: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "पà¥à¤°à¥-बà¥à¤°à¤¿à¤à¤: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "बà¥à¤²à¥"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "à¤à¥à¤²à¤¾à¤¸à¤¿à¤ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "à¤à¤¨à¥à¤à¥à¤°à¥"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "डानà¥à¤¸"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "डिसà¥à¤à¥"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "à¥à¤à¤"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "à¤à¥à¤°à¥"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "हिप-हà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "à¤à¤¾à¥"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "मà¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "नà¥à¥à¥ à¤à¤"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "à¤à¤²à¥à¤¡à¥"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "à¤
नà¥à¤¯"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "पà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "à¤à¤° व बà¥"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "रà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "रà¥à¤à¥"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "रà¥à¤"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "à¤à¥à¤à¥à¤¨à¥"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "à¤à¤à¤¡à¥à¤°à¤¸à¥à¤à¥à¤°à¤¿à¤¯à¤²"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "वà¥à¤à¤²à¥à¤ªà¤¿à¤"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "à¤à¤¸à¥à¤à¤¾"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "डà¥à¤¥ मà¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "पà¥à¤°à¥à¤¨à¤à¥à¤¸"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "साà¤à¤£à¥à¤¡à¤à¥à¤°à¥à¤"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "यà¥à¤°à¥-à¤à¥à¤à¥à¤¨à¥"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "à¤à¤®à¥à¤¬à¤¿à¤¯à¤¨à¥à¤"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "à¤à¥à¤°à¤¿à¤ª-हà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "वà¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "à¥à¤¾à¥+à¥à¤à¤"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "à¥à¥à¤¯à¥à¥à¤¨"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "à¤à¥à¤°à¤¾à¤¨à¥à¤¸"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "à¤à¥à¤²à¤¾à¤¸à¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "à¤à¤¨à¥à¤¸à¤à¥à¤°à¥à¤®à¥à¤¨à¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "à¤à¤¸à¤¿à¤¡"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "हाà¤à¤¸"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "à¤à¥à¤®"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "साà¤à¤£à¥à¤¡ à¤à¥à¤²à¤¿à¤ª"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "à¤à¥à¤¸à¥à¤ªà¥à¤²"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "नà¥à¤à¤¸à¥à¤"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "à¤
लà¥à¤à¥à¤°à¤¨à¤°à¥à¤"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "बà¥à¤¸"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "सà¥à¤²"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "पà¤à¤"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "सà¥à¤ªà¥à¤¸"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "मà¥à¤¡à¤¿à¤à¥à¤à¥à¤µà¤¿"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "à¤à¤¨à¥à¤¸à¤à¥à¤°à¥à¤®à¥à¤¨à¥à¤à¤² पà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "à¤à¤¨à¥à¤¸à¤à¥à¤°à¥à¤®à¥à¤¨à¥à¤à¤² रà¥à¤"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "à¤à¤¥à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "à¤à¥à¤¥à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "डारà¥à¤à¤µà¥à¤µ"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "à¤à¥à¤à¥à¤¨à¥-à¤à¤à¤¡à¥à¤°à¤¸à¥à¤à¥à¤°à¤¿à¤¯à¤²"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "à¤à¤²à¥à¤à¥à¤à¥à¤°à¤¾à¤¨à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "पà¥à¤ª-à¥à¤¾à¤²à¥à¤"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "यà¥à¤°à¥à¤¡à¤¾à¤¨à¥à¤¸"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "डà¥à¤°à¥à¤®"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "दà¤à¥à¤·à¤¿à¤£à¥ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "à¤à¤¾à¤®à¥à¤¡à¥"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "à¤à¤²à¥à¤"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "à¤à¥à¤à¤¸à¥à¤à¤¾ रà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "à¤à¥à¤ª ४०"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "à¤à¥à¤°à¤¿à¤¸à¥à¤¤à¤¾à¤¨à¥ रà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "पà¥à¤ª/à¥à¤à¤"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "à¤à¤à¤à¤²"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "नà¥à¤à¤¿à¤µ à¤
मà¥à¤°à¤¿à¤à¤¨"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "à¤à¥à¤¬à¤°à¥à¤"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "नà¥à¤¯à¥ वà¥à¤µ"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "साà¤à¤¡à¥à¤²à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "रà¥à¤µ"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "सà¥à¤à¤¯à¥à¤¨à¥à¤¸"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "à¤à¥à¤°à¥à¤²à¤°"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "लà¥-à¥à¤¾à¤"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "à¤à¥à¤°à¤¾à¤à¤¬à¤²"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "à¤à¤¸à¤¿à¤¡ पà¤à¤"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "à¤à¤¸à¤¿à¤¡ à¤à¤¾à¥"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "पà¥à¤²à¥à¤à¤¾"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "रà¥à¤à¥à¤°à¥"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "मà¥à¤¯à¥à¤à¤¿à¤à¤²"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "रà¥à¤ à¤à¤° रà¥à¤²"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "हारà¥à¤¡ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "à¥à¥à¤"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "à¥à¥à¤/रà¥à¤"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "नà¥à¤¶à¤¨à¤² à¥à¥à¤"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "सà¥à¤µà¥à¤à¤"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "à¥à¤¾à¤¸à¥à¤¤-à¥à¥à¤¯à¥à¤à¤¨"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "बà¥à¤¬à¥à¤¬"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "लà¥à¤à¤¿à¤¨"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "रिवाà¤à¤µà¤²"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "सà¥à¤²à¥à¤à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "बà¥à¤²à¥à¤à¥à¤°à¤¾à¤¸"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "à¤
वनà¥à¤¤à¤à¤¾à¤°à¥à¤¡à¥"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "à¤à¥à¤¥à¤¿à¤ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "पà¥à¤°à¥à¤à¥à¤°à¥à¤¸à¤¿à¤µ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "साà¤à¤à¤¿à¤¡à¥à¤²à¤¿à¤ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "सिमà¥à¥à¥à¤¨à¥à¤à¤¿ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "सà¥à¤²à¥ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "बिठबà¥à¤¨à¥à¤¡"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "à¤à¥à¤°à¤¸"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "à¤à¥à¥ लिसà¥à¤¨à¤¿à¤à¤"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "à¤à¤à¤¾à¤à¤¸à¥à¤à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "हà¥à¤¯à¥à¤®à¤°"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "सà¥à¤ªà¥à¤"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "à¤à¤¾à¤¨à¥à¤¸à¤¨"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "à¤à¤ªà¥à¤°à¤¾"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "à¤à¥à¤®à¥à¤¬à¤° मà¥à¤¯à¥à¤à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "सà¥à¤¨à¤¾à¤à¤¾"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "सिमà¥à¥à¥à¤¨à¥"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "बà¥à¤à¥ बà¥à¤¸"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "पà¥à¤°à¤¿à¤®à¤¸"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "पà¥à¤°à¥à¤¨à¥ à¤à¥à¤°à¥à¤µ"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "सà¥à¤à¤¾à¤¯à¤°"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "सà¥à¤²à¥ à¤à¥à¤®"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "à¤à¥à¤²à¤¬"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "à¤à¤¾à¤à¤à¥"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "सà¥à¤¬à¤¾"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "à¥à¤¾à¤²à¥à¤à¤²à¥à¤°"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "बालाड"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "पावर बालाड"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "रिदà¥à¤®à¤¿à¤ सà¥à¤²"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "à¥à¥à¤°à¥à¤¸à¥à¤à¤¾à¤à¤²"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "डà¥à¤¯à¥à¤"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "पà¤à¤ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "डà¥à¤°à¥à¤® सà¥à¤²à¥"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "à¤à¤ à¤à¥à¤ªà¥à¤²à¤¾"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "यà¥à¤°à¥-हाà¤à¤¸"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "डानà¥à¤¸ हाल"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "à¤à¥à¤"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "डà¥à¤°à¥à¤® व बà¥à¤¸"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "à¤à¥à¤²à¤¬-हाà¤à¤¸"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "हारà¥à¤¡à¤à¥à¤°"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "à¤à¥à¤°à¤°"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "à¤à¤¨à¥à¤¡à¥"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "बà¥à¤°à¤¿à¤à¤ªà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "नà¥à¤à¥à¤°à¤ªà¤à¤"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤ पà¤à¤"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "बà¥à¤"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "à¤à¥à¤°à¤¿à¤¸à¥à¤à¥à¤¯à¤¨ à¤à¥à¤¨à¥à¤à¤¸à¥à¤à¤¾ रà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "हà¥à¤µà¥ मà¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "बà¥à¤²à¥à¤ मà¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "à¤à¥à¤°à¤¾à¤¸à¤à¤µà¤°"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "à¤à¥à¤°à¤¿à¤¸à¥à¤à¥à¤¯à¤¨ समà¤à¤¾à¤²à¤¿à¤"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "à¤à¥à¤°à¤¿à¤¸à¥à¤à¥à¤¯à¤¨ रà¥à¤"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "मà¥à¤°à¥à¤¨à¤à¥à¤¯à¥"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "सà¥à¤²à¥à¤¸à¤¾"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "थà¥à¤°à¥à¤¸ मà¥à¤à¤²"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "à¤à¤¨à¤¿à¤®à¥"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "à¥à¥à¤ªà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "सिनà¥à¤¥à¤ªà¥à¤ª"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "à¤à¤®à¤ªà¥à¤à¤à¥ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨ à¤à¥ बारॠमà¥à¤"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"Michael Hipp <mh at mpg123.de> दà¥à¤µà¤¾à¤°à¤¾ à¤à¤®à¥¦à¤ªà¥à¥¦à¤à¥à¥¦-१२३ à¤à¥à¤à¤µà¤¾à¤à¤ à¤à¤à¤à¤¨ \n"
+"XMMS दल दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤²à¤-à¤à¤¨"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "à¤à¤®à¤ªà¥à¤à¤à¥ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "à¤à¤¸ निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤°à¥à¤ à¤à¤¹à¤¾à¤ à¤à¤ª à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ धाराà¤à¤ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ रà¤à¤¨à¤¾ à¤à¤¾à¤¹à¤¤à¥ हà¥:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨ सà¤à¤°à¤à¤¨à¤¾"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ à¤à¥ à¤à¥à¤:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "शà¥à¤°à¥à¤·à¤ à¤à¤¾ पà¥à¤°à¤¾à¤°à¥à¤ª:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "रà¥à¤ªà¥à¤²à¥à¤à¥à¤¨ à¤à¥ समायà¥à¤à¤¨à¤¾à¤à¤:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "à¤à¥à¤²à¥à¤ªà¤¿à¤à¤ रà¥à¤à¤¥à¤¾à¤® सà¤à¥à¤°à¤¿à¤¯"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "रà¥à¤ªà¥à¤²à¥à¤à¥à¤¨ सà¤à¥à¤°à¤¿à¤¯"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "रà¥à¤ªà¥à¤²à¥à¤à¥à¤¨ पà¥à¤°à¤à¤¾à¤°:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "à¤à¥à¤¨/पà¥à¤ à¤à¥à¤°à¥à¤ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "à¤à¥à¤¨/पà¥à¤ à¤à¤²à¤¬à¤® à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "६-डà¥à¤¬à¥ बà¥à¤¸à¥à¤ + हारà¥à¤¡ लिमà¤à¤¿à¤à¤ सà¤à¥à¤°à¤¿à¤¯"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "रà¥à¤ªà¥à¤²à¥à¤à¥à¤¨"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"à¤à¤ तà¥à¤°à¥à¤à¤¿ हॠà¤à¤¯à¥ हà¥:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "तà¥à¤°à¥à¤à¤¿ !"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "à¤à¥à¤ à¤à¥ परिवरà¥à¤¤à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ à¤
सà¥à¤² (à¤à¥à¤²à¤¨à¤¾)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "à¤à¥à¤ परिवरà¥à¤¤à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ à¤
सà¥à¤² (बनà¥à¤¦)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "à¤à¥à¤ परिवरà¥à¤¤à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ à¤
सà¥à¤²"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ à¤à¥à¤ "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "तिथि:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "विवरण:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "सà¥à¤¥à¤¾à¤¨:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "सà¤à¤¸à¥à¤®à¤°à¤£:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "à¤à¤à¥¦à¤à¤¸à¥¦à¤à¤°à¥¦à¤¸à¥à¥¦ सà¤à¤à¥à¤¯à¤¾:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ान:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ रà¥à¤ªà¥à¤²à¥à¤à¥à¤¨ "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "à¤à¥à¤°à¥à¤ à¤à¥à¤¨:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "à¤à¥à¤°à¥à¤ पà¥à¤:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "à¤à¤²à¤¬à¤® à¤à¥à¤¨:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "à¤à¤²à¤¬à¤® पà¥à¤:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ सà¥à¤à¤¨à¤¾ "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "लà¤à¤¬à¤¾à¤:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d à¤à¤¿à¤²à¥à¤¬à¤¾à¤à¤à¥à¤¸/सà¥à¤à¤£à¥à¤¡ (सामानà¥à¤¯)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d हरà¥à¤à¥"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d बाà¤à¤à¥à¤¸"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨ à¤à¥ बारॠमà¥à¤"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Xiph.org पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ान दà¥à¤µà¤¾à¤°à¤¾ à¤à¤à¥ वà¥à¤°à¥à¤¬à¤¿à¤¸ पà¥à¤²à¤-à¤à¤¨\n"
+"\n"
+"मà¥à¤²à¤¿à¤ à¤à¥à¤ दà¥à¤µà¤¾à¤°à¤¾\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"निमà¥à¤¨ सॠयà¥à¤à¤¦à¤¾à¤¨\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Xiph.org पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ान पर à¤à¤¾à¤¨à¥ à¤à¥ लिठhttp://www.xiph.org/ वà¥à¤¬-सà¥à¤¥à¤² पर à¤à¤¾à¤¯à¥à¤\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "वà¥à¤µ à¤à¤¡à¤¿à¤¯à¥ पà¥à¤²à¤-à¤à¤¨"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "à¤à¤à¤¸à¤à¤¸ à¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "à¤à¤à¤¸à¤à¤¸ à¤à¤¾à¤²à¤ à¤à¤¾à¤²à¤ à¤à¥ बारॠमà¥à¤"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS à¤à¤à¤¸à¤à¤¸ à¤à¤¾à¤²à¤\n"
+"\n"
+" यह à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® à¤à¤ मà¥à¤à¥à¤¤ सà¥à¥à¥à¤à¤µà¥à¤¯à¤° हà¥; मà¥à¤à¥à¤¤ सà¥à¥à¥à¤à¤µà¥à¤¯à¤° à¥à¤¾à¤à¤¨à¥à¤¡à¥à¤¶à¤¨ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤à¤¶à¤¿à¤¤; \n"
+" या तॠà¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥à¤¸à¤à¤¸à¥à¤®à¤°à¤£-२, या à¤à¥à¤ बाद à¤à¥ सà¤à¤¸à¥à¤®à¤°à¤£ (à¤à¥à¤¸à¤¾ à¤à¤¿ à¤à¤ª à¤à¥ पास हà¥) \n"
+" à¤à¥ à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ नियमà¥à¤ à¤à¥ à¤
नà¥à¤¤à¤°à¥à¤à¤¤, à¤à¤ª à¤à¤¸à¥ पà¥à¤¨à¤à¤µà¤¿à¤¤à¤°à¤¿à¤¤\n"
+" à¤à¤°/या परिवरà¥à¤¤à¤¿à¤¤ à¤à¤° सà¤à¤¤à¥ हà¥à¥¤\n"
+"\n"
+"à¤à¤¸ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® à¤à¥ à¤à¤¸ à¤à¤¶à¤¾ à¤à¥ साथ वितरित à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¤à¤¾ हॠà¤à¤¿ यह à¤à¤ªà¤¯à¥à¤à¥ हà¥à¤à¤¾\n"
+"परनà¥à¤¤à¥ बिना à¤à¥ à¤à¤®à¤¾à¤¨à¤¤ à¤à¥; यहाठतठसà¥à¤¦à¤¾à¤à¤°à¥ à¤à¥ साà¤à¤à¥à¤¤à¤¿à¤ à¤à¤®à¤¾à¤¨à¤¤ या \n"
+"à¤à¤¿à¤¸à¥ विशà¥à¤· à¤à¤¦à¥à¤µà¥à¤¶à¥à¤¯ à¤à¥ à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ à¤à¥ लिà¤à¥¤ à¤à¤° à¤
धिठà¤à¤¾à¤¨à¤à¤¾à¤°à¥ à¤à¥ लिà¤\n"
+"à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ दà¥à¤à¥à¤ ।\n"
+"\n"
+"à¤à¤ªà¤à¥ à¤à¤¸ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® सॠसाथ à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ à¤à¤ \n"
+"पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ मिलना à¤à¤¾à¤¹à¤¿à¤¯à¥, यदि नहà¥à¤, तॠनिमà¥à¤¨ पतॠपर लिà¤à¥à¤:\n"
+"the Free Software Foundation, Inc., 59 Temple Place - Suite 330, \n"
+"Boston, MA 02111-1307, USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "डिà¥à¤¾à¤²à¥à¤ (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "डिà¥à¤¾à¤²à¥à¤"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "à¤à¤à¤¸à¤à¤¸ à¤à¤¾à¤²à¤ सà¤à¤°à¤à¤¨à¤¾"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "à¤à¤¡à¤¿à¤¯à¥ à¤à¤ªà¤à¤°à¤£:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "वà¥à¤à¤²à¥à¤ªà¤¿à¤ à¤à¤ªà¤à¤°à¤£ à¤à¤¾ à¤à¤ªà¤¯à¥à¤:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "मिà¤à¥à¤¸à¤° à¤à¤ªà¤à¤°à¤£:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "à¤à¤ªà¤à¤°à¤£à¥à¤"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "बà¥à¤° à¤à¤¾ à¤à¤à¤¾à¤° (à¤à¤®à¥¦à¤à¤¸à¥¦):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "बà¥à¤°à¤¿à¤à¤"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "मिà¤à¥à¤¸à¤° à¤à¥ समायà¥à¤à¤¨à¤¾à¤¯à¥à¤:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "वालà¥à¤¯à¥à¤® नियà¤à¤¤à¥à¤°à¤ सà¥à¤µà¤¾à¤®à¥, पà¥à¥¦à¤¸à¥à¥¦à¤à¤®à¥¦ नहà¥à¤"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "मिà¤à¥à¤¸à¤°"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "à¤-साà¤à¤£à¥à¤¡ पà¥à¤²à¤-à¤à¤¨ à¤à¥ बारॠमà¥à¤"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS à¤à¤¸à¤¾à¤à¤£à¥à¤¡ पà¥à¤²à¤-à¤à¤¨\n"
+"\n"
+" यह à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® à¤à¤ मà¥à¤à¥à¤¤ सà¥à¥à¥à¤à¤µà¥à¤¯à¤° हà¥; मà¥à¤à¥à¤¤ सà¥à¥à¥à¤à¤µà¥à¤¯à¤° à¥à¤¾à¤à¤¨à¥à¤¡à¥à¤¶à¤¨ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤à¤¶à¤¿à¤¤; \n"
+" या तॠà¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥à¤¸à¤à¤¸à¥à¤®à¤°à¤£-२, या à¤à¥à¤ बाद à¤à¥ सà¤à¤¸à¥à¤®à¤°à¤£ (à¤à¥à¤¸à¤¾ à¤à¤¿ à¤à¤ª à¤à¥ पास हà¥) \n"
+" à¤à¥ à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ नियमà¥à¤ à¤à¥ à¤
नà¥à¤¤à¤°à¥à¤à¤¤, à¤à¤ª à¤à¤¸à¥ पà¥à¤¨à¤à¤µà¤¿à¤¤à¤°à¤¿à¤¤\n"
+" à¤à¤°/या परिवरà¥à¤¤à¤¿à¤¤ à¤à¤° सà¤à¤¤à¥ हà¥à¥¤\n"
+"\n"
+"à¤à¤¸ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® à¤à¥ à¤à¤¸ à¤à¤¶à¤¾ à¤à¥ साथ वितरित à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¤à¤¾ हॠà¤à¤¿ यह à¤à¤ªà¤¯à¥à¤à¥ हà¥à¤à¤¾\n"
+"परनà¥à¤¤à¥ बिना à¤à¥ à¤à¤®à¤¾à¤¨à¤¤ à¤à¥; यहाठतठसà¥à¤¦à¤¾à¤à¤°à¥ à¤à¥ साà¤à¤à¥à¤¤à¤¿à¤ à¤à¤®à¤¾à¤¨à¤¤ या \n"
+"à¤à¤¿à¤¸à¥ विशà¥à¤· à¤à¤¦à¥à¤µà¥à¤¶à¥à¤¯ à¤à¥ à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ à¤à¥ लिà¤à¥¤ à¤à¤° à¤
धिठà¤à¤¾à¤¨à¤à¤¾à¤°à¥ à¤à¥ लिà¤\n"
+"à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ दà¥à¤à¥à¤ ।\n"
+"\n"
+"à¤à¤ªà¤à¥ à¤à¤¸ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® सॠसाथ à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ à¤à¤ \n"
+"पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ मिलना à¤à¤¾à¤¹à¤¿à¤¯à¥, यदि नहà¥à¤, तॠनिमà¥à¤¨ पतॠपर लिà¤à¥à¤:\n"
+"the Free Software Foundation, Inc., 59 Temple Place - Suite 330, \n"
+"Boston, MA 02111-1307, USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "à¤à¤à¤¸à¤¡à¥ à¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨ सà¤à¤°à¤à¤¨à¤¾"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "सà¥à¤¦à¥à¤° हà¥à¤¸à¥à¤ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "à¤à¤à¤¸à¤à¤¸ मिà¤à¥à¤¸à¤° à¤à¥ वालà¥à¤¯à¥à¤® नियà¤à¤¤à¥à¤°à¤"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "सरà¥à¤µà¤°"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "à¤-साà¤à¤£à¥à¤¡ à¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "à¤à¤²à¥à¤¸à¤¾ à¤à¤¾à¤²à¤ à¤à¥ बारॠमà¥à¤"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS à¤à¤²à¥à¤¸à¤¾ à¤à¤¾à¤²à¤\n"
+"\n"
+" यह à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® à¤à¤ मà¥à¤à¥à¤¤ सà¥à¥à¥à¤à¤µà¥à¤¯à¤° हà¥; मà¥à¤à¥à¤¤ सà¥à¥à¥à¤à¤µà¥à¤¯à¤° à¥à¤¾à¤à¤¨à¥à¤¡à¥à¤¶à¤¨ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤à¤¶à¤¿à¤¤; \n"
+" या तॠà¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥à¤¸à¤à¤¸à¥à¤®à¤°à¤£-२, या à¤à¥à¤ बाद à¤à¥ सà¤à¤¸à¥à¤®à¤°à¤£ (à¤à¥à¤¸à¤¾ à¤à¤¿ à¤à¤ª à¤à¥ पास हà¥) \n"
+" à¤à¥ à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ नियमà¥à¤ à¤à¥ à¤
नà¥à¤¤à¤°à¥à¤à¤¤, à¤à¤ª à¤à¤¸à¥ पà¥à¤¨à¤à¤µà¤¿à¤¤à¤°à¤¿à¤¤\n"
+" à¤à¤°/या परिवरà¥à¤¤à¤¿à¤¤ à¤à¤° सà¤à¤¤à¥ हà¥à¥¤\n"
+"\n"
+"à¤à¤¸ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® à¤à¥ à¤à¤¸ à¤à¤¶à¤¾ à¤à¥ साथ वितरित à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¤à¤¾ हॠà¤à¤¿ यह à¤à¤ªà¤¯à¥à¤à¥ हà¥à¤à¤¾\n"
+"परनà¥à¤¤à¥ बिना à¤à¥ à¤à¤®à¤¾à¤¨à¤¤ à¤à¥; यहाठतठसà¥à¤¦à¤¾à¤à¤°à¥ à¤à¥ साà¤à¤à¥à¤¤à¤¿à¤ à¤à¤®à¤¾à¤¨à¤¤ या \n"
+"à¤à¤¿à¤¸à¥ विशà¥à¤· à¤à¤¦à¥à¤µà¥à¤¶à¥à¤¯ à¤à¥ à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ à¤à¥ लिà¤à¥¤ à¤à¤° à¤
धिठà¤à¤¾à¤¨à¤à¤¾à¤°à¥ à¤à¥ लिà¤\n"
+"à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ दà¥à¤à¥à¤ ।\n"
+"\n"
+"à¤à¤ªà¤à¥ à¤à¤¸ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® सॠसाथ à¤à¥à¤à¤¨à¤¯à¥ सामानà¥à¤¯à¤à¤¨ à¤
नà¥à¤®à¤¤à¤¿-पतà¥à¤° à¤à¥ à¤à¤ \n"
+"पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ मिलना à¤à¤¾à¤¹à¤¿à¤¯à¥, यदि नहà¥à¤, तॠनिमà¥à¤¨ पतॠपर लिà¤à¥à¤:\n"
+"the Free Software Foundation, Inc., 59 Temple Place - Suite 330, \n"
+"Boston, MA 02111-1307, USA.\n"
+"लà¥à¤à¤: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "à¤à¤²à¥à¤¸à¤¾ %s à¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "à¤
à¤à¥à¤à¤¾à¤¤ साà¤à¤£à¥à¤¡à¤à¤¾à¤°à¥à¤¡"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "डिà¥à¤¾à¤²à¥à¤ पà¥à¤¸à¥à¤à¤® à¤à¤ªà¤à¤°à¤£ (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "à¤à¤²à¥à¤¸à¤¾ à¤à¤¾à¤²à¤ à¤à¥ सà¤à¤°à¤à¤¨à¤¾"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "मिशà¥à¤°à¤:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "सà¥à¥à¥à¤à¤µà¥à¤¯à¤° वालà¥à¤¯à¥à¤® नियà¤à¤¤à¥à¤°à¤ à¤à¤¾ à¤à¤ªà¤¯à¥à¤"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "मिशà¥à¤°à¤ à¤à¤¾à¤°à¥à¤¡:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "à¤à¤ªà¤à¤°à¤£ à¤à¥ समायà¥à¤à¤¨à¤¾à¤¯à¥à¤:"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "à¤à¤¨à¥à¤¨à¤¤ समायà¥à¤à¤¨à¤¾à¤¯à¥à¤:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "बà¥à¤° समय (à¤à¤®à¥¦à¤à¤¸à¥¦):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "à¤
वधि समय (à¤à¤®à¥¦à¤à¤¸à¥¦):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "बà¥à¤° समय (à¤à¤®à¥¦à¤à¤¸à¥¦):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "à¤à¤®-मà¥à¤ª मà¥à¤¡"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "à¤à¤¨à¥à¤¨à¤¤ समायà¥à¤à¤¨à¤¾à¤¯à¥à¤"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/à¤à¥à¤à¤² à¤à¥ साà¤-सà¤à¥à¤à¤¾"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/बनà¥à¤¦"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "बà¥à¤²à¤° सà¥à¤à¥à¤ª"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "बà¥à¤²à¤° सà¥à¤à¥à¤ª: रà¤à¤ à¤à¤¾ à¤à¤¯à¤¨"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "विà¤à¤²à¥à¤ª:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "नà¤/à¤à¤²à¤¾à¤à¤¾à¤°"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "à¤à¤²à¥à¤¬à¤®"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "पà¥à¤°à¤à¤¾à¤°"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "सà¤à¤à¤¿à¤à¤¾ à¤à¤¾ नाम"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "सà¤à¤à¤¿à¤à¤¾ पथ"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "सà¤à¤à¤¿à¤à¤¾ à¤à¤ªà¤¨à¤¾à¤®"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "à¤à¥à¤°à¥à¤ à¤à¤¾ नाम"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "à¤à¥à¤°à¥à¤ à¤à¥ सà¤à¤à¥à¤¯à¤¾"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "दिनाà¤à¤"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "वरà¥à¤·"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "à¤à¤¿à¤ªà¥à¤ªà¤£à¥"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: दिà¤à¤¾à¤à¤ \"...\" तब हॠà¤à¤¬ %n ततà¥à¤¤à¥à¤µ विदà¥à¤¯à¤®à¤¾à¤¨ हà¥"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>बà¥à¤ª मà¥à¤¡à¤¿à¤¯à¤¾ पà¥à¤²à¥à¤¯à¤° %s</b></big>\n"
+"XMMS पर à¤à¤§à¤¾à¤°à¤¿à¤¤ à¤à¤ मà¥à¤¡à¥à¤¯à¤¾ पà¥à¤²à¥à¤¯à¤°\n"
+"\n"
+"सरà¥à¤µà¤¾à¤§à¤¿à¤à¤¾à¤° (C) २००३-२००४ बà¥à¤à¤®Pठविà¤à¤¾à¤¸ दल\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "सà¤à¥ विà¤à¤¾à¤¸à¤à¤°à¥à¤¤à¤¾:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "निमà¥à¤¨ à¤à¥ à¤
तिरिà¤à¥à¤¤ सहायता दà¥à¤µà¤¾à¤°à¤¾:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrew Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Thomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "मà¥à¤à¥à¤¯ पà¥à¤·à¥à¤ à¤à¤° à¤à¥à¤°à¤¾à¥à¤¿à¤à¥à¤¸:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "पà¥à¤°à¥à¤¤à¤à¤¾à¤²à¥ बà¥à¤°à¤¾à¤à¥à¤²:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Breton:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "à¤à¥à¤¨à¥:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "à¤à¥à¤:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "डà¤:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "सà¥à¤ªà¥à¤¨à¤¿à¤¸:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "à¥à¥à¤°à¥à¤à¤:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "à¤à¤°à¥à¤®à¤¨:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "à¤à¤°à¥à¤®à¤¨:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "à¤à¥à¤°à¥à¤:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "हà¤à¤à¤¾à¤°à¤¿à¤¯à¤¨:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "à¤à¤à¥à¤²à¤¿à¤¯à¤¨:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "à¤à¤¾à¤ªà¤¾à¤¨à¥:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "à¤à¥à¤°à¤¿à¤¯à¤¨:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "लिथà¥à¤¨à¤¿à¤¯à¤¨:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Macedonian:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "पà¥à¤²à¤¿à¤¶:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "रà¥à¤®à¤¾à¤¨à¤¿à¤¯à¤¨:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "रà¥à¤¸à¥:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "सà¥à¤²à¥à¤µà¤¾à¤:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "सà¥à¤ªà¥à¤¨à¤¿à¤¸:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "सà¥à¤µà¥à¤¡à¤¿à¤¸:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "रà¥à¤®à¤¾à¤¨à¤¿à¤¯à¤¨:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "वालà¥à¤¶:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "BMP à¤à¥ बारॠमà¥à¤"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "à¤à¤à¤¾à¤°"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "सà¤à¥ à¤
नà¥à¤µà¤¾à¤¦à¤"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "पà¥à¤°à¥à¤à¤®à¥à¤ª"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "६० हरà¥à¤à¤"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "१à¥à¥¦ हरà¥à¤à¤"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "३१० हरà¥à¤à¤"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "६०० हरà¥à¤à¤"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "१ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "३ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "६ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "१२ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "१४ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "१६ à¤à¤¿à¤²à¥à¤¹à¤°à¥à¤à¤"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/लायà¥à¤"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/लायà¥à¤/पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/लायà¥à¤/à¤à¤à¥-लà¥à¤¡-पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/लायà¥à¤/डिà¥à¤¾à¤²à¥à¤"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/लायà¥à¤/à¤à¥à¤°à¥"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/लायà¥à¤/सà¤à¤à¤¿à¤à¤¾ सà¥"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/लायà¥à¤/विन-à¤à¤®à¥à¤ª à¤à¥¦à¤à¥à¥à¥à¥¦à¤à¥à¥¦ सà¤à¤à¤¿à¤à¤¾ सà¥"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/à¤à¤®à¥à¤ªà¥à¤°à¥à¤"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/à¤à¤®à¥à¤ªà¥à¤°à¥à¤/विन-à¤à¤®à¥à¤ª पà¥à¤°à¥à¤¸à¥à¤à¥à¤ à¤à¥"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¥à¤"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¥à¤/पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/सà¥à¤°à¤à¥à¤·à¤¿à¤¤/à¤à¤à¥-लà¥à¤¡ पà¥à¤°à¥à¤¸à¥à¤¡"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/सà¥à¤°à¤à¥à¤·à¤¿à¤¤/डिà¥à¤¾à¤²à¥à¤"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/सà¥à¤°à¤à¥à¤·à¤¿à¤¤/सà¤à¤à¤¿à¤à¤¾ मà¥à¤"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/सà¥à¤°à¤à¥à¤·à¤¿à¤¤/विन-à¤à¤®à¥à¤ª à¤à¥¦à¤à¥à¤¯à¥à¥¦à¤à¥à¥¦ सà¤à¤à¤¿à¤à¤¾ मà¥à¤"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/मिà¤à¤¾à¤¯à¥à¤"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/मिà¤à¤¾à¤¯à¥à¤/पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/मिà¤à¤¾à¤¯à¥à¤/à¤à¤à¥-लà¥à¤¡ पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¤à¤°"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "सà¤à¥ पà¥à¤°à¥à¤¸à¥à¤"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "पà¥à¤°à¥à¤¸à¥à¤ लाना"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "à¤à¤à¥-पà¥à¤°à¥à¤¸à¥à¤ लाना"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¤à¤° पà¥à¤°à¥à¤¸à¥à¤ लाना"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "पà¥à¤°à¥à¤¸à¥à¤ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¤¾"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "à¤à¤à¥-पà¥à¤°à¥à¤¸à¥à¤ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¤¾"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¤à¤° पà¥à¤°à¥à¤¸à¥à¤ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¤¾"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "पà¥à¤°à¥à¤¸à¥à¤ à¤à¥ हà¤à¤¾à¤¨à¤¾"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "à¤à¤à¥-पà¥à¤°à¥à¤¸à¥à¤ à¤à¥ हà¤à¤¾à¤¨à¤¾"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: विà¤à¤²à¥à¤ª `%s' सà¤à¤¦à¤¿à¤à¥à¤§ हà¥\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: विà¤à¤²à¥à¤ª `--%s' à¤à¤ à¤à¤°à¥à¤à¥à¤®à¥à¤¨à¥à¤ à¤à¥ à¤
नà¥à¤®à¤¤à¤¿ नहà¥à¤ दà¥à¤¤à¤¾ हà¥\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: विà¤à¤²à¥à¤ª `%c%s' à¤à¤ à¤à¤°à¥à¤à¥à¤®à¥à¤¨à¥à¤ à¤à¥ à¤
नà¥à¤®à¤¤à¤¿ नहà¥à¤ दà¥à¤¤à¤¾ हà¥\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: विà¤à¤²à¥à¤ª `%s' à¤à¥ à¤à¤ à¤à¤°à¥à¤à¥à¤®à¥à¤¨à¥à¤ à¤à¥ à¤à¤µà¤¶à¥à¤¯à¤à¤¤à¤¾ हà¥\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ना पहà¤à¤¾à¤¨à¤¾ à¤à¤¯à¤¾ विà¤à¤²à¥à¤ª `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ना पहà¤à¤¾à¤¨à¤¾ à¤à¤¯à¤¾ विà¤à¤²à¥à¤ª `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: à¤
वà¥à¤§ विà¤à¤²à¥à¤ª -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: à¤
वà¥à¤§ विà¤à¤²à¥à¤ª -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: विà¤à¤²à¥à¤ª à¤à¥ à¤à¤ à¤à¤°à¥à¤à¥à¤®à¥à¤¨à¥à¤ à¤à¥ à¤à¤µà¤¶à¥à¤¯à¤à¤¤à¤¾ हॠ-- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: विà¤à¤²à¥à¤ª `-W %s' सà¤à¤¦à¤¿à¤à¥à¤§ हà¥\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: विà¤à¤²à¥à¤ª `-W %s' à¤à¤ à¤à¤°à¥à¤à¥à¤®à¥à¤¨à¥à¤ à¤à¥ à¤
नà¥à¤®à¤¤à¤¿ नहà¥à¤ दà¥à¤¤à¤¾ हà¥\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>à¤à¤¨ à¥à¤¾à¤à¤²à¥à¤ à¤à¥ à¤à¤²à¤¾à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥à¥¤</big></b>\n"
+"\n"
+"à¤à¤¨ निमà¥à¤¨à¤²à¤¿à¤à¤¿à¤¤ à¥à¤¾à¤à¤²à¥à¤ à¤à¥ à¤à¤²à¤¾à¤¯à¤¾ नहà¥à¤ à¤à¤¾ सà¤à¤¾ । à¤à¥à¤ªà¤¯à¤¾ à¤à¤¾à¤à¤à¥à¤ à¤à¤¿:\n"
+"१. à¤à¤¨ तठपहà¥à¤à¤ पà¥à¤°à¤¾à¤ªà¥à¤¤ हॠ।\n"
+"२. à¤à¤ªà¤¨à¥ à¤à¤µà¤¶à¥à¤¯à¤ मà¥à¤¡à¤¿à¤¯à¤¾ पà¥à¤²à¤-à¤à¤¨à¥à¤ à¤à¥ सà¤à¥à¤°à¤¿à¤¯ à¤à¤¿à¤¯à¤¾ हà¥à¤ हà¥à¥¤"
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "à¤à¤¸ à¤à¥à¤¤à¤¾à¤µà¤¨à¥ à¤à¥ à¥à¤¿à¤° à¤à¤à¥ ना दिà¤à¤¾à¤à¤"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "à¤à¤° à¤
धिठविवरण दिà¤à¤¾à¤à¤ (_d)"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "à¤à¥à¤ à¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨ à¤à¤¸ सà¤à¤à¤¿à¤à¤¾ à¤à¥ पहà¤à¤¾à¤¨ नहà¥à¤ à¤à¤° पाया"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "à¤à¤¨à¥à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "लà¥à¤ सà¤à¤à¤¿à¤à¤¾ à¤à¥ निरà¥à¤®à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥ (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "बà¥à¤ª मà¥à¤¡à¤¿à¤¯à¤¾ पà¥à¤²à¥à¤¯à¤°"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ (%s) à¤à¤¾ निरà¥à¤®à¤¾à¤£ à¤à¤°à¤¨à¥ मà¥à¤ à¤
सà¥à¤²à¤¤à¤¾: %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"à¤à¤ªà¤¯à¥à¤à¤¿à¤¤à¤¾: beep-media-players [options] [files] ...\n"
+"\n"
+"सà¤à¥ विà¤à¤²à¥à¤ª:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "à¤à¤¸ पाठà¤à¥ दिà¤à¤¾à¤¯à¥à¤ à¤à¤° बाहर निà¤à¤²à¥à¤"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "BMP/XMMS सà¤à¤¤à¥à¤° à¤à¤¾ à¤à¤¯à¤¨ (डिà¥à¤¾à¤²à¥à¤: ०)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ मà¥à¤ पà¥à¤à¥ à¤à¤¾à¤¨à¤¾"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ à¤à¤²à¤¾à¤¨à¤¾ à¤à¤°à¤®à¥à¤ à¤à¤°à¤¨à¤¾"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ à¤à¥à¤¤ à¤à¥ ठहरना"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ à¤à¥à¤¤ à¤à¥ रà¥à¤à¤¨à¤¾"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "ठहराना यदि à¤à¤² रहा हà¥, à¤
नà¥à¤¯à¤¥à¤¾ à¤à¤²à¤¾à¤¨à¤¾"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ मà¥à¤ à¤à¤à¥ à¤à¤¾à¤¨à¤¾"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ साॠनहà¥à¤ à¤à¤°à¤¨à¤¾"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "मà¥à¤à¥à¤¯ à¤à¤¿à¥à¤à¥ à¤à¥ दिà¤à¤¾à¤¨à¤¾"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "BMP à¤à¥ सà¤à¥à¤°à¤¿à¤¯ à¤à¤°à¥à¤"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "पिà¤à¤²à¥ सà¤à¤¤à¥à¤° à¤à¥ à¤à¤à¤¡à¥"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "सà¤à¤¸à¥à¤®à¤°à¤£ सà¤à¤à¥à¤¯à¤¾ à¤à¥ मà¥à¤¦à¥à¤°à¤¿à¤¤ à¤à¤°à¥à¤ à¤à¤° बाहर निà¤à¤²à¥à¤\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"SIGSEGV पà¥à¤°à¤¾à¤ªà¥à¤¤ हà¥à¤\n"
+"\n"
+"यह बà¥à¤à¤®à¤ªà¥ मà¥à¤ à¤à¤ दà¥à¤· हॠसà¤à¤¤à¤¾ हà¥à¥¤ à¤à¤¸à¤¾ à¤à¥à¤¯à¥à¤ हà¥à¤, यदि à¤à¤ª यह नहà¥à¤ à¤à¤¾à¤¨à¤¤à¥ हà¥, तॠहमà¥à¤ à¤à¤ मà¥à¤² "
+"beepmp-devel at lists.sourceforge.net पर à¤à¥à¤à¥à¤\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>सà¥à¤à¤¿à¤¨ à¤à¥ लà¥à¤¡ à¤à¤°à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥à¥¤</big></b>\n"
+"\n"
+"à¤à¥à¤ªà¤¯à¤¾ à¤à¤¾à¤à¤à¥ à¤à¤¿ '%s' पर सà¥à¤¥à¤¿à¤¤ सà¥à¤à¤¿à¤¨ à¤à¤ªà¤¯à¥à¤à¥ हॠà¤à¤° डिà¥à¤¾à¤²à¥à¤ सà¥à¤à¤¿à¤¨ à¤à¥ à¤à¤²à¥-à¤à¤¾à¤à¤¤à¤¿ '%s' पर "
+"सà¤à¤¸à¤¾à¤§à¤¿à¤¤ हà¥\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"à¤à¥à¤·à¤®à¤¾ à¤à¤°à¥à¤, à¤à¤ªà¤à¤¾ à¤à¥à¤à¥à¤à¥+ सà¤à¤¸à¥à¤®à¤°à¤£ (%d.%d.%d) BMP à¤à¥ साथ à¤à¤¾à¤°à¥à¤¯ नहà¥à¤ à¤à¤°à¤¤à¤¾ हॠ।\n"
+"à¤à¥à¤ªà¤¯à¤¾ à¤à¥à¤à¥à¤à¥+ %s या à¤à¤° नवà¥à¤¨ सà¤à¤¸à¥à¤®à¤°à¤£ à¤à¤¾ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¥à¤ ।\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"à¤à¥à¤·à¤®à¤¾ à¤à¤°à¥à¤, à¤à¤ªà¤à¥ पà¥à¤²à¥à¤à¥à¤¾à¤°à¥à¤® पर थà¥à¤°à¥à¤¡à¥à¤ à¤à¥ समरà¥à¤¥à¤¨ नहà¥à¤ पà¥à¤°à¤¾à¤ªà¥à¤¤ हà¥à¥¤\n"
+"\n"
+"यदि à¤à¤ª à¤à¤ libc5 पर à¤à¤§à¤¾à¤°à¤¿à¤¤ लिनà¤à¥à¤¸ सिसà¥à¤à¤® पर हॠà¤à¤° à¤à¤ªà¤¨à¥ à¤à¥à¤²à¤¿à¤¬ व à¤à¥à¤à¥à¤à¥+ à¤à¥ सà¤à¤¸à¤¾à¤§à¤¿à¤¤ "
+"à¤à¤¿à¤¯à¤¾ हà¥à¤ हà¥, तॠ\n"
+"लिनà¤à¥à¤¸ थà¥à¤°à¥à¤¡à¥à¤ à¤à¥ सà¤à¤¸à¤¾à¤§à¤¿à¤¤ à¤à¤°à¤¨à¥ à¤à¥ पà¥à¤°à¥à¤µ à¤à¤ªà¤à¥ à¤à¥à¤²à¤¿à¤¬ व à¤à¥à¤à¥à¤à¥+ à¤à¥ पà¥à¤¨à¤ à¤à¤®à¥à¤ªà¤¾à¤à¤² à¤à¤°à¤¨à¥ à¤à¥ "
+"à¤à¤µà¤¶à¥à¤¯à¤à¤¤à¤¾ हà¥à¥¤\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: डिसपà¥à¤²à¥ à¤à¥ à¤à¥à¤²à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥, बाहर निà¤à¤² रहा हà¥à¥¤"
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/à¤à¥à¤°à¥à¤ à¤à¥ विवरणà¥à¤ à¤à¥ दà¥à¤à¥à¤"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/à¤à¤à¥à¤¸à¥à¤à¥à¤°à¥à¤² à¤à¥à¤¤à¥à¤ à¤à¥ नाम"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/विशà¥à¤²à¥à¤·à¤"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/सà¥à¤®à¤¾"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/बनà¥à¤¦"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/सामानà¥à¤¯"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/à¤
à¤à¥à¤¨à¤¿"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/à¤à¥à¥ पà¤à¥à¤¤à¤¿à¤¯à¤¾à¤"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/पà¤à¥à¤¤à¤¿à¤¯à¤¾à¤"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/à¤à¤à¤¬à¥"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/à¤à¤²à¥à¤ªà¤¨à¤¾ विधा/शिà¤à¤°"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/सà¥à¤à¥à¤ª विधा"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/सà¥à¤à¥à¤ª विधा/बिनà¥à¤¦à¥ सà¥à¤à¥à¤ª"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/सà¥à¤à¥à¤ª विधा/पà¤à¤à¥à¤¤à¤¿ सà¥à¤à¥à¤ª"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/सà¥à¤à¥à¤ª विधा/à¤à¤¨ सà¥à¤à¥à¤ª"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/विणà¥à¤¡à¥à¤¶à¥à¤¡ वà¥à¤¯à¥ विधा"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/विणà¥à¤¡à¥à¤¶à¥à¤¡ वà¥à¤¯à¥ विधा/सामानà¥à¤¯"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/विणà¥à¤¡à¥à¤¶à¥à¤¡ वà¥à¤¯à¥ विधा/à¤à¥à¤°à¤¸"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ताà¤à¤¾ à¤à¤°à¤¨à¥ à¤à¥ दर"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/ताà¤à¤¾ à¤à¤°à¤¨à¥ à¤à¥ दर/पà¥à¤°à¥à¤£ (~५० à¥à¥à¤°à¥à¤® पà¥à¤°à¤¤à¤¿ सà¥à¤à¤£à¥à¤¡)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/ताà¤à¤¾ à¤à¤°à¤¨à¥ à¤à¥ दर/à¤à¤§à¥ (~२५ à¥à¥à¤°à¥à¤® पà¥à¤°à¤¤à¤¿ सà¥à¤à¤£à¥à¤¡)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/ताà¤à¤¾ à¤à¤°à¤¨à¥ à¤à¥ दर/à¤à¥à¤¥à¤¾à¤ (~१३ à¥à¥à¤°à¥à¤® पà¥à¤°à¤¤à¤¿ सà¥à¤à¤£à¥à¤¡)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ताà¤à¤¾ à¤à¤°à¤¨à¥ à¤à¥ दर/à¤à¤ वाठà¤à¤¾à¤ (~६ à¥à¥à¤°à¥à¤® पà¥à¤°à¤¤à¤¿ सà¥à¤à¤£à¥à¤¡)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/विशà¥à¤²à¥à¤·à¤ à¥à¥à¤²à¤à¥"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/विशà¥à¤²à¥à¤·à¤ à¥à¥à¤²à¤à¥/सबसॠधà¥à¤®à¤¾"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/विशà¥à¤²à¥à¤·à¤ à¥à¥à¤²à¤à¥/धà¥à¤®à¤¾"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/विशà¥à¤²à¥à¤·à¤ à¥à¥à¤²à¤à¥/मधà¥à¤¯à¤®"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/विशà¥à¤²à¥à¤·à¤ à¥à¥à¤²à¤à¥/तà¥à¤"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/विशà¥à¤²à¥à¤·à¤ à¥à¥à¤²à¤à¥/सबसॠतà¥à¤"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/शिà¤à¤° à¥à¥à¤²à¤à¥"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/शिà¤à¤° à¥à¥à¤²à¤à¥/सबसॠधà¥à¤®à¤¾"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/शिà¤à¤° à¥à¥à¤²à¤à¥/धà¥à¤®à¤¾"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/शिà¤à¤° à¥à¥à¤²à¤à¥/मधà¥à¤¯à¤®"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/शिà¤à¤° à¥à¥à¤²à¤à¥/तà¥à¤"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/शिà¤à¤° à¥à¥à¤²à¤à¥/सबसॠतà¥à¤"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/दà¥à¤¹à¤°à¤¾à¤¯à¥à¤"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/à¥à¥à¤à¤¨à¤¾"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/à¤à¤²à¤¾à¤¯à¥à¤"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ठहरà¥à¤"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/रà¥à¤à¥à¤"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/पिà¤à¤²à¤¾"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/à¤
à¤à¤²à¤¾"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ à¤à¤°à¤®à¥à¤ मà¥à¤ à¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/सà¤à¤à¤¿à¤à¤¾ पर à¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/समय पर à¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/वरà¥à¤¯à¤¤à¤¾à¤¯à¥à¤"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/दà¥à¤à¤¨à¤¾ (_v)"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/BMP à¤à¥ बारॠमà¥à¤"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/निà¤à¤¾à¤¸ (_Q)"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/सà¤à¤à¤¿à¤à¤¾à¤à¤..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/à¤à¤¨à¥à¤à¤°à¤¨à¥à¤ सà¥à¤¥à¤²..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/पà¥à¤²à¥à¤¸à¥à¤à¥ सà¤à¤ªà¤¾à¤¦à¤ दिà¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¤à¤° दिà¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/बà¥à¤¤à¤¾ हà¥à¤ समय"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/बà¤à¤¾ हà¥à¤ समय"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/हमà¥à¤¶à¤¾ à¤à¤ªà¤°"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/सà¤à¥ à¤à¤¾à¤°à¥à¤¯à¤¸à¥à¤¥à¤²à¥à¤ पर रà¤à¥à¤"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/पà¥à¤²à¥à¤¯à¤° à¤à¥ रà¥à¤²-à¤
प à¤à¤°à¥à¤"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/पà¥à¤²à¥à¤¸à¥à¤à¥ सà¤à¤ªà¤¾à¤¦à¤ à¤à¥ रà¥à¤²-à¤
प à¤à¤°à¥à¤"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¤à¤° à¤à¥ रà¥à¤²-à¤
प à¤à¤°à¥à¤"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "समय पर à¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "à¤à¥à¤·à¤£:पल"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "à¤à¥à¤°à¥à¤ à¤à¥ लà¤à¤¬à¤¾à¤:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "à¤à¤¤à¤¾à¤°"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "à¤à¤¤à¤¾à¤°"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "à¤à¥à¤°à¥à¤ पर à¤à¤¾à¤à¤"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "à¥à¤¿à¤²à¥à¤à¤°: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "/à¥à¥à¤²à¥à¤¡à¤°à¥à¤ à¤à¥ à¤à¥à¥à¥à¤"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "à¤à¤¨à¥à¤à¤°à¤¨à¥à¤ पतॠà¤à¥ à¤à¥à¥à¥à¤"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "à¤à¥ à¤à¥à¤à¥à¤: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "वालà¥à¤¯à¥à¤®: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "सà¤à¤¤à¥à¤²à¤¨: %d%% बायाà¤"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "सà¤à¤¤à¥à¤²à¤¨: à¤à¥à¤¨à¥à¤¦à¥à¤°à¤¿à¤¯"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "सà¤à¤¤à¥à¤²à¤¨: %d%% दायाà¤"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "विà¤à¤²à¥à¤ª मà¥à¤¨à¥"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "हमà¥à¤¶à¤¾ à¤à¤ªà¤° निषà¥à¤à¥à¤°à¤¿à¤¯ (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "हमà¥à¤¶à¤¾ à¤à¤ªà¤° सà¤à¥à¤°à¤¿à¥ (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "हमà¥à¤¶à¤¾ à¤à¤ªà¤° निषà¥à¤à¥à¤°à¤¿à¤¯"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "हमà¥à¤¶à¤¾ à¤à¤ªà¤° सà¤à¥à¤°à¤¿à¥"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "सà¤à¤à¤¿à¤à¤¾ सà¥à¤à¤¨à¤¾ बà¥à¤à¥à¤¸"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** दà¥à¤¹à¤°à¥ à¤à¤à¤¾à¤° à¤à¥ हà¤à¤¾ दिया à¤à¤¯à¤¾ हॠ**"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "à¤à¤²à¥à¤ªà¤¨à¤¾ मà¥à¤¨à¥"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>à¤à¥à¤ à¤à¤²à¤¾à¤¨à¥-यà¥à¤à¥à¤¯ सà¥à¤¡à¥ नहà¥à¤ मिलà¥à¥¤</big></b>\n"
+"\n"
+"या तॠà¤à¥à¤ सà¥à¤¡à¥ डालॠनहà¥à¤ à¤à¤ हà¥, या à¥à¤¿à¤° डालॠà¤à¤¯à¥ सà¥à¤¡à¥ à¤à¤ à¤à¤¡à¤¿à¤¯à¥ सà¥à¤¡à¥ नहà¥à¤ हà¥à¥¤\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>à¤à¤¡à¤¿à¤¯à¥ à¤à¥ à¤à¥à¤²à¤¾ नहà¥à¤ à¤à¤¾ सà¤à¤¾ ।</big></b>\n"
+"\n"
+"à¤à¥à¤ªà¤¯à¤¾ à¤à¤¾à¤à¤ à¤à¤° लà¥à¤ à¤à¤¿:\n"
+"\n"
+"१। à¤à¤ªà¤¨à¥ सहॠà¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤¿à¤¯à¤¾ हà¥à¥¤\n"
+"२। à¤à¥à¤ à¤
नà¥à¤¯ à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® साà¤à¤£à¥à¤¡ à¤à¤¾à¤°à¥à¤¡ à¤à¥ रà¥à¤ नहà¥à¤ रहा हà¥à¥¤\n"
+"३। à¤à¤ªà¤à¤¾ साà¤à¤£à¥à¤¡ à¤à¤¾à¤°à¥à¤¡ à¤à¥ à¤à¤²à¥-à¤à¤¾à¤à¤¤à¤¿ सà¤à¤°à¤à¤¿à¤¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥à¥¤\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/à¤à¤¯à¤¨à¤¿à¤¤ à¤à¥ हà¤à¤¾à¤à¤"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/à¤
à¤à¤¯à¤¨à¤¿à¤¤ à¤à¥ हà¤à¤¾à¤à¤"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/सà¤à¥ à¤à¥ हà¤à¤¾à¤à¤"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/à¤à¥à¤¯à¥ à¤à¥à¤à¤²"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/सà¥à¤¡à¥ à¤à¥ à¤à¥à¥à¥à¤..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/à¤à¤¨à¥à¤à¤°à¤¨à¥à¤ पतॠà¤à¥ à¤à¥à¥à¥à¤..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/सà¤à¤à¤¿à¤à¤¾à¤à¤ à¤à¥ à¤à¥à¥à¥à¤..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/सà¤à¤à¤¿à¤à¤¾à¤à¤ à¤à¥ à¤à¥à¥à¥à¤..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/à¤à¤¤à¤¾à¤° à¤à¥ साॠà¤à¤°à¥à¤"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/à¤
नà¥à¤ªà¤²à¤¬à¥à¤§ सà¤à¤à¤¿à¤à¤¾à¤à¤ à¤à¥ हà¤à¤¾à¤à¤"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/नयॠसà¥à¤à¥"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/सà¥à¤à¥ à¤à¥ लाà¤à¤"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/सà¥à¤à¥ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¥à¤"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/वà¥à¤¯à¥ à¤à¥ à¤
पडà¥à¤ à¤à¤°à¥à¤"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/à¤à¤¯à¤¨ à¤à¥ à¤à¤²à¤à¤¾ à¤à¤°à¥à¤"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/à¤à¥à¤ नहà¥à¤ à¤à¤¯à¤¨ à¤à¤°à¥à¤"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/सà¤à¥ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤°à¥à¤"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/सà¥à¤à¥ à¤à¥ बà¥à¤¤à¤°à¤¤à¥à¤¬ ढà¤à¤ सॠलà¤à¤¾à¤¯à¥à¤"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/सà¥à¤à¥ à¤à¥ पà¥à¤à¥-सà¥-à¤à¤à¥ लà¤à¤¾à¤¯à¥à¤"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/सà¥à¤à¥ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/सà¥à¤à¥ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/शà¥à¤°à¥à¤·à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/सà¥à¤à¥ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®à¥à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/सà¥à¤à¥ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/पथ à¤à¤° सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®à¥à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/सà¥à¤à¥ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/दिनाà¤à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/à¤à¤¯à¤¨ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/à¤à¤¯à¤¨ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/शà¥à¤°à¥à¤·à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/à¤à¤¯à¤¨ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®à¥à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/à¤à¤¯à¤¨ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/पथ à¤à¤° सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®à¥à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/à¤à¤¯à¤¨ à¤à¥ à¤à¥à¤°à¤®à¤¾à¤¨à¥à¤¸à¤¾à¤° लà¤à¤¾à¤¯à¥à¤/दिनाà¤à¤ दà¥à¤µà¤¾à¤°à¤¾"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "\"%s\" पà¥à¤²à¥à¤¸à¥à¤à¥ लिà¤à¤¨à¥ मà¥à¤ तà¥à¤°à¥à¤à¤¿ : %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s पहिलॠसॠविदà¥à¤¯à¤®à¤¾à¤¨ हà¥à¥¤ à¤à¤¾à¤°à¥ रहा à¤à¤¾à¤à¤?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ à¤
समरà¥à¤¥! %s हà¥à¤¤à¥ à¤
à¤à¥à¤à¤¾à¤¤ सà¤à¤à¤¿à¤à¤¾ पà¥à¤°à¤à¤¾à¤°"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ लाना"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¤¾"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP पà¥à¤²à¥à¤¸à¥à¤à¥ सà¤à¤ªà¤¾à¤¦à¤"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "वà¥à¤¶-à¤à¥à¤·à¤¾"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¤à¤°"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "माà¤à¤¸"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "पà¥à¤²à¤-à¤à¤¨à¥à¤¸"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "à¤à¤²à¤¾à¤à¤¾à¤°"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "à¤à¥à¤°à¥à¤à¤¸à¤à¤à¥à¤¯à¤¾"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "सà¤à¤à¤¿à¤à¤¾à¤ªà¤¥"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "सà¤à¥à¤°à¤¿à¤¯ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "विवरण"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "वरà¥à¤"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "वरà¥à¤¯à¤¤à¤¾à¤à¤ à¤à¤¿à¥à¤à¥"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "à¥à¤¾à¤à¤²à¥à¤ à¤à¥ à¤à¥à¥à¤¨à¤¾/à¤à¥à¤²à¤¨à¤¾ सà¤à¤µà¤¾à¤¦"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "सà¤à¤à¤¿à¤à¤¾à¤à¤ à¤à¥ à¤à¥à¤²à¥à¤"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "à¤à¥à¤²à¤¨à¥ पर बनà¥à¤¦ सà¤à¤µà¤¾à¤¦"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "सà¤à¤à¤¿à¤à¤¾à¤à¤ à¤à¥ à¤à¥à¥à¥à¤"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "à¤à¥à¥à¤¨à¥ पर बनà¥à¤¦ सà¤à¤µà¤¾à¤¦"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (à¤
वà¥à¤§ यà¥à¤à¥à¤à¥-८)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP à¤à¥ वरà¥à¤¯à¤¤à¤¾à¤¯à¥à¤"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>पà¥à¤²à¤-à¤à¤¨à¥à¤¸</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "मà¥à¤¡à¤¿à¤¯à¤¾ पà¥à¤²à¤-à¤à¤¨à¥à¤ à¤à¥ सà¥à¤à¥ (_M):"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>मà¥à¤¡à¤¿à¤¯à¤¾</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "सामानà¥à¤¯ पà¥à¤²à¤-à¤à¤¨à¥à¤ à¤à¥ सà¥à¤à¥ (_G):"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>सामानà¥à¤¯</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "à¤à¤¾à¤²à¥à¤ªà¤¨à¤¿à¤ पà¥à¤²à¤-à¤à¤¨à¥à¤ à¤à¥ सà¥à¤à¥ (_V):"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>à¤à¤²à¥à¤ªà¤¨à¤¾</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "पà¥à¤°à¤à¤¾à¤µà¥à¤ à¤à¥ पà¥à¤²à¤-à¤à¤¨ à¤à¥ सà¥à¤à¥ (_E):"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>सà¤à¥ पà¥à¤°à¤à¤¾à¤µ</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ à¤à¤à¤à¤ªà¥à¤ पà¥à¤²à¤-à¤à¤¨ (_C):"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"à¤à¤¨ परिवरà¥à¤¤à¤¨à¥à¤ à¤à¥ बà¥à¤à¤®à¤ªà¥ à¤à¥ सà¤à¤°à¤à¤¨à¤¾ डाà¤à¤¾à¤¬à¥à¤¸ मà¥à¤ लाà¤à¥ à¤à¤° दिया à¤à¤¯à¤¾ हà¥, परनà¥à¤¤à¥ à¤à¤¨ à¤à¤¾ पà¥à¤°à¤à¤¾à¤µ "
+"à¤à¤²à¤¾à¤¨à¥ à¤à¥ लिठà¤
à¤à¤²à¥ à¤à¥à¤¤ à¤à¥ पहिलॠनहà¥à¤ हà¥à¤à¤¾!\n"
+"\n"
+"या वà¥à¤à¤²à¥à¤ªà¤¿à¤ रà¥à¤ª सà¥, पà¥à¤²à¥à¤¬à¥à¤ à¤à¥ रà¥à¤ à¤à¤° पà¥à¤¨à¤ à¤à¤°à¤®à¥à¤ à¤à¤° à¤à¤ª à¤à¤¨ परिवरà¥à¤¤à¤¨à¥à¤ à¤à¥ पà¥à¤°à¤à¤¾à¤µ मà¥à¤ ला सà¤à¤¤à¥ "
+"हà¥à¥¤"
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>à¤à¤à¤à¤ªà¥à¤</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>रà¥à¤ª-रà¤à¤</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>सà¥à¤à¤¿à¤¨ (_S)</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>à¥à¥à¤¨à¥à¤à¤¸ (_F)</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "पà¥à¤²à¥à¤¯à¤° (_P):"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ (_P):"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "मà¥à¤à¥à¤¯ पà¥à¤²à¥à¤¯à¤° à¤à¤¿à¥à¤à¥ à¥à¥à¤¨à¥à¤ à¤à¤¾ à¤à¤¯à¤¨:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ à¥à¥à¤¨à¥à¤ à¤à¤¾ à¤à¤¯à¤¨:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>विविध (_M)</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ मà¥à¤ à¤à¥à¤°à¥à¤ सà¤à¤à¥à¤¯à¤¾à¤à¤ à¤à¥ दिà¤à¤¾à¤à¤"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "à¤à¤¸à¥à¤à¤® à¤à¤°à¥à¤¸à¤°à¥à¤ à¤à¤¾ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¥à¤"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>माà¤à¤¸</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>माà¤à¤¸ वà¥à¤¹à¥à¤²</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "वालà¥à¤¯à¥à¤® à¤à¥ माà¤à¤¸ वà¥à¤¹à¥à¤² तठपरिवरà¥à¤¤à¤¿à¤¤ à¤à¤°à¤¤à¥ हà¥"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "पà¥à¤°à¤¤à¤¿à¤¶à¤¤"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "माà¤à¤¸ पà¥à¤²à¥à¤¸à¥à¤à¥ à¤à¥ à¤à¤¤à¤¨à¥ दर सॠसà¥à¤à¥à¤°à¥à¤² à¤à¤°à¤¤à¤¾ हà¥"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>पà¥à¤²à¥à¤¸à¥à¤à¥</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>सà¤à¤à¤¿à¤à¤¾à¤¨à¤¾à¤®</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "à¤
णà¥à¤¡à¤°à¤¸à¥à¤à¥à¤°à¥à¤ à¤à¥ रिà¤à¥à¤¤ सà¥à¤¥à¤¾à¤¨ मà¥à¤ बदलना"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "%20 à¤à¥ रिà¤à¥à¤¤ सà¥à¤¥à¤¾à¤¨ मà¥à¤ बदलना"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>मà¥à¤à¤¾à¤¡à¤¾à¤à¤¾</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "सà¤à¤à¥à¤¤ सà¤à¤à¤¿à¤à¤¾à¤à¤ सॠमà¥à¤à¤¾à¤¡à¤¾à¤à¤¾ (à¤à¥à¤ सà¥à¤à¤¨à¤¾) लाà¤à¤à¥¤"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¤¿à¤¯à¥à¤ à¤à¤° सà¤à¤à¤¿à¤à¤¾à¤à¤ सॠमà¥à¤à¤¾ डाà¤à¤¾ à¤à¥ लाà¤à¤"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"à¤à¤¬ à¤à¤¸ à¥à¤¾à¤à¤² à¤à¥ पà¥à¤²à¥à¤¸à¥à¤à¥ मà¥à¤ à¤à¥à¥à¤¾ à¤à¤¾ रहा हॠया à¤à¤¸à¥ à¤à¥à¤²à¤¾ à¤à¤¾ रहा हॠतॠमà¥à¤à¤¾à¤¡à¤¾à¤à¤¾ à¤à¥ लà¥à¤¡ "
+"à¤à¤°à¥à¤"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "लानॠपर"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "à¤à¤¬ पà¥à¤²à¥à¤¸à¥à¤à¥ मà¥à¤ यह सà¤à¤à¤¿à¤à¤¾ दिà¤à¤¾à¤¯à¥ à¤à¤¾ रहॠहॠतॠà¤à¤à¥à¤°à¤¹ à¤à¤°à¤¨à¥ पर मà¥à¤à¤¾à¤¡à¤¾à¤à¤¾ à¤à¥ लाà¤à¤"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "डिसà¥à¤ªà¥à¤²à¥ à¤à¤°à¤¨à¥ पर"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>पà¥à¤²à¥à¤¬à¥à¤</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "à¤à¤¬ à¤à¤ à¤à¥à¤¤ à¤à¤¾ à¤à¤²à¤¨à¤¾ समापà¥à¤¤ हॠà¤à¤¾à¤¯à¥à¤, तॠà¤
पनà¥-à¤à¤ª à¤
à¤à¤²à¥ à¤à¥ à¤à¤° ना बà¥à¥à¤à¥¤"
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "पà¥à¤²à¥à¤¸à¥à¤à¥ मà¥à¤ à¤à¤à¥ नहà¥à¤ बà¥à¥à¤"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "à¤à¥à¤¤à¥à¤ à¤à¥ मधà¥à¤¯ ठहरà¥à¤"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "à¤à¥ लिठठहरà¥à¤"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "सà¥à¤à¥à¤¨à¥à¤¡à¤¸"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>à¤à¥à¤¤ à¤à¥ दिà¤à¤¾à¤¨à¤¾</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "à¤à¤¸à¥à¤à¤® सà¥à¤à¥à¤°à¥à¤à¤:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"शà¥à¤°à¥à¤·à¤\n"
+"à¤à¤²à¤¾à¤à¤¾à¤° - शà¥à¤°à¥à¤·à¤\n"
+"à¤à¤²à¤¾à¤à¤¾à¤° - à¤à¤²à¥à¤¬à¤® - शà¥à¤°à¥à¤·à¤\n"
+"à¤à¤²à¥à¤¬à¤® - शà¥à¤°à¥à¤·à¤\n"
+"à¤à¤¸à¥à¤à¤®"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "शà¥à¤°à¥à¤·à¤à¤¸à¥à¤à¥à¤°à¤¿à¤à¤ पà¥à¤°à¤¾à¤°à¥à¤ª à¤à¥ बारॠमà¥à¤ सà¥à¤à¤¨à¤¾ दिà¤à¤¾à¤à¤"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>à¤à¤à¥à¤¯à¥à¤²à¤¾à¤à¥à¤°</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>पà¥à¤°à¥à¤¸à¥à¤à¥à¤¸</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ पà¥à¤°à¥à¤¸à¥à¤ सà¤à¤à¤¿à¤à¤¾:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "सà¤à¤à¤¿à¤à¤¾ पà¥à¤°à¥à¤¸à¥à¤ à¤à¤ªà¤¨à¤¾à¤®:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "à¤à¤ªà¤²à¤¬à¥à¤§ पà¥à¤°à¥à¤¸à¥à¤ (_P):"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "à¤à¥à¥à¤¨à¥ पर बनà¥à¤¦ सà¤à¤µà¤¾à¤¦"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "सà¤à¥ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤°à¥à¤"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "सà¤à¥ à¤à¤¾ à¤
à¤à¤¯à¤¨ à¤à¤°à¥à¤"
+
+#~ msgid "Default skin:"
+#~ msgstr "डिà¥à¤¾à¤²à¥à¤ सà¥à¤à¤¿à¤¨:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "gnome-vfs à¤à¤¾ à¤à¤°à¤®à¥à¤à¥à¤à¤°à¤£ नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¾ सà¤à¤¾à¥¤\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/à¤à¥à¤ à¤
à¤à¥à¤°à¤¿à¤® पà¥à¤²à¥à¤¸à¥à¤à¥ नहà¥à¤"
+
+#~ msgid "/By extension"
+#~ msgstr "/à¤à¤ªà¤¨à¤¾à¤®à¥à¤ à¤à¥ à¤à¥à¤°à¤® मà¥à¤"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/hu.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3428 @@
+# Hungarian translation of bmp.
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bmp package.
+# Laszlo Dvornik <dvornik at gnome.hu>, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-10-21 18:43+0200\n"
+"Last-Translator: Laszlo Dvornik <dvornik at gnome.hu>\n"
+"Language-Team: Hungarian <gnome at gnome.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Audio CD bÅvÃtmény"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Audio CD szám %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(ismeretlen)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "%d. meghajtó"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Nem sikerült megnyitni a(z) %s eszközt\n"
+"Hiba: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Nem sikerült beolvasni a tartalomjegyzéket\n"
+"Lehet, hogy nincs lemez a meghajtóban?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"A(z) %s eszköz rendben van.\n"
+"A lemezen %d sáv van"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d adatsáv)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Teljes hossz: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"A digitális audiobeolvasás nem lett tesztelve, mivel a lemezen nincs "
+"hangsáv\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Digitális audiobeolvasási teszt: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"A digitális audiobeolvasási teszt sikertelen: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Nem sikerült ellenÅrizni a(z) %s könyvtárat\n"
+"Hiba: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Hiba: %s létezik, de nem könyvtár"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "A(z) %s könyvtár rendben van."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Eszköz:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Eszköz:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_Könyvtár:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Lejátszási mód:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analóg"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Digitális audiobeolvasás"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "HangerÅszabályozó:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Nincs keverÅ"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CD-ROM meghajtó"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS-keverÅ"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Meghajtó ellenÅrzése..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Meghajtó eltávolÃtása"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Audio CD-lejátszó beállÃtása"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Meghajtó hozzáadása"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Eszköz"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "CDDB használata"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Kiszolgálólista behÃvása"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Hálózati ablak megjelenÃtése"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB-kiszolgáló:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "CD Index használata"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD Index-kiszolgáló:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Számok nevei:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Ãltalános cÃmek felülbÃrálása"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Névformátum:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD-infó"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Válassza ki a könyvtárat, ahol tárolni szeretné az MPEG-folyamokat:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG-audiobÅvÃtmény beállÃtása"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Felbontás:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Csatornák:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Sztereó (ha elérhetÅ)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Monó"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Ãjramintavételezés:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekódoló:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatikus felderÃtés"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! -ra optimalizált dekódoló"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX-re optimalizált dekódoló"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU-dekódoló"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "BeállÃtások"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Tartalom"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Kiterjesztés"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Kiterjesztés és tartalom"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekódoló"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Pufferelés:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Pufferméret (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "ElÅ-pufferelés (százalék):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Proxy használata"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Kiszolgáló:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "HitelesÃtés használata"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Felhasználónév:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Jelszó:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Folyam mentése lemezre:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Folyam mentése lemezre"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Ãtvonal:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Tallózás"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Icecast Metadata UDP csatorna bekapcsolása"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Folyam"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 tag-ek:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ID3V2 tag-ek kikapcsolása"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Nem UTF8-as ID3 tag-ek átalakÃtása UTF8-assá"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3-kódolás:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3-formátum:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "CÃm"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Nem lehet Ãrni a fájlba: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Nem lehet Ãrni a tag-et!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Nem lehet megnyitni a fájlt: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Fájlinfó"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "OK"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Nem lehet csonkolni a fájlt: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Nem lehet eltávolÃtani a tag-et!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Nincs eltávolÃtható tag!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Sztereó"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Joint sztereó"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Két csatorna"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Egy csatorna"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Nincs"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nem"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Igen"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Név:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG-infó "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG-szint:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bitráta:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Mintavételezés:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Kockák:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Fájlméret:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Hibavédelem:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Eredeti:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Hangsúly:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3-tag "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "CÃm:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "ElÅadó:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Megjegyzés:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Ãv:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "A szám sorszáma:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Műfaj:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Album tag-ek másolása"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Album tag-ek beillesztése"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Változó,\n"
+"átl. bitráta: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu bájt"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Hiba"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "%s KERESÃSE"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "%s kiszolgáló nem található"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "KAPCSOLÃDÃS EHHEZ: %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Nem lehet kapcsolódni a(z) %s kiszolgálóhoz"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "KAPCSOLÃDVA: VÃRAKOZÃS VÃLASZRA"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Nem lehet kapcsolódni a(z) %s kiszolgálóhoz\n"
+"A kiszolgáló üzenete: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ELÅ-PUFFERELÃS: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Klasszikus rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Régi slágerek"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Egyéb"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Ipari"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "AlternatÃv"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Filmzene"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vokális"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klasszikus"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Hangszeres"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Játék"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Zene klip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Zaj"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternatÃv rock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Basszus"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "MeditatÃv"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Hangszeres pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Hangszeres rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Népzene"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Elektronikus"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Ãlom"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Déli Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Kabaré"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Kultusz"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Dzsungel"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Indián"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Kabaré"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "Ãjhullámos"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Pszichedelikus"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Sorozatok zenéi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "FilmelÅzetes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Nemzeti folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Kelta"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgárd"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "ProgresszÃv rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Pszichedelikus rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Szimfonikus rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Lassú rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Kórus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Könnyed dallam"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Akusztikus"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humoros"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Beszéd"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Sanzon"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Kamarazene"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Szonáta"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Szimfónia"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "SzatÃra"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Klub"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tangó"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Szamba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklór"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballada"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Ritmikus soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duett"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Dobszóló"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Kortárs keresztény"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Keresztény rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Szintipop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "MPEG-audiobÅvÃtmény névjegye"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 dekódoló motor: Michael Hipp <mh at mpg123.de>\n"
+"A bÅvÃtményt az XMMS csapat készÃtette"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG-audiobÅvÃtmény"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr ""
+"Válassza ki a könyvtárat, ahol tárolni szeretné az Ogg Vorbis-folyamokat:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis-audiobÅvÃtmény beállÃtása"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis tag-ek:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "CÃmformátum:"
+
+# Not all CDs sound equally loud. A random play through your music
+# collection can have you leaping for the volume control every other track.
+# There is a remarkably simple solution to this annoyance, and that is to
+# store the required replay gain for each track within the track.
+# The Replay Gain proposal sets out a simple way of calculating and
+# representing the ideal replay gain for every track and album.
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain-beállÃtások:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Vágás gátolásának bekapcsolása"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "ReplayGain bekapcsolása"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ReplayGain-tÃpus:"
+
+# You can make all your music to sound at 89 dB (track gain, aka "radio")
+# or you can preserve relative loudness differences within the same
+# album and make it sound at average 89 dB (album gain, aka "audiophile").
+# Track Gain gives every song the same relative volume, Album Gain gives
+# each album the same relative volume while preserving the dynamics
+# between the songs.
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "Számonkénti hangerÅigazÃtás/csúcsérték használata"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "Albumonkénti hangerÅigazÃtás/csúcsérték használata"
+
+# Most users who only play pop music will find that the level has been
+# reduced too far for them. An optional boost of 6dB-12dB should be
+# included by default, otherwise users will think the player sucks!
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "6 dB hangosÃtás + lekorlátozás bekapcsolása"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Hiba történt:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Hiba!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Nem sikerült módosÃtani (megnyitni) a tag-et"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Nem sikerült módosÃtani (zárolni) a tag-et"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Nem sikerült módosÃtani a tag-et"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis-tag "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Dátum:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "LeÃrás:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Hely:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Verzió:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC-szám:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Szervezet:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Számonkénti hangerÅigazÃtás:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Számon belüli csúcsérték:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Albumonkénti hangerÅigazÃtás:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Albumon belüli csúcsérték:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis-infó "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Hossz:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (névleges)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d bájt"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis-audiobÅvÃtmény"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis-audiobÅvÃtmény névjegye"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis-bÅvÃtmény; készÃtette a Xiph.org AlapÃtvány\n"
+"\n"
+"Eredeti forráskód:\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Közreműködtek:\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Látogassa meg a Xiph.org AlapÃtványt: http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV-audiobÅvÃtmény"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS kimeneti bÅvÃtmény"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "OSS-meghajtó névjegye"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS-meghajtó\n"
+"\n"
+"Ez a program szabad szoftver; terjeszthetŠés/vagy módosÃtható\n"
+"a Free Software Foundation által publikált GNU General Public\n"
+"License 2. vagy annál újabb verziója alapján.\n"
+"\n"
+"A program annak reményében kerül terjesztésre, hogy hasznosnak\n"
+"bizonyul, de GARANCIA NÃLKÃL; még a PIACKÃPESSÃG illetve\n"
+"egy BIZONYOS CÃLRA VALà ALKALMASSÃG sincs garantálva. További\n"
+"részletek a GNU General Public License-ben.\n"
+"\n"
+"A programmal együtt Ãnnek kapnia kellett egy példányt a GNU General\n"
+"Public License-bÅl; ha nem Ãgy történt, Ãrjon a következÅ cÃmre:\n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"MA 02111-1307, USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Alapértelmezett (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Alapértelmezett"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS-meghajtó beállÃtása"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Hangeszköz:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "AlternatÃv eszköz használata:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "KeverÅeszköz:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Eszközök"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Pufferméret (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Pufferelés"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "KeverÅ beállÃtásai:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "HangerÅszabályozás: Master, nem PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "KeverÅ"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "ESounD-bÅvÃtmény névjegye"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD-bÅvÃtmény\n"
+"\n"
+"Ez a program szabad szoftver; terjeszthetŠés/vagy módosÃtható\n"
+"a Free Software Foundation által publikált GNU General Public\n"
+"License 2. vagy annál újabb verziója alapján.\n"
+"\n"
+"A program annak reményében kerül terjesztésre, hogy hasznosnak\n"
+"bizonyul, de GARANCIA NÃLKÃL; még a PIACKÃPESSÃG illetve\n"
+"egy BIZONYOS CÃLRA VALà ALKALMASSÃG sincs garantálva. További\n"
+"részletek a GNU General Public License-ben.\n"
+"\n"
+"A programmal együtt Ãnnek kapnia kellett egy példányt a GNU General\n"
+"Public License-bÅl; ha nem Ãgy történt, Ãrjon a következÅ cÃmre:\n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"MA 02111-1307, USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD kimeneti bÅvÃtmény beállÃtása"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Távoli kiszolgáló használata"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "A hangerÅ az OSS-keverÅt szabályozza"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Kiszolgáló"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound kimeneti bÅvÃtmény"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "ALSA-meghajtó névjegye"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA-meghajtó\n"
+"\n"
+"Ez a program szabad szoftver; terjeszthetŠés/vagy módosÃtható\n"
+"a Free Software Foundation által publikált GNU General Public\n"
+"License 2. vagy annál újabb verziója alapján.\n"
+"\n"
+"A program annak reményében kerül terjesztésre, hogy hasznosnak\n"
+"bizonyul, de GARANCIA NÃLKÃL; még a PIACKÃPESSÃG illetve\n"
+"egy BIZONYOS CÃLRA VALà ALKALMASSÃG sincs garantálva. További\n"
+"részletek a GNU General Public License-ben.\n"
+"\n"
+"A programmal együtt Ãnnek kapnia kellett egy példányt a GNU General\n"
+"Public License-bÅl; ha nem Ãgy történt, Ãrjon a következÅ cÃmre:\n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"MA 02111-1307, USA.\n"
+"SzerzÅ: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s kimeneti bÅvÃtmény"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Ismeretlen hangkártya"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Alapértelmezett PCM-eszköz (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA-meghajtó beállÃtása"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "KeverÅ:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Szoftveres hangerÅszabályozó használata"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "KeverÅkártya:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "EszközbeállÃtások"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Haladó beállÃtások:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Pufferelt idÅ (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "PeriódusidŠ(ms):"
+
+#: Output/alsa/configure.c:402
+msgid "Thread buffer time (ms):"
+msgstr "Szálak pufferelési ideje (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr "Többszálú mód"
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap-mód"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Haladó beállÃtások"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Ablakkeret"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Bezárás"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Homály"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Homály: SzÃn kiválasztása"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "BeállÃtások:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "ElÅadó/szerzÅ"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Műfaj"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Fájlnév"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Fájlútvonal"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Fájlkiterjesztés"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Szám neve"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Szám sorszáma"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Dátum"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Ãv"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Megjegyzés"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: \"...\" csak akkor legyen megjelenÃtve, ha van %n elem"
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Egy XMMS-en alapuló médialejátszó\n"
+"\n"
+"Copyright (C) 2003-2005 BMP-fejlesztÅcsapat\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "FejlesztÅk:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "A következÅk segÃtségével:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr "ClearSky bÅr:"
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr "Will Reinhart"
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Honlap és grafika:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "BrazÃliai portugál:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Breton:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "KÃnai:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr "Chao-Hsiung Liao"
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Cseh:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Holland:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr "Finn:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr "Pauli Virtanen"
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francia:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Német:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+msgid "Georgian: "
+msgstr "Grúz: "
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr "George Machitidze"
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Görög:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr "Stavros Giannouris"
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr "Hindi:"
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr "Dhananjaya Sharma"
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Magyar:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Dvornik László"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Olasz:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japán:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Koreai:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Litván:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Macedón:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Lengyel:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Román:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Orosz:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr "Vitaly Lipatov"
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Szlovák:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Spanyol:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Svéd:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+msgid "Ukrainian:"
+msgstr "Ukrán:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr "Mykola Lynnyk"
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Walesi:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "BMP névjegye"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Köszönet"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "FordÃtók"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "ELÅERÅSÃTÅ"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3 KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Betöltés"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Betöltés/BeállÃtás"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Betöltés/Automatikusan betöltÅdÅ beállÃtás"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Betöltés/Alapértelmezett beállÃtás"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Betöltés/Nulla"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Betöltés/Fájlból"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Betöltés/Winamp EQF fájlból"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importálás"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importálás/Winamp-beállÃtások"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Mentés"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Mentés/BeállÃtás"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Mentés/Automatikusan betöltÅdÅ beállÃtás"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Mentés/Alapértelmezett beállÃtás"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Mentés/Fájlba"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Mentés/Winamp EQF fájlba"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Törlés"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Törlés/BeállÃtás"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Törlés/Automatikusan betöltÅdÅ beállÃtás"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP equalizer"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "BeállÃtás"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "BeállÃtások"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "BeállÃtás betöltése"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Automatikusan betöltÅdÅ beállÃtás betöltése"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Equalizer-beállÃtás betöltése"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "BeállÃtás mentése"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Automatikusan betöltÅdÅ beállÃtás mentése"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Equalizer-beállÃtás mentése"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "BeállÃtás törlése"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Automatikusan betöltÅdÅ beállÃtás törlése"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: a(z) `%s' opció nem egyértelmű\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: a(z) `--%s' opció nem enged meg argumentumot\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: a(z) `%c%s' opció nem enged meg argumentumot\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: a(z) `%s' opcióhoz meg kell adni argumentumot\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ismeretlen opció: `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ismeretlen opció: `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: helytelen opció -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: érvénytelen opció -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: az opcióhoz meg kell adni argumentumot -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: a `-W %s' opció nem egyértelmű\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: a `-W %s' opció nem enged meg argumentumot\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Nem lehet fájlokat lejátszani.</big></b>\n"
+"\n"
+"A következÅ fájlok nem játszhatóak le. EllenÅrizze a következÅket:\n"
+"1. A fájlok hozzáférhetÅek.\n"
+"2. A szükséges médiabÅvÃtmények be vannak kapcsolva."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Nem mutassa többé ezt a figyelmeztetést"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Több _részlet megjelenÃtése"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Fájlnév"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Fájlnév:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Egyik bemeneti bÅvÃtmény sem ismerte fel a fájlt"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Bemeneti bÅvÃtmény: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Nem lehet létrehozni a naplófájlt (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Nem lehet létrehozni a könyvtárat (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Használat: beep-media-player [opciók] [fájlok] ...\n"
+"\n"
+"Opciók:\n"
+"-------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Ezen szöveg megjelenÃtése és kilépés"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "BMP/XMMS-munkamenet kiválasztása (alapértelmezés: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Visszalépés a lejátszólistában"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Jelenlegi lejátszólista lejátszásának elkezdése"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Jelenlegi szám szüneteltetése"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Jelenlegi szám leállÃtása"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Lejátszás esetén szüneteltetés, különben lejátszás"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "ElÅrelépés a lejátszólistában"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ne törölje a lejátszólistát"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "FÅablak megjelenÃtése"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "BMP aktiválása"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ElÅzÅ munkamenet-azonosÃtó"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Verziószám megjelenÃtése és kilépés\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"SIGSEGV érkezett\n"
+"\n"
+"Ez egy hiba lehet a BMP-ben. Ha nem tudja, hogy miért történt, küldjön "
+"nekünk egy levelet a beepmp-devel at lists.sourceforge.net cÃmre\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Nem lehet betölteni a bÅrt.</big></b>\n"
+"\n"
+"EllenÅrizze, hogy a(z) '%s' helyen található bÅr használható-e és az "
+"alapértelmezett bÅr megfelelÅen telepÃtve van-e itt: '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Sajnálom, az Ãn GTK+ verziója (%d.%d.%d) nem működik a BMP-vel.\n"
+"Használjon GTK+ %s verziót vagy újabbat.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Sajnálom, az Ãn platformján a szálak nincsenek támogatva.\n"
+"\n"
+"Ha libc5-alapú Linux-rendszere van, és a GLIB-et és a GTK+-t a LinuxThreads\n"
+"elÅtt telepÃtette, akkor újra kell fordÃtania a GLIB-et és a GTK+-t.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Nem lehet megnyitni a képernyÅt, kilépés."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Szám részleteinek megtekintése"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Számnév automatikus görgetése"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Kijelzési mód"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Kijelzési mód/Analizátor"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Kijelzési mód/Szkóp"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Kijelzési mód/Kikapcsolva"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Analizátor-üzemmód"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Analizátor-üzemmód/Normál"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Analizátor-üzemmód/Tűz"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Analizátor-üzemmód/FüggÅleges vonalak"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Analizátor-üzemmód/Vonalak"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Analizátor-üzemmód/Oszlopok"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Analizátor-üzemmód/Csúcsértékek"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Szkóp-üzemmód"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Szkóp-üzemmód/Pontok"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Szkóp-üzemmód/Vonalak"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Szkóp-üzemmód/Tömör"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Roló-üzemmód"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Roló-üzemmód/Normál"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Roló-üzemmód/Finom"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/FrissÃtési sebesség"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/FrissÃtési sebesség/Teljes (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/FrissÃtési sebesség/Fél (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/FrissÃtési sebesség/Negyed (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/FrissÃtési sebesség/Nyolcad (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Analizátor esése"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Analizátor esése/Leglassabb"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Analizátor esése/Lassú"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Analizátor esése/Közepes"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Analizátor esése/Gyors"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Analizátor esése/Leggyorsabb"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Csúcsértékek esése"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Csúcsértékek esése/Leglassabb"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Csúcsértékek esése/Lassú"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Csúcsértékek esése/Közepes"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Csúcsértékek esése/Gyors"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Csúcsértékek esése/Leggyorsabb"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Ismétlés"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Véletlenszerű sorrend"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Lejátszás"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Szünet"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/LeállÃtás"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/ElÅzÅ"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/KövetkezÅ"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Ugrás a lejátszólista elejére"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Ugrás fájlra"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Ugrás idÅpontra"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/BeállÃtások"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Nézet"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/BMP névjegye"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Kilépés"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Fájlok..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Internethely..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Lejátszólista-szerkesztÅ megjelenÃtése"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Equalizer megjelenÃtése"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Eltelt idÅ"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/HátralévÅ idÅ"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Mindig legfelül"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/MegjelenÃtés minden munkaterületen"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Lejátszó felgördÃtése"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Lejátszólista-szerkesztÅ felgördÃtése"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Equalizer felgördÃtése"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Ugrás idÅpontra"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "perc:másodperc"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Szám hossza:"
+
+#: beep/mainwin.c:1364
+msgid "Un_queue"
+msgstr "_Kiszedés a sorból"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+msgid "_Queue"
+msgstr "_Betevés a sorba"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Ugrás számra"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "SzűrÅ: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Mappák hozzáadása"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "InternetcÃm hozzáadása"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "POZICIONÃLÃS IDE: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "HANGERÅ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANSZ: %d%% BAL"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANSZ: KÃZÃP"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANSZ: %d%% JOBB"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "BEÃLLÃTÃSOK MENÃ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "MINDIG LEGFELÃL KIKAPCSOLÃSA (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "MINDIG LEGFELÃL BEKAPCSOLÃSA (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "MINDIG LEGFELÃL KIKAPCSOLÃSA"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "MINDIG LEGFELÃL BEKAPCSOLÃSA"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "FÃJLINFÃ ABLAK"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** A DUPLA MÃRET EL LETT TÃVOLÃTVA **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "KIJELZÃS MENÃ"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Nem található lejátszható CD.</big></b>\n"
+"\n"
+"Nincs behelyezve CD, vagy a behelyezett CD nem audio CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Nem lehet megnyitni a hangot.</big></b>\n"
+"\n"
+"EllenÅrizze a következÅket:\n"
+"1. A megfelelÅ kimeneti bÅvÃtmény van kiválasztva.\n"
+"2. Semmilyen más program nem foglalja le a hangkártyát.\n"
+"3. A hangkártya megfelelÅen van beállÃtva.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Kijelöltek eltávolÃtása"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Kijelöletlenek eltávolÃtása"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Ãsszes eltávolÃtása"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Betevés a sorba"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/CD hozzáadása..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/InternetcÃm hozzáadása..."
+
+#: beep/playlistwin.c:161
+msgid "/Add Folders..."
+msgstr "/Mappák hozzáadása..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Fájlok hozzáadása..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Sor törlése"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Nem elérhetÅ fájlok eltávolÃtása"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Ãj lista"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Lista betöltése"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Lista mentése"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Nézet frissÃtése"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Kijelölés megfordÃtása"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Kijelölés megszüntetése"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Mindent kijelöl"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Véletlenszerű listasorrend"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Lista megfordÃtása"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Lista rendezése"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Lista rendezése/CÃm alapján"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Lista rendezése/Fájlnév alapján"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Lista rendezése/Ãtvonal + fájlnév alapján"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Lista rendezése/Dátum alapján"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Kijelölés rendezése"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Kijelölés rendezése/CÃm alapján"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Kijelölés rendezése/Fájlnév alapján"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Kijelölés rendezése/Ãtvonal + fájlnév alapján"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Kijelölés rendezése/Dátum alapján"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Hiba a(z) \"%s\" lejátszólista Ãrása közben: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "A(z) %s már létezik. Folytatja?"
+
+#: beep/playlistwin.c:818
+#, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+"<b><big>Nem lehet menteni a lejátszólistát.</big></b>\n"
+"\n"
+"Ismeretlen fájltÃpus: '%s'.\n"
+
+#: beep/playlistwin.c:928
+msgid "Load Playlist"
+msgstr "Lejátszólista betöltése"
+
+#: beep/playlistwin.c:940
+msgid "Save Playlist"
+msgstr "Lejátszólista mentése"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP lejátszólista-szerkesztÅ"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Megjelenés"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Equalizer"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Egér"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Lejátszólista"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "BÅvÃtmények"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "ElÅadó"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Szám sorszáma"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Fájlútvonal"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Bekapcsolva"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "LeÃrás"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Kategória"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "BeállÃtások ablak"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Fájlok hozzáadása/megnyitása párbeszédablak"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Fájlok megnyitása"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Párbeszédablak bezárása megnyitás után"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Fájlok hozzáadása"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Párbeszédablak bezárása hozzáadás után"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (érvénytelen UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP beállÃtásai"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>BÅvÃtmények</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "MédiabÅvÃtmények listája:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Média</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "Ã_ltalános bÅvÃtmények listája:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Ãltalános</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Kijelzési bÅvÃtmények listája:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Kijelzési mód</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_EffektusbÅvÃtmények listája:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Effektusok</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Jelenlegi kimeneti bÅvÃtmény:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"A változtatás érvénybe lépett a BMP konfigurációs adatbázisában, de a "
+"lejátszás során a következŠdalig nem fog érvénybe lépni!\n"
+"\n"
+"Opcionális leállÃthatja és újraindÃthatja a lejátszást, hogy a változtatás "
+"érvénybe lépjen."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Kimenet</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Megjelenés</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_BÅr</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Betűkészletek</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Lejátszó:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "L_ejátszólista:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Válassza ki a fŠlejátszóablak betűkészletét:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Válassza ki a lejátszólista betűkészletét:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Egyebek</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Számok sorszámának megjelenÃtése a lejátszólistában"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Egyéni kurzorok használata"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Egér</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>EgérgörgÅ</b>"
+
+#: beep/glade/prefswin.glade:1499
+msgid "Changes volume by"
+msgstr "Megváltoztatja a hangerÅt"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "százalékkal"
+
+#: beep/glade/prefswin.glade:1547
+msgid "Scrolls playlist by"
+msgstr "Ennyit görget a lejátszólistában:"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "sor"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Lejátszólista</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Fájlnév</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Aláhúzás karakterek konvertálása szóközre"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "%20 konvertálása szóközre"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metaadat</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Metaadat (tag információ) betöltése a zenefájlokból."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Metaadat betöltése lejátszólistákból és fájlokból"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Metaadat betöltése fájl lejátszólistához adásakor vagy megnyitáskor"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Betöltéskor"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+"Igény szerint betölti a metaadatot, amikor megjelenÃti a fájlt a "
+"lejátszólistában"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "MegjelenÃtéskor"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Lejátszás</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Egy dal lejátszásának befejezése után automatikusan ne lépjen a következÅre."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ne legyen léptetés a lejátszólistában"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Szünet a számok között"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Szünet"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "másodperc"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Dal megjelenÃtése</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Egyéni karakterlánc:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"CÃM\n"
+"ELÅADÃ - CÃM\n"
+"ELÅADÃ - ALBUM - CÃM\n"
+"ALBUM - CÃM\n"
+"Egyéni"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Információ megjelenÃtése a cÃm-karakterlánc formátumáról"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Equalizer</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>BeállÃtások</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Könyvtár-beállÃtás fájlja:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "FájlbeállÃtás kiterjesztése:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ElérhetÅ _beállÃtások:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Párbeszédablak bezárása hozzáadás után"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Mindent kijelöl"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Kijelölés megszüntetése"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/insert-header.sin
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/insert-header.sin 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/insert-header.sin 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/it.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3444 @@
+# Italian translation of bmp.
+# Copyright (C) 2004 Alessio D'Ascanio <g3ntaro at gmail.com>
+# This file is distributed under the same license as the bmp package.
+# Alessio D'Ascanio <g3ntaro at gmail.com>, 2004.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-06-12 14:47+0100\n"
+"Last-Translator: Alessio D'Ascanio <g3ntaro at gmail.com>\n"
+"Language-Team: Italian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Italian\n"
+"X-Poedit-Country: ITALY\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD Audio Plugin"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Traccia audio %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(sconosciuto)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Drive %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Impossibile aprire %s\n"
+"Errore: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Impossibile leggere la TOC (Table of Contents)\n"
+"Disco probabilmente non inserito\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Device %s OK.\n"
+"Il disco ha %d tracce"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d tracce dati)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Lunghezza totale: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr "Estrazione digitale non testata poiché il disco non ha tracce audio\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Estrazione digitale: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Estrazione digitale fallita: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Impossibile accedere alla directory %s\n"
+"Errore: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Errore: %s esiste, ma non è una directory"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Directory %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Device:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Device:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Dir_ectory:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Modalità di riproduzione:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analogica"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Estrazione digitale dell'audio"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Controllo del volume:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Nessun mixer"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM drive"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS mixer"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Controllo il drive..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Rimuovi drive"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Configurazione Lettore CD"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Aggiungi drive"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Device"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Usa CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Scarica la lista dei server"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Dettagli di connessione"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Server CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Usa CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Server CD Index:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Nomi tracce:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Ignora la formattazione generica"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Formato nome:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Informazioni CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Seleziona la directory dove vuoi salvare lo stream MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Configurazione Plugin MPEG Audio"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Risoluzione:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Canali:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (se posibile)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Down sample:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Decoder:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Riconoscimento automatico"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Decoder ottimizzato 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Decoder ottimizzato MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "Decoder FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Opzioni"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Contenuto"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Estensione"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Estensione e contenuto"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Decoder"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Buffer:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Dimensione buffer (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Pre-buffer (%):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Usa proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Host:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Porta:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Usa autenticazione"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Username:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Password:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Salva lo stream sul disco:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Salva lo stream sul disco"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Percorso:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Sfoglia"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Abilita il canale UDP di Icecast"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Streaming"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Tag ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "DIsabilita i tag ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Converti tutti i tag ID3 come UTF-8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "Codifica ID3:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Formato ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titolo"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Impossibile scrivere sul file: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Impossibile scrivere il tag!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Impossibile aprire il file: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Informazioni File"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Impossibile troncare il file: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Impossibile rimuovere il tag!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Nessun tag da rimuovere!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Joint stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Dual channel"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Canale singolo"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Nessuna"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "No"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Si"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nome:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG Info "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "Tipo MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bit rate:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Sample rate:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Frame:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Dimensione file:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Errore di protezione:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Originale:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Enfasi:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 Tag "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titolo:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artista:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Commento:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Anno:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Traccia:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Genere:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Copia tag dell'album"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Incolla tag dell'album"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Variabile,\n"
+"avg. bitrate: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Errore"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "RICERCA %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Impossibile trovare l'host %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "CONNESSIONE A %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Impossibile connettersi all'host %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "CONNESSO: IN ATTESA DI RISPOSTA"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Impossibile connettersi all'host %s\n"
+"Risposta del server: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "PRE-BUFFERING: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Classic Rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Altro"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Colonna Sonora"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Classical"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumental"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumental Pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumental Rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Etnica"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electronic"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtic"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Speech"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber Music"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphony"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Christian Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Informazioni sul Plugin MPEG Audio"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 decoder di Michael Hipp <mh at mpg123.de>\n"
+"Plugin di \"The XMMS team\""
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG Audio Plugin"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Selezionare la directory dove salvare lo stream Ogg·Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Configurazione Plugin Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Tag Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Formato titolo:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Impostazioni ReplayGain:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Abilitare la prevenzione dei Clip:"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Abilita ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Tipo ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "Usa Gain/Peak per le tracce"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "usa Gain/Peak per gli album"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Abilita 6dB Boots + Hard Limiting"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Si è verificato un errore:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Errore!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Modifica del tag fallita (apertura)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Modifica del tag fallita (chiusura)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Modifica del tag fallita"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Tag Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Data:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Descrizione:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Locazione:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versione:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Numero ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organizzazione:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr "ReplayGain di Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Guadagno traccia:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Picco traccia:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Guadagno album:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Picco Album"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Informazioni Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Lunghezza:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominale)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Plugin Audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Informazioni su Plugin Audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis Plugin di \"the Xiph.org Foundation\"\n"
+"\n"
+"Codice originale di\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"\n"
+"Hanno contribuito\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visita \"Xiph.org Foundation\" all'indirizzo http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Plugin Audio WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Informazioni sui driver OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Default (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Default"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Configurazione Driver OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Device audio:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Usa device alternativo:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Device mixer:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Devices"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Grandezza buffer (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Buffering"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Impostazioni Mixer:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Il volume controlla il Master e non il PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixer"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Informazioni sul plugin ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Configurazione Plugin ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Usa host remoto"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Il volume controlla il mixer OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Server"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Informazioni su ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Scheda audio sconosciuta"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Default PCM device (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Configurazione Driver ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mixer:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Usa controllo volume software"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixer card:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Impostazioni device"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Avanzate:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Grandezza del buffer (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Grandezza del periodo (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Grandezza del buffer (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap mode"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Impostazioni avanzate"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Rimuovi Decorazioni"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Chiudi"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Spettrogramma: Selezione colore"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Opzioni:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Artista"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Genere"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Nome file"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Percorso file"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Estensione file"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Nome traccia"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Traccia n°"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Data"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Anno"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Commento"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Mostra \"...\" solo se l'elemento %n è presente"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Riproduttore multimediale basato su XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Sviluppatori:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Con l'aiuto di:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Homepage e Grafica:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Portoghese (Brasile):"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Bretone:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Cinese:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Ceco:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Olandese:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Spagnolo:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francese:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Tedesco:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Tedesco:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Greco:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Ungherese:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Italiano:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Giapponese:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Coreano:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lituano:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Macedone:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polacco:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Rumeno:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Russo:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Slovacco:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Spagnolo:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Svedese:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Rumeno:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Gallese:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Informazioni su BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Credits"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Traduttori"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Carica"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Carica/Preset"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Carica/Preset automaticamente"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Carica/Default"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Carica/Zero"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Carica/Da file"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Carica/Da file WinAMP EQF"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importa"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importa/Presets WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Salva"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Salva/Preset"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Salva/Preset caricato automaticamente"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Salva/Default"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Salva/Su file"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Salva/Su file WinAMP·EQF"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Cancella"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Cancella/Preset"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Cancella/Preset caricato automaticamente"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "Equalizzatore BMP"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Preset"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "_Presets"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Carica preset"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Carica preset automatico"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Carica preset equalizzatore"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Salva preset"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Salva preset automatico"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Salva preset equalizzatore"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Cancellare preset"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Cancella preset automatico"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'opzione `%s' è ambigua\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione `--%s' non ammette un solo argomento\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione `%c%s' non ammette un solo argomento\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'opzione `%s' richiede un argomento\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opzione sconosciuta `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opzione sconosciuta `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opzione illegale -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opzione invalida -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'opzion richiede un argomento -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'opzione `-W %s' è ambigua\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: l'opzione `-W %s' non ammette argomenti\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Impossibile riprodurre il file.</big></b>\n"
+"\n"
+"I seguenti files non possono essere riprodotti. Controllare che:\n"
+"1. siano accessibili.\n"
+"2. sia abilitato il plugin richiesto."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Non mostrare più questo avvertimento"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Mostra piu _dettagli"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Nome del file"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Nome del file:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Nessun input plugin per questo file"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Input plugin: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Impossibile creare il file di log (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Impossibile creare la directory (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Us0: beep-media-player [optioni] [files] ...\n"
+"\n"
+"Optioni:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Mosta questo testo ed esci"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Seleziona sessione BMP/XMMS (Default: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Indietreggia nella playlist"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Riproduci la playlist corrente"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pausa"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Ferma la canzone"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Play/Pausa"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Avanza nella playlist"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Non cancellare la playlist"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Mostra la finestra principale"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID sessione precedente"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Mostra la versione e esci\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Ricevuto SIGSEGV\n"
+"\n"
+"Potrebbe essere un bug di BMP. se non sai cosa sia successo, scrivici una "
+"mail all'indirizzo beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Impossibile caricare la skin.</big></b>\n"
+"\n"
+"Controllare che la skin '%s' sia usabile e che la skin di default sia "
+"installata in '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"La tua versione di GTK+ (%d.%d.%d) non è compatibile con BMP.\n"
+"Usare GTK+ %s o maggiori.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"La tua piattaforma non supporta i threads.\n"
+"\n"
+"Se usi un sistema linux basato su libc5 e hai installato Glib & GTK+ prima "
+"di quando\n"
+"hai installato LinuxThreads devi ricompilareGlib & GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Impossibile avviareUnable to open display, exiting."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Mostra Dettagli Traccia"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Scorri automaticamente il titolo"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Modo Visualizzazione"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Modo Visualizzazione/Istogramma"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Modo Visualizzazione/Spettrogramma"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Modo Visualizzazione/Off"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Modo Istogramma"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Modo Istogramma/Normale"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Modo Istogramma/Fuoco"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Modo Istogramma/Linee Verticali"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Modo Istogramma/Linee"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Modo Istogramma/Barre"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Modo Istogramma/Mantieni Picchi"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Modo Spettrogramma"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Modo Spettrogramma/Spettrogramma a Punti"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Modo Spettrogramma/Spettrogramma a Linee"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Modo Spettrogramma/Spettrogramma Solido"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/WindowShade VU Mode"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/WindowShade VU Mode/Normal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/WindowShade VU Mode/Smooth"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Frequenza Aggiornamento"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Frequenza Aggiornamento/Piena (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Frequenza Aggiornamento/Dimezzata (~ 25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Frequenza Aggiornamento/Un Quarto (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Frequenza Aggiornamento/Un Ottavo (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Discesa Istogramma"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Discesa Istogramma/Molto lento"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Discesa Istogramma/Lento"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Discesa Istogramma/Medio"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Discesa Istogramma/Veloce"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Discesa Istogramma/Molto veloce"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Discesa Picchi"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Discesa Picchi/Molto lento"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Discesa Picchi/Lento"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Discesa Picchi/Medio"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Discesa Picchi/Veloce"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Discesa Picchi/Molto veloce"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Ripeti"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Shuffle"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Play"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pausa"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Stop"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Precedente"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Prossimo"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Salta all'inizio della playlist"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Salta al file"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Salta alla posizione"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Preferenze"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Opzioni di visualizzazione"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Informazioni su BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Quit"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Files..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Locazione Internet..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Mostra editor playlist"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Mostra Equalizzatore"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Tempo trascorso"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Tempo Rimanente"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Sempre in primo piano"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Mostra su Tutti i Desktop"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Arrotola Player"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Arrotola Editor della Playlist"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Arrotola Equalizzatore"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Salta alla posizione"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuti:secondi"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Lunghezza traccia:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Coda"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Coda"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Salta alla traccia"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtro:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Aggiungi Cartelle"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "/Aggiungi Indirizzo internet"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLUME: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANCE: %d%% SINISTRA"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANCE: CENTRO"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANCE: %d%% DESTRA"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "MENU OPZIONI"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "DISABILITA SEMPRE IN PRIMO PIANO (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ABILITA SEMPRE IN PRIMO PIANO (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "DISABILITA SEMPRE IN PRIMO PIANO"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ABILITA SEMPRE IN PRIMO PIANO"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "FILE INFO BOX"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** IL RADDOPPIAMENTO Ã STATO RIMOSSO **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "MENU VISUALIZZAZIONE"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Nessun cd riproducibile trovato.</big></b>\n"
+"\n"
+"Nessun CD inserito, oppure non è un CD audio.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Impossibile avviare l'audio.</big></b>\n"
+"\n"
+"Controllare che:\n"
+"1. Ã stato selezionato il giusto output plugin.\n"
+"2. Altri progrmmi non stiano bloccando la scheda audio.\n"
+"3. La scheda audio sia configurata.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Rimuovi Selezionati"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Rimuovi non Selezionati"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Rimuovi Tutti"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Togli coda"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/Aggiungi CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Aggiungi Indirizzo internet..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Aggiungi Files..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Aggiungi Files..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Cancella coda"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Rimuovi file non accessibili"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nuova lista"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Carica Lista"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Salva lista"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Aggiorna Vista"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Inverti Selezione"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Deseleziona Tutti"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Seleziona Tutti"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Randomizza Lista"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Inverti ordine lista"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Ordina Lista"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Ordina Lista/Per Titolo"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Ordina Lista/Per Nome del File"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Ordina Lista/Per Percorso + Nome del File"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Ordina Lista/Per Data"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Ordina Selezione"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Ordina Selezione/Per Titolo"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Ordina Selezione/Per Nome del File"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Ordina Selezione/Per Percorso + Nome del File"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Ordina Selezione/Per Data"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Errore nello scrivere la playlist \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s esiste già . Continuare?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Impossibile salvare la playlist! Tipo di file sconosciuto per %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Carica playlist"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Salva playlist"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Editor della Playlist di BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Aspetto"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Equalizzatore"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Mouse"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Playlist"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Plugins"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Artista"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Traccia n°"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Percorso file"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "S/N"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Descrizione"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Categoria"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Preferenze"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Aggiungi/Apri Files"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Apri Files"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Chiudi finestra quando Apri"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Aggiungi Files"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Chiudi finestra quando Aggiungi"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (UTF-8 invalido)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Preferenze di BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Plugins</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "Lista plugin _Multimediali"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Media</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "Lista plugin generici"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Generale</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "Lista plugin _Visualizzazione"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualizzazione</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "Lista plugin _Effetti"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Effetti</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Plugin di Output Attuale"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Il cambiamento è ora salvato nel database di BMP, ma non avrà effetto finche "
+"non sarà riprodotta la prossima canzone!!\n"
+"\n"
+"Puoi anche riavviare la riproduzione per far si che i cambiamenti abbiano "
+"effetto."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Output</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Aspetto</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Font</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Player:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Playlist:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Seleziona font per la finestra principale"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Seleziona font per la playlist"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Varie</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Mostra numero traccia nella playlist"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Usa cursore personalizzato"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Mouse</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Rotellina del mouse</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Varia il volume dell'"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "percento"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Scorre la playlist di"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "linee"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Playlist</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Nome del file</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Converti underscores in spazi"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Converti %20 in spazi"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadata</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Carica metadata (ID3) dai file musicali"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Carica metadata dalla playlist e dai file"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"Carica metadata quando vengono aggiunti file alla playlist o vengono aperti"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Durante il caricamento"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+"Carica i metadata su richiesta quando vengono visualizzati i file sulla "
+"playlist"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Durante la visualizzazione"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Playback</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Una volta terminata la riproduzione della canzone non avanzare alla prossima."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Non avanzare nella playlist"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pausa tra le canzoni"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pausa per"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "secondi"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Song display</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Stringa personalizzata:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TITOLO\n"
+"ARTISTA - TITOLO\n"
+"ARTISTA - ALBUM - TITOLO\n"
+"ALBUM - TITOLO\n"
+"Personalizzato"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Mostra informazioni sulla stringa del titolo"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Equalizzatore</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Presets</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Directory per i file preset:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Estensione dei file preset:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "_Preset Disponibili:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Chiudi Finestra quando Aggiungi"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Seleziona Tutti"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Deseleziona tutti"
+
+#~ msgid "Default skin:"
+#~ msgstr "Skin predefinita:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Impossibile inizializzare gnome-vfs.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Nessun Avanzamento in Playlist"
+
+#~ msgid "/By extension"
+#~ msgstr "/Per estensione"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ja.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3436 @@
+# bmp ja.po.
+# Copyright (C) 2000-2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bmp package.
+# Hiroshi Takekawa <sian at big.or.jp>, 2000-2003. (XMMS)
+# -----------------------------------------------------
+# Takeshi AIHANA <aihana at gnome.gr.jp>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-06 23:45+0900\n"
+"Last-Translator: Takeshi AIHANA <aihana at gnome.gr.jp>\n"
+"Language-Team: Japanese <gnome-translation at gnome.gr.jp>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD ¥ª¡¼¥Ç¥£¥ª¡¦¥È¥é¥Ã¥¯ %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(ÉÔÌÀ)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "¥É¥é¥¤¥Ö %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"¥Ç¥Ð¥¤¥¹ %s ¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n"
+"[ERROR] %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"\"Ìܼ¡\" ¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n"
+"¥É¥é¥¤¥Ö¤Ë¥Ç¥£¥¹¥¯¤¬Æþ¤Ã¤Æ¤¤¤Ê¤¤¤«¤â¡©\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"¥Ç¥Ð¥¤¥¹ %s ¤Ï OK ¤Ç¤¹¡£\n"
+"¥Ç¥£¥¹¥¯¤Ë¤Ï %d ¸Ä¤Î¥È¥é¥Ã¥¯¤¬¤¢¤ê¤Þ¤¹¡£"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d ¸Ä¤Î¥Ç¡¼¥¿¡¦¥È¥é¥Ã¥¯)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"±éÁÕ»þ´Ö¤Î¹ç·×: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"¥Ç¥£¥¹¥¯¤Ë¥ª¡¼¥Ç¥£¥ª¡¦¥È¥é¥Ã¥¯¤¬Ìµ¤¤¤Î¤Ç¡¢¥Ç¥£¥¸¥¿¥ë¡¦¥ª¡¼¥Ç¥£¥ªÃê½Ð¤Î¥Æ¥¹¥È"
+"¤Ï¹Ô¤¤¤Þ¤»¤ó¡£\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr "¥Ç¥£¥¸¥¿¥ë¡¦¥ª¡¼¥Ç¥£¥ªÃê½Ð¤Î¥Æ¥¹¥È: OK\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr "¥Ç¥£¥¸¥¿¥ë¡¦¥ª¡¼¥Ç¥£¥ªÃê½Ð¤Î¥Æ¥¹¥È: ¼ºÇÔ (%s)\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"¥Õ¥©¥ë¥À %s ¤Î¥Á¥§¥Ã¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n"
+"[ERROR] %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "[ERROR] %s ¤Ï¸ºß¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¥Õ¥©¥ë¥À¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "¥Õ¥©¥ë¥À %s: OK"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "¥Ç¥Ð¥¤¥¹:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "¥Ç¥Ð¥¤¥¹(_D):"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "¥Õ¥©¥ë¥À(_E):"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "±éÁե⡼¥É:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "¥¢¥Ê¥í¥°"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "¥Ç¥£¥¸¥¿¥ë¡¦¥ª¡¼¥Ç¥£¥ªÃê½Ð"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "²»ÎÌ¥³¥ó¥È¥í¡¼¥ë:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "¥ß¥¥µ¤Ê¤·"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CD-ROM ¥É¥é¥¤¥Ö"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS ¥ß¥¥µ"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "¥É¥é¥¤¥Ö¤Î¥Á¥§¥Ã¥¯..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "¥É¥é¥¤¥Ö¤Îºï½ü"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥ì¥¤¥ä¤ÎÀßÄê"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "¥É¥é¥¤¥Ö¤ÎÄɲÃ"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "¥Ç¥Ð¥¤¥¹"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "CDDB ¤òÍøÍѤ¹¤ë"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "¥µ¡¼¥Ð¡¦¥ê¥¹¥È¤Î¼èÆÀ"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¡¦¥¦¥£¥ó¥É¥¦¤Îɽ¼¨"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB ¥µ¡¼¥Ð:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD ¥¤¥ó¥Ç¥Ã¥¯¥¹:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "CD ¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÍøÍѤ¹¤ë"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD ¥¤¥ó¥Ç¥Ã¥¯¥¹¡¦¥µ¡¼¥Ð:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "¥È¥é¥Ã¥¯Ì¾:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "¥ª¥ê¥¸¥Ê¥ë¤Î¥¿¥¤¥È¥ë¤ò¾å½ñ¤¤¹¤ë"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "̾Á°¤Î½ñ¼°:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD ¤Î¾ðÊó"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "MPEG ¥¹¥È¥ê¡¼¥à¤ò³ÊǼ¤¹¤ë¥Õ¥©¥ë¥À¤òÁªÂò¤·¤Æ²¼¤µ¤¤:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó¤ÎÀßÄê"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "²òÁüÅÙ:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16¥Ó¥Ã¥È"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr " 8¥Ó¥Ã¥È"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "¥Á¥ã¥ó¥Í¥ë¿ô:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "¥¹¥Æ¥ì¥ª (²Äǽ¤Ê¤é¤Ð)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "¥â¥Î¥é¥ë"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "¥À¥¦¥ó¡¦¥µ¥ó¥×¥ë:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "¥Ç¥³¡¼¥À:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "¼«Æ°¸¡½Ð"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! ºÇŬ²½¥Ç¥³¡¼¥À"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX ºÇŬ²½¥Ç¥³¡¼¥À"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU ¥Ç¥³¡¼¥À"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "¥ª¥×¥·¥ç¥ó"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ÆâÍÆ"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "³ÈÄ¥»Ò"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "ÆâÍƤȳÈÄ¥»Ò"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "¥Ç¥³¡¼¥À"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "¥Ð¥Ã¥Õ¥¡¤Î¥µ¥¤¥º (K¥Ð¥¤¥È):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "»öÁ°¤Ë¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤¹¤ë³ä¹ç (¡ó):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "¥×¥í¥¥·:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "¥×¥í¥¥·¤ò»È¤¦"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "¥Û¥¹¥È̾:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "¥Ý¡¼¥ÈÈÖ¹æ:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "ǧ¾Ú¤ò¹Ô¤¦"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "¥æ¡¼¥¶Ì¾:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "¥Ñ¥¹¥ï¡¼¥É:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "¥¹¥È¥ê¡¼¥à¤ÎÊݸ:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "¥¹¥È¥ê¡¼¥à¤ò¥Ç¥£¥¹¥¯¤ËÊݸ¤¹¤ë"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "¥Ñ¥¹Ì¾:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "»²¾È"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Icecast ¥á¥¿¥Ç¡¼¥¿ UDP ¥Á¥ã¥ó¥Í¥ë¤ò͸ú¤Ë¤¹¤ë"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "¥¹¥È¥ê¡¼¥ß¥ó¥°"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 ¥¿¥°:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ID3V2 ¤Î¥¿¥°¤ò̵¸ú¤Ë¤¹¤ë"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "UTF-8 ¤Ç¤Ï¤Ê¤¤¥¿¥°¤ò UTF-8 ¤ËÊÑ´¹¤¹¤ë"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 ¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 ¤Î½ñ¼°:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "¥¿¥¤¥È¥ë"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤á¤Þ¤»¤ó: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "¥¿¥°¤ò½ñ¤¹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿¡ª"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "¥Õ¥¡¥¤¥ë¾ðÊó"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "OK"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"¥Õ¥¡¥¤¥ë¤òÀÚ¤ê¤Ä¤á¤é¤ì¤Þ¤»¤ó: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "¥¿¥°¤òºï½ü¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡ª"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "ºï½ü¤¹¤ë¥¿¥°¤¬¤¢¤ê¤Þ¤»¤ó¡ª"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "¥¹¥Æ¥ì¥ª"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "¥¸¥ç¥¤¥ó¥È¡¦¥¹¥Æ¥ì¥ª"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "¥Ç¥å¥¢¥ë¡¦¥Á¥ã¥ó¥Í¥ë"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "¥·¥ó¥°¥ë¡¦¥Á¥ã¥ó¥Í¥ë"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d K¥Ó¥Ã¥È/ÉÃ"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "¤Ê¤·"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "¤¤¤¤¤¨"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "¤Ï¤¤"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "̾Á°:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG ¾ðÊó "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG ¥ì¥Ù¥ë:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "¥Ó¥Ã¥È¡¦¥ì¡¼¥È:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "¥µ¥ó¥×¥ê¥ó¥°¡¦¥ì¡¼¥È:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "¥Õ¥ì¡¼¥à¿ô:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "¥Õ¥¡¥¤¥ë¡¦¥µ¥¤¥º:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "¥¨¥é¡¼Êݸî:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Ãøºî¸¢:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "¥ª¥ê¥¸¥Ê¥ë:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "¶¯Ä´:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 ¥¿¥° "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "¥¿¥¤¥È¥ë:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "¥¢¡¼¥Æ¥£¥¹¥È:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "¥¢¥ë¥Ð¥à̾:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "¥³¥á¥ó¥È:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "À©ºîǯ:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "¥È¥é¥Ã¥¯ÈÖ¹æ:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "¥¸¥ã¥ó¥ë:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "¥¢¥ë¥Ð¥à¤Î¥¿¥°¤ò¥³¥Ô¡¼¤¹¤ë"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "¥¢¥ë¥Ð¥à¤Î¥¿¥°¤òŽ¤êÉÕ¤±¤ë"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"²ÄÊÑ¡¢\n"
+"Ê¿¶Ñ¥Ó¥Ã¥È¥ì¡¼¥È: %d K¥Ó¥Ã¥È/ÉÃ"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu ¥Ð¥¤¥È"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "¥¨¥é¡¼"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "%s ¤Î¸¡º÷Ãæ"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "¥Û¥¹¥È %s ¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "%s:%d ¤ØÀܳÃæ"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "¥Û¥¹¥È %s ¤ØÀܳ¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "Àܳ´°Î»: ±þÅú¤òÂԤäƤ¤¤Þ¤¹"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"¥Û¥¹¥È %s ¤ØÀܳ¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£\n"
+"¥µ¡¼¥Ð¤«¤é¤ÎÊó¹ð: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "¥×¥ì¡¦¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°Ãæ: %d/%d K¥Ð¥¤¥È"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "¥Ö¥ë¡¼¥¹"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "¥¯¥é¥·¥Ã¥¯¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "¥«¥ó¥È¥ê¡¼"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "¥À¥ó¥¹"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "¥Ç¥£¥¹¥³"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "¥Õ¥¡¥ó¥¡¼"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "¥°¥é¥ó¥¸"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "¥Ò¥Ã¥×¡¦¥Û¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "¥¸¥ã¥º"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "¥á¥¿¥ë"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "¥Ë¥å¡¼¥¨¥¤¥¸"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "¥ª¡¼¥ë¥Ç¥£¡¼¥º"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "¤½¤Î¾"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "¥Ý¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "£Ò¡õ£Â"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "¥é¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "¥ì¥²¥§"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "¥Æ¥¯¥Î"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "¥¤¥ó¥À¥¹¥È¥ê¥¢¥ë"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Deth ¥á¥¿¥ë"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "¥µ¥¦¥ó¥É¥È¥é¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "¥æ¡¼¥í¡¦¥Æ¥¯¥Î"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "¥¢¥ó¥Ó¥¨¥ó¥È"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "¥È¥ê¥Ã¥×¡¦¥Û¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "¥ô¥©¡¼¥«¥ë"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "¥¸¥ã¥º+¥Õ¥¡¥ó¥¯"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "¥Õ¥å¡¼¥¸¥ç¥ó"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "¥È¥é¥ó¥¹"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "¥¯¥é¥·¥«¥ë"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "¥¤¥ó¥¹¥Ä¥ë¥á¥ó¥È"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "¥Ï¥¦¥¹"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "¥²¡¼¥à"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "¥µ¥¦¥ó¥É¡¦¥¯¥ê¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "¥´¥¹¥Ú¥ë"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "¥½¥¦¥ë"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "¥Ñ¥ó¥¯"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "¥¤¥ó¥¹¥Ä¥ë¥á¥ó¥È¡¦¥Ý¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "¥¤¥ó¥¹¥Ä¥ë¥á¥ó¥È¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "¥¨¥¹¥Ë¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "¥´¥·¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "¥Æ¥¯¥Î¡¦¥¤¥ó¥¹¥Ä¥ë¥á¥ó¥È"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "¥¨¥ì¥¯¥È¥í¥Ë¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "¥Ý¥Ã¥×¡¦¥Õ¥©¡¼¥¯"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "¥æ¡¼¥í¥À¥ó¥¹"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "¥µ¥¶¥ó¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "¥³¥á¥Ç¥£"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "¥«¥ë¥È"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "¥È¥Ã¥× 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "¥¯¥ê¥¹¥Á¥ã¥ó¡¦¥é¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "¥Ý¥Ã¥×/¥Õ¥¡¥ó¥¡¼"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "¥¸¥ã¥ó¥°¥ë"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "¥Í¥£¥Æ¥¤¥Ö¡¦¥¢¥á¥ê¥«¥ó"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "¥Ë¥å¡¼¥¦¥§¡¼¥Ö"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "¥µ¥¤¥±¥Ç¥ê¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "¥ì¥¤¥Ö"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "¥È¥ì¥¤¥é¡¼"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "¥Ý¥ë¥«"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "¥ì¥È¥í"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "¥ß¥å¡¼¥¸¥«¥ë"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "¥í¥Ã¥¯¥ó¥í¡¼¥ë"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "¥Ï¡¼¥É¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "¥Õ¥©¡¼¥¯"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "¥Õ¥©¡¼¥¯/¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "¥Ê¥·¥ç¥Ê¥ë¡¦¥Õ¥©¡¼¥¯"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "¥é¥Æ¥ó"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "¥ê¥Ð¥¤¥Ð¥ë"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "¥»¥ë¥Æ¥£¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "¥Ö¥ë¡¼¥°¥é¥¹"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "¥¢¥Ð¥ó¥®¥ã¥ë¥É"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "¥´¥·¥Ã¥¯¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive ¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "¥µ¥¤¥±¥Ç¥ê¥Ã¥¯¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic ¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "¥¹¥í¡¼¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "¥Ó¥Ã¥°¡¦¥Ð¥ó¥É"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "¥³¡¼¥é¥¹"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "¥¢¥³¡¼¥¹¥Æ¥£¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "¥æ¡¼¥â¥¢"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "¥¹¥Ô¡¼¥Á"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "¥·¥ã¥ó¥½¥ó"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "¥ª¥Ú¥é"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber ¥ß¥å¡¼¥¸¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "¥½¥Ê¥¿"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "¥·¥ó¥Õ¥©¥Ë¡¼"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "¥×¥ê¥Þ¥¹"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "É÷»É"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "¥¹¥í¡¼¥¸¥ã¥à"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "¥¯¥é¥Ö"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "¥¿¥ó¥´"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "¥µ¥ó¥Ð"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "¥Õ¥©¡¼¥¯¥í¥¢"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "¥Ð¥é¡¼¥É"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "¥Ñ¥ï¡¼¡¦¥Ð¥é¡¼¥É"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "¥ê¥º¥ß¥Ã¥¯¡¦¥½¥¦¥ë"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "¥Õ¥ê¡¼¥¹¥¿¥¤¥ë"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "¥Ç¥å¥¨¥Ã¥È"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "¥Ñ¥ó¥¯¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "¥É¥é¥à¥½¥í"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "¥¢¡¦¥«¥Ú¥é"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "¥æ¡¼¥í¥Ï¥¦¥¹"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "¥À¥ó¥¹¡¦¥Û¡¼¥ë"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "¥´¥¢"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "¥É¥é¥à¡õ¥Ð¥¹"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "¥¯¥é¥Ö¥Ï¥¦¥¹"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "¥Ï¡¼¥É¥³¥¢"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "¥Æ¥é¡¼"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "¥¤¥ó¥Ç¥£¡¼¥º"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "¥Ó¡¼¥È"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "¥¯¥ê¥¹¥Á¥ã¥ó¡¦¥¬¥ó¥°¥¹¥¿¡¦¥é¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "¥Ø¥ô¥£¡¼¥á¥¿¥ë"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "¥Ö¥é¥Ã¥¯¥á¥¿¥ë"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "¥¯¥í¥¹¥ª¡¼¥Ð¡¼"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "¥³¥ó¥Æ¥ó¥Ý¥é¥ê¡¦¥¯¥ê¥¹¥Á¥ã¥ó"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "¥¯¥ê¥¹¥Á¥ã¥ó¡¦¥í¥Ã¥¯"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "¥á¥ì¥ó¥²"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "¥µ¥ë¥µ"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "¥È¥é¥Ã¥·¥å¥á¥¿¥ë"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "¥¢¥Ë¥á"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "J¥Ý¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "¥·¥ó¥»¥Ý¥Ã¥×"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "MPEG ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó¤Ë¤Ä¤¤¤Æ"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 ¤Ç¥³¡¼¥Ç¥£¥ó¥°¡¦¥¨¥ó¥¸¥ó: Michael Hipp <mh at mpg123.de>\n"
+"¥×¥é¥°¥¤¥ó¤ÎÄó¶¡¤Ï XMMS ¥Á¡¼¥à"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Ogg Vorbis ¥¹¥È¥ê¡¼¥à¤ò³ÊǼ¤¹¤ë¥Õ¥©¥ë¥À¤ÎÁªÂò:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó¤ÎÀßÄê"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis ¥¿¥°:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "¥¿¥¤¥È¥ë¤Î½ñ¼°:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "¥ê¥×¥ì¥¤¥²¥¤¥ó¤ÎÀßÄê:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "¥¯¥ê¥Ã¥Ô¥ó¥°²óÈòµ¡Ç½¤ò͸ú¤Ë¤¹¤ë"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "¥ê¥×¥ì¥¤¥²¥¤¥ó¤ò͸ú¤Ë¤¹¤ë"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "¥ê¥×¥ì¥¤¥²¥¤¥ó¤Î¼ïÎà:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "¥È¥é¥Ã¥¯¤Î¥²¥¤¥ó/¥Ô¡¼¥¯¤ò»ÈÍѤ¹¤ë"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "¥¢¥ë¥Ð¥à¤Î¥²¥¤¥ó/¥Ô¡¼¥¯¤ò»ÈÍѤ¹¤ë"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "6dB ¥Ö¡¼¥¹¥È + ¥Ï¡¼¥É¡¦¥ê¥ß¥Ã¥È¤ò͸ú¤Ë¤¹¤ë"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "¥ê¥×¥ì¥¤¥²¥¤¥ó"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"¥¨¥é¡¼È¯À¸:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "¥¨¥é¡¼¡ª"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "¥¿¥°¤Î½¤Àµ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ (open)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "¥¿¥°¤Î½¤Àµ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ (close)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "¥¿¥°¤Î½¤Àµ¤Ë¼ºÇÔ"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis ¥¿¥° "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ÆüÉÕ:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "¾ÜºÙ:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "¾ì½ê:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "¥Ð¡¼¥¸¥ç¥ó:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC ÈÖ¹æ:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ÁÈ¿¥:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ¥ê¥×¥ì¥¤¥²¥¤¥ó "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "¥È¥é¥Ã¥¯¤Î¥²¥¤¥ó:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "¥È¥é¥Ã¥¯¤Î¥Ô¡¼¥¯:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "¥¢¥ë¥Ð¥à¤Î¥²¥¤¥ó:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "¥¢¥ë¥Ð¥à¤Î¥Ô¡¼¥¯:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis ¾ðÊó "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "±éÁÕ»þ´Ö:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d K¥Ó¥Ã¥È/Éà (¥Î¡¼¥Þ¥ë)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d ¥Ð¥¤¥È"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó¤Ë¤Ä¤¤¤Æ"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis ¥×¥é¥°¥¤¥ó¤ÎÄó¶¡: Xiph.org Foundation\n"
+"\n"
+"¥ª¥ê¥¸¥Ê¥ë¤Î¥³¡¼¥É:\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Xiph.org Foundation <http://www.xiph.org/> ¤â¤´Í÷²¼¤µ¤¤¡£\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV ¥ª¡¼¥Ç¥£¥ª¡¦¥×¥é¥°¥¤¥ó"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS ½ÐÎϥץ饰¥¤¥ó"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "OSS ¥É¥é¥¤¥Ð¤Ë¤Ä¤¤¤Æ"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS ¥É¥é¥¤¥Ð\n"
+"\n"
+"¤³¤Î¥×¥í¥°¥é¥à¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹;\n"
+"¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢ºâÃĤ¬Ä󶡤¹¤ë GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ\n"
+"¤ÎÂèÆóÈÇ¡¢¤¢¤ë¤¤¤Ï¤½¤ì°Ê¹ß¤ÎÈǤ¬Äê¤á¤ë¾ò¹à¤Î²¼¤Ç\n"
+"ËÜ¥×¥í¥°¥é¥à¤òºÆÈÒÉÛ¤Þ¤¿¤ÏÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£\n"
+"\n"
+"ËÜ¥×¥í¥°¥é¥à¤ÏÍÍѤȤϻפ¤¤Þ¤¹¤¬¡¢\n"
+"ÈÒÉۤˤ¢¤¿¤Ã¤Æ¤Ï¡¢»Ô¾ìÀµÚ¤ÓÆÃÄêÌÜŪ¡¢Å¬¹çÀ¤Ë¤Ä¤¤¤Æ¤Î\n"
+"°ÅÌÛ¤ÎÊݾڤò´Þ¤á¤Æ¡¢¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤Ê¤¤¤Þ¤»¤ó¡£\n"
+"¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ¤ò¤´Í÷²¼¤µ¤¤¡£\n"
+"\n"
+"¤¢¤Ê¤¿¤Ï¡¢ËÜ¥×¥í¥°¥é¥à¤È°ì½ï¤Ë\n"
+"GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ¤Î¼Ì¤·¤ò¼õ¤±¼è¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£\n"
+"¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Free Software Foundation, Inc., 59\n"
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA ¤Ø\n"
+"¼ê»æ¤ò½ñ¤¤¤Æ²¼¤µ¤¤¡£"
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "¥Ç¥Õ¥©¥ë¥È (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "¥Ç¥Õ¥©¥ë¥È"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS ¥É¥é¥¤¥Ð¤ÎÀßÄê"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "¥ª¡¼¥Ç¥£¥ª¡¦¥Ç¥Ð¥¤¥¹:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "ÂåÂؤ¨¤Î¥Ç¥Ð¥¤¥¹¤ò»ÈÍѤ¹¤ë:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "¥ß¥¥µ¡¦¥Ç¥Ð¥¤¥¹:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "¥Ç¥Ð¥¤¥¹"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "¥Ð¥Ã¥Õ¥¡¤Î¥µ¥¤¥º (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "¥ß¥¥µ¤ÎÀßÄê:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "²»Î̤ÎÄ´À°¤Ï PCM ¤Ç¤Ï¤Ê¤¯¥Þ¥¹¥¿¤ò»ÈÍѤ¹¤ë"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "¥ß¥¥µ"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "ESounD ¥×¥é¥°¥¤¥ó¤Ë¤Ä¤¤¤Æ"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD ¥×¥é¥°¥¤¥ó\n"
+"\n"
+"¤³¤Î¥×¥í¥°¥é¥à¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹;\n"
+"¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢ºâÃĤ¬Ä󶡤¹¤ë GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ\n"
+"¤ÎÂèÆóÈÇ¡¢¤¢¤ë¤¤¤Ï¤½¤ì°Ê¹ß¤ÎÈǤ¬Äê¤á¤ë¾ò¹à¤Î²¼¤Ç\n"
+"ËÜ¥×¥í¥°¥é¥à¤òºÆÈÒÉÛ¤Þ¤¿¤ÏÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£\n"
+"\n"
+"ËÜ¥×¥í¥°¥é¥à¤ÏÍÍѤȤϻפ¤¤Þ¤¹¤¬¡¢\n"
+"ÈÒÉۤˤ¢¤¿¤Ã¤Æ¤Ï¡¢»Ô¾ìÀµÚ¤ÓÆÃÄêÌÜŪ¡¢Å¬¹çÀ¤Ë¤Ä¤¤¤Æ¤Î\n"
+"°ÅÌÛ¤ÎÊݾڤò´Þ¤á¤Æ¡¢¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤Ê¤¤¤Þ¤»¤ó¡£\n"
+"¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ¤ò¤´Í÷²¼¤µ¤¤¡£\n"
+"\n"
+"¤¢¤Ê¤¿¤Ï¡¢ËÜ¥×¥í¥°¥é¥à¤È°ì½ï¤Ë\n"
+"GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ¤Î¼Ì¤·¤ò¼õ¤±¼è¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£\n"
+"¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Free Software Foundation, Inc., 59\n"
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA ¤Ø\n"
+"¼ê»æ¤ò½ñ¤¤¤Æ²¼¤µ¤¤¡£"
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD ½ÐÎϥץ饰¥¤¥ó¤ÎÀßÄê"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "¥ê¥â¡¼¥È¡¦¥Û¥¹¥È¤òÍøÍѤ¹¤ë"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "²»Î̤ÎÄ´À°¤Ï OSS ¥ß¥¥µ¤ò»ÈÍѤ¹¤ë"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "¥µ¡¼¥Ð"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound ½ÐÎϥץ饰¥¤¥ó"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "ALSA ¥É¥é¥¤¥Ð¤Ë¤Ä¤¤¤Æ"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA ¥É¥é¥¤¥Ð\n"
+"\n"
+"¤³¤Î¥×¥í¥°¥é¥à¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹;\n"
+"¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢ºâÃĤ¬Ä󶡤¹¤ë GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ\n"
+"¤ÎÂèÆóÈÇ¡¢¤¢¤ë¤¤¤Ï¤½¤ì°Ê¹ß¤ÎÈǤ¬Äê¤á¤ë¾ò¹à¤Î²¼¤Ç\n"
+"ËÜ¥×¥í¥°¥é¥à¤òºÆÈÒÉÛ¤Þ¤¿¤ÏÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£\n"
+"\n"
+"ËÜ¥×¥í¥°¥é¥à¤ÏÍÍѤȤϻפ¤¤Þ¤¹¤¬¡¢\n"
+"ÈÒÉۤˤ¢¤¿¤Ã¤Æ¤Ï¡¢»Ô¾ìÀµÚ¤ÓÆÃÄêÌÜŪ¡¢Å¬¹çÀ¤Ë¤Ä¤¤¤Æ¤Î\n"
+"°ÅÌÛ¤ÎÊݾڤò´Þ¤á¤Æ¡¢¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤Ê¤¤¤Þ¤»¤ó¡£\n"
+"¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ¤ò¤´Í÷²¼¤µ¤¤¡£\n"
+"\n"
+"¤¢¤Ê¤¿¤Ï¡¢ËÜ¥×¥í¥°¥é¥à¤È°ì½ï¤Ë\n"
+"GNU °ìÈ̸øÍ»ÈÍѵöÂú·ÀÌó½ñ¤Î¼Ì¤·¤ò¼õ¤±¼è¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£\n"
+"¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Free Software Foundation, Inc., 59\n"
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA ¤Ø\n"
+"¼ê»æ¤ò½ñ¤¤¤Æ²¼¤µ¤¤¡£\n"
+"ºî¼Ô: Matthieu Sozeau <mattam at altern.org>"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s ½ÐÎϥץ饰¥¤¥ó"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "¥µ¥¦¥ó¥É¥«¡¼¥É¤¬ÉÔÌÀ¤Ç¤¹"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "¥Ç¥Õ¥©¥ë¥È¤Î PCM ¥Ç¥Ð¥¤¥¹ (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA ¥É¥é¥¤¥Ð¤ÎÀßÄê"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "¥ß¥¥µ:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "¥½¥Õ¥È¥¦¥§¥¢²»ÎÌ¥³¥ó¥È¥í¡¼¥ë¤ò»ÈÍѤ¹¤ë"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "¥ß¥¥µ¤Î¥«¡¼¥É:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "¥Ç¥Ð¥¤¥¹¤ÎÀßÄê"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "³ÈÄ¥ÀßÄê:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "¥Ð¥Ã¥Õ¥¡»þ´Ö (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "¥Ô¥ê¥ª¥É»þ´Ö (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "¥Ð¥Ã¥Õ¥¡»þ´Ö (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap ¥â¡¼¥É¤Ç»ÈÍѤ¹¤ë"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "³ÈÄ¥ÀßÄê"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Áõ¾þ¤ÎÀÚ¤êÂؤ¨"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ÊĤ¸¤ë"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur ¥¹¥³¡¼¥×"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur ¥¹¥³¡¼¥×: ¿§¤ÎÁªÂò"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "¥ª¥×¥·¥ç¥ó:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "±éÁÕ¼Ô/¥¢¡¼¥Æ¥£¥¹¥È"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "¥¢¥ë¥Ð¥à̾"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "¥¸¥ã¥ó¥ë"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "¥Õ¥¡¥¤¥ë̾"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "¥Õ¥©¥ë¥À"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "³ÈÄ¥»Ò"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "¥È¥é¥Ã¥¯Ì¾"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "¥È¥é¥Ã¥¯ÈÖ¹æ"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ÆüÉÕ"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "À©ºîǯ"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "¥³¥á¥ó¥È"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: ¥È¥é¥Ã¥¯ÈÖ¹æ %n ¤¬Â¸ºß¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Î¤ß \"...\" ¤òɽ¼¨¤¹¤ë"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep ¥á¥Ç¥£¥¢¡¦¥×¥ì¥¤¥ä¡¼ %s</b></big>\n"
+"XMMS ¤ò¥Ù¡¼¥¹¤Ë¤·¤¿¥á¥Ç¥£¥¢¡¦¥×¥ì¥¤¥ä¡¼¤Ç¤¹¡£\n"
+"\n"
+"Copyright (C) 2003-2004 BMP ³«È¯¥Á¡¼¥à\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "³«È¯¼Ô:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "With Additional Help:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "¥Û¡¼¥à¥Ú¡¼¥¸¤È¥°¥é¥Õ¥£¥¯¥¹:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "¥Ö¥é¥¸¥ë¡¦¥Ý¥ë¥È¥¬¥ë¸ì:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "¥Ö¥ì¥È¥ó¸ì:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Ãæ¹ñ¸ì:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "¥Á¥§¥³¸ì:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "¥ª¥é¥ó¥À¸ì:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "¥¹¥Ú¥¤¥ó¸ì:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "¥Õ¥é¥ó¥¹¸ì:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "¥É¥¤¥Ä¸ì:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "¥É¥¤¥Ä¸ì:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "¥®¥ê¥·¥¢¸ì:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "¥Ï¥ó¥¬¥ê¡¼¸ì:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "¥¤¥¿¥ê¥¢¸ì:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "ÆüËܸì:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Áê²Ö µ£"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "´Ú¹ñ¸ì:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "¥ê¥È¥¢¥Ë¥¢¸ì:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "¥Þ¥±¥É¥Ë¥¢¸ì:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "¥Ý¡¼¥é¥ó¥É¸ì:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "¥ë¡¼¥Þ¥Ë¥¢¸ì:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "¥í¥·¥¢¸ì:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "¥¹¥í¥Ð¥¥¢¸ì:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "¥¹¥Ú¥¤¥ó¸ì:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "¥¹¥¦¥§¡¼¥Ç¥ó¸ì:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "¥ë¡¼¥Þ¥Ë¥¢¸ì:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "¥¦¥§¡¼¥ë¥º¸ì:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "BMP ¤Ë¤Ä¤¤¤Æ"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "¥¯¥ì¥¸¥Ã¥È"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ËÝÌõ¼Ô"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Æɤ߹þ¤ß"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Æɤ߹þ¤ß/¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Æɤ߹þ¤ß/¼«Æ°Æɤ߹þ¤ß¤Î¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Æɤ߹þ¤ß/¥Ç¥Õ¥©¥ë¥È"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Æɤ߹þ¤ß/¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Æɤ߹þ¤ß/¥Õ¥¡¥¤¥ë"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Æɤ߹þ¤ß/WinAMP EQF ¥Õ¥¡¥¤¥ë"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/¥¤¥ó¥Ý¡¼¥È"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/¥¤¥ó¥Ý¡¼¥È/WinAMP ¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Êݸ"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Êݸ/¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Êݸ/¼«Æ°Æɤ߹þ¤ß¤Î¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Êݸ/¥Ç¥Õ¥©¥ë¥È"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Êݸ/¥Õ¥¡¥¤¥ë"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Êݸ/WinAMP EQF ¥Õ¥¡¥¤¥ë"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/ºï½ü"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/ºï½ü/¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/ºï½ü/¼«Æ°Æɤ߹þ¤ß¤Î¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP ¥¤¥³¥é¥¤¥¶"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "¥×¥ê¥»¥Ã¥È"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "¥×¥ê¥»¥Ã¥È¤ÎÆɤ߹þ¤ß"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "¼«Æ°Æɤ߹þ¤ß¤Î¥×¥ê¥»¥Ã¥È¤ÎÆɤ߹þ¤ß"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "¥¤¥³¥é¥¤¥¶¡¦¥×¥ê¥»¥Ã¥È¤ÎÆɤ߹þ¤ß"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "¥×¥ê¥»¥Ã¥È¤ÎÊݸ"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "¼«Æ°Æɤ߹þ¤ß¤Î¥×¥ê¥»¥Ã¥È¤ÎÊݸ"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "¥¤¥³¥é¥¤¥¶¡¦¥×¥ê¥»¥Ã¥È¤ÎÊݸ"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "¥×¥ê¥»¥Ã¥È¤Îºï½ü"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "¼«Æ°Æɤ߹þ¤ß¤Î¥×¥ê¥»¥Ã¥È¤Îºï½ü"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '%s' ¤¬¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '--%s' ¤Ï°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '%c%s' ¤Ï°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '%s' ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó '--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó '%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ´Ö°ã¤Ã¤¿¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ´Ö°ã¤Ã¤¿¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '-W %s' ¤¬¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '-W %s' ¤Ï°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>¥Õ¥¡¥¤¥ë¤ò±éÁդǤ¤Þ¤»¤ó¡£</big></b>\n"
+"\n"
+"¼¡¤Î¥Õ¥¡¥¤¥ë¤ò±éÁդǤ¤Þ¤»¤ó¤Ç¤·¤¿¡£°Ê²¼¤ò¥Á¥§¥Ã¥¯¤·¤Æ²¼¤µ¤¤:\n"
+"1. ¥¢¥¯¥»¥¹²Äǽ¤Ç¤¢¤ë¤«¡£\n"
+"2. ±éÁÕ¤ËɬÍפʥá¥Ç¥£¥¢¤Î¥×¥é¥°¥¤¥ó¤ò͸ú¤Ë¤·¤Æ¤¤¤ë¤«¡£"
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "¼¡²ó¤«¤é¤³¤Î·Ù¹ð¤òɽ¼¨¤·¤Ê¤¤"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "¾ÜºÙ¤òɽ¼¨¤¹¤ë(_D)"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "¥Õ¥¡¥¤¥ë̾"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "¥Õ¥¡¥¤¥ë̾:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤òǧ¼±¤¹¤ëÆþÎϥץ饰¥¤¥ó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "ÆþÎϥץ饰¥¤¥ó: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "¥í¥°¡¦¥Õ¥¡¥¤¥ë (%s) ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¡ª\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep ¥á¥Ç¥£¥¢¡¦¥×¥ì¥¤¥ä"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "¥Õ¥©¥ë¥À (%s) ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ÍÑË¡: beep-media-player [¥ª¥×¥·¥ç¥ó] [¥Õ¥¡¥¤¥ë] ...\n"
+"\n"
+"¥ª¥×¥·¥ç¥ó:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "BMP/XMMS ¥»¥Ã¥·¥ç¥ó¤òÁªÂò¤¹¤ë (¥Ç¥Õ¥©¥ë¥È: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "±éÁÕ°ìÍ÷¤Î°ì¤ÄÁ°¤Î¶Ê¤Ë¥¸¥ã¥ó¥×¤¹¤ë"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "¸½ºß¤Î±éÁÕ°ìÍ÷¤Ç±éÁÕ¤ò³«»Ï¤¹¤ë"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "¸½ºß¤Î¶Ê¤ò°ì»þÄä»ß¤¹¤ë"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "¸½ºß¤Î¶Ê¤òÄä»ß¤¹¤ë"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "±éÁÕ¤·¤Æ¤¤¤¿¤é°ì»þÄä»ß¤·¡¢¤½¤ì°Ê³°¤Ï±éÁÕ¤¹¤ë"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "±éÁÕ°ìÍ÷¤Î°ì¤Ä¼¡¤Î¶Ê¤Ë¥¸¥ã¥ó¥×¤¹¤ë"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "±éÁÕ°ìÍ÷¤ò¥¯¥ê¥¢¤·¤Ê¤¤"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "¥á¥¤¥ó¡¦¥¦¥£¥ó¥É¥¦¤òɽ¼¨¤¹¤ë"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "BMP ¤ò¥¢¥¯¥Æ¥£¥Ö¤Ë¤¹¤ë"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "°ÊÁ°¤Î¥»¥Ã¥·¥ç¥ó ID ¤ò»ØÄꤹ¤ë"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"¥·¥°¥Ê¥ë SIGSEGV ¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿¡£\n"
+"\n"
+"¤³¤ì¤Ï BMP ¤Î¥Ð¥°¤Î²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£È¯À¸¤Î¸¶°ø¤¬ÉÔÌÀ¤Ê¾ì¹ç¤Ï¡¢<beepmp-"
+"devel at lists.sourceforge.net> ¤ËÊó¹ð¤·¤Æ²¼¤µ¤¤¡£\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>¥¹¥¥ó¤ò¥í¡¼¥É¤Ç¤¤Þ¤»¤ó¡£</big></b>\n"
+"\n"
+"'%s' ¤Ë¤¢¤ë¥¹¥¥ó¤¬ÍøÍѲÄǽ¤Ç¤¢¤ë¤«³Îǧ¤·¤Æ²¼¤µ¤¤¡£\n"
+"¥Ç¥Õ¥©¥ë¥È¤Î¥¹¥¥ó¤Ï¤ª¤½¤é¤¯ '%s' ¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"¤¹¤ß¤Þ¤»¤ó¤¬¡¢BMP ¤Ç¤Ï¤ª»È¤¤¤Î GTK+ ¤Î¥Ð¡¼¥¸¥ç¥ó (%d.%d.%d) ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤"
+"¤Þ¤»¤ó¡£\n"
+"GTK+ %s ¤Þ¤¿¤Ï¤½¤ì°Ê¹ß¤Î¥Ð¡¼¥¸¥ç¥ó¤ò¤ª»È¤¤²¼¤µ¤¤¡£\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"¤¹¤ß¤Þ¤»¤ó¤¬¡¢¤ª»È¤¤¤Î¥·¥¹¥Æ¥à¤Ç¤Ï Thread ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤è¤¦¤Ç¤¹¡£\n"
+"\n"
+"libc5 ¥Ù¡¼¥¹¤Î¥·¥¹¥Æ¥à¤Î¾ì¹ç¤È LinuxThreads ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëÁ°¤Ë Glib ¤È "
+"GTK+ ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¾ì¹ç¤Ï¡¢Glib ¤È GTK+ ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤ÆºÆ¥¤¥ó¥¹¥È¡¼¥ë"
+"¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: X ¥Ç¥£¥¹¥×¥ì¥¤¤ò³«¤±¤Þ¤»¤ó¡£¶¯À©½ªÎ»¤·¤Þ¤¹¡£"
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/¥È¥é¥Ã¥¯¤Î¾ÜºÙ"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/¶Ê̾¤Î¼«Æ°¥¹¥¯¥í¡¼¥ë"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/»ë³Ð²½¥â¡¼¥É"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/»ë³Ð²½¥â¡¼¥É/¥¢¥Ê¥é¥¤¥¶"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/»ë³Ð²½¥â¡¼¥É/¥¹¥³¡¼¥×"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/»ë³Ð²½¥â¡¼¥É/̵¸ú"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É/ɸ½à"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É/¥Õ¥¡¥¤¥¢"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É/¿âľ¥é¥¤¥ó"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É/¥é¥¤¥ó"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É/¥Ð¡¼"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥â¡¼¥É/¥Ô¡¼¥¯"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/¥¹¥³¡¼¥×¡¦¥â¡¼¥É"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/¥¹¥³¡¼¥×¡¦¥â¡¼¥É/¥É¥Ã¥È¡¦¥¹¥³¡¼¥×"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/¥¹¥³¡¼¥×¡¦¥â¡¼¥É/¥é¥¤¥ó¡¦¥¹¥³¡¼¥×"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/¥¹¥³¡¼¥×¡¦¥â¡¼¥É/¥½¥ê¥Ã¥É¡¦¥â¡¼¥É"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/WindowShade VU ¥â¡¼¥É"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/WindowShade VU ¥â¡¼¥É/ɸ½à"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/WindowShade VU ¥â¡¼¥É/¥¹¥à¡¼¥º"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/¥ê¥Õ¥ì¥Ã¥·¥å¡¦¥ì¡¼¥È"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/¥ê¥Õ¥ì¥Ã¥·¥å¡¦¥ì¡¼¥È/1:1 (¡Á50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/¥ê¥Õ¥ì¥Ã¥·¥å¡¦¥ì¡¼¥È/1:2 (¡Á25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/¥ê¥Õ¥ì¥Ã¥·¥å¡¦¥ì¡¼¥È/1:4(¡Á13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/¥ê¥Õ¥ì¥Ã¥·¥å¡¦¥ì¡¼¥È/1:8 (¡Á6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥Õ¥©¡¼¥ë¥ª¥Õ"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/ºÇÄã®"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/Äã®"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/Ãæ®"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/¹â®"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/¥¢¥Ê¥é¥¤¥¶¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/ºÇ¹â®"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/¥Ô¡¼¥¯¡¦¥Õ¥©¡¼¥ë¥ª¥Õ"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/¥Ô¡¼¥¯¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/ºÇÄã®"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/¥Ô¡¼¥¯¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/Äã®"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/¥Ô¡¼¥¯¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/Ãæ®"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/¥Ô¡¼¥¯¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/¹â®"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/¥Ô¡¼¥¯¡¦¥Õ¥©¡¼¥ë¥ª¥Õ/ºÇ¹â®"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/¥ê¥Ô¡¼¥È"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/¥·¥ã¥Ã¥Õ¥ë"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/±éÁÕ"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/°ì»þÄä»ß"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Ää»ß"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Á°¤Î¶Ê"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/¼¡¤Î¶Ê"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/±éÁÕ°ìÍ÷¤Î³«»Ï¤Ø°ÜÆ°"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤Ø°ÜÆ°"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/»ØÄꤷ¤¿»þ´Ö¤Ø°ÜÆ°"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/ÀßÄê"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/ɽ¼¨(_V)"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/¾ðÊó"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/½ªÎ»(_Q)"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/¥Õ¥¡¥¤¥ë..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/¥¤¥ó¥¿¡¼¥Í¥Ã¥È¾å¤Î¾ì½ê..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/±éÁÕ°ìÍ÷¥¨¥Ç¥£¥¿¤òɽ¼¨¤¹¤ë"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/¥¤¥³¥é¥¤¥¶¤òɽ¼¨¤¹¤ë"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/·Ð²á»þ´Ö¤òɽ¼¨¤¹¤ë"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/»Ä¤ê»þ´Ö¤òɽ¼¨¤¹¤ë"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/¾ï¤ËºÇÁ°Ì̤ËÇÛÃÖ¤¹¤ë"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Á´¥ï¡¼¥¯¥¹¥Ú¡¼¥¹¤ËÇÛÃÖ¤¹¤ë"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/¥×¥ì¥¤¥ä¤ò´¬¤¾å¤²¤ë"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/±éÁÕ°ìÍ÷¥¨¥Ç¥£¥¿¤ò´¬¤¾å¤²¤ë"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/¥¤¥³¥é¥¤¥¶¤ò´¬¤¾å¤²¤ë"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "»ØÄꤷ¤¿»þ´Ö¤Ø°ÜÆ°"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "ʬ:ÉÃ"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "¥È¥é¥Ã¥¯¤Î¹ç·×»þ´Ö:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "¥¥å¡¼"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "¥¥å¡¼"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "»ØÄê¥È¥é¥Ã¥¯¤Ø°ÜÆ°"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "¥Õ¥£¥ë¥¿:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "¥Õ¥©¥ë¥À¤ÎÄɲÃ"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡¦¥¢¥É¥ì¥¹¤ÎÄɲÃ"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "°ÜÆ°Àè: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "²»ÎÌ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "¥Ð¥é¥ó¥¹: %d%% (º¸´ó¤ê)"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "¥Ð¥é¥ó¥¹: Ãæ±û"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "¥Ð¥é¥ó¥¹: %d%% (±¦´ó¤ê)"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "¥ª¥×¥·¥ç¥ó¡¦¥á¥Ë¥å¡¼"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "\"¾ï¤ËºÇÁ°Ì̤ËÇÛÃÖ¤¹¤ë\" ¤Ï̵¸ú (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "\"¾ï¤ËºÇÁ°Ì̤ËÇÛÃÖ¤¹¤ë\" ¤Ï͸ú (»ÈÍÑÉÔ²Ä)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "\"¾ï¤ËºÇÁ°Ì̤ËÇÛÃÖ\" ¤Ï̵¸ú"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "\"¾ï¤ËºÇÁ°Ì̤ËÇÛÃÖ\" ¤Ï͸ú"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "¥Õ¥¡¥¤¥ë¾ðÊó¥Ü¥Ã¥¯¥¹"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** ¥µ¥¤¥º¤òÆóÇܤˤ¹¤ëµ¡Ç½¤Ï̵¤¯¤Ê¤ê¤Þ¤·¤¿ **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "»ë³Ð²½¥á¥Ë¥å¡¼"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>±éÁդǤ¤ë CD ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£</big></b>\n"
+"\n"
+"CD ¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢ÁÞÆþ¤µ¤ì¤¿ CD ¤Ï¥ª¡¼¥Ç¥£¥ª CD ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>¥ª¡¼¥Ç¥£¥ª¡¦¥Ç¥Ð¥¤¥¹¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£</big></b>\n"
+"\n"
+"°Ê²¼¤ò¥Á¥§¥Ã¥¯¤·¤Æ²¼¤µ¤¤:\n"
+"1. ¸½ºßÁªÂò¤·¤Æ¤¤¤ë½ÐÎϥץ饰¥¤¥ó¤¬Àµ¤·¤¤¤«¡£\n"
+"2. ¤ª»È¤¤¤Î¥µ¥¦¥ó¥É¥«¡¼¥É¤ò¥Ö¥í¥Ã¥¯¤·¤Æ¤¤¤ë¥¢¥×¥ê¤¬Â¾¤Ë¸ºß¤·¤Ê¤¤¤«¡£\n"
+"3. ¤ª»È¤¤¤Î¥µ¥¦¥ó¥É¥«¡¼¥É¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤Æ¤¤¤ë¤«¡£\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/ÁªÂò¤·¤¿¥¨¥ó¥È¥ê¤Îºï½ü"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/ÁªÂò¤·¤Æ¤¤¤Ê¤¤¥¨¥ó¥È¥ê¤Îºï½ü"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Á´¤Æºï½ü"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/¥¥å¡¼¤òÀÚ¤êÂؤ¨¤ë"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/CD ¤ÎÄɲÃ..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡¦¥¢¥É¥ì¥¹¤ÎÄɲÃ..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/¥Õ¥¡¥¤¥ë¤ÎÄɲÃ..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/¥Õ¥¡¥¤¥ë¤ÎÄɲÃ..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/¥¥å¡¼¤Î¥¯¥ê¥¢"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/ÍøÍÑÉԲĥե¡¥¤¥ë¤Îºï½ü"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/¿·¤·¤¤°ìÍ÷"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/±éÁÕ°ìÍ÷¤ÎÆɤ߹þ¤ß"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/±éÁÕ°ìÍ÷¤ÎÊݸ"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/ɽ¼¨¤Î¥ê¥Õ¥ì¥Ã¥·¥å"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/ÁªÂòÈϰϤÎȿž"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/̤ÁªÂò¤Ë¤¹¤ë"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Á´¤ÆÁªÂò"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/½çÈÖ¤ò¥é¥ó¥À¥à¤Ë¤¹¤ë"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/µÕ½ç¤Ë¤¹¤ë"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/±éÁÕ°ìÍ÷¤Î¥½¡¼¥È"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/±éÁÕ°ìÍ÷¤Î¥½¡¼¥È/¥¿¥¤¥È¥ë½ç"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/±éÁÕ°ìÍ÷¤Î¥½¡¼¥È/¥Õ¥¡¥¤¥ë̾½ç"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/±éÁÕ°ìÍ÷¤Î¥½¡¼¥È/¥Ñ¥¹Ì¾¤È¥Õ¥¡¥¤¥ë̾½ç"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/±éÁÕ°ìÍ÷¤Î¥½¡¼¥È/ÆüÉÕ½ç"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/ÁªÂòÈϰϤΥ½¡¼¥È"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/ÁªÂòÈϰϤΥ½¡¼¥È/¥¿¥¤¥È¥ë½ç"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/ÁªÂòÈϰϤΥ½¡¼¥È/¥Õ¥¡¥¤¥ë̾½ç"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/ÁªÂòÈϰϤΥ½¡¼¥È/¥Ñ¥¹Ì¾¤È¥Õ¥¡¥¤¥ë̾½ç"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/ÁªÂòÈϰϤΥ½¡¼¥È/ÆüÉÕ½ç"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "±éÁÕ°ìÍ÷ \"%s\" ¤ò½ñ¤¹þ¤àºÝ¤Ë¥¨¥é¡¼: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s ¤Ï´û¤Ë¸ºß¤·¤Æ¤¤¤Þ¤¹¡£Â³¹Ô¤·¤Þ¤¹¤«¡©"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "±éÁÕ°ìÍ÷¤òÊݸ¤Ç¤¤Þ¤»¤ó¡ª (%s ¤Î¥Õ¥¡¥¤¥ë¤Î¼ïÎबÉÔÌÀ¤Ç¤¹)"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "±éÁÕ°ìÍ÷¤ÎÆɤ߹þ¤ß"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "±éÁÕ°ìÍ÷¤ÎÊݸ"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP ±éÁÕ°ìÍ÷¥¨¥Ç¥£¥¿"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "³°´Ñ"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "¥¤¥³¥é¥¤¥¶"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "¥Þ¥¦¥¹"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "±éÁÕ°ìÍ÷"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "¥×¥é¥°¥¤¥ó"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "¥¢¡¼¥Æ¥£¥¹¥È"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "¥È¥é¥Ã¥¯ÈÖ¹æ"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "¥Ñ¥¹Ì¾"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "͸ú"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "ÀâÌÀ"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "¥«¥Æ¥´¥ê"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "ÀßÄꥦ¥£¥ó¥É¥¦"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "¥Õ¥¡¥¤¥ë¤ÎÄɲÃ/³«¤¯¥À¥¤¥¢¥í¥°"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤¯"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "³«¤¤¤¿¤é¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "¥Õ¥¡¥¤¥ë¤ÎÄɲÃ"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Äɲä·¤¿¤é¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (ÉÔÀµ¤Ê UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP ¤ÎÀßÄê"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>¥×¥é¥°¥¤¥ó</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "¥á¥Ç¥£¥¢¡¦¥×¥é¥°¥¤¥ó¤Î°ìÍ÷(_M):"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>¥á¥Ç¥£¥¢</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "Á´È̥ץ饰¥¤¥ó¤Î°ìÍ÷(_G):"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Á´ÈÌ</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "»ë³Ð²½¥×¥é¥°¥¤¥ó¤Î°ìÍ÷(_V):"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>»ë³Ð²½</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "¥¨¥Õ¥§¥¯¥È¡¦¥×¥é¥°¥¤¥ó¤Î°ìÍ÷(_E):"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>¥¨¥Õ¥§¥¯¥È</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "¸½ºß¤Î½ÐÎϥץ饰¥¤¥ó(_C):"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Êѹ¹¤¬ BMP ¤ÎÀßÄê¥Ç¡¼¥¿¥Ù¡¼¥¹Æâ¤Çº£¤«¤é͸ú¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢±éÁÕ¤ËÂФ¹¤ëÊѹ¹¤Ï¼¡"
+"¤Î¶Ê¤Þ¤ÇŬÍѤµ¤ì¤Þ¤»¤ó¡ª\n"
+"\n"
+"±éÁÕ¤ËÂФ¹¤ëŬÍѤò͸ú¤Ë¤¹¤ë¤¿¤á¤Ë¡¢¤¤¤Ã¤¿¤ó±éÁÕ¤òÃæ»ß¤·¤ÆºÆ³«¤¹¤ë¤³¤È¤ò¤ª¾©"
+"¤á¤·¤Þ¤¹¡£"
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>½ÐÎÏ</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>³°´Ñ</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>¥¹¥¥ó(_S)</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>¥Õ¥©¥ó¥È(_F)</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "±éÁÕ¼Ô(_P):"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "±éÁÕ°ìÍ÷(_P):"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "¥á¥¤¥ó¡¦¥¦¥£¥ó¥É¥¦¤Ç»ÈÍѤ¹¤ë¥Õ¥©¥ó¥È¤ÎÁªÂò"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "±éÁÕ°ìÍ÷¤Ç»ÈÍѤ¹¤ë¥Õ¥©¥ó¥È¤ÎÁªÂò:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>¤½¤Î¾(_M)</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "±éÁÕ°ìÍ÷¤Ë¥È¥é¥Ã¥¯ÈÖ¹æ¤òɽ¼¨¤¹¤ë"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "¥«¥¹¥¿¥à¡¦¥«¡¼¥½¥ë¤ò»ÈÍѤ¹¤ë"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>¥Þ¥¦¥¹</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>¥Þ¥¦¥¹¤Î¥Û¥£¡¼¥ë</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "¥Û¥£¡¼¥ë¤Ç²»Î̤òÊѹ¹¤¹¤ë³ä¹ç: "
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "¡ó"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "±éÁÕ°ìÍ÷¤Ç°ÜÆ°¤¹¤ëÎÌ: "
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "¹Ô"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>±éÁÕ°ìÍ÷</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>¥Õ¥¡¥¤¥ë̾</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "¥¢¥ó¥À¡¼¥¹¥³¥¢ (_) ¤ò¥¹¥Ú¡¼¥¹¤ËÊÑ´¹¤¹¤ë"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "'%20' ¤ò¥¹¥Ú¡¼¥¹¤ËÊÑ´¹¤¹¤ë"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>¥á¥¿¥Ç¡¼¥¿</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "¶Ê¥Õ¥¡¥¤¥ë¤«¤é¥¿¥°¾ðÊó¤òÆɤ߹þ¤ß¤Þ¤¹"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "±éÁÕ°ìÍ÷¤È¥Õ¥¡¥¤¥ë¤«¤é¥á¥¿¥Ç¡¼¥¿¤òÆɤ߹þ¤à"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"±éÁÕ°ìÍ÷¤Ø¥Õ¥¡¥¤¥ë¤òÄɲ乤뤫¡¢±éÁÕ°ìÍ÷¤ò³«¤¤¤¿¤é¥¿¥°¾ðÊó¤òÆɤ߹þ¤ß¤Þ¤¹"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Æɤ߹þ¤ß»þ"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "±éÁÕ°ìÍ÷¤Ë¥Õ¥¡¥¤¥ë¤òɽ¼¨¤·¤¿¤é¡¢É¬Íפ˱þ¤¸¤Æ¥¿¥°¾ðÊó¤òÆɤ߹þ¤ß¤Þ¤¹"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "ɽ¼¨»þ"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ºÆÀ¸</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "¶Ê¤Î±éÁÕ¤¬½ªÎ»¤·¤¿¤é¡¢¼¡¤Î¶Ê¤ò¼«Æ°Åª¤Ë±éÁÕ¤·¤Þ¤»¤ó"
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "±éÁÕ°ìÍ÷¤Î¼¡¤Î¶Ê¤Ø¿Ê¤á¤Ê¤¤"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "¶Ê¤Î´Ö¤Ë°ì»þÄä»ß¤¹¤ë"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "°ì»þÄä»ß¤Î»þ´Ö: "
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ÉÃ"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>¶Ê̾¤Îɽ¼¨</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "¥¿¥¤¥È¥ë¤Îʸ»ú:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"¥¿¥¤¥È¥ë\n"
+"¥¢¡¼¥Æ¥£¥¹¥È - ¥¿¥¤¥È¥ë\n"
+"¥¢¡¼¥Æ¥£¥¹¥È - ¥¢¥ë¥Ð¥à̾ - ¥¿¥¤¥È¥ë\n"
+"¥¢¥ë¥Ð¥à̾ - ¥¿¥¤¥È¥ë\n"
+"¥«¥¹¥¿¥à"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "¥¿¥¤¥È¥ë¤Ë»ÈÍѤǤ¤ë½ñ¼°¤òɽ¼¨¤·¤Þ¤¹"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>¥¤¥³¥é¥¤¥¶r</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>¥×¥ê¥»¥Ã¥È</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "¥Õ¥©¥ë¥À¤Î¥×¥ê¥»¥Ã¥È:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "¥×¥ê¥»¥Ã¥È¤Î³ÈÄ¥»Ò:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ÍøÍѲÄǽ¤Ê¥×¥ê¥»¥Ã¥È(_P):"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Äɲä·¤¿¤é¥À¥¤¥¢¥í¥°¤òÊĤ¸¤ë"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Á´¤ÆÁªÂò"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Á´¤ÆÁªÂò²ò½ü"
+
+#~ msgid "Default skin:"
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È¤Î¥¹¥¥ó:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "gnome-vfs ¤ò½é´ü²½¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£\n"
+
+#~ msgid "/By extension"
+#~ msgstr "/³ÈÄ¥»Ò½ç"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ka.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3352 @@
+# translation of bmpka.po to Georgian
+# translation of bmp.po to Georgian
+# This file is distributed under the same license as the PACKAGE package.
+# SophoLinux / Deer Leap Project Linux Georgian Translators Team, 2005.
+# George Machitidze <giomac at global-erty.net>, 2005.
+# George Machitidze <giomac at security.gov.ge>, 2005.
+# George Machitidze <giomac at gmail.com>, 2005.
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.35\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-10-14 13:54+0400\n"
+"Last-Translator: George Machitidze <giomac at gmail.com>\n"
+"Language-Team: Georgian <giomac at gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "áá£ááá-CD-á¡ ááááááá"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "áá£ááá-CD-á¡ á©áááá¬áá á %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(á£áªáááá)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "ááá«á ááá %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"%s ááá¬á§áááááááá¡ ááá®á¡áá á¨áá£á«ááááááá\n"
+"á¨ááªáááá: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"á¨áá£á«ááááááá \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"ááá¬á§ááááááá %s á¬áá¡á ááá¨áá.\n"
+"ááá¡áá¡ áá¥áá¡ %d á©áááá¬áá á"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d áááááªáááá á©áááá¬áá ááá)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"á¯ááá£á á á®áááá á«áááááá: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"áªáá¤á á£áá ááááááá ááá¦ááá ááá á¨áááá¬ááááá áᣠááá¡ááá áá áá áá¡ áá£ááá á©áááá¬áá á\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"áªáá¤á á£áá ááááááá ááá¦áááá¡ á¢áá¡á¢á: á¬áá¡á ááá¨áá\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"áªáá¤á á£áá ááááááá ááá¦áááá¡ á¢áá¡á¢áá áááá¡ á¨ááªáááá: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"á¨ááªáááá %s ááá áá¥á¢áá ááá¡ á¨áááá¬ááááá¡áá¡:\n"
+"%s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "á¨ááªáááá: %s áá á¡ááááá¡, áááá áá ááá áá á¬áá áááááááá¡ ááá¡á¢áá¡"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ááá¢ááááá %s á¬áá¡á ááá¨áá."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "ááá¬á§ááááááá:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_ááá¬á§ááááááá:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "ááá _áá¥á¢áá áá:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "ááááá áá¡ á ááááá:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "ááááááá£á á"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "áªáá¤á á£áá ááááááá ááá¦ááá"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "á®ááá¡ áááá¢á ááá:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "ááá¥á¨áá áá¡ ááá áá¨á"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM ááá«á ááá"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS ááá¥á¨áá á"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "ááá«á áááá¡ á¨áááá¬áááá..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "ááá«á áááá¡ áááá¦ááá"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "áááááá¥á¢-ááá¡ááááá¡ áááááá áááá¡ áááá¤ááá£á ááªáá"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "ááá«á áááá¡ ááááá¢ááá"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "ááá¬á§ááááááá"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "á©áá ááá"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "á¡áá ááá áááá¡ á¡ááá¡ ááá¦ááá"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "á¥á¡áááá¡ á¤ááá¯á áá¡ á©áááááá"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB á¡áá ááá á:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD-ááááá¥á¡á:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "áááááá§ááá CD ááááá¥á¡áá ááá"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD ááááá¥á¡áá áááá¡ á¡áá ááá á:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "á©áááá¬áá áááá¡ á¡áá®ááááá:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "áááááá á¡áááá£á áááá¡ ááááá áá ááá"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "á¡áá®áááá¡ á¤áá ááá¢á:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "ááá¤áá áááªáá CD-áá¡ á¨áá¡áá®áá"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "ááá á©ááá ááá áá¥á¢áá áá, á¡ááá᪠áá¡á£á á MPEG ááááááá¡ á¨áááá®áá:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG áá£ááá-áááááááá¡ áááá¤ááá£á ááªáá"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "ááá á©ááááááá:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 ááá¢á"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 ááá¢á"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "áá á®ááá:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "á¡á¢áá áá (áᣠá¨áá¡áá«ááááááá)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "áááá"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "ááá§áááá:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 áá°áª)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 áá°áª)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 áá°áª)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "ááááááá á:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "ááá¢áááá¢á£á áá áá¦ááá©ááá"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! ááá¢áááááá ááá£áá ááááááá á"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX ááá¢áááááá ááá£áá ááááááá á"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU ááááááá á"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "ááá áááá¢á ááá"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "á¨áááááá¡á"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "ááá¤áá ááááá"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "ááá¤áá ááááá áá á¨áááááá¡á"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "ááááááá á"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "áá£á¤áá á:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "áá£á¤áá áá¡ áááá (áá):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "á¬ááá-áá£á¤áá á (áá ááªááá¢á):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "áá áá¥á¡á:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "áááááá§ááá áá áá¥á¡á"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "á°áá¡á¢á:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "ááá á¢á:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "áá£áááá¢ááááªááá¡ ááááá§ááááá"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "á¡áá®ááá:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "ááá ááá:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "ááááááá¡ ááá¡ááá á¨áááá®áá:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "ááááááá¡ ááá¡ááá á¨áááá®áá"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "ááá:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "áá á©ááá"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Icecast ááá¢á-áááááªáááá UDP áá á®áá ááá¦ááá"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "áááááá"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 á¢ááááá:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ID3V2 á¢áááááá¡ ááááá¨áá"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "áá á-UTF8 ID3 á¢áááááá¡ ááá ááá¥ááá UTF8-á¨á"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 ááááááá ááá:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 á¤áá ááá¢á:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "á¡áááá£á á"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"á¤ááááá¡ á©áá¬áá á á¨áá£á«ááááááá: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "áááá¡ á©áá¬áá á á¨áá£á«ááááááá"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"á¤ááááá¡ ááá®á¡áá á¨áá£á«láááááá: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "ááá¤áá áááªáá¡ á¤ááááá¡ á¨áá¡áá®áá"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "áááá®"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"á¤ááááá¡ áááá£á¨ááááá á¨áá£á«ááááááá: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "áááá¡ áááá¦ááá á¨áá£á«ááááááá!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "á¤áááá¡ ááá áááá©ááá!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "á¡á¢áá áá"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "áááá ááááááá£áá á¡á¢áá áá"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "áá á áá á®á"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "áá áá áá á®á"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld á°áª"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "áá áá áá¡"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 áá¬á"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "áá áá áá¡"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "áá áá¡"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "á¡áá®ááá:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG-ááá¤áá áááªáá "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG-áá¡ áááá:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ááááááá¡ á¡áá©á¥áá á:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "á¡áááááá áááá¡ á¡áá®á¨áá á:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "áááá ááá:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "á¤ááááá¡ áááá:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "á¨ááªááááááá¡ááá áááªáá:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "á£á¤áááááá:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "áá ááááááá£á á:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 ááá "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "á¡áááá£á á:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "á¨ááá¡á á£áááááá:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "áááááá:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "áááááá¢áá á:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "á¬ááá:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "á©áááá¬áá áá¡ ááááá á:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "áááá á:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "ááááááá¡ á¢áááááá¡ ááááá ááá"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "ááááááá¡ á¢áááááá¡ á©áá¡áá"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "áááá£á¡ááá¦áá ááá"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu áááá¢á"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "á¨ááªáááá"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "ááá«áá %s-á¡"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "%s á°áá¡á¢áá¡ ááááá á¨áá£á«ááááááá"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "áá£áááá¨áá áááá %s-á¡:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "ááá áááá£áááá¨áá áá %s-á¡"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "áááááá¨áá ááá£ááá: áááááááá ááá¡á£á®á¡"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"%s-ááá áááááá¨áá ááá á¨áá£á«ááááááá\n"
+"á¡áá ááá á ááá¡á£á®ááá¡: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "ááá£áá"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "áááá¡ááá£á á á ááá"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "á¥áááá á"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "á¡ááªááááá"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "ááá¡áá"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "á¤áááá"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "áá áááá"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "á°áá-á°ááá"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "á¯ááá"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "ááá¢ááá"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "á«áááááá£á á"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "á¡á®áá"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "áááá"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "á &á"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "á ááá"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "á ááá"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "á ááá"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "á¢áá¥áá"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "áááá£á¡á¢á áá£áá"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "ááá¢áá ááá¢ááá"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "á¡áá"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "áá áááá¡á"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "ááá á-á¢áá¥áá"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "áááááá£á á"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "á¯áááá¤áááá"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "á¢á ááá¡á"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "áááá¡ááá£á á"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "ááá¡á¢á á£áááá¢ááá£á á"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "ááááá¨á"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "á®ááá£á á"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "ááá¢áá ááá¢áá£áá á ááá"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "ááá¡á"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "á¡áá£áá"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "ááááá"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "ááááá¢ááªáá£á á"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "ááá¡á¢á á£áááá¢á£áá áááá"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "ááá¡á¢á á£áááá¢á£áá á ááá"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "áááá"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "áááááá£á á"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "á¢áá¥áá-áááá£á¡á¢á áá£áá"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "áááá¥á¢á ááá£áá"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "á¡ááá®á ááá£áá á ááá"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "ááááááá"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "ááááá¡á¢áá á£áá á ááá"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "á¡áá£ááááá¡á 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "á¥á áá¡á¢áááá£áá á ááá"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "áááá/á¤áááá"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "áá£áááá ááá áááá ááá£áá"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "ááááá á"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "á¤á¡áá¥áááááá£á á"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "ááááá"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "á áá¢á á"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "ááá£ááá¥áá"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "á áá-áá-á ááá"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "áá«ááá á ááá"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "á®ááá®á£á á"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "áá áááá£áá á®ááá®á£á á"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "áááááá£á á"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "áááá¢á£á á"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "ááááááá áá£áá"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "áááááá£á á á ááá"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "áá ááá áá¡á£áá á ááá"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "á¤á¡áá¥áááááá£á á á ááá"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "á¡ááá¤áááá£á á á ááá"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "áááá á ááá"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "áá£ááá"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "ááááááá ááá¡áá¡áááá"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "ááá£á¡á¢ááá£á á"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "áá£ááá á"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "á¡áá£ááá á"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "á¨ááá¡ááá"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "áááá á"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "á¡áááá¢á"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "á¡ááá¤áááá"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "á¡áá¢áá á"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "ááá£áá"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "á¢áááá"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "á¡áááá"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "á¤áááááá á"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "áááááá"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "áá£áá¢á"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "áááá á ááá"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "á-áááááá"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "ááá"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "á¢áá áá á"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "áááá"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "áá áá¢ááá£áá áááá"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "áááááá£á á ááááá"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "á¥á áá¡á¢áááá£áá ááááá¡á¢áá á£áá á ááá"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "áá«ááá ááá¢ááá"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "á¨ááá ááá¢ááá"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "á¥á áá¡á¢áááá£áá á ááá"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "áááááá£á á áááá"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "MPEG áá£ááá-áááááááá¡ á¨áá¡áá®áá"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 ááááááá áááá¡ á«á ááá Michael Hipp-áá¡ áááá <mh at mpg123.de>\n"
+"ááááááá XMMS-áá¡ áá£áááá¡ áááá "
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG áá£ááá-ááááááá"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "ááá á©ááá ááá áá¥á¢áá áá, á¡ááá᪠áá¡á£á á Ogg Vorbis-áá¡ ááááááááá¡ á¨áááá®áá:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis-áá¡ áá£ááá áááááááá¡ áááá¤áááá ááªáá"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis-áá¡ á¢ááááá:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "á¡áááá£á áá¡ á¤áá ááá¢á:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr ""
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr ""
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr ""
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr ""
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "á©áááá¬áá áá¡ á®ááá¡ ááááá¡ ááá®ááááá"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "ááááááá¡ á®ááá¡ ááááá¡ ááá®ááááá"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr ""
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"á¨ááªáááá:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "á¨ááªáááá!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "á¨ááªáááá áááá¡ áªáááááááá¡áá¡ (ááá®á¡áá)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "á¨ááªáááá áááá¡ áªáááááááá¡áá¡ (ááá®á£á áá)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "áááá¡ á¨ááªááá á¨áá£á«ááááááá"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis-áá¡ ááá"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ááá áá¦á:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "áááááá á¢ááá:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "áááááá áááá:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "ááá á¡áá:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC ááááá á:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "áá áááááááªáá:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "á©áááá¬áá áá¡ áááá:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "á©áááá¬áá áá¡ áááá£á á áááá:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "áááááá¨á á®ááá¡ áááá:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "áááááá¨á á®ááá¡ áááá£á á áááá:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis-áá¡ ááá¤áá áááªáá"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "á¡ááá á«á:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d á°áª"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d áááá¢á"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis áá£ááá-ááááááá"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis áá£ááá-áááááááá¡ á¨áá¡áá®áá"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV áá£ááá-ááááááá"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS áááááá§áááá ááááááá"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "OSS áá ááááá áá¡ á¨áá¡áá®áá"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "áááá£ááá¡á®áááá (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "áááá£ááá¡á®áááá"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS-áá¡ áá ááááá áá¡ áááá¤ááá£á ááªáá"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "áá£ááá-ááá¬á§ááááááá:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "áááááá§ááá ááá¢áá ááá¢áá£áá ááá¬á§ááááááá:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "ááá¥á¨áá á£áá ááá¬á§ááááááá:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "ááá¬á§ááááááááá"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "áá£á¤áá áá¡ áááá (áá¬á):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "áá£á¤áá á"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "ááá¥á¨áá áá¡ ááá áááá¢á ááá:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "á®ááá¡ áááá¢á ááá áááááá á áá á®áá (áá á-PCM-áá)"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "ááá¥á¨áá á"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "ESounD áááááááá¡ á¨áá¡áá®áá"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD áááááá§áááá áááááááá¡ áááá¤ááá£á ááªáá"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "ááá¨áá ááá£áá á°áá¡á¢áá¡ ááááá§ááááá"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "á®ááá¡ áááá¢á ááá OSS ááá¥á¨áá áá"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "á¡áá ááá á"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound áááááá§áááá ááááááá"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "ALSA áá ááááá áá¡ á¨áá¡áá®áá"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s áááááá§áááá ááááááá"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "á£áªáááá á®ááá¡ ááá¤á"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "áááá£ááá¡á®áááá PCM ááá¬á§ááááááá (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA áá ááááá áá¡ áááá¤ááá£á ááªáá"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "ááá¥á¨áá á:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "áá ááá ááá£áá á®ááá¡ áááá¢á ááá"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "ááá¥á¨áá á£áá ááá¤á:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "ááá¬á§áááááááá¡ ááá áááá¢á ááá:"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "ááááá¢ááááá ááá áááá¢á ááá:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "áá£á¤áá áá¡ áá á (áá¬á):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "ááá ááááá¡ áá á (áá¬á):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "áá£á¤áá áá¡ áá á (áá¬á):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap á ááááá"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "ááááá¢ááááá ááá áááá¢á ááá"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/ááááá ááªááááá¡ á©áá ááá"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ááááá¢áá"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "ááá áááá¢á ááá:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "á¨ááá¡á á£áááááá"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "áááááá"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "áááá á"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "á¤ááááá¡ á¡áá®ááá"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "á¤ááááá¡ áááááá áááá"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "á¤ááááá¡ ááá¤áá ááááá"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "á©áááá¬áá áá¡ á¡áá®ááá"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "á©áááá¬áá áá¡ ááááá á"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ááá áá¦á"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "á¬ááá"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "áááááá¢áá á"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: \"...\"-áá¡ á©áááááá, áá®áááá áᣠááááááá¢á %n áá á¡ááááá¡"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"XMMS-áá ááá¤á£á«áááá£áá ááááá áááááá ááá\n"
+"\n"
+"á¡áááá¢áá á á£á¤áááááá (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "á¨ááá¥ááááááá:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr ""
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr ""
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr ""
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr ""
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr ""
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr ""
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "ááááá¢ááááá ááá®ááá ááá:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr ""
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr ""
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr ""
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr ""
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr ""
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr ""
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr ""
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr ""
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr ""
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr ""
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "ááá áááá áá áá áá áá¤ááá:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "áá áááááá£á á ááá á¢á£ááááá£á á:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "áá áá¢ááá£áá:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "á©ááá£á á:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "á©áá®á£á á:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "á°ááááááá£á á:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "áá¡áááá£á á:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "á¤á áááá£áá:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr ""
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "ááá áááá£áá"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr ""
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "ááá áááá£áá"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "ááá á«áá£áá:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "á£ááá á£áá:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "áá¢áááá£á á:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "áááááá£á á:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr ""
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "ááá áá£áá:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ááá¢áá£á á:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr ""
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "ááááááááá£á á:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "áááááá£á á:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr ""
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "á á£áááá£áá:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "á á£á¡á£áá:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "á¡áááááá£á á:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "áá¡áááá£á á:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "á¨áááá£á á:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr ""
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "á á£áááá£áá:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "á£ááá¡á£á á:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "BMP-á¡ á¨áá¡áá®áá"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "ááááááááá"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "áááá áááááááá"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "ááá«áááá ááá"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60á°áª"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170á°áª"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310á°áª"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600á°áª"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1áá°áª"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3áá°áª"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6áá°áª"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12áá°áª"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14áá°áª"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16áá°áª"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/á©áá¢ááá ááá"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr ""
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/á©áá¢ááá ááá/ááá¢áááá¢á£á á"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/á©áá¢ááá ááá/áááá£ááá¡á®áááá"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/á©áá¢ááá ááá/áá£áá"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/á©áá¢ááá ááá/á¤ááááááá"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/á©áá¢ááá ááá/WinAMP-áá¡ EQF á¤ááááááá"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/ááááá á¢á"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr ""
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/á¨áááá®áá"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr ""
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/á¨áááá®áá/ááá¢áááá¢á£á á"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/á¨áááá®áá/áááá£ááá¡á®áááá"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/á¨áááá®áá/á¤áááá¨á"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/á¨áááá®áá/WinAMP-áá¡ EQF á¤áááá¨á"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/á¬áá¨áá"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr ""
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr ""
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP áááááááááá á"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr ""
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr ""
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr ""
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr ""
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr ""
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr ""
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr ""
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr ""
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr ""
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr ""
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ááá áááá¢á á¡ `--%s' áá á¡ááá áááá áá áá£áááá¢á\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ááá áááá¢á á¡ `%c%s' áá á¡ááá áááá áá áá£áááá¢á\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ááá áááá¢á á `%s' ááááá®ááá¡ áá áá£áááá¢á¡\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: áááá£áªáááá ááá áááá¢á á `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: áááá£áªáááá ááá áááá¢á á `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: áá áá¡á¬áá á ááá áááá¢á á -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ááªááá á ááá áááá¢á á -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ááá áááá¢á á ááááá®ááá¡ áá áá£áááá¢á¡ -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ááá áááá¢á á `-W %s' ááá£á¦áááááá\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ááá áááá¢á á `-W %s' áá ááááá®ááá¡ áá áá£áááá¢á¡\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>á¤ááááááá¡ ááááá á á¨áá£á«ááááááá.</big></b>\n"
+"\n"
+"á¨áááááá á¤ááááááá¡ ááááá á áá áá áá¡ á¨áá¡áá«áááááá. ááá®áááá áááááááá¬ááá, á áá:\n"
+"1. áá¡ááá á®ááááá¡áá¬áááááá.\n"
+"2. á¡áááá á ááááá ááááááááá á©áá áá£ááá."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "áá¦áá áá©áááá áá¡ ááá¤á á®ááááá"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "_ááá¢ááá£á áá á©áááááá"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "á¤ááááá¡ á¡áá®ááá"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "á¤ááááá¡ á¡áá®ááá:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "áá á¤ááááá¡áááá¡ á¡áááá á á¨ááá§áááá ááááááá áááá£áªááááá"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "á¨ááá§áááá ááááááá: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "á¨áá£á«ááááááá áá£á ááááá¡ á¤ááááá¡ á¨áá¥ááá (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "(%s) ááá áá¥á¢áá ááá¡ á¨áá¥ááá á¨áá£á«ááááááá : %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ááááá§ááááá: beep-media-player [ááá áááá¢á ááá] [á¤áááááá] ...\n"
+"\n"
+"ááá áááá¢á ááá:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "áá á¢áá¥á¡á¢áá¡ á©áááááá áá ááá¡ááá"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "BMP/XMMS á¡áá¡ááá¡ áá á©ááá (áááá£ááá¡á®áááá: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "á áááá á¢á£áá á¨á á£ááá ááááá¡ááá"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "áááááááá á á áááá á¢á£áá áá¡ ááááá á"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "áááááááá á á¡ááá¦áá áá¡ ááááá£áááá"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "áááááááá á á¡ááá¦áá áá¡ ááá©áá ááá"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "áááááá£áááá áᣠá£áá ááá¡, áᣠáá á - ááááá á"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "á áááá á¢á£áá á¨á á¬áá ááááá®á¢ááá"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "á áááá á¢á£áá áá¡ ááá¬áááááá¡ ááá áá¨á"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "á«áá ááááá á¤ááá¯á áá¡ á©áááááá"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "BMP-áá¡ áá¥á¢ááááªáá"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "á¬ááá á¡áá¡ááá¡ ID"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ááá á¡ááá¡ áááá áá¡ áááááááá áá ááááá¡ááá\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"ááá¦ááá£ááá SIGSEGV\n"
+"\n"
+"áá¡ á¨ááá«áááá áá§áá¡ BMP-á¨á áá á¡ááá£áá á¨ááªááááá¡ áá ááá. áᣠáá¥ááá áá ááªáá, áᣠá áá¡ "
+"áááá ááá®áá áá¡, ááááááááááááá á¬áá ááá ááá¡áááá ááá beepmp-devel at lists."
+"sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>ááá á¡áá¡ ááá®á¡áá á¨áá£á«ááááááá.</big></b>\n"
+"\n"
+"áááááááá¬ááá, á áá ááá á¡á '%s'-ááá áááá¡áááááá áá áááá£ááá¡á®áááá ááá á¡á á¡á¬áá áá áá áá¡ "
+"ááá§ááááá£áá '%s'-á¡ááá\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"áá¥áááá GTK+-áá¡ ááá á¡áá (%d.%d.%d) áá áá£á¨áááá¡ BMP-ááá.\n"
+"ááá®ááá áááááá§áááá GTK+ %s áá á£á¤á á áá®ááá.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: á¨áá£á«ááááááá ááá áááá¡ ááá®á¡áá, áááááááááá ."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/á©áááá¬áá áá¡ ááá¢ááááá"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/á¡ááá¦áá áá¡ á¡áá®áááá¡ ááááááááá®áááá"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/áááá£ááááááªááá¡ á ááááá"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/áááá£ááááááªááá¡ á ááááá/áááááááá¢áá á"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/áá£áá£ááááááªááá¡ á ááááá/áá¡áªááááá áá¤á"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/áááá£ááááááªááá¡ á ááááá/ááááá¨á£áá"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/áááááááá¢áá áá¡ á ááááá"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/áááááááá¢áá áá¡ á ááááá/ááá áááá£á á"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/áááááááá¢áá áá¡ á ááááá/áªááªáá"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/áááááááá¢áá áá¡ á ááááá/ááá á¢ááááá£á á á®ááááá"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/áááááááá¢áá áá¡ á ááááá/áááááá"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/áááááááá¢áá áá¡ á ááááá/á¡ááá¢ááá"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/áááááááá¢áá áá¡ á ááááá/áááááá"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/áá¡áªááááá áá¤áá¡ á ááááá"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/áá¡áªááááá áá¤áá¡ á ááááá/á¬áá á¢ááááááá"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/áá¡áªááááá áá¤áá¡ á ááááá/áááááá"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/áá¡áªááááá áá¤áá¡ á ááááá/á¨ááá¡ááá£áá"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr ""
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr ""
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ááááá®ááááá¡ á¡áá®á¨áá á"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/ááááá®ááááá¡ á¡áá®á¨áá á/á¡á á£áá (~50 áááá á/á¬á)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/ááááá®ááááá¡ á¡áá®á¨áá á/ááá®áááá á (~25 áááá á/á¬á)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/ááááá®ááááá¡ á¡áá®á¨áá á/ááááá®ááá (~13 áááá á/á¬á)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ááááá®ááááá¡ á¡áá®á¨áá á/ááá áááá (~6 áááá á/á¬á)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/áááááááá¢áá áá¡ ááá ááá"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/áááááááá¢áá áá¡ ááá ááá/á«ááááá áááá"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/áááááááá¢áá áá¡ ááá ááá/áááá"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/áááááááá¢áá áá¡ ááá ááá/á¡áá¨á£ááá"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/áááááááá¢áá áá¡ áªáá ááá/á¡á¬á áá¤á"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/áááááááá¢áá áá¡ ááá ááá/á«ááááá á¡á¬á áá¤á"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/ááááááá¡ ááá ááá"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/ááááááá¡ ááá ááá/á«ááááá áááá"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/ááááááá¡ ááá ááá/áááá"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/ááááááá¡ ááá ááá/á¡áá¨á£ááá"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/ááááááá¡ ááá ááá/á¡á¬á áá¤á"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/ááááááá¡ ááá ááá/á«ááááá á¡á¬á áá¤á"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/áááááá ááá"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/áá áá£ááá"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ááááá á"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ááá£áá"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/ááá©áá ááá"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/á¬ááá"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/á¨áááááá"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/á áááá á¢á£áá áá¡ ááá¡áá¬áá¡á¨á ááááá¡ááá"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/á¤ááááá ááááá¡ááá"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/áá ááá ááááá¡ááá"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/áááá¡ááááá"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_á®ááá"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/BMP-á¡ á¨áá¡áá®áá"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_ááá¡ááá"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/á¤áááááá..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/ááá¢áá ááá¢-áááááá áááá..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/á áááá á¢á£áá áá¡ á©áááááá"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/áááááááááá áá¡ á©ááááá"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/ááá¡á£áá áá á"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/ááá á©ááááá áá á"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/á§áááááááá¡ ááááááá"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/á§áááá á¡ááá£á¨áá áááááááá á©áááááá"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/áááááá áááá¡ ááááªáá"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/á áááá á¢á£áá áá¡ ááááªáá"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/áááááááááá áá¡ ááááªáá"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "áá ááá ááááá¡ááá"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "á¬á£áááá:á¬ááááá"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "á©áááá¬áá áá¡ á¡ááá á«á:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "á ááá¨á á©áá§ááááá"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "á ááá¨á á©áá§ááááá"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "á©áááá¬áá áá ááááá¡ááá"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "á¤ááá¢á á: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "á¡áá¥áá¦áááááááá¡ ááááá¢ááá"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "ááá¢áá ááá¢-ááá¡áááá ááá¡ ááááá¢ááá"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ááááá¡ááá: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "á®áá: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "áááááá¡á: %d%% ááá áªá®ááá"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "áááááá¡á: áªááá¢á á"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "áááááá¡á: %d%% ááá á¯áááá"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "ááá áááá¢á áááá¡ ááááá£"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "á¤ááááá¡ á¡áááá¤áá áááªáá á¤ááá¯áá á"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "áááá£ááááááªááá¡ ááááá£"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>ááá¡ááá ááá CD ááááááá áá áá áá¡.</big></b>\n"
+"\n"
+"CD á©ááááá£áá áá áá áá¡, áá á©ááááá£áá CD áá áá áá¡ áá£ááá CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/ááááá¨áá£áá á¤ááááááá¡ áááá¦ááá"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/ááá£ááá¨áááá á¤ááááááá¡ áááááááá"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/á§áááá á¤ááááá¡ áááá¦ááá"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/á ááá¨á á©áá§ááááá"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/CD-áá¡ ááááá¢ááá..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/ááá¢áá ááá¢-ááá¡áááá ááá¡ ááááá¢ááá..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/á¤ááááááá¡ ááááá¢ááá..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/á¤ááááááá¡ ááááá¢ááá..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/á áááá¡ ááá¬ááááá"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/ááá£á¬ááááááá á¤ááááááá¡ áááá¦ááá"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/áá®ááá á¡áá"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/á¡ááá¡ á©áá¢ááá ááá"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/á¡ááá¡ á¨áááá®áá"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/á®áááá¡ ááááá®áááá"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/áá á©áá£ááá¡ ááááá á¡áá"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/ááááá¨áááá¡ ááá®á¡áá"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/á§ááááá¡ ááááá¨ááá"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/á¡ááá¡ áá ááá"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/á¡ááá¡ á áááá á¡áá ááá"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/á¡ááá¡ áááááááá"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/á¡ááá¡ áááááááá/á¡áááá£á áá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/á¡ááá¡ áááááááá/á¤ááááá¡ á¡áá®áááá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/á¡ááá¡ áááááááá/ááááááááááá áááá¡ áá á¡áá®áááá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/á¡ááá¡ áááááááá/ááá áá¦áá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/ááááá¨áá£ááá¡ áááááááá"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/ááááá¨áá£ááá¡ áááááááá/á¡áááá£á áá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/ááááá¨áá£ááá¡ áááááááá/á¤ááááá¡ á¡áá®áááá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/ááááá¨áá£ááá¡ áááááááá/ááááááááááá ááááá¡ áá á¡áá®áááá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/ááááá¨áá£ááá¡ áááááááá/ááá áá¦áá¡ ááá®ááááá"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "á¨ááªáááá \"%s\" á áááá á¢á£áá áá¡ á¨áááá®ááá¡áá¡: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s á£ááá áá á¡ááááá¡. áááááá á«ááá?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "á áááá á¢á£áá áá¡ á¨áááá®áá á¨áá£á«ááááááá! á¤ááááá¡ á¢ááá %s á£áªááááá"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "á áááá á¢á£áá áá¡ á©áá¢ááá ááá"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "á áááá á¢á£áá áá¡ á¨áááá®áá"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP á áááá á¢á£áá á"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "ááá á¡áá®á"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "áááááááááá á"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "áááá£áá"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "á áááá á¢á£áá á"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "ááááááááá"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "á¨ááá¡á á£áááááá"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "á©áááá¬áá áá¡ ááááá á"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "á¤ááááá¡ áááá"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "á©áá ááá"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "áááááá á¢ááá"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "ááá¢áááá áá"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "áááá¡áááááá¡ á¤ááá¯áá á"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "á¤ááááááá¡ ááááá¢áááá¡/ááá®á¡ááá¡ ááááááá"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "á¤ááááááá¡ ááá®á¡áá"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "ááá®á¡ááá¡ á¨ááááá áááááááá¡ ááááá¢áá"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "á¤ááááááá¡ ááááá¢ááá"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "ááááá¢áááá¡ á¨ááááá áááááááá¡ ááááá¢áá"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (áá áá¡á¬áá á UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP-áá¡ áááá¡ááááá"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>ááááááááá</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_ááááááááááááááá¡ á¡áá:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>ááááá</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_á«áá ááááá áááááááááá¡ á¡áá:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>á«áá ááááá</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_áááá£ááááááªááá¡ áááááááááá¡ á¡áá:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>áááá£ááááááªáá</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_áá¤áá¥á¢áááá¡ áááááááááá¡ á¡áá:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>áá¤áá¥á¢ááá</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_áááááááá á áááááá§áááá ááááááá:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>áááááá§áááá</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>ááá á¡áá®á</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_ááá á¡á</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_á¨á áá¤á¢ááá</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_áááááá ááá:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_á áááá á¢á£áá á:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "áááááá áááá¡ áááááá á á¤ááá¯á áá¡ á¨á áá¤á¢á:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "á áááá á¢á£áá áá¡ á¨á áá¤á¢á"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_á¡á®ááááá¡á®áá</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "á áááá á¢á£áá á¨á á©áááá¬áá áááá¡ áááá áááá¡ á©áááááá"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "á¡á®áá áá£á á¡áá áááá¡ ááááá§ááááá"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>áááá£áá</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>áááá£ááá¡ ááá áááá</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "ááá áááá áªáááá¡ á®ááá¡"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "áá ááªááá¢á"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "ááá áááá ááá á£áááá¡ á áááá á¢á£áá á¡"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "á¡á¢á áá¥ááá"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>á áááá á¢á£áá á</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>á¤ááááá¡ á¡áá®ááá</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "_-áá¡ ááá ááá¥ááá áªáá ááá á¡ááááááá"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "%20-áá¡ ááá ááá¥ááá áªáá ááá á¡ááááááá"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ááá¢ááááááªááááá</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "ááá¢á-áááááªáááááá¡ (á¢áááááá¡) á©áá¢ááá ááá áá£á¡ááááá£á á á¤ááááááááá."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "ááá¢ááááááªáááááá¡ á©áá¢ááá ááá á¤ááááá¡ ááá®á¡ááá¡áá¡ áá á áááá á¢á£áá á¨á áªáááá¢áááá¡áá¡"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "á©áá¢ááá áááá¡áá¡"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "á©ááááááá¡áá¡"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ááááá á</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "á¡ááá¦áá áá¡ ááááááá áááá¡áá¡ á¨ááááááá ááá¢áááá¢á£á á ááááá¡áááá¡ ááá®á¡áá."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "ááá£áá á¡ááá¦áá ááá¡ á¨áá áá¡"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "ááá£áá"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "á¬ááá"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>á¡ááá¦áá áá¡ á¡áá®áááá¡ á©áááááá</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"á¡áááá£á á\n"
+"á¨ááá¡á á£áááááá - á¡áááá£á á\n"
+"á¨ááá¡á á£áááááá - áááááá - á¡áááá£á á\n"
+"áááááá - á¡áááá£á á\n"
+"á¡á®áá"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>áááááááááá á</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr ""
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "ááááá¢áááá¡ á¨ááááá áááááááá¡ ááááá¢áá"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "á§ááááá¡ ááááá¨ááá"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "ááááá¨áááá¡ ááá®á¡áá"
+
+#~ msgid "Default skin:"
+#~ msgstr "áááá£ááá¡á®áááá ááá á¡á:"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "á¨áá£á«ááááááá gnome-vfs-áá¡ ááááªáááááááªáá.\n"
+
+#~ msgid "/By extension"
+#~ msgstr "/ááá¤áá áááááá¡ ááá®ááááá"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ko.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3639 @@
+# Korean translation for the BMP(Beep Media Player)
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bmp package.
+# DongCheon Park <dcpark at kaist.ac.kr>, 2003-2004.
+# Merged with the previous XMMS Korean translation by
+# Sang-Jin Hwang <accel at accellinux.org>, 1999.
+# Man-Yong Lee <yong at linuxkorea.co.kr>, 2000.
+# Jaegeum Choe <baedaron at hananet.net>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-06-29 19:02+0900\n"
+"Last-Translator: DongCheon Park <dcpark at kaist.ac.kr>\n"
+"Language-Team: Korean <ko at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD ì¤ëì¤ íë¬ê·¸ì¸"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD ì¤ëì¤ í¸ë %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(ì ì ìì)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "ëë¼ì´ë¸ %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"%s ì¥ì¹ ì´ê¸° ì¤í¨\n"
+"ì¤ë¥: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"\"목ë¡\" ì½ê¸° ì¤í¨\n"
+"ëë¼ì´ë¸ì ëì¤í¬ê° ììì§ë?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"%s ì¥ì¹ ì ì.\n"
+"ëì¤í¬ì %dê° í¸ë ì¡´ì¬"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d ë°ì´í° í¸ë)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"ì ì²´ 길ì´: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"ëì¤í¬ì ì¤ëì¤ í¸ëì´ ìì¼ë¯ë¡ ëì§í¸ ì¤ëì¤ ì¶ì¶ ìíì 못íìµëë¤.\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"ëì§í¸ ì¤ëì¤ ì¶ì¶ ìí: ì ì\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"ëì§í¸ ì¤ëì¤ ì¶ì¶ ìí ì¤í¨: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"%s ëë í 리 ê²ì¬ ì¤í¨\n"
+"ì¤ë¥: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "ì¤ë¥: %sê° ì¡´ì¬íë, ëë í ë¦¬ê° ìëëë¤."
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "%s ëë í 리 ì ì."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "ì¥ì¹:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "ì¥ì¹(_D):"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "ëë í 리(_e):"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "ì¬ì 모ë:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "ìë ë¡ê·¸"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "ëì§í¸ ì¤ëì¤ ì¶ì¶"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "ìë ì¡°ì :"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "믹ì ìì"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM ëë¼ì´ë¸"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS 믹ì"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "ëë¼ì´ë¸ ê²ì¬..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "ëë¼ì´ë¸ ì ê±°"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD ì¤ëì¤ ì¬ì기 ì¤ì "
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "ëë¼ì´ë¸ ì¶ê°"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "ì¥ì¹"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "CDDB ì¬ì©"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "ìë² ëª©ë¡ ì»ê¸°"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "ë¤í¸ìí¬ ì°½ 보기"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB ìë²:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD ì¸ë±ì¤:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "CD ì¸ë±ì¤ ì¬ì©"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD ì¸ë±ì¤ ìë²:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "í¸ë ì´ë¦:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "ì¼ë° ì 목 ë®ì´ì°ê¸°"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "ì´ë¦ íì:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD ì ë³´"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "MPEG ì¤í¸ë¦¼ì ì ì¥í ëë í 리 ì í:"
+
+#: Input/mpg123/configure.c:344
+#, fuzzy
+msgid "MPEG Audio Plugin Configuration"
+msgstr "bmp: MPEG ì¤ëì¤ íë¬ê·¸ì¸ ì¤ì "
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "í´ìë:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 ë¹í¸"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 ë¹í¸"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "ì±ë:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "ì¤í
ë ì¤ (ê°ë¥í ê²½ì°)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "모ë
¸"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "ìí ë¤ì´:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "ëì½ë:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "ìë ê°ì§"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! ìµì í ëì½ë"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX ìµì í ëì½ë"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU ëì½ë"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "ì íì¬í"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ë´ì©"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "íì¥ì"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "íì¥ì ë° ë´ì©"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "ëì½ë"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ë²í¼ë§:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "ë²í¼ í¬ê¸° (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "ì¬ì ë²í¼ (í¼ì¼í¸):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "íë¡ì:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "íë¡ì ì¬ì©"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "í¸ì¤í¸:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "í¬í¸:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "ì¸ì¦ ì¬ì©"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "ì¬ì©ìëª
:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "ë¹ë°ë²í¸:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "ì¤í¸ë¦¼ì ì ì¥í ëì¤í¬:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "ëì¤í¬ì ì¤í¸ë¦¼ ì ì¥"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "ê²½ë¡:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "íì"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "ì¤ì°í¸/ìì´ì¤ìºì¤í¸:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "ìì´ì¤ìºì¤í¸ ë©íì ë³´ UDP ì±ë ì¬ì©"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "ì¤í¸ë¦¬ë°"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 íê·¸:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ID3V2 íê·¸ ì¬ì© ìí¨"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr ""
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 íì:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "ì 목"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"íì¼ë¡ 기ë¡í ì ììµëë¤.: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "í그를 ì¸ ì ììµëë¤!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"íì¼ì ì´ ì ììµëë¤.: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "íì¼ ì ë³´"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "íì¸"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"íì¼ì ì를 ì ììµëë¤.: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "í그를 ì ê±°í ì ììµëë¤!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "ì ê±°í íê·¸ê° ììµëë¤!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "ì¤í
ë ì¤"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "ì¡°ì¸í¸ ì¤í
ë ì¤"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "ì´ì¤ ì±ë"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "ë¨ì¼ ì±ë"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "ìì"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "ìëì¤"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "ì"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "ì´ë¦:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG ì ë³´ "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG ìì¤:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ë¹í¸ì¨:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "ìíë§ì¨:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "íë ìì:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "íì¼í¬ê¸°:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "ì¤ë¥ ë°©ì§:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "ì¬ì©ê¶:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "ì본:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "ê°ì¡°:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr "ID3 íê·¸"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "ì 목:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "ê°ì:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "ì¨ë²:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "ì¤ëª
:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "ì°ë:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "í¸ë ë²í¸:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "ì¥ë¥´:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "ë¶ê°"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"ê°ë³,\n"
+"íê· ë¹í¸ì¨: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu ë°ì´í¸"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "ì¤ë¥"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "%s ì°¾ë ì¤"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "%s í¸ì¤í¸ë¥¼ ì°¾ì ì ììµëë¤."
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "%sì ì°ê²°ì¤:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "%s í¸ì¤í¸ì ì°ê²°í ì ììµëë¤."
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "ì°ê²°ë¨: ìëµì 기ë¤ë¦¬ë ì¤"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"%s í¸ì¤í¸ì ì°ê²°í ì ììµëë¤.\n"
+"ìë² ìëµ: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ì¬ì ë²í¼ë§: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "ë¸ë£¨ì¤"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "ê³ ì ë½"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "컨í¸ë¦¬"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "ëì¤"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "ëì¤ì½"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "íí¬"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "ê·¸ë°ì§"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "íí©"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "ì¬ì¦"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "ë©í"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "ë´ìì´ì§"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "ì¬ëí"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "기í"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "í"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "ë©"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "ë ê²"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "ë½"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "í
í¬ë
¸"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "ì¸í°ì¤í¸ë¦¬ì¼"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "ì¼í°ëí°ë¸"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "ì¤ì¹´"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "ë°ì¤ ë©í"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "íëí¬ì¤"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "ì¬ì´ëí¸ë"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "ì ë¡-í
í¬ë
¸"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "ì ë¹ìí¸"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "í¸ë¦½ í©"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "보컬"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "ì¬ì¦+íí¬"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "í¨ì ¼"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "í¸ëì¤"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "í´ëì"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "기ì
"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "ììë"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "íì°ì¤"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "ê²ì"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "ì리 í´ë¦½"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "ì±ê°"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "ì¡ì"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "ìí´ ë½"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "ë² ì´ì¤"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "ìì¸"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "íí¬"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "ì°ì£¼"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "ëª
ì"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "ì¸ì¤í¸ë£¨ë©í í"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "ì¸ì¤í¸ë£¨ë©í ë¡"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "민족"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "ê³ ë"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "ë¤í¬ì¨ì´ë¸"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "ì¸í°ì¤í¸ë¦¬ì¼ í
í¬ë
¸"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "ì ììì
"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "í-í¬í¬"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "ì ë¡ëì¤"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "ë림"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "ë¨ë¶ ë½"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "ì½ë©ë"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "컬í¸"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "ê°±ì¤í° ë©"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "í± 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "기ë
êµ ë©"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "í/íí¬"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "ì ê¸"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "ë¶ë¯¸ í ì"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "ì¹´ë°ë "
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "ë´ ì¨ì´ë¸"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "íê°í"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "ë ì´ë¸"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "ì¼ ìì
"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "ìê³ ìì
"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "ë¡-íì´"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "í¸ë¼ì´ë²"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "ììë íí¬"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "ììë ì¬ì¦"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "í´ì¹´"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "ë í¸ë¡"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "뮤ì§ì»¬"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "ë½ & 롤"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "íë ë½"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "í¬í¬"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "í¬í¬/ë¡"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "ë´ì¼ë í¬í¬"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "ì¤ì"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "ë¹ ë¥¸-í¨ì "
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "ë¹ë°¥"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "ë¼í´"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "리ë°ì´ë²"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "ì¼í¸"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "ë¸ë£¨ê·¸ëì¤"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "ì ì"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "ê³ ë ë½"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "íë¡ê·¸ëìë¸ ë½"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "íê°í ë½"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "êµí¥ì
ë¨í ë½"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "ë린 ë½"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "í° ë°´ë"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "í©ì°½"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "ì´ì§ 리ì¤ë"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "ì´ì¿ ì¤í±"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "ì 머"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "ì°ì¤"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "ì¹ì"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "ì¤íë¼"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "ì¤ë´ì
"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "ìëí"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "êµí¥ì
"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "ë¶í° ë°°ì´ì¤"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "íë¼ì´ë¨¸ì¤"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "í¬ë¥´ë
¸í"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "íì"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "ì¬ë¡ì° ì¼"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "í´ë½"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "í±ê³ "
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "ì¼ë°"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "민ìì
"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "ë°ë¼ë"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "íì ë°ë¼ë"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "리ë믹 ìì¸"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "í리ì¤íì¼"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "ëì£"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "íí¬ ë½"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "ëë¼ ë
주"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "ì ì¹´í ë¼"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "ì ë¡-íì°ì¤"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "ëì¤í"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "ì¸ëí"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "ëë¼ & ë² ì´ì¤"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "í´ë½-íì°ì¤"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "íëì½ì´"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "콩í¬"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "ì¸ë"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "ìêµí"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "íì¸íí¬"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk íí¬"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "ë¹í¸"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "기ë
êµ ê°±ì¤í° ë©"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "í¤ë¹ ë©í"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "íì¸ ë©í"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "í¬ë¡ì¤ ì¤ë²"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "íì¬ ê¸°ë
êµ"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "기ë
êµ ë½"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "ë©ë ê³"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "ì´ì¬"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "í¸ëì ë©í"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "ë§í"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "ì¼ë³¸ í"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "ì ì¤í"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "MPEG ì¤ëì¤ íë¬ê·¸ì¸ ì ë³´"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 ëì½ë© ìì§ ì ì Michael Hipp <mh at mpg123.de> \n"
+"íë¬ê·¸ì¸ ì ì XMMS í"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG ì¤ëì¤ íë¬ê·¸ì¸"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Ogg Vorbis ì¤í¸ë¦¼ì ì ì¥í ëë í 리 ì í:"
+
+#: Input/vorbis/configure.c:275
+#, fuzzy
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "bmp: Ogg Vorbis ì¤ëì¤ íë¬ê·¸ì¸ ì¤ì "
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis íê·¸:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "ì 목 íì:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ì¬ì ìëì¡°ì ì¤ì :"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "í´ë¦½í ë°©ì§ ì¬ì©"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "ì¬ì ìëì¡°ì ì¬ì©"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ì¬ì ìëì¡°ì íì:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "í¸ë ìëì¡°ì /ìµê³ ì ì¬ì©"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "ì¨ë² ìëì¡°ì /ìµê³ ì ì¬ì©"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "6dB ë¶ì¤í¸ + ê°ì ì í ì¬ì©"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ì¬ì ìëì¡°ì "
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"ì¤ë¥ ë°ì:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "ì¤ë¥!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "íê·¸ ìì ì¤í¨ (ì´ê¸°)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "íê·¸ ìì ì¤í¨ (ë«ê¸°)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "íê·¸ ìì ì¤í¨"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "Ogg Vorbis íê·¸"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ë ì§:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "ì¤ëª
:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ìì¹:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "ë²ì :"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC ë²í¸:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ì¡°ì§:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr "Ogg Vorbis ì¬ì ìëì¡°ì "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "í¸ë ìëì¡°ì :"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "í¸ë ìµê³ ì :"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "ì¨ë² ìëì¡°ì :"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "ì¨ë² ìµê³ ì :"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "Ogg Vorbis ì ë³´ "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "길ì´:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (ë³´íµ)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis ì¤ëì¤ íë¬ê·¸ì¸"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis ì¤ëì¤ íë¬ê·¸ì¸ ì ë³´"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis íë¬ê·¸ì¸, Xiph.org ì¬ë¨\n"
+"\n"
+"ìë ì½ë:\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"기ì¬í ì¬ë:\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Xiph.org ì¬ë¨ 주ì - http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV ì¤ëì¤ íë¬ê·¸ì¸"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS ì¶ë ¥ íë¬ê·¸ì¸"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "OSS ëë¼ì´ë² ì ë³´"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS ëë¼ì´ë²\n"
+"\n"
+"본 íë¡ê·¸ë¨ì ê³µê° ìíí¸ì¨ì´ì
ëë¤; ìì ìíí¸ì¨ì´ ì¬ë¨(Free Software\n"
+"Foundation)ì GNU General Public Licenseì ë°ë¼ 본 íë¡ê·¸ë¨ì ìì íê±°ë\n"
+"GPLì ëë²ì§¸ ë²ì , í¹ì (ì íì ë°ë¼) ê·¸ ì´íì ììì ë²ì ì¼ë¡ ì¬ë°°í¬í \n"
+"ìë ììµëë¤.\n"
+"\n"
+"본 íë¡ê·¸ë¨ì´ ì ì©íê² ë°°í¬ë길 ë°ëëë¤. íì§ë§ 본 íë¡ê·¸ë¨ì\n"
+"ìíì± ëë í¹ì 목ì ìì ì¬ì© ê°ë¥ì±ì ëí ë³´ì¦ì´ë 기í\n"
+"ì´ë¤í ë³´ì¦ë íì§ ììµëë¤. ë³´ë¤ ìì¸í ì¬íì GNU General\n"
+"Public License를 ì°¸ê³ íì기 ë°ëëë¤.\n"
+"\n"
+"ì¬ë¬ë¶ê»ìë GNU General Public License를 본 íë¡ê·¸ë¨ê³¼ í¨ê»\n"
+"ë°ì¼ì
¨ìµëë¤; ë§ì½ ê·¸ë ì§ ìë¤ë©´, Free Software\n"
+"Foundation, Inc,, 59 Template Place - Suite 330, Boston, NA 02111-1307,\n"
+"USAë¡ ì°ë½íì기 ë°ëëë¤."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "ê¸°ë³¸ê° (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "기본ê°"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS ëë¼ì´ë² ì¤ì "
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "ì¤ëì¤ ì¥ì¹:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "ë¤ë¥¸ ì¥ì¹ ì¬ì©í기:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "믹ì ì¥ì¹:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "ì¥ì¹"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "ë²í¼ í¬ê¸° (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "ë²í¼ë§"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "믹ì ì¤ì :"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "ìë ì ì´ë¥¼ PCMì¼ë¡ íì§ ìì"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "믹ì"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "ESounD ì¤ëì¤ íë¬ê·¸ì¸ ì ë³´"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD íë¬ê·¸ì¸\n"
+"\n"
+"본 íë¡ê·¸ë¨ì ê³µê° ìíí¸ì¨ì´ì
ëë¤; ìì ìíí¸ì¨ì´ ì¬ë¨(Free Software\n"
+"Foundation)ì GNU General Public Licenseì ë°ë¼ 본 íë¡ê·¸ë¨ì ìì íê±°ë\n"
+"GPLì ëë²ì§¸ ë²ì , í¹ì (ì íì ë°ë¼) ê·¸ ì´íì ììì ë²ì ì¼ë¡ ì¬ë°°í¬í \n"
+"ìë ììµëë¤.\n"
+"\n"
+"본 íë¡ê·¸ë¨ì´ ì ì©íê² ë°°í¬ë길 ë°ëëë¤. íì§ë§ 본 íë¡ê·¸ë¨ì\n"
+"ìíì± ëë í¹ì 목ì ìì ì¬ì© ê°ë¥ì±ì ëí ë³´ì¦ì´ë 기í\n"
+"ì´ë¤í ë³´ì¦ë íì§ ììµëë¤. ë³´ë¤ ìì¸í ì¬íì GNU General\n"
+"Public License를 ì°¸ê³ íì기 ë°ëëë¤.\n"
+"\n"
+"ì¬ë¬ë¶ê»ìë GNU General Public License를 본 íë¡ê·¸ë¨ê³¼ í¨ê»\n"
+"ë°ì¼ì
¨ìµëë¤; ë§ì½ ê·¸ë ì§ ìë¤ë©´, Free Software\n"
+"Foundation, Inc,, 59 Template Place - Suite 330, Boston, NA 02111-1307,\n"
+"USAë¡ ì°ë½íì기 ë°ëëë¤."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD ì¶ë ¥ íë¬ê·¸ì¸ ì¤ì "
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "ì격 í¸ì¤í¸ ì¬ì©"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "ìë ì ì´ OSS 믹ì"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "ìë²"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound ì¶ë ¥ íë¬ê·¸ì¸"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "ALSA ëë¼ì´ë² ì ë³´"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA ëë¼ì´ë²\n"
+"\n"
+"본 íë¡ê·¸ë¨ì ê³µê° ìíí¸ì¨ì´ì
ëë¤; ìì ìíí¸ì¨ì´ ì¬ë¨(Free Software\n"
+"Foundation)ì GNU General Public Licenseì ë°ë¼ 본 íë¡ê·¸ë¨ì ìì íê±°ë\n"
+"GPLì ëë²ì§¸ ë²ì , í¹ì (ì íì ë°ë¼) ê·¸ ì´íì ììì ë²ì ì¼ë¡ ì¬ë°°í¬í \n"
+"ìë ììµëë¤.\n"
+"\n"
+"본 íë¡ê·¸ë¨ì´ ì ì©íê² ë°°í¬ë길 ë°ëëë¤. íì§ë§ 본 íë¡ê·¸ë¨ì\n"
+"ìíì± ëë í¹ì 목ì ìì ì¬ì© ê°ë¥ì±ì ëí ë³´ì¦ì´ë 기í\n"
+"ì´ë¤í ë³´ì¦ë íì§ ììµëë¤. ë³´ë¤ ìì¸í ì¬íì GNU General\n"
+"Public License를 ì°¸ê³ íì기 ë°ëëë¤.\n"
+"\n"
+"ì¬ë¬ë¶ê»ìë GNU General Public License를 본 íë¡ê·¸ë¨ê³¼ í¨ê»\n"
+"ë°ì¼ì
¨ìµëë¤; ë§ì½ ê·¸ë ì§ ìë¤ë©´, Free Software\n"
+"Foundation, Inc,, 59 Template Place - Suite 330, Boston, NA 02111-1307,\n"
+"USAë¡ ì°ë½íì기 ë°ëëë¤.\n"
+"ì ìì: Matthleu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s ì¶ë ¥ íë¬ê·¸ì¸"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "ì ì ìë ì¬ì´ëì¹´ë"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "기본 PCM ì¥ì¹ (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA ëë¼ì´ë² ì¤ì "
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "믹ì:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "ìíí¸ì¨ì´ ìë ì¡°ì ì¬ì©"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "믹ì ì¹´ë:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "ì¥ì¹ ì¤ì "
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "ê³ ê¸ ì¤ì :"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "ë²í¼ ìê° (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "주기 ìê° (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "ë²í¼ ìê° (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap 모ë"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "ê³ ê¸ ì¤ì "
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/ë°ì½ë ì´ì
ë³´ì´ê¸°"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ë«ê¸°"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "í림 ìì"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "í림 ìì: ìì ì í"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "ì íì¬í:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "ì°ì£¼ì/ê°ì"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "ì¨ë²"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "ì¥ë¥´"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "íì¼ ì´ë¦"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "íì¼ ê²½ë¡"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "íì¼ íì¥ì"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "í¸ë ì´ë¦"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "í¸ë ë²í¸"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ë ì§"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "ì°ë"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "ì¤ëª
"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: íì \"...\" %n íëª©ì´ ìë ê²½ì°ë§"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"XMMS 기ë°ì 미ëì´ íë ì´ì´\n"
+"\n"
+"Copyright (C) 2003-2004 BMP ê°ë° í\n"
+"íê¸ë²ì: ë쪽íë (dcpark at kaist.ac.kr)\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "ê°ë°ì:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "ëì 주ì ë¶ë¤:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "ííì´ì§ ë° ê·¸ëí½:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ì¤êµì´:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+#, fuzzy
+msgid "Czech:"
+msgstr "íëì¤ì´:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+#, fuzzy
+msgid "Dutch:"
+msgstr "ëì£"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "ì¤íì¸ì´:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "íëì¤ì´:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "ë
ì¼ì´:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "ë
ì¼ì´:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "ì¥ë¥´:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+#, fuzzy
+msgid "Italian:"
+msgstr "리í¬ìëìì´:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "ì¼ë³¸ì´:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr ""
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "리í¬ìëìì´:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "í´ëëì´:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+#, fuzzy
+msgid "Romanian:"
+msgstr "리í¬ìëìì´:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr ""
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "ì¤íì¸ì´:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "ì¤ì¨ë´ì´:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "ì¡°ì§:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "ì¨ì¼ì¤ì´:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "BMP ì ë³´"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "ê³µë¡"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ë²ì"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/ì½ê¸°"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/ì½ê¸°/ì¤ì ê°"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/ì½ê¸°/ì¤ì ê° ìë-ì½ê¸°"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/ì½ê¸°/기본ê°"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/ì½ê¸°/ìì"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/ì½ê¸°/íì¼"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/ì½ê¸°/WinAMP EQF íì¼"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/ê°ì ¸ì¤ê¸°"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/ê°ì ¸ì¤ê¸°/Winamp ì¤ì ê°"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/ì ì¥"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/ì ì¥/ì¤ì ê°"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/ì ì¥/ì¤ì ê° ìë-ì½ê¸°"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/ì ì¥/기본ê°"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/ì ì¥/íì¼"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/ì ì¥/WinAMP EQFíì¼"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/ìì "
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/ìì /ì¤ì ê°"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/ìì /ì¤ì ê° ìë-ì½ê¸°"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP ì´íë¼ì´ì "
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "ì¤ì ê°"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "ì¤ì ê°"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "ì¤ì ê° ì½ê¸°"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "ìë-ì¤ì ê° ì½ê¸°"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "ì´íë¼ì´ì ì¤ì ê° ì½ê¸°"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "ì¤ì ê° ì ì¥"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "ìë-ì¤ì ê° ì ì¥"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "ì´íë¼ì´ì ì¤ì ê° ì ì¥"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "ì¤ì ê° ìì "
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "ìë ì¤ì ê° ìì "
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ì ì ìë ìµì
'%s'\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: `--%s' ìµì
ì ì¸ì를 ì¬ì©íì§ ììµëë¤.\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: `%c%s' ìµì
ì ì¸ì를 ì¬ì©íì§ ììµëë¤.\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: `%s' ìµì
ì ì¸ìê° íìí©ëë¤.\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ì ì ìë ìµì
`--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ì ì ìë ìµì
%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ë¶ì ì í ìµì
-- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ì못ë ìµì
-- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ì¸ìê° íìí ìµì
-- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ì ì ìë ìµì
`-W %s'\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: `-W %s' ìµì
ì ì¸ì를 ì¬ì©íì§ ììµëë¤.\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "ì´ ê²½ê³ ë¥¼ ë¤ì ë³´ì´ì§ ììµëë¤."
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr ""
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "íì¼ì´ë¦"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "íì¼ì´ë¦:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "ì´ íì¼ì ì¸ìíë ì
ë ¥ íë¬ê·¸ì¸ì´ ììµëë¤."
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "ì
ë ¥ íë¬ê·¸ì¸: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "(%s) ë¡ê·¸ íì¼ì ìì±í ì ììµëë¤!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "(%s) ëë í 리를 ìì±í ì ììµëë¤.: %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ì¬ì©ë²: beep-media-player [ì íì¬í] [íì¼] ...\n"
+"\n"
+"ì íì¬í:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "ì´ ëìë§ì íìíê³ ëë"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "BMP/XMMS ì¸ì
ì í (기본ê°: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "ì¬ì목ë¡ì ë·ë¶ë¶ ê±´ëë°ê¸°"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "íì¬ ì¬ìëª©ë¡ ì¬ì ìì"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "íì¬ ë
¸ë ë©ì¶¤"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "íì¬ ë
¸ë ì ì§"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "ì¬ìì¤ì´ë©´ ë©ì¶¤, ê·¸ ì¸ìë ì¬ì"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "ì¬ì목ë¡ì ìë¶ë¶ ê±´ëë°ê¸°"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "ì¬ìëª©ë¡ ì§ì°ì§ ìì"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "기본 ì°½ ë³´ì"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ì´ì ì¸ì
ID"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ë²ì ë²í¸ë¥¼ ì¶ë ¥íê³ ëë\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"SIGSEGV ì í¸ë¥¼ ë°ììµëë¤.\n"
+"\n"
+"ì´ê²ì BMPì ë²ê·¸ì¼ ì ììµëë¤. ì´ê²ì´ ë°ìí ì´ì 를 모른ë¤ë©´,\n"
+"beepmp-devel at lists.sourceforge.netì¼ë¡ ë©ì¼ì ë³´ë´ì£¼ì기 ë°ëëë¤.\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>ì¤í¨ì ì½ì ì ììµëë¤.</big></b>\n"
+"\n"
+"'%s'ì ìë ì¤í¨ì´ ì¬ì©ê°ë¥íì§, 기본 ì¤í¨ì´ '%s'ì ì ëë¡ ì¤ì¹ëì´ìëì§ í"
+"ì¸íì기 ë°ëëë¤.\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"ì¬ì© ì¤ì¸ GTK+ ë²ì (%d.%d.%d)ììë BMPê° ëìíì§ ììµëë¤.\n"
+"GTK+ %s ì´ë ê·¸ ì´ìì ì¬ì©íì¸ì.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"íì¬ íë«í¼ìì ì°ë ëê° ì§ìëì§ ììµëë¤.\n"
+"\n"
+"ì¬ì© ì¤ì¸ 리ë
ì¤ ìì¤í
ì´ libc5 기ë°ì´ë©° LinuxThreads를 ì¤ì¹í기 ì ì Glibê³¼ "
+"GTK+를 ì¤ì¹íì
¨ë¤ë©´\n"
+"Glibê³¼ GTK+를 ë¤ì ì»´íì¼í´ì¼ í©ëë¤.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: ëì¤íë ì´ë¥¼ ì´ ì ìì´, ì¢
ë£í©ëë¤."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/í¸ë ì¸ë¶ì ë³´ 보기"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/ì 목 ìë ì¤í¬ë¡¤"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/ìê°í¨ê³¼ 모ë"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/ìê°í¨ê³¼ 모ë/ì¤íí¸ë¼"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/ìê°í¨ê³¼ 모ë/íí"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/ìê°í¨ê³¼ 모ë/ë기"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/ì¤íí¸ë¼ 모ë"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/ì¤íí¸ë¼ 모ë/ì¼ë°"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/ì¤íí¸ë¼ 모ë/íì¼"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/ì¤íí¸ë¼ 모ë/ìì§ì "
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/ì¤íí¸ë¼ 모ë/ì "
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/ì¤íí¸ë¼ 모ë/ë§ë기"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/ì¤íí¸ë¼ 모ë/ê¼ì§ì "
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/íí 모ë"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/íí 모ë/ì íí"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/íí 모ë/ì íí"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/íí 모ë/ê³ ì²´ íí"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/ì°½ì¤ì VU 모ë"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/ì°½ì¤ì VU 모ë/ì¼ë°"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/ì°½ì¤ì VU 모ë/ë¶ëë½ê²"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ì¬ìì¨"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/ì¬ìì¨/ìµë (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/ì¬ìì¨/ì¤ê° (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/ì¬ìì¨/25% (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ì¬ìì¨/12.5% (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/ì¤íí¸ë¼ ê°ì"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/ì¤íí¸ë¼ ê°ì/ìµëí ë리ê²"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/ì¤íí¸ë¼ ê°ì/ë리ê²"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/ì¤íí¸ë¼ ê°ì/ì¤ê°"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/ì¤íí¸ë¼ ê°ì/ë¹ ë¥´ê²"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/ì¤íí¸ë¼ ê°ì/ìµëí ë¹ ë¥´ê²"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/ìµê³ ì ê°ì"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/ìµê³ ì ê°ì/ìµëí ë리ê²"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/ìµê³ ì ê°ì/ë리ê²"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/ìµê³ ì ê°ì/ì¤ê°"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/ìµê³ ì ê°ì/ë¹ ë¥´ê²"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/ìµê³ ì ê°ì/ìµëí ë¹ ë¥´ê²"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/ë°ë³µ"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/ë¤ì기"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ì¬ì"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ë©ì¶¤"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/ì ì§"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/ì´ì "
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/ë¤ì"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/ëª©ë¡ ì²ìì¼ë¡"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/íì¼ ì´ë"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/ìê° ì´ë"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/íê²½ì¤ì "
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/BMP ì ë³´"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/ëë´ê¸°(_Q)"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/ì¶ê°/íì¼..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/ì¶ê°/ì¸í°ë· ìì¹..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/ì¬ìëª©ë¡ í¸ì§ê¸° 보기"
+
+#: beep/mainwin.c:403
+#, fuzzy
+msgid "/Show Equalizer"
+msgstr "ì´íë¼ì´ì "
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/경과 ìê°"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/ë¨ì ìê°"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/íì 맨 ì"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+#, fuzzy
+msgid "/Roll up Playlist Editor"
+msgstr "/ì¬ìëª©ë¡ í¸ì§ê¸° íì±"
+
+#: beep/mainwin.c:420
+#, fuzzy
+msgid "/Roll up Equalizer"
+msgstr "ì´íë¼ì´ì "
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "ìê° ì´ë"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "ë¶:ì´"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "í¸ë 길ì´:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "ë기ì´"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "ë기ì´"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "í¸ë ì´ë"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "íí°: "
+
+#: beep/mainwin.c:1884
+#, fuzzy
+msgid "Add Folders"
+msgstr "íì¼ ì¶ê°"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/ì¶ê°/ì¸í°ë· 주ì..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ì´ë ìì¹: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "ìë: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "ê· í: %d%% ì¼ìª½"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "ê· í: ê°ì´ë°"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "ê· í: %d%% ì¤ë¥¸ìª½"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "ìµì
ë©ë´"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "íì 맨 ì í´ì (ë¶ê°)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "íì 맨 ì ì¤ì (ë¶ê°)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "íì 맨 ì í´ì "
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "íì 맨 ì ì¤ì "
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "íì¼ ì ë³´ ìì"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "ìê°í¨ê³¼ ë©ë´"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>ì¬ìê°ë¥í CDê° ììµëë¤.</big></b>\n"
+"\n"
+"ì½ì
ë CDê° ìê±°ë, ì¤ëì¤ CDê° ìëëë¤.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>ì¤ëì¤ë¥¼ ì´ ì ììµëë¤.</big></b>\n"
+"\n"
+"ì ê² ì¬í:\n"
+"1. ì¬ë°ë¥¸ ì¶ë ¥ íë¬ê·¸ì¸ ì í ì¬ë¶\n"
+"2. ë¤ë¥¸ íë¡ê·¸ë¨ì ì¬ì´ëì¹´ë ì¬ì© ì¬ë¶\n"
+"3. ì¬ì´ëì¹´ëì ì¬ë°ë¥¸ ì¤ì ì¬ë¶\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/ì íí목 ì ê±°"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/ì íí목 ì ê±°"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/ì íí목 ì ê±°"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/ëê¸°ì´ ê³ ì "
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/ì¶ê°/íì¼..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/ì¶ê°/ì¸í°ë· 주ì..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/ì¶ê°/íì¼..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/ì¶ê°/íì¼..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/ëê¸°ì´ ë¹ì"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/ì í¨íì§ ìì íì¼ ì ê±°"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/ì 목ë¡"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/ëª©ë¡ ì ë ¬"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/ì 목ë¡"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/보기 ìë¡ê³ 침"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/ì í ì ë ¬"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/ì í ì ë ¬"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "모ë ì í"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/ëª©ë¡ ë¬´ììí"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/ëª©ë¡ ììì¼ë¡"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/ëª©ë¡ ì ë ¬"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/ëª©ë¡ ì ë ¬/ì 목 ì"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/ëª©ë¡ ì ë ¬/íì¼ì´ë¦ ì"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/ëª©ë¡ ì ë ¬/ê²½ë¡ + íì¼ì´ë¦ ì"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/ëª©ë¡ ì ë ¬/ë ì§ ì"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/ì í ì ë ¬"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/ì í ì ë ¬/ì 목 ì"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/ì í ì ë ¬/íì¼ì´ë¦ ì"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/ì í ì ë ¬/ê²½ë¡ + íì¼ì´ë¦ ì"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/ì í ì ë ¬/ë ì§ ì"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "ì¬ìëª©ë¡ \"%s\" ì°ê¸° ì¤ë¥: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%së ì´ë¯¸ ì¡´ì¬í©ëë¤. ê³ì í ê¹ì?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "ì¬ì목ë¡ì ì ì¥í ì ììµëë¤! %sì íì¼íìì ì ì ììµëë¤."
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "ì¬ìëª©ë¡ ì´ê¸°"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "ì¬ìëª©ë¡ ì ì¥"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP ì¬ìëª©ë¡ í¸ì§ê¸°"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "ê²ëª¨ì"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "ì´íë¼ì´ì "
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "ë§ì°ì¤"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "ì¬ì목ë¡"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "íë¬ê·¸ì¸"
+
+#: beep/prefswin.c:93
+#, fuzzy
+msgid "Artist"
+msgstr "ê°ì:"
+
+#: beep/prefswin.c:96
+#, fuzzy
+msgid "Tracknumber"
+msgstr "í¸ë ë²í¸"
+
+#: beep/prefswin.c:99
+#, fuzzy
+msgid "Filepath"
+msgstr "íì¼ ê²½ë¡"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "ì¬ì©í¨"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "ì¤ëª
:"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "ì¹´í
ê³ ë¦¬"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "ì íì¬í ì°½"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "íì¼ ì¶ê°"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/íì¼ ì르기"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "íì¼ ì¶ê°"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (ì í¨íì§ ìì UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP ì íì¬í"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>íë¬ê·¸ì¸</b></span>"
+
+#: beep/glade/prefswin.glade:147
+#, fuzzy
+msgid "_Media plugin list:"
+msgstr "íë¬ê·¸ì¸ 목ë¡(_P):"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>미ëì´</b></span>"
+
+#: beep/glade/prefswin.glade:282
+#, fuzzy
+msgid "_General plugin list:"
+msgstr "íë¬ê·¸ì¸ 목ë¡(_P):"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>ì¼ë°</b></span>"
+
+#: beep/glade/prefswin.glade:417
+#, fuzzy
+msgid "_Visualization plugin list:"
+msgstr "/ìê°í¨ê³¼ íë¬ê·¸ì¸"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>ìê°í¨ê³¼</b>"
+
+#: beep/glade/prefswin.glade:552
+#, fuzzy
+msgid "_Effect plugin list:"
+msgstr "íë¬ê·¸ì¸ 목ë¡(_P):"
+
+#: beep/glade/prefswin.glade:649
+#, fuzzy
+msgid "<b>Effects</b>"
+msgstr "<b>ì¤ì ê°</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "íì¬ ì¶ë ¥ íë¬ê·¸ì¸(_C):"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"ë³ê²½ì¬íì´ BMP ì¤ì ë°ì´í°ë² ì´ì¤ì ì ì¥ëìì§ë§, ë¤ì 곡ë ê¹ì§ë ì¬ìì ë°ì"
+"ëì§ ììµëë¤!\n"
+"\n"
+"ì¬ìì ë©ì¶ê³ ë¤ì ì¬ììì¼ì ë³ê²½ì¬íì ë°ìí ìë ììµëë¤."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>ì¶ë ¥</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>ê²ëª¨ì</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>ì¤í¨(_S)</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>ê¸ê¼´(_F)</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "íë ì´ì´(_P):"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "ì¬ì목ë¡(_P):"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "기본 ì¬ì ì°½ ê¸ê¼´ ì í:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "ì¬ìëª©ë¡ ê¸ê¼´ ì í:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>기í(_M)</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "ì¬ì목ë¡ì í¸ë ë²í¸ ë³´ì´ê¸°"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>ë§ì°ì¤</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>ë§ì°ì¤ í </b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "ë§ì°ì¤ í ì ìí ìë ì¡°ì "
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "í¼ì¼í¸"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "ì¬ì목ë¡ìì ë§ì°ì¤ ì¤í¬ë¡¤"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "ì¤"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>ì¬ì목ë¡</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>íì¼ì´ë¦</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "ë°ì¤ì 공백ì¼ë¡ ë°ê¿"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "%20ì 공백ì¼ë¡ ë°ê¿"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ë©íë°ì´í°</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "ìì
íì¼ë¡ë¶í° ë©íë°ì´í°(íê·¸ ì ë³´) ì½ê¸°"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "ì¬ìëª©ë¡ ë° íì¼ë¡ë¶í° ë©íë°ì´í° ì½ê¸°"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "íì¼ì ì´ê±°ë ì¬ì목ë¡ì ì¶ê°í ë ë©íí
ì´í° ì½ê¸°"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "ì½ì ë"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "ì¬ì목ë¡ì íì¼ì íìíëë¡ ìì²ì ë©íë°ì´í° ì½ê¸°"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "íìí ë"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ì¬ìí기</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "ì¬ìì´ ëëë©´, ìëì¼ë¡ ë¤ì곡 ì§í ìí¨."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "ì¬ì목ë¡ìì ë¤ì곡 ì§í ìí¨"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "곡ì¬ì´ ë©ì¶¤ ìê°"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "ì ì ë©ì¶¤"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ì´"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>ë
¸ë íì</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>ì´íë¼ì´ì </b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>ì¤ì ê°</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "ì¤ì ê° íì¼ ëë í 리:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "ì¤ì ê° íì¼ íì¥ì:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ê°ë¥í ì¤ì ê°(_P):"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "모ë ì í"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "ì í í´ì "
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "ì¤ì°í¸/ìì´ì¤ìºì¤í¸ ì 목 ì¤í¸ë¦¬ë° ì¬ì©"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "Default skin:"
+#~ msgstr "기본 ì¤í¨:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "XMMS í¸íì± ëª¨ë"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "gnome-vfs를 ì´ê¸°í í ì ììµëë¤.\n"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/ìê°í¨ê³¼ íë¬ê·¸ì¸"
+
+#~ msgid "/Play CD"
+#~ msgstr "/CD ì¬ì"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/5 ì´ ëê°ê¸°"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/5 ì´ ë¹¨ë¦¬ê°ê¸°"
+
+#~ msgid "/Add"
+#~ msgstr "/ì¶ê°"
+
+#~ msgid "/Playback"
+#~ msgstr "/ì¬ìí기"
+
+#~ msgid "/_Options"
+#~ msgstr "/ì íì¬í(_O)"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/ê·¸ëí½ EQ 보기"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/ì¤í¨ ë¤ì ì½ê¸°"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/ë¤ì곡 ì§í ìí¨"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/모ë ìì
ê³µê°ì ë기"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/ì°½ì¤ì 모ë"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/ì¬ìëª©ë¡ ì°½ì¤ì 모ë"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/ì´íë¼ì´ì ì°½ì¤ì 모ë"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/ëë°° í¬ê¸°"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/ì¬ì´ ì´ë"
+
+#~ msgid "Jump to:"
+#~ msgstr "ì´ëí ìì¹:"
+
+#~ msgid "Jump"
+#~ msgstr "ì´ë"
+
+#~ msgid "Add URL"
+#~ msgstr "URL ì¶ê°..."
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "ëë°°í¬ê¸° í´ì "
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "ëë°°í¬ê¸° ì¤ì "
+
+#~ msgid "/By extension"
+#~ msgstr "/íì¥ì ì"
+
+#~ msgid "/Playlist"
+#~ msgstr "/ì¬ì목ë¡"
+
+#~ msgid "/Close Window"
+#~ msgstr "/ì°½ ë«ê¸°"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/ë
¸ëì 목 ìì¼ë¡ ì ë ¬"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/íì¼ì´ë¦ ìì¼ë¡ ì ë ¬"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/ë ì§ ìì¼ë¡ ì ë ¬"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "\"%s\" ìì ì¤í¨: %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d/%d íì¼ì´ ì±ê³µì ì¼ë¡ ìì ëììµëë¤."
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "XMMS: íì¼ì´ ìì ëììµëë¤."
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "ì ë§ë¡ %d íì¼ì ìì í ê¹ì?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "ì ë§ë¡ ìì í ê¹ì: \"%s\"?"
+
+#~ msgid "Play Files"
+#~ msgstr "íì¼ ì¬ì"
+
+#~ msgid "Load"
+#~ msgstr "ì½ê¸°"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "ì¤ì ê° ìë-ì½ê¸°"
+
+#~ msgid "Zero"
+#~ msgstr "ìì"
+
+#~ msgid "From file"
+#~ msgstr "íì¼ìì"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "WinAMP EQF íì¼ìì"
+
+#~ msgid "Import"
+#~ msgstr "ê°ì ¸ì¤ê¸°"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "Winamp ì¤ì ê°"
+
+#~ msgid "To file"
+#~ msgstr "íì¼ë¡"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "WinAMP EQFíì¼ë¡"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "ì´íë¼ì´ì ì¤ì "
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "기본 ì°½ì ë¶ëë¬ì´ ì 목 ì¤í¬ë¡¤"
+
+#~ msgid "%d items were added."
+#~ msgstr "%d íëª©ì´ ì¶ê°ëììµëë¤."
+
+#~ msgid "Directory"
+#~ msgstr "ëë í 리"
+
+#~ msgid "Directory browser"
+#~ msgstr "ëë í 리 ë¸ë¼ì°ì "
+
+#~ msgid "Unplayable files - BMP"
+#~ msgstr "ì¬ì ë¶ê°ë¥í íì¼ - BMP"
+
+#~ msgid ""
+#~ "The following files could not be played. They are either not accessible "
+#~ "or require a dedicated input plugin."
+#~ msgstr ""
+#~ "ë¤ì íì¼ë¤ì ì¬ìí ì ììµëë¤. ì ê·¼í ì ìê±°ë í¹ì í ì
ë ¥ íë¬ê·¸ì¸ì´ "
+#~ "íìí©ëë¤."
+
+#~ msgid "/Add/Directories..."
+#~ msgstr "/ì¶ê°/ëë í 리..."
+
+#~ msgid "Add Directories... "
+#~ msgstr "ëë í 리 ì¶ê°..."
+
+#~ msgid "Look into sub_folders"
+#~ msgstr "íì í´ë ì°¾ì 보기"
+
+#~ msgid "<b>_Filter:</b>"
+#~ msgstr "<b>íí°:</b> "
+
+#~ msgid "_Look for plugins in:"
+#~ msgstr "íë¬ê·¸ì¸ ê²ì(_L):"
+
+#~ msgid "<span size=\"medium\"><b>Settings</b></span>"
+#~ msgstr "<span size=\"medium\"><b>ì¤ì </b></span>"
+
+#~ msgid "%p - %t\n"
+#~ msgstr "%p - %t\n"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/lt.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3465 @@
+# Lithuanian translation of BMP.
+# Copyright (C) 2004 Rimas Kudelis <rq at akl.lt>
+# This file is distributed under the same license as the BMP package.
+# Rimas Kudelis <rq at akl.lt>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: BMP\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-06 19:02+0200\n"
+"Last-Translator: Rimas Kudelis <rq at akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt at konferencijos.lt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD audio įskiepis"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD audio takelis %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(nežinomas)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Įrenginys %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Nepavyko atverti įrenginio %s\n"
+"Klaida: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Nepavyko nuskaityti disko turinio\n"
+"Gal diskų įrenginyje nÄra disko?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Įrenginys %s OK.\n"
+"Diske yra %d takeliai"
+
+# msgstr[0] ""
+# "Įrenginys %s OK.\n"
+# "Diske yra %d takelis"
+# msgstr[2] ""
+# "Įrenginys %s OK.\n"
+# "Diske yra %d takelių"
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d duomenų takeliai)"
+
+# msgstr[0] " (%d duomenų takelis)"
+# msgstr[2] " (%d duomenų takelių)"
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Bendra trukmÄ: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Skaitmeninio garso nuskaitymas neiÅ¡bandytas, nes diske nÄra garso takelių\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Skaitmeninio garso nuskaitymo testas: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Skaitmeninio garso nuskaitymo testas nepavyko: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Nepavyko ištrinti aplanko %s\n"
+"Klaida: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Klaida: %s egzistuoja, taÄiau tai nÄra segtuvas"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Aplankas %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "įrenginys:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "Į_renginys:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_Aplankas:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Grojimo režimas:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analoginis"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Skaitmeninis garso nuskaitymas"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Garso valdymas:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Jokio mikserio"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM įrenginys"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS mikseris"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Patikrinti įrenginįâ¦"
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Pašalinti įrenginį"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD Audio grotuvo konfigūravimas"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "PridÄti įrenginį"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "įrenginys"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Naudoti CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Parsisiųsti serverių sÄ
raÅ¡Ä
"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Parodyti tinklo langÄ
"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB serveris:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD rodyklÄ:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Naudoti CD rodyklÄ"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD rodyklÄs serveris:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Takelių pavadinimai:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Nepaisyti bendro pavadinimų formato"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Pavadinimo formatas:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Apie CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "IÅ¡rinkite aplankÄ
, kuriame saugosite MPEG srautus:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG garso įskiepio konfigūravimas"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Raiška:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bitų"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bitai"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanalai:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (jei įmanoma)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "KokybÄs santykis:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekoderis:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatinis parinkimas"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! optimizuotas dekoderis"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX optimizuotas dekoderis"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU dekoderis"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Nustatymai"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Turinys"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "PlÄtinys"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Turinys ir plÄtinys"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekoderis"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Buferiavimas:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Buferio dydis (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "IÅ¡ankstinis buferiavimas (procentais):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "TarpinÄ stotis:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Naudoti tarpinÄ stotį"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Hostas:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Portas:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Autentikuotis"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Vartotojas:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Slaptažodis:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "IÅ¡saugoti srautÄ
diske:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "IÅ¡saugoti srautÄ
diske"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Kelias:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "naršyti"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Aktyvuoti Icecast metainformacijos UDP kanalÄ
"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Srautai"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 žymos:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Ignoruoti ID3v2 žymas"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Konvertuoti ID3 aprašus į UTF-8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 aprašų koduotÄ:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Pavadinimo formatas:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Pavadinimas"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Nepavyksta įrašyti bylos: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Nepavyko įrašyti žymos!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Nepavyksta atverti bylos: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Apie bylÄ
"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Gerai"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Nepavyksta apkapoti bylos: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Nepavyko pašalinti žymos!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Šalinama žyma neegzistuoja!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Jungtinis stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Du kanalai"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Vienas kanalas"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Joks"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Ne"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Taip"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Pavadinimas:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr "MPEG informacija"
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG lygis:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Nominalus bitų sekos greitis:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Semplų dažnis:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Kadrai:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Bylos dydis:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Apsauga nuo klaidų:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Apsaugota autorinÄmis teisÄmis:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Originalas:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "PabrÄžimas:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 žyma"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Pavadinimas:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "AtlikÄjas:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Albumas:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Komentaras:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Metai:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Takelio numeris:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Žanras:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Kopijuoti albumo duomenis"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Ä®dÄti albumo duomenis"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "Neprieinama"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Kintamas,\n"
+"vid. greitis:·%d·KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Baitų"
+
+# msgstr[0] "%lu Baitas"
+# msgstr[1] "%lu Baitai"
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Klaida"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "IEÅ KAU %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Nepavyko rasti hosto %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "JUNGIUOSI PRIE %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Nepavyko prisijungti prie hosto %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "PRISIJUNGIAU. LAUKIU ATSAKYMO"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Nepavyko prisijungti prie hosto %s\n"
+"Serveris praneÅ¡Ä: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "BUFERIUOJU: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Classic Rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "cGrunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Other"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "cPopsas"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "cRegis"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Classical"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumental"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumental Pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumental Rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ethnic"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electronic"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtic"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Speech"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphony"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "c"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Apie MPEG audio įskiepį"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 dekodavimo variklio autorius Michael Hipp <mh at mpg123.de>\n"
+"Ä®skiepį paraÅ¡Ä XMMS komanda"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG audio įskiepis"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "IÅ¡rinkite aplankÄ
, kuriame saugosite Ogg Vorbis srautus:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis garso įskiepio kofigūravimas"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis žymos:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Pavadinimo formatas:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr ""
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Aktyvuoti apkarpymo prevencijÄ
"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr ""
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr ""
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr ""
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Įvyko klaida:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Klaida!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Nepavyko pakeisti (atverti) žymos"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Nepavyko pakeisti (užverti) žymos"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Nepavyko pakeisti žymos"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis žyma"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Data:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Aprašymas:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Vieta:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versija:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC numeris:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organizacija:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis informacija"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "TrukmÄ:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominaliai)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Baitų"
+
+# msgstr[0] "%d Baitas"
+# msgstr[1] "%d Baitai"
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis audio įskiepis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Apie Ogg Vorbis audio įskiepį"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis įskiepio autoriai - Xiph.org Foundation\n"
+"\n"
+"Pradinis kodas:\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Papildymai:nChris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Aplankykite Xiph.org Foundation adresu http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV audio įskiepis"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS išvesties įskiepis"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Apie OSS įskiepį"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS tvarkyklÄ\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Įprastasis (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Įprastasis"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS tvarkyklÄs konfigÅ«ravimas"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Garso įrenginys:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Naudoti alternatyvų įrenginį:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mikserio įrenginys:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "įrenginiai"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Buferio dydis (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Buferiavimas"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Mikserio nustatymai:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Garsas reguliuoja pagrindinį, o ne PCM kanalÄ
"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mikseris"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Apie ESounD įskiepį"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD įskiepis\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD išvesties įskiepio konfigūravimas"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Naudoti nutolusį hostÄ
"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Garsas reguliuoja OSS mikserį"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Serveris"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound išvesties įskiepis"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Apie ALSAįskiepį"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA tvarkyklÄ\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Autorius: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s išvesties įskiepis"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Nežinoma garso plokÅ¡tÄ"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Įprastasis PCM įrenginys (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA tvarkyklÄs konfigÅ«ravimas"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mikseris:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Naudoti programinį garso valdymÄ
"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mikserio korta:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Įrenginio nustatymai:"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Papildomi nustatymai:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Buferio dydis (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Periodas (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Buferio dydis (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap režimas"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Papildomi nustatymai"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Perjungti dekoracijų vaizdavimÄ
"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Užverti"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Akiratis"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Akiratis: spalvos pasirinkimas"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Nustatymai:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "AtlikÄjas"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Albumas"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Žanras"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Bylos pavadinimas"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Bylos kelias"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Bylos plÄtinys"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Takelio pavadinimas"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Takelio numeris"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Data"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Metai"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Komentaras"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Rodyti ââ¦â tik jei rastas elementas %n"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Media grotuvas, XMMS pagrindu\n"
+"\n"
+"© 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "KÅ«rÄjai:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Taip pat prisidÄjo:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Interneto svetainÄ ir grafika:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Ä® brazilų k. (portugalų dialektÄ
):"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "į bretonų k.:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Į kinų k.:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Ä® Äekų k.:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Į olandų k.:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Į ispanų k.:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Į prancūzų k.:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Ä® vokieÄių k.:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Ä® vokieÄių k.:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Į graikų k.:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Į vengrų k.:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Į italų k.:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Į japonų k.:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Ä® korÄjieÄių k.:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Į lietuvių k.:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Į makedonų k.:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Į lenkų k.:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Į rumunų k.:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Į rusų k.:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Į slovakų k.:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Į ispanų k.:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Į švedų k.:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Į rumunų k.:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Ä® velsieÄių k.:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Apie BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Credits"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "VertÄjai"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "Stiprinimas"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Įkelti"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Ä®kelti/Å ablonÄ
"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Ä®kelti/AutomatiÅ¡kai įsikeliantį Å¡ablonÄ
"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Ä®kelti/Ä®prastÄ
jį"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Įkelti/Nulius"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Įkelti/Iš bylos"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Įkelti/Iš WinAMP EQF bylos"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importuoti"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Įmportuoti/WinAMP šablonus"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/IÅ¡saugoti"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/IÅ¡saugoti/Å ablonÄ
"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/IÅ¡saugoti/AutomatiÅ¡kai įsikeliantį Å¡ablonÄ
"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/IÅ¡saugoti/Ä®prastÄ
jį"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/IÅ¡saugoti/Ä® bylÄ
"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/IÅ¡saugoti/WinAMP EQF bylon"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Å alinti"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Å alinti/Å ablonÄ
"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Å alinti/AutomatiÅ¡kai įsikeliantį Å¡ablonÄ
"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP ekvalaizeris"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Å ablonas"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Å ablonai"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Ä®kelti Å¡ablonÄ
"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Ä®kelti automatinį Å¡ablonÄ
"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Ä®kelti ekvalaizerio Å¡ablonÄ
"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "IÅ¡saugoti Å¡ablonÄ
"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "IÅ¡saugoti automatiÅ¡kai įsikeliantį Å¡ablonÄ
"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "IÅ¡saugoti ekvalaizerio Å¡ablonÄ
"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "PaÅ¡alinti Å¡ablonÄ
"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "PaÅ¡alinti automatiÅ¡kai įsikeliantį Å¡ablonÄ
"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: raktas â%sâ netinkama\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: raktas â--%sâ nepriima argumento\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: raktas â%c%sâ nepriima argumento\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: raktas â%sâ reikalauja argumento\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: neatpažintas raktas â--%sâ\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: neatpažintas raktas â%c%sâ\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: netinkamas raktas -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: netinkamas raktas -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: raktas reikalauja argumento -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: raktas â-W %sâ yra netinkamas\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: raktas â-W %sâ nepriima argumento\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Nepavyko groti bylų.</big></b>\n"
+"\n"
+"Å ios bylos negalÄjo bÅ«ti pagrotos. PraÅ¡ome patikrinti, ar:\n"
+"1. jos prieinamos.\n"
+"2. įjungtas joms reikalingas media įskiepis."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Daugiau neberodyti šio pranešimo"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Rodyti _detaliau"
+
+# msgstr[0] "Įtrauktas %d elementas."
+# msgstr[1] "Įtraukti %d elementai."
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Bylos vardas"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Bylos vardas:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Šiai bylai nerasta įvesties įskiepio"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "įvesties įskiepis: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Nepavyko sukurti žurnalo bylos (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Multimedijos grotuvas âBeepâ"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Nepavyko sukurti aplanko (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Naudojimas: beep-media-player [raktai] [bylos] â¦\n"
+"\n"
+"Raktai:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Parodyti Å¡iÄ
žinutÄ ir baigti darbÄ
"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Pasirinkti BMP/XMMS sesijÄ
(Nutylimai: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Šoktelti atgal grojaraštyje"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "PradÄti groti esamÄ
grojaraštį"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pristabdyti grojamÄ
dainÄ
"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Sustabdyti grojamÄ
dainÄ
"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pristabdyti, jei grojama, kitu atveju groti"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Šoktelti pirmyn grojaraštyje"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "NeiÅ¡valyti grojaraÅ¡Äio"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Parodyti pagrindinį langÄ
"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "Aktyvinti BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "PraÄjusios sesijos ID"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Parodyti versijos numerį ir baigti darbÄ
\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Gautas SIGSEGV signalas\n"
+"\n"
+"Tai gali bÅ«ti BMP riktas. Jei nežinote, kodÄl tai nutiko, praÅ¡ome nusiųsti "
+"laiÅ¡kÄ
adresu beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Nepavyko įkelti rūbo.</big></b>\n"
+"\n"
+"Ä®sitikinkite, jog įmanoma naudoti rÅ«bÄ
, esantį â%sâ ir kad tvarkingai "
+"įdiegtas numatytasis rÅ«bas, esantis â%sâ.\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"AtsipraÅ¡ome, taÄiau jÅ«sų GTK+ versija (%d.%d.%d) neveiks su BMP.\n"
+"PraÅ¡ome naudoti GTK+ %s ar naujesnÄ versijÄ
.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Atsiprašome, jūsų platformoje nepalaikomos gijos.\n"
+"\n"
+"Jei jÅ«s naudojate libc5 pagrindo linux sistemÄ
ir įsidiegÄte Glib bei GTK+ "
+"prieš\n"
+"įsidiegdami LinuxThreads, jums reikia perkompiliuoti Glib ir GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Nepavyko pasinaudoti displÄjum, baigiu darbÄ
."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Takelio informacija"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/AutomatiÅ¡kai slinkti pavadinimÄ
"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "Vizualizacijos tipas"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Vizualizacijos tipas/AnalizÄ"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "Vizualizacijos tipas/Akiratis"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Vizualizacijos tipas/IÅ¡jungta"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/AnalizÄs bÅ«das"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/AnalizÄs bÅ«das/Normali"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/AnalizÄs bÅ«das/Ugnis"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/AnalizÄs bÅ«das/GulsÄios linijos"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/AnalizÄs bÅ«das/Linijos"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/AnalizÄs bÅ«das/Stulpeliai"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/AnalizÄs režimas/Pikai"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/AkiraÄio bÅ«das"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/AkiraÄio bÅ«das/TaÅ¡kinis akiratis"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/AkiraÄio bÅ«das/Linijinis akiratis"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/AkiraÄio bÅ«das/Vientisas akiratis"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "s"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Suvynioto lango VU būdas/Normalus"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Suvynioto lango VU būdas/Glodus"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Atnaujinimo dažnis"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Atnaujinimo dažnis/Pilnas (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Atnaujinimo dažnis/Pusinis (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Atnaujinimo dažnis/Ketvirtinis (~13fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Atnaujinimo dažnis/Aštuntinis (~6fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/AnalizÄs atkritimas"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/AnalizÄs atkiritimas/LÄÄiausias"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/AnalizÄs atkritimas/LÄtas"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/AnalizÄs atkritimas/Vidutinis"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/AnalizÄs atkritimas/Greitas"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/AnalizÄs atkritimas/GreiÄiausias"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Pikų atkritimas"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Pikų atkritimas/LÄÄiausias"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Pikų atkritimas/LÄtas"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Pikų atkritimas/Vidutinis"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Pikų atkritimas/Greitas"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Pikų atkritimas/GreiÄiausias"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Kartoti"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Atsitiktine tvarka"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Groti"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pristabdyti"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Sustabdyti"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Å okti atgal"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Å okti pirmyn"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Å okti į grojaraÅ¡Äio pradžiÄ
"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Å okti į bylÄ
"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Å okti į laikÄ
"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Nustatymai"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Rodinys"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Apie BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_IÅ¡eiti"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Bylasâ¦"
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/AdresÄ
interneteâ¦"
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Parodyti grojaraÅ¡Äio redaktorių"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Rodyti ekvalaizerį"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/PraÄjÄs laikas"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/LikÄs laikas"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Visada viršuje"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Rodyti visuose darbalaukiuose"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Sutraukti grotuvÄ
"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Sutraukti grojaraÅ¡Äio redaktorių"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Sutraukti ekvalaizerį"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Å okti į laikÄ
"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuÄių:sekundžių"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Takelio trukmÄ:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "EilÄ"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "EilÄ"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Šokti į takelį"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtruoti:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "PridÄti aplankus"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "PridÄti adresÄ
interneteâ¦"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "PERÅ OKTI Ä®: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "GARSUMAS: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANSAS: %d%% KAIRÄJE"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANSAS: VIDURYS"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANSAS: %d%% DEÅ INÄJE"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "NUSTATYMŲ MENIU"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ATJUNGTI âVISADA VIRÅ UJEâ (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "Ä®JUNGTI âVISADA VIRÅ UJEâ (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ATJUNGTI âVISADA VIRÅ UJEâ"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "Ä®JUNGTI âVISADA VIRÅ UJEâ"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "DIALOGAS âAPIE BYLÄâ"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** DVIGUBAS DYDIS PAÅ ALINTAS IÅ PROGRAMOS **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "VIZUALIZACIJOS MENIU"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Neradau CD, kurį galÄÄiau groti.</big></b>\n"
+"\n"
+"CD įrenginyje nÄra disko, arba įdÄtas ne AudioCD diskas.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Nepavyko atverti garso įrenginio.</big></b>\n"
+"\n"
+"Prašome įsitikinti, kad:\n"
+"\n"
+"1. JÅ«s iÅ¡sirinkote tinkamÄ
išvesties įskiepį.\n"
+"2. Kitos programos neblokuoja garso įrenginio.\n"
+"3. Jūsų garso įrenginys sukonfigūruotas teisingai.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/PaÅ¡alinti pažymÄtus"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/PaÅ¡alinti nepažymÄtus"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Pašalinti visus"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Perjungti eilÄs rodomumÄ
"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/PridÄti CDâ¦"
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/PridÄti adresÄ
interneteâ¦"
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/PridÄti bylasâ¦"
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/PridÄti bylasâ¦"
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/IÅ¡valyti eilÄ"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Pašalinti nepasiekiamas bylas"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Naujas grojaraštis"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Įkelti grojaraštį"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Išsaugoti grojaraštį"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Atnaujinti vaizdÄ
"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/ŽymÄti prieÅ¡ingai"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Panaikinti žymÄjimÄ
"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/ŽymÄti visus"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Sumaišyti grojaraštį"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Apversti grojaraštį"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Rūšiuoti grojaraštį"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/RÅ«Å¡iuoti grojaraÅ¡tį/Pagal pavadinimÄ
"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/RÅ«Å¡iuoti grojaraÅ¡tį/Pagal bylos vardÄ
"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/RÅ«Å¡iuoti grojaraÅ¡tį/Pagal keliÄ
ir bylÄ
"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/RÅ«Å¡iuoti grojaraÅ¡tį/pagal datÄ
"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/RÅ«Å¡iuoti pasirinktus"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/RÅ«Å¡iuoti pasirinktus/Pagal pavadinimÄ
"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/RÅ«Å¡iuoti pasirinktus/Pagal bylos vardÄ
"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/RÅ«Å¡iuoti pasirinktus/Pagal keliÄ
ir bylÄ
"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/RÅ«Å¡iuoti pasirinktus/Pagal datÄ
"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Klaida įraÅ¡ant grojaraÅ¡tį â%sâ: %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s jau egzistuoja. TÄsti?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Nepavyko iÅ¡saugoti grojaraÅ¡Äio! Nežinomas bylos %s tipas"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Įkrauti grojaraštį"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Išsaugoti grojaraštį"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP grojaraÅ¡Äio redaktorius"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "IÅ¡vaizda"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Ekvalaizeris"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "PelÄ"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Grojaraštis"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Įskiepiai"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "AtlikÄjas"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Takelio numeris"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Bylos kelias"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Įjungtas"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Aprašymas"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Kategorija"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Nustatymų langas"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "PridÄti/atverti bylas"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Atverti bylas"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "AtvÄrus, užverti dialogÄ
"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "PridÄti bylas"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "PridÄjus, užverti dialogÄ
"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (blogas UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP nustatymai"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Įskiepiai</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Media įskiepių sÄ
rašas"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Media</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Bendrinių įskiepių sÄ
rašas"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Bendriniai</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Vizualizacijos įskiepių sÄ
rašas:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Vizualizacija</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Efektų įskiepių sÄ
rašas:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efektai</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Pasirinktas išvesties įskiepies:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Pakeitimas iÅ¡saugotas BMP nustatymų duomenų bazÄje, taÄiau jis įsigalios tik "
+"pradÄjus groti kitÄ
dainÄ
!\n"
+"\n"
+"Jei norite, galite sustabdyti ir perleisti esamÄ
dainÄ
, kad pakeitimai "
+"įsigaliotų nedelsiant."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>IÅ¡vestis</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>IÅ¡vaizda</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_RÅ«bas:</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Å riftai:</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Grotuvas:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Grojaraštis:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Pasirinkite pagrindinio grotuvo lango Å¡riftÄ
:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Pasirinkite grojaraÅ¡Äio Å¡riftÄ
:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Kita</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Grojaraštyje rodyti takelio numerį"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Naudoti derintus kursorius"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>PelÄ</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>PelÄs ratukas</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "PelÄs ratukas keiÄia garsumÄ
"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "procentų"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "PelÄs ratukas perÅ¡oka grojaraÅ¡Äiu"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "eiluÄių"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Grojaraštis</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Bylos vardas</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Keisti pabraukimus tarpais"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Keisti %20 tarpais"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Aprašai</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Ä®kelti apraÅ¡us, esanÄius garso bylose"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Ä®kelti apraÅ¡us iÅ¡ grojaraÅ¡Äių bei bylų"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "ApraÅ¡us įkelti, pridedant bylÄ
į grojaraštį ar jį atveriant"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Įkraunant"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "ApraÅ¡us įkelti tik rodant bylÄ
grojaraštyje"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Rodant"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Grojimas</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "Baigus groti kÅ«rinį, į kitÄ
automatiškai neperšokti."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Nesislinkti grojaraÅ¡Äiu"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "PauzÄ tarp dainų"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pristabdyti"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "sekundÄms"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>KÅ«rinio pavadinimo vaizdavimas</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Derinta eilutÄ:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"PAVADINIMAS\n"
+"ATLIKÄJAS - PAVADINIMAS\n"
+"ATLIKÄJAS - ALBUMAS - PAVADINIMAS\n"
+"ALBUMAS - PAVADINIMAS\n"
+"Derinta"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Parodyti informacijÄ
apie pavadinimo formatÄ
"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ekvalaizeris</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Å ablonai</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Aplanko ekvalaizerio Å¡ablono byla:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Bylos ekvalaizerio Å¡ablono plÄtinys:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "_Galimi Å¡ablonai:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "PridÄjus, užverti dialogÄ
2"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "ŽymÄti visus"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "AtžymÄti visus"
+
+#~ msgid "Default skin:"
+#~ msgstr "Įprastasis rūbas:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Nepavyko inicializuoti gnome-vfs.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Nesislinkti grojaraÅ¡Äiu"
+
+#~ msgid "/By extension"
+#~ msgstr "/Pagal plÄtinį"
+
+#~ msgid "Add Folders - BMP"
+#~ msgstr "PridÄti aplankus â BMP"
+
+#~ msgid "Add URL"
+#~ msgstr "PridÄti URL"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "?RÅ«Å¡iuoti pagal pavadinimÄ
"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/RÅ«Å¡iuoti pagal bylos vardÄ
"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/RÅ«Å¡iuoti pagal datÄ
"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/mk.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3573 @@
+# Macedonian translation for BMP
+# This file is distributed under the same license as the BMP package.
+# Copyright (C) 2004 Arangel Angov <ufo at linux.net.mk>, 2004.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mk 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-05-18 11:38+0200\n"
+"Last-Translator: ÐÑангел Ðнгов <ufo at linux.net.mk>\n"
+"Language-Team: Macedonian <ossm-members at hedona.on.net.mk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD додаÑок за аÑдио"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD аÑдио пеÑна %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(непознаÑо)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "УÑед %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Ðе ÑÑпеав да го оÑвоÑам ÑÑÐµÐ´Ð¾Ñ %s\n"
+"ÐÑеÑка: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Ðе можам да Ñа пÑоÑиÑам âСодÑжинаÑаâ\n"
+"Ðожеби нема диÑк во ÑÑедоÑ?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"УÑÐµÐ´Ð¾Ñ %s е во Ñед.\n"
+"ÐиÑÐºÐ¾Ñ Ð¸Ð¼Ð° %d пеÑни"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d пеÑни)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"ЦелоÑна должина: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr "ÐадеÑеÑо од аÑдио не е ÑеÑÑиÑано бидеÑÑи диÑÐºÐ¾Ñ Ð½ÐµÐ¼Ð° аÑдио пеÑни\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"ТеÑÑ Ð·Ð° дигиÑално аÑдио екÑÑÑаÑ
иÑаÑе: Ðо Ñед\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"ТеÑÑÐ¾Ñ Ð·Ð° дигиÑално аÑдио екÑÑÑаÑ
иÑаÑе не ÑÑпеа. %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Ðе ÑÑпеав да го пÑовеÑам диÑекÑоÑиÑÐ¼Ð¾Ñ %s\n"
+"ÐÑеÑка: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "ÐÑеÑка: %s поÑÑои но не е диÑекÑоÑиÑм"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ÐиÑекÑоÑиÑÐ¼Ð¾Ñ %s е во Ñед."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "УÑед:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_УÑед:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Ðи_ÑекÑоÑиÑм:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Режим на пÑÑÑаÑе:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Ðналоген"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "ÐигиÑално аÑдио екÑÑÑаÑ
иÑаÑе"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "ÐонÑÑола на глаÑноÑÑ:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Ðема микÑеÑ"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDRÐÐ ÑÑед"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS микÑеÑ"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "ÐÑовеÑи ÑÑед..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "ÐÑÑÑÑани ÑÑед"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "ÐонÑигÑÑаÑиÑа на CD аÑдио плееÑ"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "ÐÐ¾Ð´Ð°Ñ ÑÑед"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "УÑед"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "ÐоÑиÑÑи CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Ðеми лиÑÑа на ÑеÑвеÑи"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "ÐÑикажи мÑежен пÑозоÑеÑ"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB ÑеÑвеÑ:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD индекÑ:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "ÐоÑиÑÑи CD индекÑ"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD Ð¸Ð½Ð´ÐµÐºÑ ÑеÑвеÑ:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "ÐмиÑа на пеÑни:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Ðаобиколи ги генеÑиÑниÑе наÑлови"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "ФоÑÐ¼Ð°Ñ Ð½Ð° име:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "ÐнÑоÑмаÑии за CD-Ñо"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "ÐзбеÑеÑе го диÑекÑоÑиÑÐ¼Ð¾Ñ ÐºÐ°Ð´Ðµ Ñе Ð±Ð¸Ð´Ð°Ñ ÑмеÑÑени MPEG ÑÑÑимовиÑе:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "ÐонÑигÑÑаÑиÑа за MPEG аÑдио додаÑок"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "РезолÑÑиÑа:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 биÑа"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 биÑа"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Ðанали:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "СÑеÑео (ако е доÑÑапно)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Ðоно"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "ÐолÑ:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "ÐекодеÑ:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "ÐвÑомаÑÑка деÑекÑиÑа"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! опÑимизиÑан декодеÑ"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX опÑимизиÑан декодеÑ"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU декодеÑ"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "ÐпÑии"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "СодÑжина"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "ÐаÑÑавка"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "ÐаÑÑавка и ÑодÑжина"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "ÐекодеÑ"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ÐаÑеÑиÑаÑе:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "ÐаÑÐµÑ Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½Ð° (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "ÐÑе-баÑÐµÑ (пÑоÑенÑ):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "ÐоÑиÑÑи пÑокÑи"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "СеÑвеÑ:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "ÐоÑÑа:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "ÐоÑиÑÑи авÑенÑикаÑиÑа"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "ÐоÑиÑниÑко име:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Ðозинка:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Сними ÑÑÑим на диÑк:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Сними ÑÑÑим на диÑк"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "ÐаÑека:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "РазгледаÑ"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Ðвозможи Icecast Metadata UDP канал"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "СÑÑиминг"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 Ñагови:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Ðневозможи ID3V2 Ñагови"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "ÐонвеÑÑиÑÐ°Ñ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ð¸ UTF8 во ID3 Ñагови во UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 енкодинг:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 ÑоÑмаÑ:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "ÐаÑлов"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Ðе можам да Ñа Ñнимам даÑоÑекаÑа: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Ð¢Ð°Ð³Ð¾Ñ Ð½Ðµ може да Ñе запиÑе!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Ðе можам да Ñа оÑвоÑам даÑоÑекаÑа: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "ÐнÑоÑмаÑии за даÑоÑекаÑа"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ðо Ñед"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Ðе можам да Ñа намалам даÑоÑекаÑа: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Ðе можам да го оÑÑÑÑанам ÑагоÑ!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Ðема Ñаг за оÑÑÑÑанÑваÑе!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "СÑеÑео"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "ÐÐ¾Ð¸Ð½Ñ ÑÑеÑео"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Ðвоен канал"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "ÐдинеÑен канал"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "ÐиÑÑо"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Ðе"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ðа"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Ðме:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr "ÐнÑоÑмаÑии за MPEG "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "Ðиво на MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ÐÐ¸Ñ ÑеÑÑ:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "ФÑекÑенÑиÑа на ÑемплÑваÑе:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Рамки:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Ðолемина на даÑоÑекаÑа:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "ÐаÑÑиÑа од гÑеÑки:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "ÐÑигинал:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "ÐаглаÑи:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 Ñаг"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "ÐаÑлов:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "ÐзведÑваÑ:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "ÐлбÑм:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "ÐоменÑаÑ:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Ðодина:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "ÐÑÐ¾Ñ Ð½Ð° пеÑна:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Ðид:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "ÐопиÑÐ°Ñ Ð³Ð¸ ÑаговиÑе од албÑмоÑ"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "ÐмеÑни ги ÑаговиÑе од албÑмоÑ"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"ÐаÑиÑабла,\n"
+"avg. bitrate: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu баÑÑи"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "ÐÑеÑка"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "ÐÐÐ ÐÐ %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Ðе можам да го наÑдам ÑеÑвеÑÐ¾Ñ %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "СРÐÐ ÐУÐÐÐ ÐÐ %s: %d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Ðе можам да Ñе повÑзам Ñо Ñ
оÑÑÐ¾Ñ %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "СРÐÐ ÐÐРРЧÐÐÐÐ ÐÐÐÐÐÐÐ "
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Ðе можам да Ñе повÑзам Ñо ÑеÑвеÑÐ¾Ñ %s\n"
+"СеÑвеÑÐ¾Ñ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñи: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ÐÐ Ð-ÐÐФÐÐ ÐÐ ÐÐÐ: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "ÐлÑз"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "ÐлаÑиÑен Ñок"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "ÐемÑа"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "ÐенÑ"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "ÐиÑко"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Фанк"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "ÐÑанÑ"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Хип-Ñ
ип"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Ðез"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "ÐеÑал"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "ÐÑÑго"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Ðоп"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Рап"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Реге"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Рок"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "ТеÑ
но"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "ÐлÑеÑнаÑива"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ска"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "ÐÑзика од Ñилм"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Ðез и Ñанк"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "ТÑанÑ"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "ÐлаÑиÑна мÑзика"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "ÐнÑÑÑменÑална"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "ÐгÑа"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "ÐвÑÑно клипÑе"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "ÐоÑпел"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Ðоиз (бÑÑава)"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "СоÑл"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Ðанк"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "ÐнÑÑÑÑменÑален поп"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "ÐнÑÑÑÑменÑален Ñок"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "ÐÑниÑка"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "ÐоÑиÑка"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "ÐлекÑÑонÑка"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Ðоп-Ñолк"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "ÐÑжÑаÑки Ñок"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "ÐомедиÑа"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "ÐÑлÑно"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "ÐангÑÑеÑÑки Ñап"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Ð¥ÑиÑÑиÑанÑки Ñап"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Ðоп/Ñанк"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "ÐабаÑе"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "ÐÑиÑ
оделиÑа"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "РеÑв"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "ÐÑид панк"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "ÐÑид Ñез"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Ðолка"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "РеÑÑо"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "ÐÑзикално"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Фолк"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Фолк/Ñок"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "ÐаÑионален Ñолк"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Ðибоб"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "ÐаÑино"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "ÐелÑÑки"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "ÐвангаÑдно"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "ÐоÑÑки Ñок"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "ÐÑогÑеÑивен Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "ÐÑиÑ
оделиÑен Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "СимÑониÑен Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Ðавен Ñок"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "ХоÑÑко пееÑе"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "ÐеÑни мелодии"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "ÐкÑÑÑиÑно"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "СмеÑно"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "ÐовоÑ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "ШанÑони"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "ÐпеÑа"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "ÐамеÑна мÑзика"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "СонаÑа"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "СимÑониÑа"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "СаÑиÑа"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Ðавен Ñем"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "ÐлÑбÑки"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Танго"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "ФолклоÑ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ðалада"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Силна балада"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "РиÑмиÑен ÑоÑл"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "ФÑиÑÑаÑл"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "ÐÑеÑ"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Ðанк Ñок"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Соло на Ñапани"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "Ркапела (пееÑе без инÑÑÑÑменÑална пÑидÑÑжба)"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Ðоа"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "ÐлÑбÑки Ñ
аÑÑ"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "ТеÑоÑ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Ðнди"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "ÐолÑки панк"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Ð¥ÑиÑÑиÑанÑки гангÑÑеÑÑки Ñап"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Хеви меÑал"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "СовÑемена Ñ
ÑиÑÑиÑанÑка"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Ð¥ÑиÑÑиÑанÑки Ñок"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "ÐаÑенга"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "СалÑа"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "ТÑÐµÑ Ð¼ÐµÑал"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Ðа MPEG аÑдио додаÑок"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 енÑин за декодиÑаÑе од Michael Hipp <mh at mpg123.de>\n"
+"ÐодаÑок од The XMMS team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG аÑдио додаÑок"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "ÐзбеÑи диÑекÑоÑиÑм каде Ñе Ð±Ð¸Ð´Ð°Ñ ÑмеÑÑени Ogg Vorbis ÑÑÑимовиÑе:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "ÐонÑигÑÑаÑиÑа за Ogg Vorbis аÑдио додаÑокоÑ"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis Ñагови:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "ФоÑÐ¼Ð°Ñ Ð½Ð° наÑлов:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain подеÑÑваÑа:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Ðвозможи заÑÑиÑа од clipping"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Ðвозможи ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ReplayGain Ñип:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "коÑиÑÑи Gain/Peak за пеÑна"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "коÑиÑÑи Gain/Peak за албÑм"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Ðвозможи 6db зголемÑваÑе + ÑеÑко огÑаниÑÑваÑе"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Се поÑави гÑеÑка:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "ÐÑеÑка!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Ðе ÑÑпеав да го пÑоменам ÑÐ°Ð³Ð¾Ñ (оÑвоÑен)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Ðе ÑÑпеав да го пÑоменам ÑÐ°Ð³Ð¾Ñ (заÑвоÑен)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Ðе може да Ñе измени ÑагоÑ"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "ÐÑикеÑа "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ÐаÑа:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "ÐпиÑ:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ÐокаÑиÑа:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "ÐеÑзиÑа:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC бÑоÑ:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ÐÑганизаÑиÑа:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr "ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "ÐаÑилÑваÑе на пеÑна:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Track peak:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "ÐаÑилÑваÑе на албÑм: "
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "ÐлбÑм peak:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "ÐнÑоÑмаÑии за Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Ðолжина:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (номинално)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d баÑÑи"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "ÐÑдио додаÑок"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ðа аÑдио додаÑок"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis додаÑок од ФондаÑиÑаÑа Xiph.org\n"
+"\n"
+"ÐÑигинален код од\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Со помоÑÑа на\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"ÐоÑеÑеÑе Ñа the Xiph.org Foundation на http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV аÑдио додаÑок"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS излезен додаÑок"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Ðа OSS дÑаÑвеÑоÑ"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "СÑандаÑдно (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "СÑандаÑдно"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "ÐонÑигÑÑаÑиÑа на OSS дÑаÑвеÑоÑ"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "ÐÑдио ÑÑед:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "ÐоÑиÑÑи алÑеÑнаÑивен ÑÑед:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "ÐикÑеÑ:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "УÑеди"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Ðолемина на баÑÐµÑ (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "ÐеÑÑмемоÑиÑаÑе"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "ÐикÑÐµÑ Ð¿Ð¾Ð´ÐµÑÑваÑа:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "ÐонÑÑола за глаÑноÑÑ Master не PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "ÐикÑеÑ"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Ðа додаÑÐ¾ÐºÐ¾Ñ ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD конÑигÑÑаÑиÑа на Ð¸Ð·Ð»ÐµÐ·Ð½Ð¸Ð¾Ñ Ð´Ð¾Ð´Ð°Ñок"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "ÐоÑиÑÑи мÑежен ÑеÑвеÑ"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "OSS микÑÐµÑ Ð·Ð° конÑÑола на глаÑноÑÑ"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "СеÑвеÑ"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound излезен додаÑок"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Ðа ALSA дÑаÑвеÑоÑ"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA дÑаÑвеÑ\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s излезен додаÑок"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "ÐепознаÑа звÑÑна каÑÑиÑка"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "СÑандаÑден PCM ÑÑед (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA дÑаÑÐ²ÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑиÑа"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "ÐикÑеÑ:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "ÐоÑиÑÑи ÑоÑÑвеÑÑка ÑаÑина на глаÑноÑÑа"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "ÐикÑÐµÑ ÐºÐ°ÑÑиÑка:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "ÐодеÑÑваÑа на ÑÑедоÑ"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "ÐапÑедни подеÑÑваÑа:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "ÐаÑÐµÑ Ð²Ñеме (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "ÐеÑиод вÑеме (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "ÐаÑÐµÑ Ð²Ñеме (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Ðmap Ñежим"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "ÐапÑедни подеÑÑваÑа"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "ÐÑомени"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "ÐаÑвоÑи"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: ÐÐ·Ð±Ð¾Ñ Ð½Ð° боÑа"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "ÐпÑии:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "ÐзведÑваÑ"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "ÐлбÑм"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Ðид"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Ðме на даÑоÑека"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "ÐаÑека на даÑоÑекаÑа"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "ÐаÑÑавка на даÑоÑека"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Ðме на пеÑна"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "ÐÑÐ¾Ñ Ð½Ð° пеÑна"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ÐаÑÑм"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Ðодина"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "ÐоменÑаÑ"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Display \"...\" only if element %n is present"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "РазвиваÑи:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Со додаÑна помоÑ:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr " \tPeter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr " \tLiviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr " \tDan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "ÐнÑеÑÐ½ÐµÑ ÑÑÑаниÑа и гÑаÑика:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "ÐÑазилÑко-поÑÑÑгалÑки:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "ÐÑеÑонÑки:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ÐинеÑки:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "ФÑанÑÑÑки:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "ХоландÑки"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "ШпанÑки:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "ФÑанÑÑÑки:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "ÐеÑманÑки:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "ÐеÑманÑки:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "ÐÑÑки:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "УнгаÑÑки:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr " Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "ÐÑалиÑанÑки:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr " \tAlessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "ÐапонÑки:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "ÐоÑеÑÑки:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ÐиÑванÑки:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "ÐакедонÑки:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "ÐÑангел Ðнгов"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "ÐолÑки:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "РоманÑки:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Ð ÑÑки:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "СловаÑки:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr " \tPavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "ШпанÑки:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "ШведÑки:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "РоманÑки:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "ÐелÑки:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Ðа"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "ÐаÑлÑги"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ÐÑеведÑваÑи"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/ÐÑиÑаÑ"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/ÐÑиÑаÑ/модиÑикаÑоÑ"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/ÐÑиÑаÑ/авÑомаÑÑки-вÑиÑлив модиÑикаÑоÑ"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/ÐÑиÑаÑ/СÑандаÑдно"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/ÐÑиÑаÑ/ÐÑла"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/ÐÑиÑаÑ/Ðд даÑоÑека"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/ÐÑиÑаÑ/Ðд WinAMP EQF даÑоÑека"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Увези"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Увези/модиÑикаÑоÑи од WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Сними"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Сними/модиÑикаÑоÑ"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Сними/авÑомаÑÑки-вÑиÑлив модиÑикаÑоÑ"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Сними/СÑандаÑдно"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Сними/Ðо даÑоÑека"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Сними/Ðо WinAMP EQF даÑоÑека"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/ÐзбÑиÑи"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/ÐзбÑиÑи/модиÑикаÑоÑ"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/ÐзбÑиÑи/авÑомаÑÑки-вÑиÑлив модиÑикаÑоÑ"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "ÐзеднаÑÑваÑ"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "ÐодиÑикаÑоÑ"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "ÐодиÑикаÑоÑи"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "ÐÑиÑÐ°Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑиÑа"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "ÐÑиÑÐ°Ñ Ð°Ð²ÑомаÑÑки-модиÑикаÑоÑ"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "ÐÑиÑÐ°Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑÐ¾Ñ Ð·Ð° изеднаÑÑваÑоÑ"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Сними модиÑикаÑоÑ"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Сними авÑомаÑÑки-модиÑикаÑоÑ"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Сними модиÑикаÑÐ¾Ñ Ð·Ð° изеднаÑÑваÑоÑ"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "ÐзбÑиÑи модиÑикаÑоÑ"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "ÐзбÑиÑи авÑомаÑÑки-модиÑикаÑоÑ"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s опÑиÑаÑа `%s' е двоÑмиÑлена\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: опÑиÑаÑа `--%s' не дозволÑва аÑгÑменÑ\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: опÑиÑаÑа `%c%s' не дозволÑва аÑгÑменÑ\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: опÑиÑаÑа `%s' баÑа аÑгÑменÑ\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: непознаÑа опÑиÑа `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: непознаÑа опÑиÑа `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: нелегална опÑиÑа -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: невалидна опÑиÑа -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: опÑиÑаÑа баÑа аÑгÑÐ¼ÐµÐ½Ñ -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: опÑиÑаÑа `-W %s' е двоÑмиÑлена\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: опÑиÑаÑа `-W %s' не дозволÑва аÑгÑменÑ\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Ðе ÑÑпеав да ги пÑÑÑам даÑоÑекиÑе.</big></b>\n"
+"\n"
+"Следниве даÑоÑеки не Ð¼Ð¾Ð¶Ð°Ñ Ð´Ð° Ð±Ð¸Ð´Ð°Ñ Ð¿ÑÑÑени. Ðе молам пÑовеÑеÑе дека:\n"
+"1. имаÑе пÑиÑÑап до нив.\n"
+"2. ги имаÑе вклÑÑено поÑÑебниÑе додаÑоÑи."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Ðе го пÑикажÑÐ²Ð°Ñ Ð¿ÑедÑпÑедÑваÑеÑо повеÑе"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Ðокажи повеÑе _деÑали"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Ðме на даÑоÑека"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Ðме на даÑоÑека:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Ðиеден влезен додаÑок не Ñа пÑепоознава оваа даÑоÑека"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Ðлезен додаÑок: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Unable to create log file (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "ÐÑÑÑÐ°Ñ Ð½Ð° мÑзика"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Ðе можам да кÑеиÑам диÑекÑоÑиÑм (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "ÐÑикажи ÑекÑÑ Ð¸"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "ÐдбеÑеÑе BMP/XMMS ÑеÑиÑа (СÑандаÑдна: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Скокни назад на лиÑÑаÑа"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "ÐÑÑÑи Ñа ÑековнаÑа лиÑÑа"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "ÐаÑзиÑÐ°Ñ Ñа оваа пеÑна"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "СÑопиÑÐ°Ñ Ñа оваа пеÑна"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "ÐаÑзиÑÐ°Ñ Ð°ÐºÐ¾ е пÑÑÑена, Ð¸Ð½Ð°ÐºÑ Ð¿ÑÑÑи"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Скокни напÑед на лиÑÑаÑа"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ðе Ñа ÑиÑÑи лиÑÑаÑа"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Ðокажи го Ð³Ð»Ð°Ð²Ð½Ð¸Ð¾Ñ Ð¿ÑозоÑеÑ"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "ÐкÑивиÑÐ°Ñ Ð³Ð¾ BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID на пÑеÑÑ
однаÑа ÑеÑиÑа"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ÐÑпеÑаÑи го бÑоÑÐ¾Ñ Ð½Ð° веÑзиÑаÑа и излези\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Ðобив SIGSEGV\n"
+"\n"
+"Ðва може да е бÑбаÑка во BMP. Ðко не знаеÑе зоÑÑо Ñе ÑлÑÑи ова, иÑпÑаÑеÑе "
+"поÑака на beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"ÐзвинеÑе, ваÑаÑа веÑзиÑа на GTK+ (%d.%d.%d) не ÑабоÑи Ñо BMP.\n"
+"Ðе молам коÑиÑÑеÑе GTK+ %s или понова веÑзиÑа.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Ðе ÑÑпеав да го оÑвоÑам пÑиказоÑ, излегÑвам."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Ðиди деÑали за пеÑна"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/ÐвÑомаÑÑко лизгаÑе"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Режим на визÑелизаÑиÑа"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Режим на визÑелизаÑиÑа/ÐнализаÑоÑ"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Режим на визÑелизаÑиÑа/Scope"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Режим на визÑелизаÑиÑа/ÐÑклÑÑен"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Режим на анализаÑоÑ"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/ÐнализаÑÐ¾Ñ Ñежим/ÐоÑмален"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/ÐнализаÑÐ¾Ñ Ñежим/Ðган"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/ÐнализаÑÐ¾Ñ Ñежим/ÐеÑÑикални линии"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/ÐнализаÑÐ¾Ñ Ñежим/Ðинии"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/ÐнализаÑÐ¾Ñ Ñежим/ÐÐ°Ñ Ð»Ð¸Ð½Ð¸Ð¸"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/ÐнализаÑÐ¾Ñ Ñежим/ÐÑвови"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Scope Ñежим"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Scope Ñежим/ТоÑкeÑÑ scope"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Scope Ñежим/ÐиниÑки scope"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Scope Ñежим/ÐовÑÑинÑки scope"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/WindowShade VU Ñежим"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/WindowShade VU Ñежим/ÐоÑмален"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/WindowShade VU Ñежим/Ðек"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/СÑапка на оÑвежÑваÑе"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/СÑапка на оÑвежÑваÑе/ЦелоÑна (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "СÑапка на оÑвежÑваÑе/Ðоловина (~25fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "СÑапка на оÑвежÑваÑе/ЧеÑвÑÑина (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "СÑапка на оÑвежÑваÑе/ÐÑмина (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/СпÑÑÑаÑе на анализаÑоÑоÑ"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/СпÑÑÑаÑе на анализаÑоÑоÑ/наÑбавно"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/СпÑÑÑаÑе на анализаÑоÑоÑ/бавно"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/СпÑÑÑаÑе на анализаÑоÑоÑ/ÑÑедно"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/СпÑÑÑаÑе на анализаÑоÑоÑ/бÑзо"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/СпÑÑÑаÑе на анализаÑоÑоÑ/наÑбÑзо"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/СпÑÑÑаÑе на вÑвовиÑе"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/СпÑÑÑаÑе на вÑвовиÑе/ÐаÑÑпоÑо"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/СпÑÑÑаÑе на вÑвовиÑе/наÑбавно"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/СпÑÑÑаÑе на вÑвовиÑе/ÑÑедно"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/СпÑÑÑаÑе на вÑвовиÑе/бÑзо"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/СпÑÑÑаÑе на вÑвовиÑе/ÐаÑбÑзо"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/ÐовÑоÑÑваÑе"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/ÐеÑаÑе"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ÐÑÑÑи"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ÐаÑза"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/СÑоп"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/ÐÑеÑÑ
одна"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Следна"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Ðди до поÑеÑÐ¾ÐºÐ¾Ñ Ð½Ð° лиÑÑаÑа"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Ðди до даÑоÑека"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "Ðди до вÑеме"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/ÐаÑамеÑÑи"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Ðоглед"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Ðа BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Ðзлез"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/ÐаÑоÑеки..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/ÐнÑеÑÐ½ÐµÑ Ð»Ð¾ÐºÐ°ÑиÑа..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Ðокажи ÑÑедÑÐ²Ð°Ñ Ð·Ð° лиÑÑаÑа"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Ðокажи изеднаÑÑваÑ"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/ÐоминаÑо вÑеме"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/ÐÑеоÑÑанаÑо вÑеме"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Ð¡ÐµÐºÐ¾Ð³Ð°Ñ Ð½Ð°ÑгоÑе"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/СÑави на ÑиÑе ÑабоÑни повÑÑини"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/ÐавиÑÐºÐ°Ñ Ð³Ð¾ пÑÑÑаÑоÑ"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/ÐавиÑÐºÐ°Ñ Ñа лиÑÑаÑа"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/ÐавиÑÐºÐ°Ñ Ð³Ð¾ изеднаÑÑваÑоÑ"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Скокни до (вÑеме)"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "минÑÑи:ÑекÑнди"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Ðолжина на пеÑна:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "РедиÑа"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "РедиÑа"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Ðди до пеÑна"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "ФилÑÐµÑ "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "ÐÐ¾Ð´Ð°Ñ Ð¿Ð°Ð¿ÐºÐ¸"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "/ÐÐ¾Ð´Ð°Ñ Ð°Ð´ÑеÑа..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ÐаÑÐ°Ñ Ð´Ð¾: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "ÐвÑк: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "ÐаланÑ: %d%% лев"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "ÐаланÑ: ÑÑедина"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "ÐаланÑ: %d%% деÑен"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "Ðени Ñо опÑии"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "Ðневозможи ÑÐµÐºÐ¾Ð³Ð°Ñ Ð½Ð°ÑгоÑе (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "Ðвозможи ÑÐµÐºÐ¾Ð³Ð°Ñ Ð½Ð°ÑгоÑе (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "Ðневозможи ÑÐµÐºÐ¾Ð³Ð°Ñ Ð½Ð°ÑгоÑе"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "Ðвозможи ÑÐµÐºÐ¾Ð³Ð°Ñ Ð½Ð°ÑгоÑе"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "Ðоле Ñо инÑоÑмаÑии за даÑоÑека"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** ÐÐÐÐÐÐТРÐÐÐÐÐÐÐÐ Ð ÐТСТРÐÐÐТР**"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "Ðени за визÑелизаÑиÑа"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Ðе е пÑонаÑдено CD ÑÑо би можело да ÑвиÑи.</big></b>\n"
+"\n"
+"ÐемаÑе внеÑено CD, или пак CD-Ñо не е аÑдио CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/ÐÑÑÑÑани го избÑаноÑо"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/ÐÑÑÑÑани го неизбÑаноÑо"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/ÐÑÑÑÑани ÑÑ"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/ÐенÑваÑе помеÑÑ Ñедови"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/ÐÐ¾Ð´Ð°Ñ CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Ðодаj адÑеÑа..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Ðодади/папки..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Ðодаj даÑоÑеки..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/ÐÑÑиÑÑи Ñед"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/ÐÑÑÑÑани недоÑÑапни даÑоÑеки"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Ðова лиÑÑа"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/ÐÑиÑÐ°Ñ Ð»Ð¸ÑÑа"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/ÐаÑÑÐ²Ð°Ñ Ð»Ð¸ÑÑа"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/ÐадгÑади поглед"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/ÐбÑаÑен избоÑ"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/ÐÑкажи избÑано"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/ÐзбеÑи ÑÑ"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/ÐзмеÑÐ°Ñ Ñа лиÑÑаÑа"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/ÐÑевÑÑи Ñа лиÑÑаÑа"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/ÐодÑеди лиÑÑа"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/ÐодÑеди лиÑÑа/Ðо наÑлов"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/ÐодÑеди лиÑÑа/Ðо име на даÑоÑека"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/ÐодÑеди ÐиÑÑа/Ðо паÑека + име на даÑоÑека"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/ÐодÑеди лиÑÑа/Ðо даÑа"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/ÐÐ·Ð±Ð¾Ñ Ð½Ð° подÑедÑваÑе"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/ÐÐ·Ð±Ð¾Ñ Ð½Ð° подÑедÑваÑе/Ðо наÑлов"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/ÐÐ·Ð±Ð¾Ñ Ð½Ð° подÑедÑваÑе/Ðо име на даÑоÑека"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/ÐÐ·Ð±Ð¾Ñ Ð½Ð° подÑедÑваÑе/Ðо паÑека + име на даÑоÑека"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/ÐÐ·Ð±Ð¾Ñ Ð½Ð° подÑедÑваÑе/Ðо даÑÑм"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "ÐÑеÑка пÑи ÑнимаÑе на лиÑÑаÑа \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s векÌе поÑÑои. Ðа пÑодолжам?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Ðе ÑÑпеав да Ñа заÑÑвам плеÑлиÑÑаÑа! ÐÐµÐ¿Ð¾Ð·Ð½Ð°Ñ Ñип на даÑоÑека за %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "ÐÑиÑÐ°Ñ Ð¿Ð»ÐµÑлиÑÑа"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "ÐаÑÑÐ²Ð°Ñ Ð¿Ð»ÐµÑлиÑÑа"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP ÑÑедÑÐ²Ð°Ñ Ð·Ð° лиÑÑаÑа Ñо пеÑни"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Ðзглед"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "ÐзеднаÑÑваÑ"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "ÐлÑÑеÑ"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "ÐиÑÑа Ñо пеÑни"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "ÐодаÑоÑи"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "ÐзведÑваÑ"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "ÐÑÐ¾Ñ Ð½Ð° пеÑнаÑа"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "ÐаÑека на даÑоÑекаÑа"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "ÐклÑÑен"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "ÐпиÑ"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "ÐаÑегоÑиÑа"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "ÐаÑамеÑÑи ÐÑозоÑеÑ"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Ðодаj/ÐÑвоÑи го диÑÐ°Ð»Ð¾Ð³Ð¾Ñ Ð·Ð° даÑоÑеки"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "ÐÑвоÑи даÑоÑеки"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "ÐаÑвоÑи диÑалог на оÑвоÑаÑе"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "ÐÐ¾Ð´Ð°Ñ Ð´Ð°ÑоÑеки"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "ÐаÑвоÑи диÑалог на додаваÑе"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (невалиден UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "ÐаÑамеÑÑи"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b> ÐодаÑоÑи</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_ÐиÑÑа на додаÑоÑи:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>ÐедиÑм</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_ÐпÑÑа лиÑÑа на додаÑоÑи:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b> ÐпÑÑо</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_ÐиÑÑа на додаÑоÑи за визÑелизаÑиÑа"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b> ÐизÑелизаÑиÑа</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_ÐиÑÑа на додаÑоÑи за еÑекÑи:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>ÐÑекÑи</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Тековен излезен додаÑок:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"ÐÑоменаÑа е пÑименеÑа во конÑигÑÑаÑиÑкаÑа база на BMP, но нема да Ñе одÑази "
+"на плеÑÐ±ÐµÐºÐ¾Ñ Ð´Ð¾ наÑеднаÑа пеÑна!\n"
+"\n"
+"ÐожеÑе да го ÑеÑÑаÑÑиÑаÑе плеÑÐ±ÐµÐºÐ¾Ñ Ð·Ð° да ги пÑимениÑе пÑомениÑе."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b> Ðзлезни</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b> Ðзглед</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Тема</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_ФонÑови</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_ÐÑÑÑаÑ:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_ÐиÑÑа Ñо пеÑни:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "ÐÐ·Ð±Ð¾Ñ Ð¿ÑозоÑеÑ:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "ÐдбеÑеÑе ÑÐ¾Ð½Ñ Ð·Ð° лиÑÑаÑа:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b> Разно</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Ðокажи ги бÑоевиÑе на пеÑниÑе во лиÑÑаÑа"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "ÐоÑиÑÑи ÑопÑÑвени ÑÑÑелки"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐлÑÑеÑ</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>ТÑкалÑеÑо на глÑÑеÑоÑ</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "ТÑкалÑеÑо на глÑÑеÑÐ¾Ñ Ñа менÑва ÑаÑинаÑа за"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "пÑоÑенÑи"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "ÐлÑÑеÑÐ¾Ñ Ñа помеÑÑÑва лиÑÑаÑа за"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "линии"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b> ÐиÑÑа Ñо пеÑни</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b> Ðме на даÑоÑека</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "ÐонвеÑÑиÑÐ°Ñ Ð³Ð¸ лоÑиÑе каÑакÑеÑиÑе во пÑазни"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "ÐонвеÑÑиÑÐ°Ñ %20 во пÑазни"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ÐеÑа подаÑоÑи</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "ÐÑиÑÐ°Ñ Ð¿Ð¾Ð´Ð°ÑоÑи (инÑоÑмаÑии за Ñаг) од мÑзиÑки даÑоÑеки."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "ÐÑиÑÑÐ²Ð°Ñ Ð¿Ð¾Ð´Ð°ÑоÑи од лиÑÑи и даÑоÑеки"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Belastning даÑоÑека до or"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "ÐÑи вÑиÑÑваÑе"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+"ÐÑиÑÐ°Ñ Ð³Ð¸ подаÑоÑиÑе по поÑÑеба кога Ñе пÑикажÑва даÑоÑекаÑа во лиÑÑаÑа"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "ÐÑи пÑиказ"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ÐлеÑбек</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "Ðога Ñе завÑÑи пеÑнаÑа, Ð½ÐµÐ¼Ð¾Ñ Ð°Ð²ÑомаÑÑки да Ð¾Ð´Ð¸Ñ Ð½Ð° ÑледнаÑа."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ðе оди напÑед на лиÑÑаÑа"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "ÐаÑза помеÑÑ"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "ÐаÑза за"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ÑекÑнди"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b> ÐÑиказ за пеÑниÑе</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "СопÑÑвен ÑÑÑинг:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"ÐÐСÐÐÐ\n"
+"ÐÐÐÐÐУÐÐЧ -- ÐÐСÐÐÐ\n"
+"ÐÐÐÐÐУÐÐЧ - ÐÐÐУР- ÐÐСÐÐÐ\n"
+"ÐÐÐУР- ÐÐСÐÐÐ\n"
+"СопÑÑвено"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Ðокажи инÑоÑмаÑии за ÑоÑмаÑÐ¾Ñ Ð½Ð° наÑловоÑ"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐзеднаÑÑваÑ</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>ÐодиÑикаÑоÑи</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "ÐиÑекÑоÑиÑм Ñо даÑоÑека-модиÑикаÑоÑ:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "ÐаÑÑавка на даÑоÑекаÑа-модиÑикаÑоÑ:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ÐоÑÑапни _модиÑикаÑоÑи:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "ÐаÑвоÑи диÑалог на додаваÑе"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "ÐзбеÑи ги ÑиÑе"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "ÐÑÑави ÑÑ"
+
+#~ msgid "Default skin:"
+#~ msgstr "СÑандаÑдна Ñема:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Ðе можам да го иниÑиÑализиÑам gnome-vfs.\n"
+
+#~ msgid "/By extension"
+#~ msgstr "/Ðо наÑÑавка"
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "Ðвозможи SHOUT/Icecast title streaming"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "Режим на компаÑибилноÑÑ Ñо XMMS"
+
+#~ msgid "/Play CD"
+#~ msgstr "/ÐÑÑÑи CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/5 ÑекÑнди назад"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/5 ÑекÑнди напÑед"
+
+#~ msgid "/Add"
+#~ msgstr "/Ðодади"
+
+#~ msgid "/Playback"
+#~ msgstr "/ÐлеÑбек"
+
+#~ msgid "/_Options"
+#~ msgstr "/_ÐпÑии"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/Ðокажи гÑаÑиÑки EQ"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/ÐÑиÑÐ°Ñ Ñема пак"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Ðез напÑедÑваÑе во лиÑÑаÑа"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/ÐÑикажи на ÑиÑе ÑабоÑни повÑÑини"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/Режим на заÑенеÑи пÑозоÑÑи"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/ÐиÑÑа во Ñежим на заÑÐµÐ½ÐµÑ Ð¿ÑозоÑеÑ"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/ÐзеднаÑÑÐ²Ð°Ñ Ð²Ð¾ Ñежим на заÑÐµÐ½ÐµÑ Ð¿ÑозоÑеÑ"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/ÐвоÑна големина"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/ÐеÑно пÑемеÑÑÑваÑе"
+
+#~ msgid "Jump to:"
+#~ msgstr "Ðди на:"
+
+#~ msgid "Jump"
+#~ msgstr "Ðди"
+
+#~ msgid "Add URL"
+#~ msgstr "Ðодади URL"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "Ðневозможи двоjно поголем XMMS"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "Ðвозможи двоÑно поголем XMMS"
+
+#~ msgid "/Playlist"
+#~ msgstr "/ÐиÑÑа на пеÑни"
+
+#~ msgid "/Close Window"
+#~ msgstr "/ÐаÑвоÑи пÑозоÑеÑ"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/ÐодÑеди по наÑлов"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/ÐодÑеди по име на даÑоÑека"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/ÐодÑеди по даÑÑм"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Ðе можам да избиÑÑам \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d од %d даÑоÑеки ÑÑпено Ñе избÑиÑани."
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "XMMS: ÐзбÑиÑани даÑоÑеки"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "ÐавиÑÑина да ги избÑиÑам %d даÑоÑекиÑе?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "ÐавиÑÑина да го избÑиÑам : \"%s\"?"
+
+#~ msgid "Play Files"
+#~ msgstr "ÐÑÑÑи даÑоÑеки"
+
+#~ msgid "Load"
+#~ msgstr "ÐÑиÑаÑ"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "ÐвÑомаÑÑки вÑиÑÐ°Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑоÑ"
+
+#~ msgid "Zero"
+#~ msgstr "ÐÑла"
+
+#~ msgid "From file"
+#~ msgstr "Ðд даÑоÑека"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "Ðд даÑоÑека"
+
+#~ msgid "Import"
+#~ msgstr "Увези"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "ÐодиÑикаÑоÑи од WinAMP"
+
+#~ msgid "To file"
+#~ msgstr "Ðо даÑоÑека"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "Ðо WinAMP EQF даÑоÑека"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "ÐонÑигÑÑиÑÐ°Ñ Ð¸Ð·ÐµÐ´Ð½Ð°ÑÑваÑ"
+
+#~ msgid "_Look for plugins in:"
+#~ msgstr "_ÐаÑÐ°Ñ Ð´Ð¾Ð´Ð°ÑоÑи во:"
+
+#~ msgid "<span size=\"medium\"><b>Settings</b></span>"
+#~ msgstr "<span size=\"medium\"><b> ÐодеÑÑваÑа</b></span>"
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "Ðазно лизгаÑе на наÑлови во Ð³Ð»Ð°Ð²Ð½Ð¸Ð¾Ñ Ð¿ÑозоÑеÑ"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/nl.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3594 @@
+# Dutch translation for BMP
+# Copyright (C) 2004 Laurens Buhler <masterpe at xs4all.nl>
+# This file is distributed under the same license as the BMP package.
+# Laurens Buhler <masterpe at xs4all.nl>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: nl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-04 14:10+0100\n"
+"Last-Translator: Laurens Buhler <masterpe at xs4all.nl>\n"
+"Language-Team: Dutch <nl at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD geluid plugin"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD Nummer %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(onbekend)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Speler %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Kon apparaat %s niet open\n"
+"Foutmelding: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Kon de inhoudsopgave niet openen\n"
+"Zit er een schijf in de speler?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Apparaat %s is OK.\n"
+"Schijf heeft %d nummers"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d data sporen)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Totale duur: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Digitale geluids-extractie kon niet getest worden omdat de schijf geen audio "
+"bevat\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Digitale audio extractie test: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Digitale audio extractie is mislukt: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Kon de map %s niet controleren\n"
+"Foutmelding: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Foutmelding: %s bestaat, maar is geen map"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Map %s is OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Apparaat:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Apparaat:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Map:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Speelmodus:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analoog"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Digitale geluids-extractie"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Volume regelaar:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Geen mixer"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM speler"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS-mixer"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Speler controleren..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Verwijder speler"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD speler configuratie"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Apparaat toevoegen"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Apparaat"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Gebruik CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Download serverlijst"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Toon netwerkvenster"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB Server"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Gebruik CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD Index server:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Titels:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Overschrijf standaard titels"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Titel formaat:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD Informatie"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Selecter de map waar de MPEG-media moet worden opgeslagen:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG geluid plugin configuratie"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Kwaliteit:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanalen:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (mits beschikbaar)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Downsamplen:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Decoder:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatische detectie"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow!-geoptimaliseerde decoder"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX-geoptimaliseerde decoder"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU decoder"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Opties"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Inhoud"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Bestandstype"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Bestandstype en inhoud"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Decoder"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Bufferen:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Buffer omvang (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Prebuffer (procent):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Gebruik proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Host:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Poort:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Gebruik authenticatie"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Gebruikersnaam:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Wachtwoord:"
+
+# * Save to disk config.
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Stream op schijf opslaan:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Stream op schijf opslaan"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Locatie:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Bladeren"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Gebruik Icecast Metadata UDP Kanaal"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Streaming"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 labels:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Deactiveer ID3V2-labels"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Converteer niet-UTF8 ID3 labels naar UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 encodering:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 formaat:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titel"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Schrijven naar bestand mislukt: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Kon label niet opslaan"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Openen van bestand mislukt: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Bestandsinformatie"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Afbreken van bestand mislukt: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Kon het label niet verwijderen!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Geen label om te verwijderen!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Samengevoegde Stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Dubbelkanaals"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Enkelkanaals"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Geen"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nee"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ja"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Naam:"
+
+# MPEG-Info window
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG Informatie "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG-type:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bitniveau:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Sampleniveau:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Frames:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Bestand grootte:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Foutbescherming:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Auteursrecht:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Origineel:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Nadruk:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 label "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titel:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artiest:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Opmerking:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Jaar:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Albumpositie:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Genre:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Album label kopiëren"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Album label plakken"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Variabel,\n"
+"gem. bitniveau: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Fout"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "OPZOEKEN VAN %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Host %s niet gevonden"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "VERBINDEN MET %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Geen connectie mogelijk met Host %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "VERBONDEN: WACHT OP ANTWOORD"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Geen connectie mogelijk met Host %s\n"
+"Server antwoordde: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "PREBUFFEREN: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Klassieke Rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Other"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternatief"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Filmmuziek"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocaal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klassiek"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumentaal"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Alternatieve Rock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditatief"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumentale Pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumentale Rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ethnic"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electronic"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Nationaal Volks"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtic"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustisch"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Speech"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber Music"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphony"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Poolse Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christelijke Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Christelijke Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Over de MPEG geluid plugin"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 decoder door Michael Hipp <mh at mpg123.de>\n"
+"Plugin door het XMMS Team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG geluid plugin"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Kies de map waar u uw Ogg Vorbis streams wilt opslaan: "
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis geluid plugin configuratie"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis labels:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Titelformaat:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Dynamische volume instellingen:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Gebruik knipbescherming"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Gebruik Dynamisch Volume"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Dynamisch Volumetype:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "Dynamisch Volume per nummer"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "Dynamisch Volume per album"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Gebruik 6dB versterking + harde begrenzing"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "Dynamisch Volume"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Er is een fout opgetreden:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Fout!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Aanpassen label mislukt (openen)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Aanpassen label mislukt (sluiten)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Aanpassen label mislukt"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Ogg Vorbis label "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Datum:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Beschrijving:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Locatie:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versie:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC nummer:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organisatie:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis Dynamisch Volume "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Toename per nummer:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Maximum per nummer:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Toename per album:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Maximum per album:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis Informatie "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Duur:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominaal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis geluid plugin"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Over de Ogg Vorbis Geluid-Plugin"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis Plugin door de Xiph.org Foundation\n"
+"\n"
+"Originele auteur\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Met medewerking van\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Bezoek de Xiph.org Foundation op http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV geluid plugin"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS uitvoer plugin"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Over het OSS stuurprogramma"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Standaard (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Standaard"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS stuurprogramma configuratie"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Geluidsapparaat:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Gebruik alternatief apparaat:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mixerapparaat:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Apparaten"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Buffergrootte (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Bufferen"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Mixer instellingen:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Volume bestuurt Master, niet PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixer"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Over de ESounD plugin"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD Uitvoer Plugin configuratie"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Gebruik host op afstand"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Volume bestuurt OSS Mixer"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Server"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound uitvoer plugin"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Over het ALSA stuurprogramma"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s uitvoer plugin"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Onbekende geluidskaart"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Standaard PCM apparaat (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA stuurprogramma configuratie"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mixer:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Gebruik softwarematige volume regelaar"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixerkaart:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Apparaatinstellingen"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Geavanceerde instellingen:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Buffertijd (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Periodieke tijd (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Buffertijd (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap modus"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Geavanceerde instellingen"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Venster decoraties"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Sluiten"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Kleuren selectie"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Opties:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Artiest"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Genre"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Bestandsnaam"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Bestandslocatie"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Bestandstype"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Titel"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Nummer"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Datum"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Jaar"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Opmerking"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Geef \"...\" alleen weer wanneer element %n beschikbaar is"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Een mediaspeler gebaseerd op XMMS\n"
+"\n"
+"Auteursrecht (C) 2003-2004 Het BMP Ontwikkelteam\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Ontwikkelaars:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Met aanvullende hulp van:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michiel Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Homepage en graphics:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "Braziliaans Portugees:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Bretons:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Chinees:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "Tjechisch:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Nederlands:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Spaans:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Frans:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Duits:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Duits:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Grieks:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "Hongaars:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Italiaans:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japans:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Koreaans:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lets:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "Macedonisch:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Pools:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Roemeens:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Russisch:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "Slowaaks:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Spaans:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Zweeds:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Roemeens:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Whales:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Over BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Met dank aan"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Vertalers"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Laden"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Laden/Stand"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Laden/Automatisch te laden stand"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Laden/Standaard stand"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Laden/Neutrale stand"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Laden/Bestand"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Laden/WinAMP EQF-bestand"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importeer"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importeer/WinAMP Equalizer stand"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Opslaan"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Opslaan/Huidige stand"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Opslaan/Automatisch te laden stand"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Opslaan/Als standaard stand"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Opslaan/Als bestand"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Opslaan/Als WinAMP EQF bestand"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Wissen"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Wissen/Stand"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Wissen/Automatisch te laden stand"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP Equalizer"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Standen"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Standen"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Standen laden"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Automatische standen laden"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Equalizer standen laden"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Stand opslaan"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Automatische stand opslaan"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Equalizer standen opslaan"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Stand wissen"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Automatische standen wissen"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: optie `%s' is dubbelzinnig\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: optie `--%s' staat geen argument toe\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: optie `%c%s' staat geen argument toe\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: optie `%s' heeft een argument nodig\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: onbekende optie `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: unbekende optie `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: illegale optie -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: optie heeft een argument nodig -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: optie `-W %s' is dubbelzinnig\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: optie `-W %s' staat geen argument toe\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Kon bestanden niet afspelen.</big></b>\n"
+"\n"
+"De bestanden konden niet afgespeeld worden, controleer dat:\n"
+"1. U toegang heeft to de bestanden.\n"
+"2. U de correcte plugins heeft aanstaan."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Deze waarschuwing niet meer weergeven"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Geef meer details weer"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Bestandsnaam"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Bestandsnaam:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Geen bruikbare invoer plugin voor dit bestand"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Invoer plugin: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Kon logbestand niet aanmaken (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Kon de map (%s) niet aanmaken: %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Gebruik: beep-media-player [opties] [bestanden] ...\n"
+"\n"
+"Opties:\n"
+"--------\n"
+
+# -h, --help switch
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Deze tekst weergeven en stoppen"
+
+# -n, --session switch
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Kies BMP-Sessie (Standaard: 0)"
+
+# -r, --rew switch
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Ga terug in de speellijst"
+
+# -p, --play switch
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Begin de huidige speellijst af te spelen"
+
+# -u, --pause switch
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pauzeer huidig nummer"
+
+# -s, --stop switch
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Stop huidig nummer"
+
+# -t, --play-pause switch
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pauzeer tijdens spelen, anders afspelen"
+
+# -f, --fwd switch
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Ga vooruit in de speellijst"
+
+# -e, --enqueue switch
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Speellijst niet wissen"
+
+# -m, --show-main-window switch
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Geef het hoofdvenster weer"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "Activeer BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "Vorige session ID"
+
+# -v, --version switch
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Versienummer weergeven en stoppen\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"SIGSEGV ontvangen\n"
+"\n"
+"Dit kan een fout in BMP zijn. Als u niet weet waarom die gebeurde, stuur dan "
+"een email naar ons op: beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Kon de skin niet laden.</big></b>\n"
+"\n"
+"Controleer dat de skin bij '%s' bruikbaar is en de standaardskin correct "
+"geinstalleerd bij '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Sorry, uw GTK+ versie (%d.%d.%d) werkt niet met BMP.\n"
+"Gebruik GTK+ %s of nieuwer alstublieft.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Sorry, threads zijn niet ondersteund op uw platform.\n"
+"\n"
+"Als u gebruikt maakt van libc5 gebaseerde linux en u heeft Glib/GTK+ "
+"geinstalleerd voordat u\n"
+"LinuxThreads heeft geinstalleerd moet u Glib/GTK+ hercompileren.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Kan het venster niet openen, sluiten."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Nummer details weergeven"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Titel automatisch scrollen"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Visualisatie type"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Visualisatie type/Analyzer"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Visualisatie type/Scope"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Visualisatie type/Uit"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Analyzer type"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Analyzer type/Normaal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Analyzer type/Vurig"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Analyzer type/Verticale lijnen"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Analyzer type/Lijnen"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Analyzer type/Balken"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Analyzer type/Toppen"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Scope type"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Scope type/Punt Scope"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Scope type/Lijn Scope"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Scope type/Solide Scope"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Vensterschaduw VU type"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Vensterschaduw VU type/Normaal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Vensterschaduw VU type/Soepel"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Ververssnelheid"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Ververssnelheid/Volledig (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Ververssnelheid/Half (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Ververssnelheid/Één vierde (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Ververssnelheid/Één achtste (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Analyzer snelheid"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Analyzer snelheid/Sloom"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Analyzer snelheid/Langzaam"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Analyzer snelheid/Normaal"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Analyzer snelheid/Sneller"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Analyzer snelheid/Snelst"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Toppen snelheid"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Toppen snelheid/Sloom"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Toppen snelheid/Langzaam"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Toppen snelheid/Normaal"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Toppen snelheid/Sneller"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Toppen snelheid/Snelst"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Herhalen"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Willekeurig afspelen"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Afspelen"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pause"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Stop"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Vorige"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Volgende"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Naar het begin van de speellijst"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Ga naar bestand"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Ga naar tijd"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Instellingen"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/_Geef weer"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Over BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Afsluiten"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/Bestanden..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/Internet adres..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Speellijst weergeven"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Equalizer weergeven"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Verstreken tijd"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Resterende tijd"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Altijd op de voorgrond"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Op alle bureaubladen weergeven"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/Speler oprollen"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Speellijst oprollen"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Equalizer oprollen"
+
+# FIXME: Convert this all to GtkDrawingArea
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Ga naar tijd"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuten:seconden"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Duur:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Wachtrij"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Wachtrij"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Ga naar nummer"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filter: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Mappen toevoegen"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "Internet adres toevoegen"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ZOEK NAAR: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLUME: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANCE: %d%% LINKS"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANCE: MIDDEN"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANCE: %d%% RECHTS"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "OPTIES-MENU"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ALTIJD OP VOORGROND UIT (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ALTIJD OP VOORGROND AAN (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ALTIJD OP VOORGROND UIT"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ALTIJD OP VOORGROND AAN"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "BESTANDSINFORMATIE BOX"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** DUBBELFORMAAT IS VERWIJDERD **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "VISUALISATIE MENU"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Geen speelbare CD gevonden.</big></b>\n"
+"\n"
+"Geen CD aanwezig of de aanwezige CD is geen audio CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Kon geluid niet openen.</big></b>\n"
+"\n"
+"Controleer alstublieft dat:\n"
+"1. De correcte uitvoer plugin geselecteerd is\n"
+"2. Geen andere programma's de geluidskaart blokkeren\n"
+"3. Uw geluidskaart juist in geconfigureerd\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Selectie wissen"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/Selectie behouden"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/Alles wissen"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/In de wachtrij zetten"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/CD toevoegen..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/Internet adres toevoegen..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Toevoegen/Mappen..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/Bestanden toevoegen..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Wachtrij wissen"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Ontoegankelijke bestanden wissen"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nieuwe lijst"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/Lijst laden"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Lijst opslaan"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Verversen"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/Selectie omkeren"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/Deselecteer alles"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/Selecteer alles"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Willekeurig verdelen"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Omdraaien"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Lijst sorteren"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Lijst sorteren/Op titel"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Lijst sorteren/Op bestandsnaam"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Lijst sorteren/Op locatie en bestandsnaam"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Lijst sorteren/Op datum"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Selectie sorteren"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Selectie sorteren/Op titel"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Selectie sorteren/Op bestandsnaam"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Selectie sorteren/Op locatie en bestandsnaam"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Selectie sorteren/Op datum"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Fout in wegschrijven speellijst \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s bestaat reeds. Wilt u doorgaan?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Kon de speellijst niet opslaan, onbekend bestandstype voor %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Speellijst laden"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Speellijst opslaan"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP Speellijst editor"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Uiterlijk"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Equalizer"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Muis"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Speellijst"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Plugins"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Artiest"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Nummer"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Bestandslocatie"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Actief"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Beschrijving"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Categorie"
+
+# load the interface
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Instellingen venster"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "Toevoegen/Bestanden openen venster"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "Bestanden openen"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "Sluit venster bij openen"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Bestanden toevoegen"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "Sluit venster bij toevoegen"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (ongeldige UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP Instellingen"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Plugins</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Media plugin lijst:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Media</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Algemene plugin lijst:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Algemeen</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Visualisatie plugin lijst:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualisatie</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Effect plugin lijst:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Effecten</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Huidige uitvoer plugin:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"De veranderingen zijn nu opgeslagen in BMP maar worden pas actief bij het "
+"volgende nummer!\n"
+"\n"
+"U kunt het afspelen stoppen en weer starten om dit direct te activeren."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Uitvoer</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Uiterlijk</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Lettertypen</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Speler:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Speellijst:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Kies het lettertype voor het hoofdvenster:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Kies het lettertype voor de speellijst"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Diversen</b>"
+
+# -r, --rew switch
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Positienummers in de speellijst weergeven"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Gebruik skin muiswijzers"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Muis</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Muiswiel</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Muiswiel verandert het volume met"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "procent"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Muiswiel scrolt de speellijst met"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "regels"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Speellijst</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Bestandsnaam</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Converteer liggende-strepen naar spaties"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Converteer %20 naar spaties"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadata</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Metadata (label informatie) van muziekbestanden laden"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Metadata van speellijsten en bestanden laden"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Metadata laden zodra een bestand wordt toegevoegd of geopened"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Bij laden"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Metadata laden zodra het bestand wordt weergegeven in de speellijst"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Bij weergave"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Afspelen</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Ga niet automatisch naar het volgende nummer, wanneer het huidige nummer is "
+"afgelopen"
+
+# -e, --enqueue switch
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Niet vooruitlopen in de speellijst"
+
+# -u, --pause switch
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pauzeer tussen nummers"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pauzeer voor"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "seconden"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Nummer weergave</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Handmatige instelling:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TITEL\n"
+"ARTIEST - TITEL\n"
+"ARTIEST - ALBUM - TITEL\n"
+"ALBUM - TITEL\n"
+"Aanpassen"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Geef informatie over het titelformaat"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Equalizer</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Opgeslagen equalizer standen</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Map voor standenbestand:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Extensie van standenbestand:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "Beschikbare _Opgeslagen instellingen:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "Sluit venster bij toevoegen"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Selecteer alles"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Deselecteer alles"
+
+#~ msgid "Default skin:"
+#~ msgstr "Standaard skin:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Kon gnome-vfs niet starten.\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Niet vooruitlopen in de speellijst"
+
+#~ msgid "/By extension"
+#~ msgstr "/Op bestandstype"
+
+#~ msgid "Add Folders - BMP"
+#~ msgstr "Mappen toevoegen - BMP"
+
+#~ msgid "Add URL"
+#~ msgstr "URL Toevoegen"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Sorteren op titel"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Sorteren op bestandsnaam"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Sorteren op datum"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "/Play CD"
+#~ msgstr "/CD afspelen"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/5 seconden terug"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/5 seconden vooruit"
+
+#~ msgid "/Add"
+#~ msgstr "/Toevoegen"
+
+#~ msgid "/Playback"
+#~ msgstr "/Afspelen"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Opties"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Speellijst"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Venster sluiten"
+
+#~ msgid "Play Files"
+#~ msgstr "Bestanden afspelen"
+
+#~ msgid "Jump to:"
+#~ msgstr "Ga naar:"
+
+#~ msgid "Jump"
+#~ msgstr "Ga"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Kon \"%s\" niet wissen: %s"
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d van %d bestanden zijn correct verwijderd"
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "bmp: Bestanden verwijderd"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "Wilt u werkelijk %d bestanden wissen?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "Werkelijk \"%s\" wissen?"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "Automatisch standen laden"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "Configureer Equalizer"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "van WinAMP EQF bestand"
+
+#~ msgid "From file"
+#~ msgstr "van bestand"
+
+#~ msgid "Import"
+#~ msgstr "Importeer"
+
+#~ msgid "Load"
+#~ msgstr "Laden"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "Als WinAMP EQF bestand"
+
+#~ msgid "To file"
+#~ msgstr "Als bestand"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "Opgeslagen WinAMP instellingen"
+
+#~ msgid "Zero"
+#~ msgstr "Neutrale stand"
+
+# -x, --xmms switch
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "XMMS compatibiliteitsmodus"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/Visualisatie plugins"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/Equalizer weergeven"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/Skin herladen"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/Op alle bureabladen weergeven"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/Vensterschaduw voor speler"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/Vensterschaduw voor speellijst"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/Vensterschaduw voor equalizer"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/Dubbelformaat voor speler"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/Makkelijk verplaatsen"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "DUBBELFORMAAT UIT"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "DUBBELFORMAAT AAN"
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "Soepel titel scrollen in het hoofdvenster"
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "Gebruikt SHOUT/Icecast titelweergave"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pl.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3703 @@
+# Copyright (C) 2001-2004 Free Software Foundation, Inc.
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# AktualnÄ
wersjÄ tego pliku możesz odnaleÅºÄ w repozytorium cvs.gnome.pl
+# (:pserver:anonymous at cvs.gnome.pl:/gnomepl, puste hasÅo)
+# JeÅli masz jakiekolwiek uwagi odnoszÄ
ce siÄ do tÅumaczenia lub chcesz
+# pomóc w jego rozwijaniu i pielÄgnowaniu, napisz do nas na adres:
+# translators at gnome.pl
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# GNOME PL Team <translators at gnome.pl>, 2004
+# Jacek Wolszczak <shutdownrunner at o2.pl>,2004
+#
+# Based on the Polish translation of XMMS by:
+# Grzegorz Kowal <g_kowal at poczta.onet.pl>, 2000, 2001.
+# Bartosz Kosiorek <gang65 at poczta.onet.pl>, 2003
+msgid ""
+msgstr ""
+"Project-Id-Version: Beep Media Player\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-08-27 18:47+0000\n"
+"Last-Translator: GNOME PL Team <translators at gnome.pl>\n"
+"Language-Team: Polish <translation-team-pl at lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Wtyczka audio CD"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Utwór %02u pÅyty CD Audio"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(nieznany)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "NapÄd %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Nie można otworzyÄ urzÄ
dzenia %s\n"
+"BÅÄ
d: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Nie można odczytaÄ \"Tablicy zawartoÅci\"\n"
+"Sprawdź czy dysk jest w napÄdzie.\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"UrzÄ
dzenie %s jest OK.\n"
+"Dysk ma %d Åcieżek"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d Åcieżek z danymi)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"CaÅkowita dÅugoÅÄ: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"ŹródÅo dźwiÄku cyfrowego nie zostaÅo przetestowane, ponieważ dysk nie "
+"zawiera Åcieżek audio\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Testowanie źródÅa dźwiÄku cyfrowego: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Testowanie źródÅa dźwiÄku cyfrowego: Niepowodzenie %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"BÅÄ
d w sprawdzaniu folderu %s\n"
+"BÅÄ
d: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "BÅÄ
d: %s isnieje, lecz nie jest to folderem"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Folder %s jest w porzÄ
dku."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "UrzÄ
dzenie:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_UrzÄ
dzenie:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Ka_talog:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Tryb odtwarzania:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analogowy"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Pochodzenie dźwiÄku cyfrowego"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Zmiana gÅoÅnoÅci:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Brak miksera"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "NapÄd CDROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Mikser OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Sprawdź napÄd..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "UsuÅ napÄd"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Konfiguracja odtwarzacza CD Audio"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Dodaj napÄd"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "UrzÄ
dzenie"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Użycie CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Pobierz listÄ serwerów"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "WyÅwietl okno sieciowe"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Serwer CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "Indeks pÅyt CD:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Użycie indeksu pÅyt CD"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Serwer indeksu pÅyt CD:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Nazwy utworów:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Nie stosowanie ogólnych tytuÅów"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Format nazwy:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Informacje o pÅycie CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Wybór folderu przechowujÄ
cego strumienie MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Konfiguracja wtyczki audio MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "RozdzielczoÅÄ:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bitów"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bitów"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "KanaÅy:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (jeÅli to możliwe)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Obniżenie próbkowania:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekode:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Autodetekcja"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Dekoder zoptymalizowany pod kÄ
tem 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Dekoder zoptymalizowany pod kÄ
tem MMX!"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "Dekoder używajÄ
cy FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Opcje"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ZawartoÅÄ"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Rozszerzenie"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Rozszerzenie i zawartoÅÄ"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekoder"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Buforowanie:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Rozmiaw bufora (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "WstÄpne wypeÅnienie bufora (procenty):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "PoÅrednik:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Użycie poÅrednika"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Serwer:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Uwierzytelnianie"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Użytkownik:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "HasÅo:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Zapis strumienia na dysku:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "WÅÄ
czenie zapisu strumienia na dysk"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "PoÅożenie:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "PrzeglÄ
daj"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "WÅÄ
czenie kanaÅu Icecast Metadata UDP"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Strumieniowanie"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Znacznik ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "WyÅÄ
czenie znaczników ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr ""
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Format ID3"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "TytuÅ"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Nie można zapisaÄ do pliku: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Nie można zapisaÄ znacznika!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Nie można otworzyÄ pliku: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Informacje o pliku"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Nie można obciÄ
Ä pliku: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Nie można usunÄ
Ä znacznika!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Brak znacznika do usuniÄcia"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "ÅÄ
czone stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Podwójny kanaÅ"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Pojedynczy kanaÅ"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Brak"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nie"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Tak"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " Informacje MPEG"
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "SzybkoÅÄ:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Próbkowanie:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Ramki:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Rozmiar pliku:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Ochrona przed bÅÄdami:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "OryginaÅ:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Emfaza:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " Znacznik ID3"
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "TytuÅ:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Wykonawca:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Komentarz:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Rok:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Numer utworu:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Gatunek:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/D"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu bajtów"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "BÅÄ
d"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "WYSZUKIWANIE %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Nie można odnaleÅºÄ serwera %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "ÅÄCZENIE SIÄ Z %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Nie można poÅÄ
czyÄ siÄ z serwerem %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "POÅÄCZENIE: OCZEKIWANIE NA ODPOWIEDŹ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Nie można poÅÄ
czyÄ siÄ z serwerem %s\n"
+"Serwer zwróciÅ: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "WSTÄPNE BUFOROWANIE: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Rock klasyczny"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Starsze"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Inne"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternatywna"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Psikusy"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Åcieżka filmowa"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Wokal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trans"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klasyczna"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumentalna"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Z gier"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Klip dźwiÄkowy"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Szum"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Rock alternatywny"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Sould"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "PrzestrzeÅ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Medytacja"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Pop instrumentalny"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Rock instrumentalny"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Etniczna"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gotycka"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electroniczna"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Rock poÅudniowy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Komediowa"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Kultowa"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Rap ChrzeÅcijaÅski"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Rdzennych Amerykanów"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Kabaretowa"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychodeliczna"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Zwiastun"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Plemienna"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Folk Narodowy"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latynoska"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "OżywiajÄ
ca"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "OżywiajÄ
ca"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Awangardowa"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Rock Gotycki"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Rock Progresywny"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Rock Psychodeliczny"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Rock Symfoniczny"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Wolny Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chóralna"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Lekka w sÅuchaniu"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Akustyczna"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Mowa"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Muzyka koÅcielna"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symfonia"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satyryczna"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Wolny Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Klubowa"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklor"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballada"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Mocna Ballada"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rytmiczny souls"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Solo perkusyjne"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Gangsta Rap ChrzeÅcijaÅski"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "WspóÅczesna ChrzeÅcijaÅska"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "ock ChrzeÅcijaÅski"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Informacje o wtyczce audio MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"Mechanizm dekodujÄ
cy mpg123 autorstwa Michaela Hippa <mh at mpg123.de>\n"
+"Wtyczka stworzona przez zespóŠtwórców XMMS-a"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Wtyczka audio MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Wybór folderu przechowujÄ
cego strumienie Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Konfiguracja wtyczki audio Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Znaczniki Ogg Vorbis"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Format tytuÅu:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Ustawienia powtarzania uzyskanego:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr ""
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "WÅÄ
czenie powtarzania uzyskanego"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Typ powtarzania uzyskanego:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "użycie utworu uzyskanego/szczytowego"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "użyj albumu uzyskanego/szczytowego"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "WÅÄ
czenie 6dB wzmocnienia i twardego ograniczenia"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "Powtarzaj uzyskane"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"WystÄ
piÅ bÅÄ
d:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "BÅÄ
d!"
+
+#: Input/vorbis/fileinfo.c:242
+#, fuzzy
+msgid "Failed to modify tag (open)"
+msgstr "Nie udaÅo siÄ zmodyfikowaÄ znacznika"
+
+#: Input/vorbis/fileinfo.c:295
+#, fuzzy
+msgid "Failed to modify tag (close)"
+msgstr "Nie udaÅo siÄ zmodyfikowaÄ znacznika"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Nie udaÅo siÄ zmodyfikowaÄ znacznika"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Znacznik Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Rok:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Opis:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "PoÅożenie:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Wersja:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Numer ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organizacja:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Uzyskany utwór:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Utwór szczytowy:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Informacje Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "DÅugoÅÄ"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominalnie)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d bajtów"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Wtyczka audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Informacje o wtyczce audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Wtyczka Ogg Vorbis autorstwa fundacji Xiph.org\n"
+"\n"
+"Autor oryginalnego kodu:\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"WspóÅpracownicy:\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Odwiedź fundacjÄ Xiph.org na stronie http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Wtyczka audio WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "Wtyczka wyjÅciowa OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Informacje o sterowniku OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS - sterownik OSS\n"
+"\n"
+"Jest to program darmowy; możesz go rozprowadzaÄ i/lub modyfikowaÄ\n"
+"zgodnie z zasadami GNU General Public License opublikowanymi przez\n"
+"Free Software Foundation; zarówno licencji w wersji 2, jak i w\n"
+"wersji późniejszej (jako opcja).\n"
+"\n"
+"Program ten jest rozprowadzany z nadziejÄ
, że bÄdzie użyteczny,\n"
+"ale BEZ Å»ADNEJ GWARANCJI; nie zawierajÄ
cej nawet gwarancji\n"
+"HANDLOWEJ lub ZASTOSOWANIA DO SZCZEGÃLNEGO CELU. Zobacz do\n"
+"GNU General Public License, aby uzyskaÄ wiÄcej informacji.\n"
+"\n"
+"PowinieneÅ otrzymaÄ kopiÄ GNU General Public License razem\n"
+"z tym programem; jeÅli nie, napisz do Free Software Foundation,\n"
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "DomyÅlnie (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "DomyÅlne"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Konfiguracja sterownika OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "UrzÄ
dzenie dźwiÄkowe:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Użycie alternatywnego urzÄ
dzenia:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "UrzÄ
dzenie miksera:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "UrzÄ
dzenia"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Rozmiar bufora (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Buforowanie"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Ustawienia miksera:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Zmiana gÅoÅnoÅci poprzez kanaÅ zbiorczy, a nie PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mikser"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Informacje o wtyczce ESound"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS - wtyczka ESounD\n"
+"\n"
+" Jest to program darmowy; możesz go rozprowadzaÄ i/lub modyfikowaÄ\n"
+"zgodnie z zasadami GNU General Public License opublikowanymi przez\n"
+"Free Software Foundation; zarówno licencji w wersji 2, jak i w\n"
+"wersji późniejszej (jako opcja).\n"
+"\n"
+"Program ten jest rozprowadzany z nadziejÄ
, że bÄdzie użyteczny,\n"
+"ale BEZ Å»ADNEJ GWARANCJI; nie zawierajÄ
cej nawet gwarancji\n"
+"HANDLOWEJ lub ZASTOSOWANIA DO SZCZEGÃLNEGO CELU. Zobacz do\n"
+"GNU General Public License, aby uzyskaÄ wiÄcej informacji.\n"
+"\n"
+"PowinieneÅ otrzymaÄ kopiÄ GNU General Public License razem\n"
+"z tym programem; jeÅli nie, napisz do Free Software Foundation,\n"
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Konfiguracja wtyczki wyjÅciowej ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Użycie zdalnego serwera"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Zmiany gÅoÅnoÅci poprzez mikser OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Serwer"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Wtyczka wyjÅciowa eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Informacje o sterowniku ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS - sterownik OSS\n"
+"\n"
+"Jest to program darmowy; możesz go rozprowadzaÄ i/lub modyfikowaÄ\n"
+"zgodnie z zasadami GNU General Public License opublikowanymi przez\n"
+"Free Software Foundation; zarówno licencji w wersji 2, jak i w\n"
+"wersji późniejszej (jako opcja).\n"
+"\n"
+"Program ten jest rozprowadzany z nadziejÄ
, że bÄdzie użyteczny,\n"
+"ale BEZ Å»ADNEJ GWARANCJI; nie zawierajÄ
cej nawet gwarancji\n"
+"HANDLOWEJ lub ZASTOSOWANIA DO SZCZEGÃLNEGO CELU. Zobacz do\n"
+"GNU General Public License, aby uzyskaÄ wiÄcej informacji.\n"
+"\n"
+"PowinieneÅ otrzymaÄ kopiÄ GNU General Public License razem\n"
+"z tym programem; jeÅli nie, napisz do Free Software Foundation,\n"
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "Wtyczka wyjÅciowa ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Nieznana karta dźwiÄkowa"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "DomyÅlnie urzÄ
dzenie PCM (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Konfiguracja sterownika ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mikser:"
+
+#: Output/alsa/configure.c:316
+#, fuzzy
+msgid "Use software volume control"
+msgstr "Zmiana gÅoÅnoÅci:"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Karta miksera:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Ustawienia urzÄ
dzenia"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Zaawansowane ustawienia:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Rozmiar bufora (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "DÅugoÅÄ okresu (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Rozmiar bufora (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Tryb Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Zaawansowane ustawienia"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Opcje:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Wykonawca"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Gatunek"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Nazwa pliku"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "PoÅożenie"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Rozszerzenie pliku"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Nazwa utworu"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Numer utworu"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Data"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Rok"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Komentarz"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Odtwarzacz multimedialny oparty na XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "ProgramiÅci"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Przy wsparciu:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Strona domowa i grafika:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ChiÅski:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+#, fuzzy
+msgid "Czech:"
+msgstr "Francuski:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Holenderski"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "HiszpaÅski:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francuski:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Niemiecki:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Niemiecki:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "Gatunek:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "WÅoski:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "JapoÅski:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "KoreaÅski:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Litewski:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polski:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+#, fuzzy
+msgid "Romanian:"
+msgstr "Litewski:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Rosyjski:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "HiszpaÅski:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Szwedzki:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Organizacja:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Walijski:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Informacje o programie BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "ZasÅugi"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Lokalizacja"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PRZEDWZM"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Wczytaj"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Wczytaj/Ustawienie"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Wczytaj/Automatyczne ustawienie"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Wczytaj/DomyÅlne"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Wczytaj/Wyzeruj"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Wczytaj/Z pliku"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Wczytaj/Z pliku WinAMP EQF"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importuj"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importuj/Ustawienia WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Zapisz"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Zapisz/Ustawienie"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Zapisz/Automatycznie wczytywane ustawienie"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Zapisz/DomyÅlne"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Zapisz/Do pliku"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Zapisz/Do pliku WinAMP EQF"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/UsuÅ"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/UsuÅ/Ustawienie"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/UsuÅ/Automatycznie wczytywane ustawienie"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "Korektor graficzny BMP"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Ustawienie"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Ustawienia"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Wczytywanie ustawienia"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Wczytywanie automatycznego ustawienia"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Wczytywanie ustawieÅ korektora"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Zapisywanie ustawienia"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Zapis automatycznego ustawienia"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Zapis ustawienia korektora"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "UsuniÄcie ustawienia"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "UsuniÄcie automatycznego ustawienia"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcja '%s' jest dwuznaczna\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcja '--%s' nie zezwala na podanie argumentun\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcja '%c%s' nie zezwala na podanie argumentu\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nieznana opcja '--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nieznana opcja %c%s\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: niedozwolona opcja -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: nieprawidÅowa opcja -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcja wymaga podania argumentu -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcja 'W %s' jest dwuznaczna\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Nie można odtworzyÄ plików.</big></b>\n"
+"\n"
+"Nie można odtworzyÄ nastÄpujÄ
cych plików. Sprawdź czy:\n"
+"1. masz do nich dostÄp.\n"
+"2. wÅÄ
czona jest wymagana wtyczka."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Nie pokazuj wiÄcej tego ostrzeżenia"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Pokaż _szczegóÅy"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Nazwa pliku"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Nazwa pliku:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr ""
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Wtyczka wejÅciowa: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Nie można utworzyÄ pliku dziennka (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Nie można utworzyÄ folderu (%s) %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Użycie: beep-media-player [opcje] [pliki] ...\n"
+"\n"
+"Opcje:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "WyÅwietla ten tekst i zamyka program"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr ""
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Przeskakuje do poprzedniego utworu na liÅcie odtwarzania"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Rozpoczyna odtwarzanie bieżÄ
cej listy odtwarzania"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Wstrzymuje bieżÄ
cy utwór"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Zatrzymyje bieżÄ
cy utwór"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Wstrzymuje, jeÅli odtwarzany jest utwór, w przeciwnym razie wznawia"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Przechodzi do nastÄpnego utworu na liÅcie odtwarzania"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Nie czyÅci listy odtwarzania"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "WyÅwietla gÅówne okno"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID poprzedniej sesji"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "WyÅwietla numer wersji i koÅczy dziaÅanie programu.\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Nie można wgraÄ skóry.</big></b>\n"
+"\n"
+"Sprawdź czy skóra '%s' jest poprawana i czy domyÅlna skóra jest "
+"zainstalowana w '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Niestety Twoja wersja GTK+ (%d.%d.%d) nie dziaÅa z BMP.\n"
+"Zainstaluj bibliotekÄ GTK+ %s lub nowszÄ
.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr ""
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Informacje o pliku"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Przewijanie tytuÅu utworu"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Tryb wizualizacji"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Tryb wizualizacji/Analizator"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Tryb wizualizacji/SygnaÅ"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Tryb wizualizacji/Brak"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Tryb analizatora"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Tryb analizatora/ZwykÅy"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Tryb analizatora/OgieÅ"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Tryb analizatora/Linie pionowe"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Tryb analizatora/Linie"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Tryb analizatora/SÅupki"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Tryb analizatora/Piki"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Tryb sygnaÅu"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Tryb sygnaÅu/SygnaÅ punktowany"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Tryb sygnaÅu/SygnaÅ liniowany"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Tryb sygnaÅu/SygnaÅ ciÄ
gÅy"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Wskaźnik sygnaÅu"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Wskaźnik sygnaÅu/ZwykÅy"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Wskaźnik sygnaÅu/GÅadki"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/CzÄstoÅÄ odÅwieżania"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/CzÄstoÅÄ odÅwieżania/PeÅna (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/CzÄstoÅÄ odÅwieżania/PoÅowa (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/CzÄstoÅÄ odÅwieżania/Äwiartka (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/CzÄstoÅÄ odÅwieżania/Ãsemka (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Zanik analizatora"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Zanik analizatora/Najwolniejszy"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Zanik analizatora/Wolny"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Zanik analizatora/Åredni"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Zanik analizatora/Szybki"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Zanik analizatora/Najszybszy"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Zanik pików"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Zanik analizatora/Najwolniejszy"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Zanik analizatora/Wolny"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Zanik analizatora/Åredni"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Zanik analizatora/Szybki"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Zanik analizatora/Najszybszy"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Powtarzaj"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Losowo"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Graj"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Wstrzymaj"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Zatrzymaj"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Poprzedni"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/NastÄpny"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Skocz do poczÄ
tku listy"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Skocz do pliku"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Skocz do czasu"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/_Ustawienia"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Informacje o programie"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_ZakoÅcz"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/Dodaj/Pliki..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Dodaj/Adres internetowy..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/WyÅwietlaj listÄ odtwarzania"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/WyÅwietlaj korektor graficzny"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Miniony czas"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/PozostaÅy czas"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Zawsze na wierzchu"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Na wszystkich obszarach roboczych"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/ZwiniÄte okno gÅówne"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/ZwiniÄta lista odtwarzania"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/ZwiniÄty korektor graficzny"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Skok do czasu"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuty:sekundy"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "DÅugoÅÄ utworu:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Kolejka"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Kolejka"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Skok do utworu"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtr: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Dodawanie folderów"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Dodaj/Adres internetowy..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "SKOK DO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "GÅOÅNOÅÄ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANS: %d%% LEWY"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANS: ÅRODEK"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANS: %d%% PRAWY"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "MENU OPCJI"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "WYÅÄCZ ZAWSZE NA WIERCZHU (N/D)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ZAWSZE NA WIERZCHU (N/D)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "WYÅÄCZ ZAWSZE NA WIERCZHU"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ZAWSZE NA WIERZCHU"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "OKNO INFORMACJI PLIKU"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** USUNIÄTO PODWÃJNY ROZMIAR **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "MENU WIZUALIZACJI"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Nie można otworzyÄ wyjÅcia dźwiÄku.</big></b>\n"
+"\n"
+"Sprawdź, czy:\n"
+"1. WybraÅeÅ odpowiedniÄ
wtyczkÄ wyjÅciowÄ
.\n"
+"2. Å»aden inny program nie blokuje karty dźwiÄkowej.\n"
+"3. Twoja karta dźwiÄkowa jest poprawnie skonfigurowana.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/UsuÅ zaznaczone"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/UsuÅ zaznaczone"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/UsuÅ zaznaczone"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Dodaj do kolejki"
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/Dodaj/Pliki..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Dodaj/Adres internetowy..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Dodaj/Foldery..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/Dodaj/Pliki..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/WyczyÅÄ kolejkÄ"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/UsuÅ martwe pliki"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nowa lista"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/Sortuj listÄ"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Nowa lista"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Zaktualizuj widok"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Sortuj zaznaczone"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/Sortuj zaznaczone"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "Zaznacz wszystkie"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Wymieszaj listÄ"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/OdwrÃ³Ä listÄ"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Sortuj listÄ"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Sortuj listÄ/WedÅug tytuÅu"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Sortuj listÄ/WedÅug nazwy pliku"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Sortuj listÄ/WedÅug poÅożenia i nazwy pliku"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Sortuj listÄ/WedÅug daty"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Sortuj zaznaczone"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Sortuj zaznaczone/WedÅug tytuÅu"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Sortuj zaznaczone/WedÅug nazwy pliku"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Sortuj zaznaczone/WedÅug poÅożenia i nazwy pliku"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Sortuj zaznaczone/WedÅug daty"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "BÅÄ
d zapisu listy utworów \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s już istnieje. KontynuowaÄ?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Nie można zapisaÄ listy utworów! Typ pliku %s nieznany."
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Wczytywanie listy"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Zapisywanie listy"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Lista odtwarzania BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "WyglÄ
d"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Korektor graficzny BMP"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Mysz"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Lista odtwarzania"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Wtyczki"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Wykonawca"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Numer utworu"
+
+#: beep/prefswin.c:99
+#, fuzzy
+msgid "Filepath"
+msgstr "PoÅożenie"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "WÅÄ
czona"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Opis"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Kategorie"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Okno ustawieÅ"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "Dodawanie plików"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/Przytnij pliki"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Dodawanie plików"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (nieprawidÅowy UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Ustawienia BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Wtyczki</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Lista wtyczek"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>WejÅciowe</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Lista wtyczek"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Ogólne</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "/Wtyczki wizualizacji"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Wizualizacji</b>"
+
+#: beep/glade/prefswin.glade:552
+#, fuzzy
+msgid "_Effect plugin list:"
+msgstr "_Lista wtyczek"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efektów</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "Aktualna wty_czka wyjÅciowa:"
+
+#: beep/glade/prefswin.glade:753
+#, fuzzy
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Zmiany w ustawieniach zostaÅy zapisane, \n"
+"ale zacznÄ
dziaÅaÄ dopiero przy \n"
+"uruchomieniu nastÄpnego utworu!\n"
+"\n"
+"Zatrzymaj i ponownie wÅÄ
cz utwór, żeby wprowadziÄ \n"
+"zmiany."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>WyjÅciowe</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>WyglÄ
d</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skóra:</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Czcionki:</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_GÅówne okno:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Lista odtwarzania"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Wybór czcionki okna gÅównego"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Wybór czcionki listy odtwarzania"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Różne:</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "WyÅwietlanie numerów utworów na liÅcie odtwarzania"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Mysz</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Opcje kóÅka myszy:</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "KóÅko myszy zmienia gÅoÅnoÅÄ o"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "%"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "KoÅko myszy przesuwa listÄ o"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "wiersze"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Lista odtwarzania</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Opcje nazw plików</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Zamiana podkreÅlników na spacje"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Zamiana sekwencji %20 na spacje"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Opcje metadanych</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+"WÅÄ
cza pobieranie metadanych (informacji ze znacznika) z plików muzycznych."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Pobieranie metadanych z list odtwarzania i plików"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"Pobieranie metadanych przy odtworzeniu utworu lub dodawaniu utworu do listy"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Przy wgrywaniu"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Pobieranie metadanych, kiedy utwór widoczny jest na liÅcie odtwarzania"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Na żÄ
danie"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Odtwarzanie</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Kiedy zakoÅczy odtwarzanie utworu nie przechodzi automatycznie do nastÄpnego."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Odtwarzanie utworów pojedynczo"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Przerwa miÄdzy utworami"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Przerwa"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "sekundowa"
+
+#: beep/glade/prefswin.glade:2215
+#, fuzzy
+msgid "<b>Song display</b>"
+msgstr "<b>_Filtr:</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Korektor graficzny</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Ustawienia</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Folder pliku ustawieÅ:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Rozszerzenie pliku ustawieÅ:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "DostÄ_pne ustawienia:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Zaznacz wszystkie"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Odznacz wszystkie"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "Default skin:"
+#~ msgstr "DomyÅlna skóra:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Nie można zainicjowaÄ gnome-vfs.\n"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Odtwórz Audio CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/Cofnij o 5 sek"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/PrzewiÅ o 5 sek"
+
+#~ msgid "/Add"
+#~ msgstr "/Dodaj"
+
+#~ msgid "/Playback"
+#~ msgstr "/Odtwarzanie"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Opcje"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Odtwarzaj pliki pojedyÅczo"
+
+#~ msgid "Add URL"
+#~ msgstr "Dodawanie URL"
+
+#~ msgid "/By extension"
+#~ msgstr "/WedÅug rozszerzenia"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Lista odtwarzania"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Zamknij okno"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Sortuj wedÅug tytuÅu"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Sortuj wedÅug nazwy pliku"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Sortuj wedÅug daty"
+
+#~ msgid "Play Files"
+#~ msgstr "Odtwórz pliki"
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "WÅÄ
czenie strumieniowania tytuÅu SHOUT/Icecast"
+
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "Tryb zgodnoÅci z XMMS"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/Wtyczki wizualizacji"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/WyÅwietlaj korektor graficzny"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/PrzeÅaduj skórÄ"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/WyÅwietlaj na wszystkich pulpitach"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/ZwiÅ okno gÅówne"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/ZwiÅ listÄ odtwarzania"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/ZwiÅ korektor graficzny"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/Podwójny rozmiar"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/Åatwe przesuwanie"
+
+#~ msgid "Jump to:"
+#~ msgstr "Skok do:"
+
+#~ msgid "Jump"
+#~ msgstr "Skocz"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "WYÅÄCZ PODWÃJNY ROZMIAR"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "PODWÃJNY ROZMIAR"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Nie udaÅo siÄ usunÄ
Ä \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "Skasowano %d z %d plików."
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "XMMS: UsuniÄto pliki"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "Czy rzeczywiÅcie usunÄ
Ä %d plików"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "Czy rzeczywiÅcie usunÄ
Ä \"%s\"?"
+
+#~ msgid "Load"
+#~ msgstr "Wczytaj"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "Automatycznie wczytane ustawienie"
+
+#~ msgid "Zero"
+#~ msgstr "Wyzeruj"
+
+#~ msgid "From file"
+#~ msgstr "Z pliku"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "Z pliku WinAMP EQF"
+
+#~ msgid "Import"
+#~ msgstr "Importuj"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "Ustawienia WinAMPa"
+
+#~ msgid "To file"
+#~ msgstr "Do pliku"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "Do pliku WinAMP EQF"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "Konfiguruj korektor"
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "PÅynne przesuwanie tytuÅu utworu w gÅównym oknie"
+
+#~ msgid "%d items were added."
+#~ msgstr "Dodano %d utworów."
+
+#~ msgid "Directory"
+#~ msgstr "Folder"
+
+#~ msgid "Directory browser"
+#~ msgstr "PrzeglÄ
darka folderów"
+
+#~ msgid "Unplayable files - BMP"
+#~ msgstr "NieprawidÅowe pliki - BMP"
+
+#, fuzzy
+#~ msgid ""
+#~ "The following files could not be played. They are either not accessible "
+#~ "or require a dedicated input plugin."
+#~ msgstr ""
+#~ "Nie można odtworzyÄ nastÄpujÄ
cych plików. Nie sÄ
dostÄpne albo nie "
+#~ "zainstalowano odpowiedniej wtyczki."
+
+#~ msgid "/Add/Directories..."
+#~ msgstr "/Dodaj/Foldery..."
+
+#~ msgid "Add Directories... "
+#~ msgstr "Dodawanie folderów..."
+
+#~ msgid "Look into sub_folders"
+#~ msgstr "Przeszukiwanie pod_folderów"
+
+#~ msgid "<b>_Filter:</b>"
+#~ msgstr "<b>_Filtr:</b>"
+
+#~ msgid "_Look for plugins in:"
+#~ msgstr "_Szukanie wtyczek w:"
+
+#~ msgid "<span size=\"medium\"><b>Settings</b></span>"
+#~ msgstr "<span size=\"medium\"><b>Ustawienia</b></span>"
+
+#~ msgid "<b>Other options</b>"
+#~ msgstr "<b>Inne opcje</b>"
+
+#~ msgid ""
+#~ "Update the playlist according to the settings. This doesn't happen "
+#~ "automatically because it can take a very long time when having a lot of "
+#~ "files in the list."
+#~ msgstr ""
+#~ "Aktualizuje listÄ odtwarzania zgodnie z ustawieniami. Przy dużej iloÅci "
+#~ "plików na liÅcie operacja ta może zajÄ
Ä dużo czasu, dlatego nie jest "
+#~ "wykonywana automatycznie."
+
+#~ msgid "Update playlist"
+#~ msgstr "Zaktualizuj listÄ"
+
+#~ msgid "Delete"
+#~ msgstr "UsuÅ"
+
+#~ msgid "Close"
+#~ msgstr "Zamknij"
+
+#~ msgid "BMP Equalizer Preferences"
+#~ msgstr "Ustawienia korektora graficznego BMP"
+
+#~ msgid ""
+#~ "If \"Auto\" is enabled on the equalizer, xmms will try to load equalizer "
+#~ "presets like this:\n"
+#~ "1: Look for a preset file in the directory of the file we are about to "
+#~ "play.\n"
+#~ "2: Look for a directory preset file in the same directory.\n"
+#~ "3: Look for a preset saved with the \"auto-load\" feature\n"
+#~ "4: Finally, try to load the \"default\" preset"
+#~ msgstr ""
+#~ "JeÅli w korektorze wÅÄ
czone jest \"Auto\", xmms bÄdzie próbowaÅ wczytaÄ "
+#~ "ustawienia korektora w nastÄpujÄ
cy sposób:\n"
+#~ "1: Spróbuje odszukaÄ plik ustawieÅ w folderze aktualnie odtwarzanego "
+#~ "pliku.\n"
+#~ "2: Spróbuje odszukaÄ folderu pliku ustawieÅ w tym samym folderze.\n"
+#~ "3: Spróbuje odszukaÄ ustawienia zapisane z wÅasnoÅciÄ
\"auto-load\"\n"
+#~ "4: Ostatecznie, spróbuje zaÅadowaÄ \"domyÅlne\" ustawienia"
+
+#~ msgid "/Jump to Track"
+#~ msgstr "/Skocz do utworu"
+
+#~ msgid "/Save as..."
+#~ msgstr "/Zapisz jako..."
+
+#~ msgid "A_dd all"
+#~ msgstr "Dodaj _wszystkie"
+
+#~ msgid "_Skin list:"
+#~ msgstr "Lista _skór:"
+
+#~ msgid "<b>_Playlist font:</b>"
+#~ msgstr "<b>_Lista odtwarzania:</b>"
+
+#~ msgid "<b>_Main window font:</b>"
+#~ msgstr "<b>Okno _gÅówne:</b>"
+
+#~ msgid "User defined:"
+#~ msgstr "Zdefiniowane przez użytkownika:"
+
+#~ msgid "Mixer device"
+#~ msgstr "UrzÄ
dzenie miksera"
+
+#~ msgid "<b><span size=\"medium\">Output</span></b>"
+#~ msgstr "<b><span size=\"medium\">WyjÅciowe</span></b>"
+
+#, fuzzy
+#~ msgid "Settings"
+#~ msgstr "Ustawienia miksera:"
+
+#, fuzzy
+#~ msgid "BMP: Add Directories... "
+#~ msgstr "BMP : Dodawanie katalogów... "
+
+#~ msgid "Choose a preferences category"
+#~ msgstr "Wybierz kategoriÄ ustawieÅ"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/pt_BR.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3594 @@
+# Brazilian portuguese translation of Beep Media Player.
+# Copyright (C) 2004 Philipi Pinto <philipi at gmx.net>, 2004.
+# This file is distributed under the same license as Beep Media Player.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: BMP 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-11-15 13:42-0200\n"
+"Last-Translator: Philipi Pinto <philipi at gmx.net>\n"
+"Language-Team: Portuguese/Brazil\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "Plugin CD de áudio"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "Faixa de CD de áudio %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(desconhecido)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Drive·%d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Falha ao abrir o dispositivo %s\n"
+"Erro:·%s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Falha ao abrir a \"Tabela de Conteúdo\"\n"
+"Provavelmente não há disco no drive\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Dispositivo %s OK \n"
+"O disco tem %d faixas"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d faixas de dados)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Duração total: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Extração de áudio digital não testada, já que o disco não contém faixas de "
+"áudio\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Teste de extração de áudio digital: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"O teste de extração de áudio digital falhou: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Falha ao checar o diretório %s\n"
+"Erro: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Erro: %s existe, mas não é um diretório"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Diretório %s OK"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Dispositivo:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Dir_etório"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Modo de reprodução:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analógico"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Extração de áudio digital"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Controle de volume:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Sem controle de volume"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "Volume do Drive de CD-ROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Volume do OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Checar o drive..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Remover o drive"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Configuração de Reprodução de CD de áudio"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Adicionar um drive"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Dispositivo"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Usar CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Baixar lista de servidores"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Mostrar a janela de rede"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "Servidor do CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Usar CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Servidor de CD Index:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Nome das faixas:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Modificar tÃtulos genéricos"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Formato do nome:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "Informação do CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Selecione o diretório onde você quer salvar streams MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Configuração do Plugin de áudio MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Resolução:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Canais:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Estéreo (se disponÃvel)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Monofônico"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Taxa de amostragem:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Decodificador:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Detecção automática"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Decodificação otimizada por 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Decodificação otimizada por MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "Decodificador FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Opções"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Conteúdo"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Extensão"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Extensão e conteúdo"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Decodificador"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Utilização de buffer:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Tamanho do buffer (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Pré-buffer (percentagem):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Usar proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Host:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Porta:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Usar autenticação"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Nome do usuário:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Senha:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Salvar stream no disco:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Salvar stream no disco"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Endereço:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Navegar"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Permitir Icecast Metadata UDP Channel"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Streaming"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Etiquetas ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Desabilitar etiquetas ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Converter etiquetas não-UTF8 em UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "Codificação ID3:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "Formato ID3:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "TÃtulo"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"ImpossÃvel escrever no arquivo:·%s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Não foi possÃvel salvar a etiqueta!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Não foi possÃvel abrir o arquivo: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Informações do Arquivo"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"ImpossÃvel truncar o arquivo:·%s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Não foi possÃvel remover a etiqueta!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Sem etiqueta para remover!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Estéreo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Junção estéreo (Joint stereo)"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Canal duplo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Canal simples"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Nenhum"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Não"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Sim"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nome:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " Informação MPEG"
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "NÃvel MPEG:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Qualidade (bit rate):"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Taxa de amostragem:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Quadros:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Tamanho do arquivo:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Proteção de erro:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Original:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Ãnfase:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " Etiqueta ID3 "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "TÃtulo:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artista:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Ãlbum:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Comentário:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Ano:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Número da faixa:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Gênero:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "Não disponÃvel"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Variável,\n"
+"Bit rate média:·%d·KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Erro"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "Procurando %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Não foi possÃvel encontrar o host %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "CONECTANDO A %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Não foi possÃvel conectar ao host %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "CONECTADO: ESPERANDO RESPOSTA"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Não foi possÃvel conectar ao host %s\n"
+"O servidor retornou: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "PRÃ-BUFFERING: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Rock Clássico"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Antigas"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Outro"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Faixa sonora"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambiente"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Clássico"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumental"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Pop Instrumental"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Rock Instrumental"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ãtnico"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gótico"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Eletrônico"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Rap Cristão"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psicodélico"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celta"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Vanguarda"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Rock Gótico"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Rock Progressivo"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Rock Psicodélico"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Rock Sinfônico"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Coral"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acústico"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Discurso"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Cansão"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Ãpera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Música de câmara"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Sinfonia"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Sátira"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Balada"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Dueto"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Solo de bateria"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Gangsta Rap Cristão"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Cristão Contemporâneo"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Rock Cristão"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Sobre o Plugin de áudio MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"núcleo de decoficação mpg123 por Michael Hipp <mh at mpg123.de>\n"
+"Plugin por Equipe XMMS"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Plugin de áudio MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Selecione o diretório onde você quer gravar as streams Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Configuração do Plugin de áudio Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Etiquetas Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Formato do tÃtulo:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Ajustes de ReplayGain:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Habilitar a prevenção de clipping"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Habilitar ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Tipo de ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "Usar Ganho/Pico da faixa"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "Usar Ganho/Pico do álbum"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Habilitar impulso de 6 dB + Hard Limiting"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Um erro ocorreu:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Erro!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Falha ao modificar a etiqueta (abrir)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Falha ao modificar a etiqueta (fechar)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Falha ao modificar a etiqueta"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Etiqueta Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Data:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Descrição:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Local"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versão:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "Número ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organização:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " ReplayGain Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Ganho da faixa:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Pico da faixa:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Ganho do álbum:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Pico do álbum:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Informação Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Duração:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Plugin de áudio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Sobre o Plugin de áudio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis Plugin pela Fundação Xiph.org \n"
+"\n"
+"Código original por\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contribuições por\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visite o site da Fundação Xiph.org em http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Plugin de áudio WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "Plugin de saÃda OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Sobre o driver OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Padrão (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Padrão"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Configuração do Driver OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Dispositivo de áudio:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Usar dispositivo alternativo:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Dispositivo de controle de volume:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Tamanho do buffer (ms)"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Controle de buffer"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Ajustes de Volume"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Volume controla Master, não PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Controlador de Volume"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Sobre o Plugin ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Configuração do Plugin de saÃda ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Usar host remoto"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Volume controla o volume do OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Servidor"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "Plugin de saÃda eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Sobre o Driver ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "Plugin de saÃda ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Placa de som desconhecida"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Dispositivo PCM padrão (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Configuração do Driver ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Controlador de volume:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "Usar controle de volume por software"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixer card:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Ajustes do dispositivo"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Configurações avançadas:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Tempo do buffer (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "PerÃodo de tempo (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Tempo do buffer (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Modo Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Configurações avançadas"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Alternar Decorações"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Fechar"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Seleção de cor"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Opções:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Intérprete/Artista"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Ãlbum"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Gênero"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Nome do arquivo"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Endereço do arquivo"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Extensão do arquivo"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Nome da faixa"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Número da faixa"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Data"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Ano"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Comentário"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: Mostrar \"...\" somente se o elemento %n estiver presente"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Um reprodutor de mÃdia baseado no XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Desenvolvedores:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "Com ajuda adicional de:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Gráficos e homepage:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "Chinês:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+#, fuzzy
+msgid "Czech:"
+msgstr "Francês:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+#, fuzzy
+msgid "Dutch:"
+msgstr "Dueto"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Espanhol:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francês:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Alemão:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Alemão:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "Gênero:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+#, fuzzy
+msgid "Italian:"
+msgstr "Lituano:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japonês:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Coreano:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "Lituano:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Polonês:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+#, fuzzy
+msgid "Romanian:"
+msgstr "Lituano:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Russo:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Espanhol:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Sueco:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Organização:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Galês:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Sobre o BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Créditos"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Tradutores"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Carregar"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Carregar/Preset"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Carregar/Auto-preset"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Carregar/Padrão"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Carregar/Zero"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Carregar/Do arquivo"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Carregar/Ã partir de arquivo EQF do Winamp"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importar"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importar/Presets WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Salvar"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Salvar/Preset"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "Salvar/Auto-preset"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Salvar/Padrão"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Salvar/No arquivo"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Salvar/Como arquivo EQF do WinAMP"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Excluir"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Excluir/Preset"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Excluir/Auto-preset"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "Equalizador BMP"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Preset"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Presets"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Carregar preset"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Carregar auto-preset"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Carregar preset do equalizador"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Salvar preset"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Salvar auto-preset"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Salvar preset do equalizador"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Excluir preset"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Excluir auto-preset"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: a opção `%s' é ambÃgüa\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: a opção `--%s' não permite argumentos\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: a opção `%c%s' não permite argumentos\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: a opção `%s' requer um argumento\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opção não conhecida `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opção não conhecida `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opção ilegal -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opção inválida -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: a opção requer um argumento -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: a opção `-W %s' é ambÃgüa\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: a opção `-W %s' não permite argumentos\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Não foi possÃvel reproduzir os arquivos</big></b>\n"
+"\n"
+"Os seguintes arquivos não puderam ser reproduzidos. Por favor verifique:\n"
+"1. Se eles são acessÃveis.\n"
+"2. Se você habilitou o plugin de saÃda correto."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Não mostrar mais esta mensagem"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Mostrar mais _detalhes"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Nome do arquivo"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Nome do arquivo:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Nenhum plugin de entrada reconheceu este arquivo"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Plugin de entrada: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Não foi possÃvel criar o arquivo de log (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Não foi possÃvel criar o diretório (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Uso: beep-media-player [opções] [arquivos] ...\n"
+"\n"
+"Opções:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Mostrar este texto e sair"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Selecione uma sessão BMP/XMMS (Padrão: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Avançar em sentido inverso na lista de reprodução"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Começar a tocar a lista de reprodução atual"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pausar a reprodução"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Parar a reprodução"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pausar ou tocar"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Avançar na lista de reprodução"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Não limpar a lista de reprodução"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Mostrar a janela principal"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "Usar a identidade da sessão anterior"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "Exibe o número de versão e sai\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Sinal SIGSEGV recebido\n"
+"\n"
+"Isto pode ser um bug no BMP. Se você não sabe porque isto aconteceu, mande-"
+"nos um e-mail em beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Não foi possÃvel carregar a skin.</big></b>\n"
+"\n"
+"Verifique se a skin em '%s'·é compatÃvel e se a skin padrão está instalada "
+"em '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Desculpe, sua versão do GTK+ (%d.%d.%d) não funciona com o BMP\n"
+"Por favor, utilize a versão %s do GTK+ou mais nova.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Desculpe, sua plataforma não suporta threads\n"
+"\n"
+"Se você usa um sistema Linux baseado em libc5 e instalou a Glib e GTK+ \n"
+"antes de instalar LinuxThreads você precisa recompilar a Glib e o GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Incapaz de abrir display, saindo."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Ver detalhes da faixa"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Autorolar o nome da música"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Modo de visualização"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Modo de visualização/Barras verticais"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Modo de visualização/Ondas"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Modo de visualização/Desligado"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Modo Barras verticais"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Modo Barras verticais/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Modo Barras verticais/Chamas"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Modo Barras verticais/Linhas verticais"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Modo Barras verticais/Linhas"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Modo Barras verticais/Barras"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Modo Barras verticais/Picos"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Modo Ondas"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Modo Ondas/Ondas em pontos"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Modo Ondas/Ondas em linhas"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Modo Ondas/Ondas sólidas"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Estilo de sombreamento da janela"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Estilo de sombreamento da janela/Normal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Estilo de sombreamento da janela/Suave"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Taxa de atualização"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Taxa de atualização/Máxima (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Taxa de atualização/Metade (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Taxa de atualização/Um quarto (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Taxa de atualização/Um oitavo (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Velocidade de queda (Barras)"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Velocidade de queda (Barras)/Mais baixa"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Velocidade de queda (Barras)/Baixa"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Velocidade de queda (Barras)/Média"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Velocidade de queda (Barras)/Alta"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Velocidade de queda (Barras)/Mais alta"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Velocidade de queda (picos)"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Velocidade de queda (picos)/Mais baixa"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Velocidade de queda (picos)/Baixa"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Velocidade de queda (picos)/Média"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Velocidade de queda (picos)/Alta"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Velocidade de queda (picos)/Mais alta"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Repetir"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Misturar"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Tocar"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pausar"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Parar"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Anterior"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Próxima"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Ir para o inÃcio da lista de reprodução"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Ir para o arquivo"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Ir para tempo"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Preferências"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Sobre o BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Fechar"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/Adicionar/Arquivos..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Adicionar/Local na Internet..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Mostrar Lista de reprodução"
+
+#: beep/mainwin.c:403
+#, fuzzy
+msgid "/Show Equalizer"
+msgstr "Equalizador"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Tempo decorrido"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Tempo restante"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Sempre no topo"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+#, fuzzy
+msgid "/Roll up Playlist Editor"
+msgstr "/Focar Lista de reprodução"
+
+#: beep/mainwin.c:420
+#, fuzzy
+msgid "/Roll up Equalizer"
+msgstr "Equalizador"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Ir para tempo"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minutos:segundos"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Duração da faixa:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Fila"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Fila"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Ir para a faixa"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtro:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Adicionar pastas"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Adicionar/Endereço na Internet"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "PROCURAR POR: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLUME: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANÃO: %d%% ESQUERDA"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANÃO: CENTRO"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANÃO: %d%% DIREITA"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "MENU DE OPÃÃES"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "DESABILITAR SEMPRE NO TOPO (NÃO DISPONÃVEL)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "HABILITAR SEMPRE NO TOPO (NÃO DISPONÃVEL)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "DESABILITAR SEMPRE NO TOPO"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "HABILITAR SEMPRE NO TOPO"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "CAIXA DE INFORMAÃÃES DE ARQUIVO"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "MENU DE VISUALIZAÃÃO"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Nenhum CD capaz de ser reproduzido foi encontrado.</big></b>\n"
+"\n"
+"Não foi inserido um CD ou o CD inserido não é de áudio.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Não foi possÃvel abrir a saÃda de áudio</big></b>\n"
+"\n"
+"Por favor verifique:\n"
+"1. Se você selecionou o plugin de saÃda correto.\n"
+"2. Se não há outro programa bloqueando a placa de som.\n"
+"3. Se a sua placa de som está configurada corretamente.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Remover a seleção"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/Remover a seleção"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/Remover a seleção"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Enfileirar"
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/Adicionar/Arquivos..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Adicionar/Endereço na Internet"
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Adicionar/Pastas..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/Adicionar/Arquivos..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Limpar a fila"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Remover arquivos indisponÃveis"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nova lista"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/Ordenar a lista"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Nova lista"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Atualizar a visão"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Ordenar a seleção"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/Ordenar a seleção"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "Selecionar tudo"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Misturar aleatoriamente"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Inverter a lista"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Ordenar a lista"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Ordenar a lista/Por tÃtulo"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Ordenar a lista/Pelo nome do arquivo"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Ordenar a lista/Pelo endereço e nome do arquivo"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Ordenar a lista/Por data"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Ordenar a seleção"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Ordenar a seleção/Por tÃtulo"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Ordenar a seleção/Pelo nome do arquivo"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Ordenar a seleção/Pelo endereço e nome do arquivo"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Ordenar a seleção/Por data"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Erro ao escrever a lista de reprodução \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s já existe. Deseja continuar?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Incapaz de salvar a lista! Este tipo de arquivo não é conhecido: %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Carregar lista de reprodução"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Salvar lista de reprodução"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Lista de reprodução BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Aparência"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Equalizador"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Mouse"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Lista de reprodução"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Plugins"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Artista"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "Número da faixa"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Endereço do arquivo"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Descrição"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Categoria"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Janela de preferências"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "Adicionar arquivos"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/Remover arquivos"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Adicionar arquivos"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (caracteres UTF-8 inválidos)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Preferências do BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Plugins</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Lista de plugins de mÃdia"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>MÃdia</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Lista de plugins gerais:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Geral</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Lista de plugins de visualização:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualização</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Lista de plugins de efeitos:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efeitos</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Plugin de saÃda atual:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"A mudança foi realizada no arquivo de configuraçãodo BMP, mas não vai surtir "
+"nenhumefeito até que a próxima música seja tocada!\n"
+"\n"
+"Opcionalmente você pode parar e reiniciar a reprodução para que a mudança "
+"surta efeito."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>SaÃda</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Aparência</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Fontes</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Tocador:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Lista de reprodução:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Selecione a fonte da janela principal:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Selecione a fonte da lista de reprodução:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Outras configurações</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Mostrar o número das faixas na lista"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "Usar cursores próprios"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Mouse</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Roda do mouse</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "A roda do mouse muda o volume em"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "percentagem"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "O mouse rola a lista por"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "linhas"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Lista de reprodução</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Nome do arquivo</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "Converter o caractere sublinhado em espaço"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Converter %20 em espaços"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadados</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "Carregar metadados (etiquetas de informação) dos arquivos de música"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "Carregar metadados de listas e arquivos"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "Carregar metadados ao adicionar o arquivo à lista ou ao abrÃ-lo"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "No carregamento"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Carregar metadados ao mostrar o arquivo na lista"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Ao mostrar"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Lista de reprodução</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "Quando uma música terminar não avançar automaticamente para a próxima"
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Não avançar na lista"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pausa entre músicas"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pausar por"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "segundos"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Exibição de músicas</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Personalizar a descrição:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"TÃTULO\n"
+"ARTISTA - TÃTULO\n"
+"ARTISTA - ÃLBUM - TÃTULO\n"
+"ÃLBUM - TÃTULO\n"
+"Personalizada"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Mostrar informações sobre o formato da string"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Equalizador</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Presets</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Diretório de arquivos preset:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Extensão de arquivos preset:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "Presets _DisponÃveis:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Selecionar tudo"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Desselecionar tudo"
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "Permitir streaming SHOUT/Icecast"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "Default skin:"
+#~ msgstr "Skin padrão:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "Modo de compatibilidade com o XMMS"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Não foi possÃvel abrir gnome-vfs.\n"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/Plugins de visualização"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Tocar CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/Volta 5 segundos"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/Avança 5 segundos"
+
+#~ msgid "/Add"
+#~ msgstr "/Adicionar"
+
+#~ msgid "/Playback"
+#~ msgstr "/Reprodução"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Opções"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/Mostrar Equalizador gráfico"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/Recarregar skin"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Não avançar na lista de reprodução"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/Mostrar em todas as áreas de trabalho"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/Modo de sombreamento da janela"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/Modo de sombreamento da Lista de reprodução"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/Modo de sombreamento do Equalizador"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/Tamanho duplo"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/Movimento fácil"
+
+#~ msgid "Jump to:"
+#~ msgstr "Ir para:"
+
+#~ msgid "Jump"
+#~ msgstr "Ir"
+
+#~ msgid "Add URL"
+#~ msgstr "Adicionar URL"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "DESBILITAR TAMANHO DUPLO"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "HABILITAR TAMANHO DUPLO"
+
+#~ msgid "/By extension"
+#~ msgstr "/Por extensão"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Lista de reprodução"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Fechar janela"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Ordenar por tÃtulo"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "Ordenar pelo nome do arquivo"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Ordenar por data"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Falha ao excluir \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d de %d arquivos excluÃdos com sucesso."
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "XMMS: arquivos excluÃdos"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "Deseja realmente excluir os arquivos %d?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "Deseja realmente excluir o arquivo \"%s\"?"
+
+#~ msgid "Play Files"
+#~ msgstr "Tocar arquivos"
+
+#~ msgid "Load"
+#~ msgstr "Carregar"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "Auto-carregar preset"
+
+#~ msgid "Zero"
+#~ msgstr "Zero"
+
+#~ msgid "From file"
+#~ msgstr "Do arquivo"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "Ã partir de arquivo WinAMP EQF"
+
+#~ msgid "Import"
+#~ msgstr "Importar"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "Presets WinAMP"
+
+#~ msgid "To file"
+#~ msgstr "Em arquivo"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "Em arquivo WinAMP EQF"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "Configurar equalizador"
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "Rolagem suave de tÃtulo na janela principal"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/quot.sed
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/quot.sed 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/quot.sed 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/â\1â/g
+s/`\([^`']*\)'/â\1â/g
+s/ '\([^`']*\)' / â\1â /g
+s/ '\([^`']*\)'$/ â\1â/g
+s/^'\([^`']*\)' /â\1â /g
+s/ââ/""/g
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/remove-potcdate.sin
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/remove-potcdate.sin 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/remove-potcdate.sin 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ro.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3415 @@
+# Romanian translation for BMP
+# Copyright (C) 2004 Liviu Danicel
+# Liviu Danicel <liviu at planters.ro>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-08-28 07:46+0800\n"
+"Last-Translator: Liviu Danicel\n"
+"Language-Team: <ro at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr ""
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr ""
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(necunoscut)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr ""
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Nu s-a putut deschide device-ul %s\n"
+"Eroare:%s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Nu s-a putut citi \"Table of Contents\"\n"
+"Poate nu exista disc in drive?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Device %s OK.\n"
+"Discul are %d track-uri"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr ""
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Lungime totala: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Extragerea audio digitala nu a fost testata deoarece discul nu are nici un "
+"track audio\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Extragere audio digitala: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Testarea extragerii audio digitale a esuat:%s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Esuare in verificarea directorului %s\n"
+"Eroare:%s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Eroare:%s exista, dar nu e un director"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Directorul %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Mod de ascultare:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr ""
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Extragere audio digitala"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Control volum:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Nu exista mixer"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "Unitate CDROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "Mixer OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Verifica drive-ul..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Inlatura drive-ul"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr ""
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Adauga un drive"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr ""
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Foloseste CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr ""
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Arata fereastra network"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr ""
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Foloseste CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "Server CD Index:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Nume track-uri:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Suprascrie titlurile generice"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Format nume:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr ""
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Selecteaza directorul unde vrei sa pui stream-urile MPEG"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Configurare Plugin-ului Audio MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Rezolutie:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr ""
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr ""
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Canale:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (daca este disponibil)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr ""
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr ""
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr ""
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr ""
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr ""
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Decodor:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Detectare automata"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "Decodor optimizat 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "Decodor optimizat MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "Decodor FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Optiuni"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Continut"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Extensie"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Extensie si continut"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Decodor"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr ""
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Marime buffer (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr ""
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr ""
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Foloseste proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr ""
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr ""
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Foloseste autentificare"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr ""
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Parola:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Salveaza stream-ul pe disk:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Salveaza stream-ul pe disk"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr ""
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Rasfoieste"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr ""
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr ""
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr ""
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "Taguri ID3:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr ""
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr ""
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr ""
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titlu"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Nu s-a putut scrie in fisierul:%s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Nu s-a putut scrie tag-ul!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Nu s-a putut deschide fisierul:%s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Informatii fisier"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Nu s-a putut sterge tag-ul!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Nu exista tag care sa fie sters!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nu"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Da"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Nume:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Marime fisier:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titlu:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Nota:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "An:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Numar track:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "Copiaza tag-urile album"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr ""
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Eroare"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "Cauta %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Nu s-a putut rezolva host-ul %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "Se conecteaza la %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Nu a fost posibila conectarea la %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "CONECTAT: ASTEPT RASPUNS"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Nu a fost posibil conectarea la %s\n"
+"Server-ul a reportat: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr ""
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Despre Plugin-ul Audio MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"Engine-ul de decodare mpg123 scris de Michael Hipp <mh at mpg123.de>\n"
+"Plugin scris de The XMMS team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "Plugin-ul Audio MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Selecteaza directorul unde vrei sa pui stream-urile Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Configurare Plugin Audio Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Tag-uri Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Format titlu:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr ""
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr ""
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr ""
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr ""
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr ""
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr ""
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"O eroare a avut loc:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Eroare!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Nu s-a putut modifica tag-ul (deschidere)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Nu s-a putut modifica tag-ul (inchidere)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Nu s-a putut modifica tag-ul"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Data:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Descriere:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Locatie:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Versiune:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Lungime:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr ""
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr ""
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Plugin Audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Despre Plugin-ul Audio Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "Plugin Audio WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr ""
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Despre Driver-ul OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr ""
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr ""
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Configurarea Driver-ului OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr ""
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Foloseste device alternativ:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr ""
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr ""
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr ""
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr ""
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Setari Mixer:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Volumul controleaza Master si nu PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr ""
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Despre Plugin-ul ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr ""
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr ""
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Volumul controleaza mixerul OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr ""
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr ""
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Despre Driver-ul ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr ""
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Placa de sunet necunoscuta"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr ""
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Configurare Driver ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr ""
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr ""
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr ""
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Setari Device"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Setari avansate"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:402
+msgid "Thread buffer time (ms):"
+msgstr ""
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr ""
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Setari avansate"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr ""
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Optiuni:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr ""
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr ""
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr ""
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Nume fisier"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr ""
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Extensie fisier"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Nume track"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Numar track"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Data"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "An"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Nota"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"Un player de fisiere media bazat pe XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr ""
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr ""
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr ""
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr ""
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr ""
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr ""
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr ""
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr ""
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr ""
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr ""
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr ""
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr ""
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr ""
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr ""
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr ""
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr ""
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr ""
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr ""
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr ""
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr ""
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr ""
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr ""
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr ""
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr ""
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr ""
+
+#: beep/about.c:114
+msgid "German:"
+msgstr ""
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr ""
+
+#: beep/about.c:117
+msgid "Georgian: "
+msgstr ""
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr ""
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr ""
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr ""
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr ""
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr ""
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr ""
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr ""
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr ""
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr ""
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr ""
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr ""
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr ""
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr ""
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr ""
+
+#: beep/about.c:165
+msgid "Ukrainian:"
+msgstr ""
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr ""
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Despre BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr ""
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Traducatori"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr ""
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Incarca"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Incarca/Preset"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Incarca/Auto incarca preset"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Incarca/Default"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Incarca/Zero"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Incarca/Din fisier"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Incarca/Din fisier EQF WinAMP"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr ""
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr ""
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Salveaza"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Salveaza/Preset"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Salveaza/Auto incarca preset"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Salveaza/Default"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Salveaza/In fisier"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Salveaza/In fisier EQF WinAMP"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Sterge"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Sterge/Preset"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Sterge/Auto incarca preset"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr ""
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr ""
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr ""
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Incarca preset"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Incarca auto preset"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Incarca preset pentru equalizer"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Salveaza preset"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Salveaza auto preset"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Salveaza preset equalizer"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Sterge preset"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Sterge auto preset"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: optiune nerecunoscuta `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: optiune nerecunoscuta `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: optiune ilegala -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: optiune invalida -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Nu se pot asculta fisierele.</big></b>\n"
+"\n"
+"Urmatoarele fisiere nu au putut fii ascultate. Va rugam verificati daca:\n"
+"1. fisierele sunt accesibile.\n"
+"2. ai selectat plugin-urile media necesare."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Nu mai arata aceasta avertizare"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Arata mai multe _detalii"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Nume Fisier"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr ""
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Nume fisier:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Nici un plugin de input nu a recunoscut acest fisier"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr ""
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Nu s-a putut crea fisierul de log (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr ""
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Nu s-a putut crea directorul (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Utilizare:beep-media-player [options] [files] ...\n"
+"\n"
+"Optiuni:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "Afiseaza acest text si iesi"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr ""
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr ""
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Incepe a asculta playlist-ul curent"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pune pauza melodiei curente"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Opreste melodia curenta"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr ""
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr ""
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Nu sterge playlist-ul"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Arata fereastra principala"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr ""
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr ""
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Am primit un SIGSEGV\n"
+"\n"
+"Acest lucru ar putea fii un bug in BMP. Daca stiti de ce s-a intamplat acest "
+"lucru trimite-ti un e-mail la beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Nu s-a putut incarca skin-ul.</big></b>\n"
+"\n"
+"Verifica daca skin-ul la '%s' este utilizabil si daca skin-ul default este "
+"instalat la '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Ne pare rau, versiunea dv de GTK+ (%d.%d.%d) nu poate fi folosita de BMP.\n"
+"Va rugam folositi GTK+ %s sau o versiune mai noua.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr ""
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Vizualizeaza Detalii Track"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Autoscroll nume melodie"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Mod Vizualizare"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Mod Vizualizare/Analizator"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Mod Vizualizare/Scope"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Mod Vizualizare/Off"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Mod Analizator"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Mod Analizator/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Mod Analizator/Foc"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Mod Analizator/Linii Verticale"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Mod Analizator/Linii"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Mod Analizator/Bare"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Mod Analizator/Varfuri"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr ""
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr ""
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr ""
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr ""
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr ""
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr ""
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Rata Refresh"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Rata Refresh/Full (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Rata Refresh/Jumatate (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Rata Refresh/Un sfert (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Rata Refresh/O optime (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr ""
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr ""
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr ""
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr ""
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr ""
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr ""
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr ""
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr ""
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr ""
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr ""
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Repeta"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr ""
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Asculta"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pauza"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Opreste"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Inainte"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Urmatoarea"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Sari la inceputul Playlist-ului"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Sari la fisier"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Sari la Timp"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Preferinte"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Despre BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Iesi"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/Adauga/Fisiere"
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Adauga/Locatie Internet..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Arata Editor-ul Playlist"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Arata Equalizer-ul"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Timp Trecut"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Timp Ramas"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Tot timpul in fata"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Sta pe toate spatiile de lucru"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr ""
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr ""
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr ""
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr ""
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "Sari la Timp"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minute :secunde"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Lungime Track"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Coada"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Coada"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "Sari la Track"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filtru: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Adauga directoare"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Adauga/Adresa Internet"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr ""
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLUM: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANS: %d%% STANGA"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANS: CENTRU"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANS: %d%% DREAPTA"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "OPTIUNI MENIU"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr ""
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr ""
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "CASUTA INFORMATII FISIER"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "MENIU VIZUALIZARI"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Nu a fost gasit nici un CD audio.</big></b>\n"
+"\n"
+"Nici un CD in drive, sau CD-ul nu este unul audio.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Sterge Selectia"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/Sterge Selectia"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/Sterge Selectia"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr ""
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/Adauga/Fisiere"
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Adauga/Adresa Internet"
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Adauga/Directoare"
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/Adauga/Fisiere"
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr ""
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Sterge Fisierele Nedisponibile"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Lista Noua"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/Sorteaza Lista"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Lista Noua"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr ""
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Adauga/Locatie Internet..."
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "Selecteaza tot"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "Selecteaza tot"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Amesteca Lista"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Inverseaza Lista"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Sorteaza Lista"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Sorteaza Lista/Dupa Titlu"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Sorteaza Lista/Dupa Nume Fisier"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Sorteaza Lista/Dupa Cale + Nume Fisier"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Sorteaza Lista/Dupa Data"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr ""
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr ""
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr ""
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr ""
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr ""
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Eroare in scriere in playlist \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s deja exista. Continuam?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Nu s-a putut salva playlist-ul! Tip fisier necunoscut pentru %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Incarca playlist"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Salveaza playlist"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Editor Playlist BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Infatisare"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr ""
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr ""
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr ""
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr ""
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr ""
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr ""
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr ""
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr ""
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Descriere"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Categorie"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Fereastra preferinte"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "Adauga Fisiere"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "Adauga Fisiere"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Adauga Fisiere"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr ""
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Preferinte BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Vizualizare</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efecte</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Schimbarea este actualizata in configuratia BMP dar nu va avea efect la "
+"ascultare pana la urmatoarea melodie!\n"
+"\n"
+"Optional, puteti sa opriti si sa reporniti ascultarea melodiei."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Infatisare</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Selecteaza fontul pentru fereastra principala:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Selecteaza fontul pentru playlist:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "Arata numarul track-ului in playlist"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Rotita Mouse</b>"
+
+#: beep/glade/prefswin.glade:1499
+msgid "Changes volume by"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "la suta"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Incarca playlist"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "linii"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Nume fisier</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Schimba %20 in spatii"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "La incarcare"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Ascultare</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "Cand a terminat ascultarea unei melodii nu trece la urmatoarea."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Nu avansa in playlist"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pauza intre melodii"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pauza pentru"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "secunde"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Arata informatii despre formatul titlestring"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr ""
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Selecteaza tot"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "Deselecteaza tot"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Asculta CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/5 secunde REW"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/5 secunde FFWD"
+
+#~ msgid "/Add"
+#~ msgstr "/Adauga"
+
+#~ msgid "/Playback"
+#~ msgstr "/Ascultare"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Optiuni"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Nu avansa in Playlist"
+
+#~ msgid "Jump to:"
+#~ msgstr "Sari la:"
+
+#~ msgid "Jump"
+#~ msgstr "Sari"
+
+#~ msgid "Add URL"
+#~ msgstr "Adauga URL"
+
+#~ msgid "/By extension"
+#~ msgstr "/Dupa extensie"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Inchide Fereastra"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Sorteaza dupa Titlu"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Sorteaza dupa Nume Fisier"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Sorteaza dupa Data"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Esuat in a sterge \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d of %d fisierele au fost sterse."
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "Chiar doriti sa stergeti %d fisierele?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "Chiar doriti sa stergeti: \"%s\"?"
+
+#~ msgid "Play Files"
+#~ msgstr "Asculta Fisiere"
+
+#~ msgid "From file"
+#~ msgstr "De la fisier"
+
+#~ msgid "Load"
+#~ msgstr "Incarca"
+
+#~ msgid "To file"
+#~ msgstr "In fisierul"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/ru.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3615 @@
+# Translation of bmp.pot to Russian for Beep Media Player.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Ðа оÑÐ½Ð¾Ð²Ñ Ð²Ð·ÑÑ Ð¿ÐµÑевод ÐлекÑандÑа Ðоваленко Ð´Ð»Ñ XMMS...
+# УлÑÑÑÐµÐ½Ð¸Ñ Ð¿ÐµÑевода пÑивеÑÑÑвÑÑÑÑÑ :)
+# Pavlo Bohmat <bohm at ukr.net>, 2004.
+# Vitaly Lipatov <lav at altlinux.ru>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp cvs20041231\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-12-31 13:17MSK\n"
+"Last-Translator: Vitaly Lipatov <lav at altlinux.ru>\n"
+"Language-Team: Russian <ru at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки аÑдио компакÑ-диÑков"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD аÑдио-доÑожка %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(неизвеÑÑно)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "ÐÑивод %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ ÑÑÑÑойÑÑво %s\n"
+"ÐÑибка: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Ðе ÑдалоÑÑ Ð¿ÑоÑиÑаÑÑ \"Ðглавление\"\n"
+"Ðозможно Ð½ÐµÑ Ð´Ð¸Ñка в пÑиводе?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"ÐÑивод %s: ÐÐ.\n"
+"Ðа диÑке %d доÑожек"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d доÑожек Ñ Ð´Ð°Ð½Ð½Ñми)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"ÐбÑÐ°Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"ЦиÑÑовое ÑÑиÑÑвание аÑдио не ÑеÑÑиÑовалоÑÑ, Ñак как на диÑке Ð½ÐµÑ Ð°Ñдио-"
+"доÑожек\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"ТеÑÑиÑование ÑиÑÑового ÑÑиÑÑваниÑ: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"ТеÑÑиÑование ÑиÑÑового ÑÑиÑÑÐ²Ð°Ð½Ð¸Ñ Ð½ÐµÑдаÑно: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Ðе ÑдалоÑÑ Ð¿ÑовеÑиÑÑ ÐºÐ°Ñалог %s\n"
+"ÐÑибка: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "ÐÑибка: %s ÑÑÑеÑÑвÑеÑ, но не ÑвлÑеÑÑÑ ÐºÐ°Ñалогом"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ÐаÑалог %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "УÑÑÑойÑÑво:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_УÑÑÑойÑÑво:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_ÐаÑалог:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Режим воÑпÑоизведениÑ:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "ÐналоговÑй"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "ЦиÑÑовое ÑÑиÑÑвание аÑдио"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "РегÑлÑÑÐ¾Ñ Ð³ÑомкоÑÑи:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "ÐÐµÑ Ð¼Ð¸ÐºÑеÑа"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "ÐÑивод CD-ROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS-микÑеÑ"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "ÐÑовеÑиÑÑ Ð¿Ñивод"
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "УдалиÑÑ Ð¿Ñивод"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Ðзменение наÑÑÑоек пÑоигÑÑваÑÐµÐ»Ñ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ Ð´Ð¸Ñков"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "ÐобавиÑÑ Ð¿Ñивод"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "УÑÑÑойÑÑво"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "ÐÑполÑзоваÑÑ CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "ÐолÑÑиÑÑ ÑпиÑок ÑеÑвеÑов"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "ÐоказаÑÑ Ð¾ÐºÐ½Ð¾ ÑеÑи"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CеÑÐ²ÐµÑ CDDB:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "ÐÐ½Ð´ÐµÐºÑ CD:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "ÐÑполÑзоваÑÑ Ð¸Ð½Ð´ÐµÐºÑ CD"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "СеÑÐ²ÐµÑ Ð¸Ð½Ð´ÐµÐºÑов CD:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ñожек:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Ðе иÑполÑзоваÑÑ ÑÑандаÑÑнÑе названиÑ"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "ФоÑÐ¼Ð°Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "ÐнÑоÑмаÑÐ¸Ñ Ð¾ CD"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "ÐÑбеÑиÑе каÑалог, в коÑоÑом Ð²Ñ Ñ
оÑиÑе ÑоÑ
ÑаниÑÑ Ð¿Ð¾Ñоки MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Ðзменение наÑÑÑоек модÑÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑоÑмаÑа MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "РазÑеÑение:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 биÑ"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 биÑ"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "ÐаналÑ:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "СÑеÑео (еÑли доÑÑÑпно)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Ðоно"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "ЧаÑÑоÑа:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 кÐÑ)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 кÐÑ)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 кÐÑ)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "ÐекодеÑ:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "ÐвÑомаÑиÑеÑкое опÑеделение"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "ÐпÑимизиÑованнÑй Ð´ÐµÐºÐ¾Ð´ÐµÑ 3DNow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "ÐпÑимизиÑованнÑй Ð´Ð»Ñ MMX декодеÑ"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "ÐÐµÐºÐ¾Ð´ÐµÑ FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "ÐаÑамеÑÑÑ:"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ÐпÑеделÑÑÑ Ñип по ÑодеÑжимомÑ"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "ÐпÑеделÑÑÑ Ñип по ÑаÑÑиÑениÑ"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "ÐпÑеделÑÑÑ Ñип по ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¸ ÑодеÑжимомÑ"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "ÐекодеÑ"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ÐÑÑеÑизаÑиÑ:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Ð Ð°Ð·Ð¼ÐµÑ Ð±ÑÑеÑа (Ðб):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "ÐÑебÑÑеÑизаÑÐ¸Ñ (%):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "ÐÑокÑи:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "ÐÑполÑзоваÑÑ Ð¿ÑокÑи"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Узел:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "ÐоÑÑ:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "ÐÑполÑзоваÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑиÑ"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "ÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "ÐаÑолÑ:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "СоÑ
Ñанение поÑока на диÑк:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "СоÑ
ÑанÑÑÑ Ð¿Ð¾Ñок на диÑк:"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "ÐÑÑÑ:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "ÐбзоÑ"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "ÐклÑÑиÑÑ ÐºÐ°Ð½Ð°Ð» меÑаданнÑÑ
Icecast UDP"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "ÐоÑоковÑй"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3-Ñеги:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Ðе иÑполÑзоваÑÑ ÑÑги ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+"ÐÑеобÑазовÑваÑÑ ID3-Ñеги (Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑен и дÑ.) из локалÑной кодиÑовки в "
+"Юникод"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ÐодиÑовка ID3-Ñегов:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ФоÑÐ¼Ð°Ñ ID3-Ñега:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Ðазвание"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Ðевозможно запиÑаÑÑ Ð² Ñайл: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Ðе Ð¼Ð¾Ð³Ñ Ð·Ð°Ð¿Ð¸ÑаÑÑ Ñег!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Ðевозможно оÑкÑÑÑÑ Ñайл: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "ÐнÑÑмаÑÐ¸Ñ Ð¾ Ñайле"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "ÐÐ"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Ðевозможно ÑÑезаÑÑ Ñайл: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Ðе Ð¼Ð¾Ð³Ñ ÑдалиÑÑ Ñег!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "ÐÐµÑ Ñега Ð´Ð»Ñ ÑдалениÑ!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "СÑеÑео"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "ÐбÑединÑнное ÑÑеÑео"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Ðва канала"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Ðдин канал"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d кÐиÑ/Ñ"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld ÐÑ"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Ðикакой"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 мÑ"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "ÐеÑ"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ðа"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "ÐмÑ:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " ÐнÑоÑмаÑÐ¸Ñ MPEG "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG ÑÑовенÑ:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ÐиÑÐ¾Ð²Ð°Ñ ÑаÑÑоÑа:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "ЧаÑÑоÑа:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "ÐадÑов:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Ð Ð°Ð·Ð¼ÐµÑ Ñайла:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "ÐаÑиÑа Ð¾Ñ Ð¾Ñибок:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "ÐвÑоÑÑкое пÑаво:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "ÐÑигиналÑнÑй:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "ÐÑÑазиÑелÑнÑй:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3-Ñег "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Ðазвание:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "ÐÑполниÑелÑ:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "ÐлÑбом:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "ÐомменÑаÑий:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Ðод:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾Ñожки:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "СÑилÑ:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "Ð/Ð"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"ÐеÑеменнаÑ,\n"
+"ÑÑеднÑÑ Ð±Ð¸ÑÐ¾Ð²Ð°Ñ ÑаÑÑоÑа: %d кб/Ñ"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu байÑ"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "ÐÑибка"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "ÐЩÐÐ %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Ðе Ð¼Ð¾Ð³Ñ Ð½Ð°Ð¹Ñи Ñзел %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "ÐÐÐÐÐЮЧÐÐ Ð %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Ðе Ð¼Ð¾Ð³Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº ÑÐ·Ð»Ñ %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "ÐÐÐÐÐЮЧÐÐ: ÐÐУ ÐТÐÐТÐ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Ðе Ð¼Ð¾Ð³Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº ÑÐ·Ð»Ñ %s\n"
+"ÑеÑÐ²ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑил: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ÐÐ ÐÐУФÐÐ ÐÐÐЦÐЯ: %dÐб/%dÐб"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "ÐлÑз"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "ÐлаÑÑиÑеÑкий Ñок"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "ÐанÑÑи"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "ÐÑнÑ"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "ÐиÑко"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Фанк"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "ÐÑанж"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Хип-Хоп"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Ðжаз"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "ÐеÑал"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "ÐÑÑ Ðйдж"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "РеÑÑо"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "ÐÑÑгое"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Ðоп"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Ð Ñп"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Регги"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Рок"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "ТеÑ
но"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "ÐндÑÑÑÑиалÑнÑй"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "ÐлÑÑеÑнаÑивнÑй"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ска"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "ÐÑз меÑал"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "ШалоÑÑÑ"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "ÐвÑÐºÐ¾Ð²Ð°Ñ Ð´Ð¾Ñожка"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "ÐвÑо-ТеÑ
но"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "ÐкÑÑжаÑÑÐ°Ñ ÑÑеда"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "ТÑип-Хоп"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Ðокал"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Ðжаз+Фанк"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "СлиÑние"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "ТÑанÑ"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "ÐлаÑÑика"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "ÐнÑÑÑÑменÑалÑнÑй"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "ÐиÑлоÑа"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "Ðом"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "ÐгÑа"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "ÐÑзÑкалÑнÑй клип"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Ðвангелие"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "ШÑм"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "ÐлÑÑеÑнаÑивнÑй Ñок"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "ÐаÑ"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "ÐÑÑа"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Ðанк"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "ÐоÑмоÑ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "ÐедиÑаÑиÑ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "ÐÑÑÑÑменÑалÑнÑй поп"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "ÐÑÑÑÑменÑалÑнÑй Ñок"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "ÐÑниÑеÑкий"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "ÐоÑиÑеÑкий"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Ð¢ÐµÐ¼Ð½Ð°Ñ Ð²Ð¾Ð»Ð½Ð°"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "ТеÑ
ноиндÑÑÑÑиалÑнÑй"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "ÐлекÑÑоннÑй"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "ÐаÑоднÑй поп"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "ÐвÑодÑнÑ"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Сон"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "ЮжнÑй Ñок"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "ÐомедиÑ"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "ÐÑлÑÑ"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "ЧеÑнÑй ÑÑп"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Ð¥ÑиÑÑианÑкий Ñеп"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Ðоп/Фанк"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Ðжангл"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "ÐаÑÐ¾Ð´Ð½Ð°Ñ Ð°Ð¼ÐµÑиканÑкаÑ"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "ÐабаÑе"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð²Ð¾Ð»Ð½Ð°"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "ÐÑиÑ
оделиÑ"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Ð Ñйв"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "ÐмпÑовизаÑиÑ"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "ÐнонÑ"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Семейное"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "ÐиÑлоÑнÑй панк"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "ÐиÑлоÑнÑй джаз"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "ÐолÑка"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "РеÑÑо"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "ÐÑзÑкалÑное"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Рок-н-Ñол"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "ТÑжелÑй Ñок"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "ФолÑк"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "ФолÑк/Рок"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "ÐаÑионалÑнÑй ÑолÑк"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Свинг"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "ÐÑÑÑÑое ÑлиÑние"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Ðибоп"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "ÐаÑиноамеÑиканÑкаÑ"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "ÐозÑождение"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "ÐелÑÑÑкаÑ"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "ÐолÑÐ±Ð°Ñ ÑÑава"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "ÐвангаÑд"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "ÐоÑиÑеÑкий Ñок"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "ÐÑогÑеÑÑивнÑй Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "ÐÑиÑ
оделиÑеÑкий Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "СимÑониÑеÑкий Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "ÐедленнÑй Ñок"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "ÐолÑÑой бÑнд"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "ХоÑ"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "ÐÑÐ³ÐºÐ°Ñ Ð¼ÑзÑка"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "ÐкÑÑÑиÑеÑкаÑ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "ЮмоÑ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "РеÑÑ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "ШанÑон"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "ÐпеÑа"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "ÐамеÑÐ½Ð°Ñ Ð¼ÑзÑка"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "СонаÑа"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "СимÑониÑ"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "ÐебÑежнÑй баÑ"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "ÐÑима"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "ÐоÑн гÑÑв"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "СаÑиÑа"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "ÐедленнÑй джÑм"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "ÐлÑб"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Танго"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Самба"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "ФолÑклоÑ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ðаллада"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "СилÑÐ½Ð°Ñ Ð±Ð°Ð»Ð»Ð°Ð´Ð°"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "РиÑмиÑнÑй ÑоÑл"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "СвободнÑй ÑÑилÑ"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "ÐÑÑÑ"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Ðанк Ñок"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "УдаÑное Ñоло"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "Ð Ðапелла"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "ÐвÑо-дом"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "ТанÑевалÑнÑй зал"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Ðоа"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "УдаÑники и баÑ"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "ÐлÑб-дом"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "ÐаÑдкоÑ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "ТеÑÑоÑ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "ÐезавиÑÐ¸Ð¼Ð°Ñ Ð¼ÑзÑка"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "ÐÑиÑпоп"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "ЧеÑнÑй панк"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "ÐолÑÑкий панк"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "ÐиÑ"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "ЧеÑнÑй Ñ
ÑиÑÑианÑкий ÑÑп"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "ТÑжелÑй меÑал"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "ЧÑÑнÑй меÑал"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "ÐеÑеÑ
однÑй"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "СовÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ
ÑиÑÑианÑкаÑ"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Ð¥ÑиÑÑианÑкий Ñок"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "ÐеÑенга"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "СалÑа"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "ТÑÐµÑ Ð¼ÐµÑал"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Ðниме"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "ÐлекÑÑоннÑй поп"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Ðб модÑле поддеÑжки ÑоÑмаÑа MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"Ðвижок декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ mpg123 Ðайкла Хиппа <mh at mpg123.de>\n"
+"ÐодÑÐ»Ñ Ð½Ð°Ð¿Ð¸Ñан командой XMMS"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "ÐÑбеÑиÑе каÑалог, в коÑоÑом Ð²Ñ Ñ
оÑиÑе ÑоÑ
ÑаниÑÑ Ð¿Ð¾Ñоки Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ðзменение наÑÑÑоек модÑÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑоÑмаÑа Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Теги Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "ФоÑÐ¼Ð°Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ÐаÑÑÑойки ReplayGain:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "ÐклÑÑиÑÑ Ð¿ÑедоÑвÑаÑение ÑÑезаниÑ"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "ÐклÑÑиÑÑ ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Тип ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "иÑполÑзоваÑÑ ÐоÑожка Gain/Peak"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "иÑполÑзоваÑÑ ÐлÑбом Gain/Peak"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "ÐклÑÑиÑÑ ÑÑиление на 6dB + ÑÑжелое огÑаниÑение"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"ÐÑоизоÑла оÑибка:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "ÐÑибка!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ñег (оÑкÑÑÑÑ)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ñег (закÑÑÑÑ)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ñег"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Тег Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ÐаÑа:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "ÐпиÑание:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ÐеÑÑоположение:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "ÐеÑÑиÑ:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ÐÐ¾Ð¼ÐµÑ ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ÐÑганизаÑиÑ:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain"
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Gain доÑожки:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Peak доÑожки:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Gain алÑбома:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Peak алÑбома:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " ÐнÑоÑмаÑÐ¸Ñ Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Ðлина:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d кÐиÑ/Ñ (номинал)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d ÐÑ"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d байÑ"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Ðб модÑле поддеÑжки ÑоÑмаÑа Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"РаÑÑиÑение \"Ogg Vorbis\" Ð¾Ñ Ñонда Xiph.org\n"
+"\n"
+"ÐеÑвонаÑалÑнÑй код напиÑан\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"УлÑÑÑÐµÐ½Ð¸Ñ Ð¸ дополнениÑ:\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"ÐоÑеÑиÑе Ñонд Xiph.org по адÑеÑÑ http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "ÐодÑÐ»Ñ Ð²Ñвода звÑка OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "РмодÑле вÑвода звÑка OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS дÑайвеÑ\n"
+"\n"
+" ÐÑа пÑогÑамма - беÑплаÑное пÑогÑаммное обеÑпеÑение; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе "
+"ÑаÑпÑоÑÑÑанÑÑÑ Ð¸/или модиÑиÑиÑоваÑÑ ÐµÐµ\n"
+"в ÑооÑвеÑÑÑвии Ñ ÑÑловиÑми ÐиÑензии GNU, опÑбликованнÑÑ\n"
+"ÐÑганизаÑией ÐеÑплаÑного ÐÑогÑаммного ÐбеÑпеÑениÑ; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑзоваÑÑÑÑ "
+"веÑÑией 2 ÐиÑензии или\n"
+"(по ваÑÐµÐ¼Ñ Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ) лÑбой более поздней веÑÑией.\n"
+"\n"
+"ÐÑа пÑогÑамма ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² надежде, ÑÑо она бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°,\n"
+"но ÐÐÐ ÐСЯÐÐÐ ÐÐÐ ÐÐТÐÐ; даже без гаÑании подÑазÑмеваемой\n"
+"Ð ÐÐÐТÐСÐÐСÐÐÐÐСТРили ÐÐ ÐÐÐÐÐÐСТРÐÐЯ ÐÐÐÐÐ-ÐÐÐРЦÐÐÐ. ÐожалÑйÑÑа,\n"
+"за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐиÑензии GNU.\n"
+"\n"
+"ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли полÑÑиÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÐиÑензии GNU\n"
+"вмеÑÑе Ñ ÑÑой пÑогÑаммой; еÑли же неÑ, Ñо напиÑиÑе об ÑÑом по адÑеÑÑ: \n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA "
+"02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Ðо ÑмолÑÐ°Ð½Ð¸Ñ (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Ðо ÑмолÑаниÑ"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "ÐаÑÑÑойка дÑайвеÑа OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "ÐÑдиоÑÑÑÑойÑÑво:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "ÐÑполÑзоваÑÑ Ð°Ð»ÑÑеÑнаÑивное ÑÑÑÑойÑÑво:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "УÑÑÑойÑÑво микÑеÑа:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "УÑÑÑойÑÑва"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Ð Ð°Ð·Ð¼ÐµÑ Ð±ÑÑеÑа (мÑ):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "ÐÑÑеÑизаÑиÑ"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "ÐаÑÑÑойки микÑеÑа:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "ÐÑомкоÑÑÑ ÑегÑлиÑÑÐµÑ ÐаÑÑеÑ, а не PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "ÐикÑеÑ"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "РмодÑле вÑвода звÑка ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"ÐодÑÐ»Ñ XMMS ESounD\n"
+"\n"
+" ÐÑа пÑогÑамма - беÑплаÑное пÑогÑаммное обеÑпеÑение; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе "
+"ÑаÑпÑоÑÑÑанÑÑÑ Ð¸/или модиÑиÑиÑоваÑÑ ÐµÐµ\n"
+"в ÑооÑвеÑÑÑвии Ñ ÑÑловиÑми ÐиÑензии GNU, опÑбликованнÑÑ\n"
+"ÐÑганизаÑией ÐеÑплаÑного ÐÑогÑаммного ÐбеÑпеÑениÑ; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑзоваÑÑÑÑ "
+"веÑÑией 2 ÐиÑензии или\n"
+"(по ваÑÐµÐ¼Ñ Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ) лÑбой более поздней веÑÑией.\n"
+"\n"
+"ÐÑа пÑогÑамма ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² надежде, ÑÑо она бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°,\n"
+"но ÐÐÐ ÐСЯÐÐÐ ÐÐÐ ÐÐТÐÐ; даже без гаÑании подÑазÑмеваемой\n"
+"Ð ÐÐÐТÐСÐÐСÐÐÐÐСТРили ÐÐ ÐÐÐÐÐÐСТРÐÐЯ ÐÐÐÐÐ-ÐÐÐРЦÐÐÐ. ÐожалÑйÑÑа,\n"
+"за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐиÑензии GNU.\n"
+"\n"
+"ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли полÑÑиÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÐиÑензии GNU\n"
+"вмеÑÑе Ñ ÑÑой пÑогÑаммой; еÑли же неÑ, Ñо напиÑиÑе об ÑÑом по адÑеÑÑ: \n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA "
+"02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Ðзменение наÑÑÑоек модÑÐ»Ñ Ð²Ñвода звÑка ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "ÐÑполÑзоваÑÑ ÑдалÑннÑй Ñзел"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "ÐÑомкоÑÑÑ ÑегÑлиÑÐµÑ OSS микÑеÑ"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "СеÑвеÑ"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "ÐодÑÐ»Ñ Ð²Ñвода звÑка eSound"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "РмодÑле вÑвода звÑка ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA дÑайвеÑ\n"
+"\n"
+" ÐÑа пÑогÑамма - беÑплаÑное пÑогÑаммное обеÑпеÑение; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе "
+"ÑаÑпÑоÑÑÑанÑÑÑ Ð¸/или модиÑиÑиÑоваÑÑ ÐµÐµ\n"
+"в ÑооÑвеÑÑÑвии Ñ ÑÑловиÑми ÐиÑензии GNU, опÑбликованнÑÑ\n"
+"ÐÑганизаÑией ÐеÑплаÑного ÐÑогÑаммного ÐбеÑпеÑениÑ; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑзоваÑÑÑÑ "
+"веÑÑией 2 ÐиÑензии или\n"
+"(по ваÑÐµÐ¼Ñ Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ) лÑбой более поздней веÑÑией.\n"
+"\n"
+"ÐÑа пÑогÑамма ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² надежде, ÑÑо она бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°,\n"
+"но ÐÐÐ ÐСЯÐÐÐ ÐÐÐ ÐÐТÐÐ; даже без гаÑании подÑазÑмеваемой\n"
+"Ð ÐÐÐТÐСÐÐСÐÐÐÐСТРили ÐÐ ÐÐÐÐÐÐСТРÐÐЯ ÐÐÐÐÐ-ÐÐÐРЦÐÐÐ. ÐожалÑйÑÑа,\n"
+"за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐиÑензии GNU.\n"
+"\n"
+"ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли полÑÑиÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÐиÑензии GNU\n"
+"вмеÑÑе Ñ ÑÑой пÑогÑаммой; еÑли же неÑ, Ñо напиÑиÑе об ÑÑом по адÑеÑÑ: \n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA "
+"02111-1307,\n"
+"USA."
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ÐодÑÐ»Ñ Ð²Ñвода звÑка ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "ÐеизвеÑÑÐ½Ð°Ñ Ð·Ð²ÑÐºÐ¾Ð²Ð°Ñ ÐºÐ°ÑÑа"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "УÑÑÑойÑÑво PCM по ÑмолÑÐ°Ð½Ð¸Ñ (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Ðзменение наÑÑÑоек модÑÐ»Ñ Ð²Ñвода ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "ÐикÑеÑ:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "ÐÑполÑзоваÑÑ Ð¿ÑогÑаммнÑй ÑегÑлÑÑÐ¾Ñ Ð³ÑомкоÑÑи"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "ÐаÑÑа микÑеÑа:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "ÐаÑÑÑойки ÑÑÑÑойÑÑва"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "ÐополниÑелÑнÑе наÑÑÑойки:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "ÐÑÐµÐ¼Ñ Ð±ÑÑеÑа (мÑ):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Ð Ð°Ð·Ð¼ÐµÑ Ð¿ÐµÑиода (мÑ):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "ÐÑÐµÐ¼Ñ Ð±ÑÑеÑа (мÑ):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Режим mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "ÐополниÑелÑнÑе наÑÑÑойки"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/ÐеÑеклÑÑиÑÑ Ð¾ÑобÑажение обÑамлениÑ"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ÐакÑÑÑÑ"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "РазмÑÑÑй оÑÑиллоÑкоп"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "РазмÑÑÑй оÑÑиллоÑкоп: вÑÐ±Ð¾Ñ ÑвеÑа"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "ÐаÑамеÑÑÑ:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "ÐÑполниÑелÑ"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "ÐлÑбом"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "СÑилÑ"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "ÐÐ¼Ñ Ñайла"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "ÐÑÑÑ Ðº ÑайлÑ"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "РаÑÑиÑение Ñайла"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "ÐÐ¼Ñ Ð´Ð¾Ñожки"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾Ñожки"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ÐаÑа"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Ðод"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "ÐомменÑаÑий"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: ÐÑобÑажаÑÑ \"...\", когда ÑÐ»ÐµÐ¼ÐµÐ½Ñ %n пÑиÑÑÑÑÑвÑеÑ"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"ÐÑлÑÑимедийнÑй пÑоигÑÑваÑелÑ, оÑнованнÑй на XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 Ðоманда ÑазÑабоÑÑиков BMP\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "РазÑабоÑÑики:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "С дополниÑелÑной помоÑÑÑ:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev <dan at ats.energo.ru>"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "ÐомаÑнÑÑ ÑÑÑаниÑа и гÑаÑика:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ÐиÑайÑкий:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+#, fuzzy
+msgid "Czech:"
+msgstr "ФÑанÑÑзкий:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "ÐолладÑкий:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "ÐÑпанÑкий:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "ФÑанÑÑзкий:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "ÐемеÑкий:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "ÐемеÑкий:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "СÑилÑ:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "ÐÑалÑÑнÑкий:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "ЯпонÑкий:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "ÐоÑейÑкий:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ÐиÑовÑкий:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "ÐолÑÑкий:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+#, fuzzy
+msgid "Romanian:"
+msgstr "ÐиÑовÑкий:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Ð ÑÑÑкий:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "ÐÑпанÑкий:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "ШведÑкий:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "ÐÑганизаÑиÑ:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "ÐаллийÑкий:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "РпÑогÑамме"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "ÐвÑоÑÑ"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ÐеÑеводÑики"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 ÐÑ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 ÐÑ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 ÐÑ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 ÐÑ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 кÐÑ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3 кÐÑ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 кÐÑ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 кÐÑ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 кÐÑ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 кÐÑ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/ÐагÑÑзиÑÑ"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/ÐагÑÑзиÑÑ/ÐÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/ÐагÑÑзиÑÑ/ÐвÑозагÑÑжаемÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/ÐагÑÑзиÑÑ/ÐÑедÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð¿Ð¾ ÑмолÑаниÑ"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/ÐагÑÑзиÑÑ/ÐÑÑÑÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/ÐагÑÑзиÑÑ/Ðз Ñайла"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/ÐагÑÑзиÑÑ/Ðз Ñайла WinAMP EQF"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/ÐмпоÑÑиÑоваÑÑ"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/ÐмпоÑÑиÑоваÑÑ/ÐÑедÑÑÑановки из WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/СоÑ
ÑаниÑÑ"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/СоÑ
ÑаниÑÑ/ÐÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/СоÑ
ÑаниÑÑ/ÐвÑозагÑÑжаемÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/СоÑ
ÑаниÑÑ/СделаÑÑ Ð¿Ð¾ ÑмолÑаниÑ"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/СоÑ
ÑаниÑÑ/Ð Ñайл"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/СоÑ
ÑаниÑÑ/Ð Ñайл WinAMP EQF"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/УдалиÑÑ"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/УдалиÑÑ/ÐÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/УдалиÑÑ/ÐвÑозагÑÑжаемÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "ÐÐºÐ²Ð°Ð»Ð°Ð¹Ð·ÐµÑ ÐÐÐ "
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "ÐÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "ÐÑедÑÑÑановки"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "ÐагÑÑзка пÑедÑÑÑановки"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "ÐагÑÑзка авÑозагÑÑжаемой пÑедÑÑÑановки"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "ÐагÑÑзка пÑедÑÑÑановок ÑквалайзеÑа"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "СоÑ
ÑаниÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "СоÑ
ÑаниÑÑ Ð°Ð²ÑоÑÑÑановки"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "СоÑ
ÑаниÑÑ ÑÑÑановки ÑквалайзеÑа"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "УдалиÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "УдалиÑÑ Ð°Ð²ÑозагÑÑжаемÑÑ Ð¿ÑедÑÑÑановкÑ"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: паÑамеÑÑ `%s' неопÑеделÑн\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: паÑамеÑÑ `--%s' не позволÑÐµÑ Ð°ÑгÑменÑа\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: паÑамеÑÑ `%c%s' не позволÑÐµÑ Ð°ÑгÑменÑа\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: паÑамеÑÑ `%s' ÑÑебÑÐµÑ Ð°ÑгÑменÑ\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: неизвеÑÑнÑй паÑамеÑÑ `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: неизвеÑÑнÑй паÑамеÑÑ `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: некоÑÑекÑнÑй паÑамеÑÑ -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: непÑавилÑнÑй паÑамеÑÑ -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: паÑамеÑÑ ÑÑебÑÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: паÑамеÑÑ `-W %s' не опÑеделÑн\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: паÑамеÑÑ `-W %s' не ÑÑебÑÐµÑ Ð°ÑгÑменÑа\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Ðевозможно воÑпÑоизвеÑÑи ÑайлÑ.</big></b>\n"
+"\n"
+"ÐекоÑоÑÑе ÑÐ°Ð¹Ð»Ñ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð²Ð¾ÑпÑоизведенÑ. ÐожалÑйÑÑа, пÑовеÑÑÑе "
+"ÑледÑÑÑее:\n"
+"1. ÐоÑÑÑпноÑÑÑ ÑÑиÑ
Ñайлов.\n"
+"2. ÐклÑÑÐµÐ½Ñ Ð½ÐµÐ¾Ð±Ñ
одимÑе аÑдио-модÑли."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "ÐолÑÑе не показÑваÑÑ ÑÑо пÑедÑпÑеждение"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "_ÐодÑобнее"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Ðазвание Ñайла"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "BMP: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Ðазвание Ñайла:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "ÐÐµÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð²Ð²Ð¾Ð´Ð°, ÑаÑпознаÑÑего ÑÑÐ¾Ñ Ñайл"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "ÐодÑÐ»Ñ Ð²Ð²Ð¾Ð´Ð°: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Ðевозможно ÑоздаÑÑ Ñайл жÑÑнала (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Ðевозможно ÑоздаÑÑ ÐºÐ°Ñалог (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ÐÑполÑзование: beep-media-player [паÑамеÑÑÑ] [ÑайлÑ] ...\n"
+"\n"
+"ÐаÑамеÑÑÑ:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "ÐÑобÑазиÑÑ ÑÑÐ¾Ñ ÑекÑÑ Ð¸ вÑйÑи"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "УказаÑÑ ÐÐÐ /XMMS ÑеÑÑÐ¸Ñ (по ÑмолÑаниÑ: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "ÐеÑейÑи к пÑедÑдÑÑей пеÑне в ÑпиÑке пеÑен"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "ÐаÑаÑÑ Ð¿ÑоигÑÑвание ÑекÑÑего ÑпиÑка воÑпÑоизведениÑ"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "ÐÑиоÑÑановиÑÑ ÑекÑÑÑÑ Ð¿ÐµÑнÑ"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "ÐÑÑановиÑÑ ÑекÑÑÑÑ Ð¿ÐµÑнÑ"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "ÐÑиоÑÑановиÑÑ, еÑли ÑÑо-либо пÑоигÑÑваеÑÑÑ, инаÑе воÑпÑоизводиÑÑ"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "ÐеÑейÑи к ÑледÑÑÑей пеÑне в ÑпиÑке пеÑен"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ðе оÑиÑаÑÑ ÑпиÑок воÑпÑоизведениÑ"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "ÐоказаÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ðµ окно"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ÐденÑиÑикаÑÐ¾Ñ Ð¿ÑедÑдÑÑей ÑеÑÑии"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ÐÑвеÑÑи Ð½Ð¾Ð¼ÐµÑ Ð²ÐµÑÑии и вÑйÑи\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"ÐолÑÑен SIGSEGV\n"
+"\n"
+"Ðозможно, ÑÑо оÑибка в BMP. ÐÑли Ð²Ñ Ð½Ðµ знаеÑе поÑÐµÐ¼Ñ ÑÑо пÑоизоÑло, "
+"оÑпÑавÑÑе пиÑÑмо на beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Ðевозможно загÑÑзиÑÑ ÑемÑ.</big></b>\n"
+"\n"
+"ÐÑовеÑÑÑе, пÑигодна ли к иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñема '%s' и ÑÑÑановлена ли Ñема по "
+"ÑмолÑÐ°Ð½Ð¸Ñ Ð² '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"ÐÑоÑÑиÑе, ваÑа веÑÑÐ¸Ñ GTK+ (%d.%d.%d) не бÑÐ´ÐµÑ ÑабоÑаÑÑ Ñ BMP.\n"
+"ÐожалÑйÑÑа, иÑполÑзÑйÑе GTK+ %s или новее.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"ÐÑоÑÑиÑе, поÑоки не поддеÑживаÑÑÑÑ Ð½Ð° ваÑей плаÑÑоÑме.\n"
+"\n"
+"ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑиÑÑÐµÐ¼Ñ Linux, базиÑÑÑÑÑÑÑÑ Ð½Ð° libc5 и ÑÑÑановленнÑми "
+"Glib и GTK+, вам\n"
+"пеÑед ÑÑÑановкой LinuxThreads необÑ
одимо пеÑекомпилиÑоваÑÑ Glib и GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "ÐÐÐ : Ðевозможно оÑкÑÑÑÑ ÑкÑан Ð´Ð»Ñ Ð¾ÑобÑажениÑ, вÑÑ
одим."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/ÐнÑоÑмаÑÐ¸Ñ Ð¾ пеÑне"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/ÐвÑопÑокÑÑÑка Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑни"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Режим визÑализаÑии"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Режим визÑализаÑии/ÐнализаÑоÑ"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Режим визÑализаÑии/ÐÑаÑик"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Режим визÑализаÑии/ÐÑклÑÑено"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Режим анализаÑоÑа"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Режим анализаÑоÑа/ÐбÑÑнÑй"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Режим анализаÑоÑа/ÐламÑ"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Режим анализаÑоÑа/ÐеÑÑикалÑнÑе линии"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Режим анализаÑоÑа/Ðинии"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Режим анализаÑоÑа/ÐолоÑки"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Режим анализаÑоÑа/Ðики"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Режим гÑаÑика"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Режим гÑаÑика/ТоÑки"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Режим гÑаÑика/Ðинии"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Режим гÑаÑика/Ðаливка"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/ÐÑи минимизиÑованном окне"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/ÐÑи минимизиÑованном окне/ÐбÑÑнÑй"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/ÐÑи минимизиÑованном окне/ÐлавнÑй"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ЧаÑÑоÑа обновлениÑ"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/ЧаÑÑоÑа обновлениÑ/ÐÐ¾Ð»Ð½Ð°Ñ (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/ЧаÑÑоÑа обновлениÑ/Ðоловина (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/ЧаÑÑоÑа обновлениÑ/ЧеÑвеÑÑÑ (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ЧаÑÑоÑа обновлениÑ/ÐоÑÑÐ¼Ð°Ñ (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Ðадение анализаÑоÑа"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Ðадение ÐнализаÑоÑа/Самое медленное"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Ðадение ÐнализаÑоÑа/Ðедленное"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Ðадение ÐнализаÑоÑа/СÑеднее"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Ðадение ÐнализаÑоÑа/ÐÑÑÑÑое"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Ðадение ÐнализаÑоÑа/Самое бÑÑÑÑое"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Ðадение пиков"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Ðадение пиков/Самое медленное"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Ðадение пиков/Ðедленное"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Ðадение пиков/СÑеднее"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Ðадение пиков/ÐÑÑÑÑое"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Ðадение пиков/ÐÑÑÑÑей некÑда"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/ÐовÑоÑÑÑÑ"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/СлÑÑайно"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ÐоÑпÑоизведение"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ÐÑиоÑÑановиÑÑ"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/ÐÑÑановиÑÑ"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/ÐÑедÑдÑÑÐ°Ñ Ð¿ÐµÑнÑ"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/СледÑÑÑÐ°Ñ Ð¿ÐµÑнÑ"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/ÐеÑейÑи на пеÑвÑÑ Ð¿ÐµÑÐ½Ñ Ð² ÑпиÑке"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/ÐеÑеÑкоÑиÑÑ Ð½Ð° Ñайл"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/ÐеÑеÑкоÑиÑÑ Ð½Ð° вÑемÑ"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/ÐзмениÑÑ Ð½Ð°ÑÑÑойки"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/РпÑогÑамме"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_ÐÑÑ
од"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/ÐобавиÑÑ/ФайлÑ..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/ÐобавиÑÑ/ÐеÑÑоположение в инÑеÑнеÑ..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/ÐоказаÑÑ ÑедакÑÐ¾Ñ ÑпиÑка пеÑен"
+
+#: beep/mainwin.c:403
+#, fuzzy
+msgid "/Show Equalizer"
+msgstr "ÐквалайзеÑ"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/ÐоказÑваÑÑ Ð¿ÑоÑедÑее вÑемÑ"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/ÐоказÑваÑÑ Ð¾ÑÑавÑееÑÑ Ð²ÑемÑ"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/ÐоднÑÑÑ Ð½Ð° пеÑедний план"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+#, fuzzy
+msgid "/Roll up Playlist Editor"
+msgstr "/СделаÑÑ ÑпиÑок воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð°ÐºÑивнÑм окном"
+
+#: beep/mainwin.c:420
+#, fuzzy
+msgid "/Roll up Equalizer"
+msgstr "ÐквалайзеÑ"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "ÐеÑеÑкоÑиÑÑ Ð½Ð° вÑемÑ"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "минÑÑ:ÑекÑнд"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Ðлина доÑожки:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "ÐÑеÑедÑ"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "ÐÑеÑедÑ"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "ÐеÑеÑкоÑиÑÑ Ð½Ð° доÑожкÑ"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "ФилÑÑÑ: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Ðобавление каÑалогов"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/ÐобавиÑÑ/ÐдÑÐµÑ Ð¸Ð½ÑеÑнеÑ..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ÐÐÐ ÐÐÐЩÐÐÐÐ: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "ÐÐ ÐÐÐÐСТЬ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "ÐÐÐÐÐС: %d%% ÐÐÐÐÐ"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "ÐÐÐÐÐС: ЦÐÐТР"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "ÐÐÐÐÐС: %d%% ÐÐÐ ÐÐÐ"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "ÐÐÐЮ ÐÐСТРÐÐÐ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ÐТÐÐЮЧÐТЬ ÐСÐÐÐÐ ÐÐÐÐРХУ (Ð/Ð)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ÐÐÐЮЧÐТЬ ÐСÐÐÐÐ ÐÐÐÐРХУ (Ð/Ð)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ÐТÐÐЮЧÐТЬ ÐСÐÐÐÐ ÐÐÐÐРХУ"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ÐÐÐЮЧÐТЬ ÐСÐÐÐÐ ÐÐÐÐРХУ"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "ÐÐÐÐ ÐÐФÐÐ ÐÐЦÐРРФÐÐÐÐ"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "ÐÐÐЮ ÐÐÐУÐÐÐÐÐЦÐÐ"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Ðе найдено воÑпÑоизводимого CD.</big></b>\n"
+"\n"
+"ÐомпакÑ-диÑк оÑÑÑÑÑÑвÑÐµÑ Ð¸Ð»Ð¸ не ÑодеÑÐ¶Ð¸Ñ Ð°Ñдио-доÑожек.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Ðе Ð¼Ð¾Ð³Ñ Ð¾ÑкÑÑÑÑ Ð°Ñдио-ÑÑÑÑойÑÑво</big></b>\n"
+"\n"
+"ÐожалÑйÑÑа, пÑовеÑÑÑе ÑледÑÑÑее:\n"
+"1. ÐÑавилÑноÑÑÑ Ð²ÑбоÑа модÑÐ»Ñ Ð²Ñвода.\n"
+"2. Ðе блокиÑÑÑÑ Ð»Ð¸ дÑÑгие пÑогÑÐ°Ð¼Ð¼Ñ Ð·Ð²ÑковÑÑ ÐºÐ°ÑÑÑ.\n"
+"3. ÐÑавилÑноÑÑÑ Ð½Ð°ÑÑÑойки звÑковой каÑÑÑ.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/УдалиÑÑ Ð²Ñделенное"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/УдалиÑÑ Ð²Ñделенное"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/УдалиÑÑ Ð²Ñделенное"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/ÐоÑÑавиÑÑ Ð¿ÐµÑÐ½Ñ Ð² оÑеÑедÑ"
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/ÐобавиÑÑ/ФайлÑ..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/ÐобавиÑÑ/ÐдÑÐµÑ Ð¸Ð½ÑеÑнеÑ..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/ÐобавиÑÑ/ÐаÑалоги..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/ÐобавиÑÑ/ФайлÑ..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/ÐÑиÑÑиÑÑ Ð¾ÑеÑедÑ"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/УдалиÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпнÑе ÑайлÑ"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/ÐовÑй ÑпиÑок"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/СоÑÑиÑоваÑÑ ÑпиÑок"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/ÐовÑй ÑпиÑок"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/ÐбновиÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñй ÑпиÑок"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "ÐÑделиÑÑ Ð²Ñе"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/ÐеÑемеÑаÑÑ ÑпиÑок"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/ÐеÑевеÑнÑÑÑ ÑпиÑок"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/СоÑÑиÑоваÑÑ ÑпиÑок"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/СоÑÑиÑоваÑÑ ÑпиÑок/Ðо названиÑ"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/СоÑÑиÑоваÑÑ ÑпиÑок/Ðо имени Ñайла"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/СоÑÑиÑоваÑÑ ÑпиÑок/Ðо пÑÑи + Ð¸Ð¼Ñ Ñайла"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/СоÑÑиÑоваÑÑ ÑпиÑок/Ðо даÑе"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе/Ðо названиÑ"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе/Ðо имени Ñайла"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе/Ðо пÑÑи + Ð¸Ð¼Ñ Ñайла"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/СоÑÑиÑоваÑÑ Ð²ÑбÑаннÑе/Ðо даÑе"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "ÐÑибка запиÑи ÑпиÑка пеÑен \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s Ñже ÑÑÑеÑÑвÑеÑ. ÐÑодолжиÑÑ?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Ðевозможно ÑоÑ
ÑаниÑÑ ÑпиÑок воÑпÑоизведениÑ! ÐеизвеÑÑнÑй Ñип Ñайла %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "ÐагÑÑзка ÑпиÑка воÑпÑоизведениÑ"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "СоÑ
Ñанение ÑпиÑка воÑпÑоизведениÑ"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "РедакÑÐ¾Ñ ÑпиÑка воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "ÐнеÑний вид"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "ÐквалайзеÑ"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "ÐÑÑÑ"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "СпиÑок воÑпÑоизведениÑ"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "ÐодÑли"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "ÐÑполниÑелÑ"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾Ñожки"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "ÐÑÑÑ Ðº ÑайлÑ"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "ÐклÑÑен"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "ÐпиÑание"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "ÐаÑегоÑиÑ"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Ðкно наÑÑÑоек"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "Ðобавление Ñайлов"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/УбÑаÑÑ ÑайлÑ"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Ðобавление Ñайлов"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (недопÑÑÑÐ¸Ð¼Ð°Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð®Ð½Ð¸ÐºÐ¾Ð´)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Ðзменение наÑÑÑоек BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐодÑли</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_СпиÑок модÑлей поддеÑжки мÑзÑкалÑнÑÑ
ÑоÑмаÑов:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Ðедиа</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_СпиÑок модÑлей обÑего назнаÑениÑ:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>ÐбÑие</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "СпиÑок модÑлей _визÑализаÑии:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>ÐизÑализаÑиÑ</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "СпиÑок модÑлей _ÑÑÑекÑов:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>ÐÑÑекÑÑ</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_ТекÑÑий модÑÐ»Ñ Ð²Ñвода звÑка:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑÐ²Ð¾Ð²Ð°Ð½Ñ Ð² конÑигÑÑаÑии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
BMP, но не бÑдÑÑ "
+"задейÑÑÐ²Ð¾Ð²Ð°Ð½Ñ Ð¿Ñи воÑпÑоизведении до ÑледÑÑÑей пеÑни!\n"
+"\n"
+"ÐополниÑелÑно, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑÑÑпили в ÑилÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑÑановиÑÑ Ð¸ "
+"пеÑезапÑÑÑиÑÑ Ð²Ð¾ÑпÑоизведение."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>ÐÑвод звÑка</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐнеÑний вид</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Тема</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_ШÑиÑÑÑ</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Ðлавное окно:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_СпиÑок воÑпÑоизведениÑ:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "ÐÑÐ±Ð¾Ñ ÑÑиÑÑа Ð´Ð»Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "ÐÑÐ±Ð¾Ñ ÑÑиÑÑа Ð´Ð»Ñ ÑпиÑка воÑпÑоизведениÑ"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Разное</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "ÐоказÑваÑÑ Ð½Ð¾Ð¼ÐµÑа пеÑен в ÑпиÑке воÑпÑоизведениÑ"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "ÐÑполÑзоваÑÑ ÐºÑÑÑоÑÑ, ÑÑÑановленнÑе Ñемой"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐÑÑÑ</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>ÐолеÑо мÑÑи</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "ÐовоÑÐ¾Ñ ÐºÐ¾Ð»ÐµÑа мÑÑи изменÑÐµÑ Ð³ÑомкоÑÑÑ Ð½Ð°"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "пÑоÑенÑов"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "ÐовоÑÐ¾Ñ ÐºÐ¾Ð»ÐµÑа мÑÑи пÑокÑÑÑÐ¸Ð²Ð°ÐµÑ ÑпиÑок воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ð°"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "ÑÑÑок"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>СпиÑок воÑпÑоизведениÑ</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Ðазвание Ñайла</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "ÐÑеобÑазовÑваÑÑ Ð¿Ð¾Ð´ÑÑÑкивание в пÑобел"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "ÐÑеобÑазовÑваÑÑ %20 в пÑобел"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ÐнÑоÑмаÑÐ¸Ñ Ð¾ пеÑне и иÑполниÑеле</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+"ÐагÑÑжаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ пеÑне и иÑполниÑеле (инÑоÑмаÑионнÑй ÑÑг) из "
+"мÑзÑкалÑнÑÑ
Ñайлов."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+"ÐагÑÑжаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ пеÑнÑÑ
из мÑзÑкалÑнÑÑ
Ñайлов и ÑпиÑков воÑпÑоизведениÑ"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"ÐагÑÑжаÑÑ Ð¼ÐµÑаданнÑе пÑи добавлении Ñайла в ÑпиÑок воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ "
+"оÑкÑÑÑии"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "ÐÑи оÑкÑÑÑии"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "ÐагÑÑжаÑÑ Ð¼ÐµÑаданнÑе пÑи оÑобÑажении Ñайла в ÑпиÑке воÑпÑоизведениÑ"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "ÐÑи оÑобÑажении"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ÐоÑпÑоизведение</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"ÐÑи завеÑÑении пÑоигÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿ÐµÑни не пеÑедвигаÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки на "
+"ÑледÑÑÑÑÑ."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ðе пÑодвигаÑÑÑÑ Ð¿Ð¾ ÑпиÑÐºÑ Ð²Ð¾ÑпÑоизведениÑ"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "ÐаÑза Ð¼ÐµÐ¶Ð´Ñ Ð¿ÐµÑнÑми"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "ÐÑиоÑÑанавливаÑÑ Ð½Ð°"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ÑекÑнд"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>ÐÑобÑажение Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑни</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "ÐÑобÑй:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"Ðазвание\n"
+"ÐÑполниÑÐµÐ»Ñ - Ðазвание\n"
+"ÐÑполниÑÐµÐ»Ñ - ÐлÑбом - Ðазвание\n"
+"ÐлÑбом - Ðазвание\n"
+"ÐÑобое"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "ÐÑÑавиÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ ÑÑÑоки названиÑ"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐквалайзеÑ</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>ÐÑедÑÑÑановки</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Файл каÑалога пÑедÑÑÑановок:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Файл ÑаÑÑиÑений Ð´Ð»Ñ Ð¿ÑедÑÑÑановок:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ÐоÑÑÑпнÑе _пÑедÑÑÑановки:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "ÐÑделиÑÑ Ð²Ñе"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "СнÑÑÑ Ð²Ñделение"
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "РазÑеÑиÑÑ Ð¿ÑиÑм названий ÑеÑез SHOUT/Icecast"
+
+#~ msgid "Danicel Liviu Cristian"
+#~ msgstr "Danicel Liviu Cristian"
+
+#~ msgid "Default skin:"
+#~ msgstr "Тема по ÑмолÑаниÑ:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "ÐладиÑлав ÐеÑаÑимов"
+
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "Режим ÑовмеÑÑимоÑÑи Ñ XMMS"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Ðевозможно иниÑиализиÑоваÑÑ gnome-vfs.\n"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/ÐодÑли визÑализаÑии"
+
+#~ msgid "/Play CD"
+#~ msgstr "/ÐоÑпÑоизвеÑÑи CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/Ðазад на 5 ÑекÑнд"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/ÐпеÑÑд на 5 ÑекÑнд"
+
+#~ msgid "/Add"
+#~ msgstr "/ÐобавиÑÑ"
+
+#~ msgid "/Playback"
+#~ msgstr "/ÐоÑпÑоизведение"
+
+#~ msgid "/_Options"
+#~ msgstr "/_ÐаÑамеÑÑÑ"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/ÐоказаÑÑ Ð³ÑаÑиÑеÑкий ÑквалайзеÑ"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/ÐеÑезагÑÑзиÑÑ ÑемÑ"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Ðе пеÑеÑ
одиÑÑ Ð½Ð° ÑледÑÑÑÑÑ Ð¿ÐµÑнÑ"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/ÐомеÑÑиÑÑ Ð½Ð° вÑе ÑабоÑие меÑÑа"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/СкÑÑÑиÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ðµ окно"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/СкÑÑÑиÑÑ Ð¾ÐºÐ½Ð¾ ÑпиÑка воÑпÑоизведениÑ"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/СкÑÑÑиÑÑ Ð¾ÐºÐ½Ð¾ ÑквалайзеÑа"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/Ðвойной ÑазмеÑ"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/ÐÑоÑÑое пеÑемеÑение"
+
+#~ msgid "Jump to:"
+#~ msgstr "ÐеÑеÑкоÑиÑÑ Ð½Ð°:"
+
+#~ msgid "Jump"
+#~ msgstr "ÐеÑеÑкоÑиÑÑ"
+
+#~ msgid "Add URL"
+#~ msgstr "Ðобавление URL"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "ÐТÐÐЮЧÐТЬ ÐÐÐÐÐÐÐ Ð ÐÐÐÐÐ "
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "ÐÐÐЮЧÐТЬ ÐÐÐÐÐÐÐ Ð ÐÐÐÐÐ "
+
+#~ msgid "/By extension"
+#~ msgstr "/Ðо ÑаÑÑиÑениÑ"
+
+#~ msgid "/Playlist"
+#~ msgstr "/СпиÑок воÑпÑоизведениÑ"
+
+#~ msgid "/Close Window"
+#~ msgstr "/ÐакÑÑÑÑ Ð¾ÐºÐ½Ð¾"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/СоÑÑиÑоваÑÑ Ð¿Ð¾ названиÑ"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/СоÑÑиÑоваÑÑ Ð¿Ð¾ имени Ñайла"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/СоÑÑиÑоваÑÑ Ð¿Ð¾ даÑе"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Ðе ÑдалоÑÑ ÑдалиÑÑ \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d из %d Ñайлов ÑÑпеÑно ÑдаленÑ."
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "BMP: Ð¤Ð°Ð¹Ð»Ñ ÑдаленÑ"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "ÐейÑÑвиÑелÑно ÑдалиÑÑ %d Ñайл(ов)?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "ÐейÑÑвиÑелÑно ÑдалиÑÑ: \"%s\"?"
+
+#~ msgid "Play Files"
+#~ msgstr "ÐоÑпÑоизвеÑÑи ÑайлÑ"
+
+#~ msgid "Load"
+#~ msgstr "ÐагÑÑзиÑÑ"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "ÐвÑомаÑиÑеÑки загÑÑжаÑÑ Ð¿ÑедÑÑÑановки"
+
+#~ msgid "Zero"
+#~ msgstr "ÐÑÑÑой"
+
+#~ msgid "From file"
+#~ msgstr "Ðз Ñайла"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "Ðз EQF-Ñайла WinAMP "
+
+#~ msgid "Import"
+#~ msgstr "ÐмпоÑÑиÑоваÑÑ"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "ÐÑедÑÑÑановки из WinAMP"
+
+#~ msgid "To file"
+#~ msgstr "Ð Ñайл"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "Ð EQF-Ñайл WinAMP"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "ÐаÑÑÑоиÑÑ ÑквалайзеÑ"
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "ÐÐ»Ð°Ð²Ð½Ð°Ñ Ð¿ÑокÑÑÑка Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð² главном окне"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sk.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3490 @@
+# Slovak translation for BMP
+# Copyright (C) 2004 Pavel Kanzelsberger <kanzels at zmail.sk>
+# This file is distributed under the same license as the BMP package.
+# Pavel Kanzelsberger <kanzels at zmail.sk>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-09-03 09:32+0800\n"
+"Last-Translator: Pavel Kanzelsberger <kanzels at zmail.sk>\n"
+"Language-Team: Slovak <kanzels at zmail.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD Audio Plugin"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD Audio Skladba %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(neznámy)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Disk %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Nepodarilo sa otvoriť zariadenie %s\n"
+"Chyba: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Nepodarilo sa preÄÃtaÅ¥ \"TOC\" - Obsah\n"
+"Možno nie je disk v mechanike?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Zariadenie %s OK.\n"
+"Disk má %d skladieb"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d dátových trackov)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Celková dĺžka: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Digitálne extrahovanie audia neotestované pretože disk nemá audio tracky\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Digitálne extrahovanie audia: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Digitálne extrahovanie audia neúspešné: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Nepodarilo sa otvoriť adresár %s\n"
+"Chyba: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Chyba: %s existuje, ale nie je to adresár"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Adresár %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Zariadenie:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "Zaria_denie:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Adr_esár:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Prehrávacà režim:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analógový"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Digitálne extrahovanie audia"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Nastavenie hlasitosti:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Nie je mixér"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "Disk CD-ROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS mixér"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Skontrolovať disk..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Odstrániť disk"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Konfigurácia CD Audio prehrávaÄa"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Pridať disk"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Zariadenie"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Použiť CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "ZÃskaÅ¥ zoznam serverov"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Zobraziť sieťové okno"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB server:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Použiť CD Index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD Index server:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Názvy skladieb:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Vynechať generické názvy"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Formát názvov:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD Info"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Vyberte adresár kde chcete uložiť MPEG streamy:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "Konfigurácia MPEG Audio pluginu"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "RozlÃÅ¡enie:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bit"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bit"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanály:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (ak je dostupné)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Down samplovať:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Dekóder:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatická detekcia"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! optimalizovaný dekóder"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX optimalizovaný dekóder"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU dekóder"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Nastavenia"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Obsah"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "RozÅ¡Ãrenia"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "RozÅ¡Ãrenia a obsah"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Dekóder"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ZásobnÃk:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "VeľkosÅ¥ zásobnÃka (kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "PredzásobnÃk (percent):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "PoužÃvaÅ¥ proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Server:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "PoužÃvaÅ¥ autentifikáciu"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "PoužÃvateľ:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Heslo:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Uložiť stream na disk:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Uložiť stream na disk"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Cesta:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Prezrieť"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Povoliť Icecast Metadata UDP kanál"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Streamovanie"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 Tagy:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Zakázať ID3V2 tagy"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "Skonvertovať ne-UTF8 ID3 tagy na UTF8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 kódovanie:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 formát:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Názov"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Nepodarilo sa zapÃsaÅ¥ do súboru: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Nepodarilo sa zapÃsaÅ¥ tag!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Nepodarilo sa otvoriť súbor: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Informácie o súbore"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Nepodarilo sa skrátiť súbor: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Nepodarilo sa odstrániť tag!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Nie je žiadny tag, ktorý by sa dal odstrániť!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Spojené stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Dva kanály"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Jeden kanál"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Žiadny"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nie"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ãno"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Názov:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG Info "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG Level:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bit rate:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Sample rate:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Framov:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Veľkosť súboru:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Ochrana chýb:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Originál:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Zdôraznenie:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 Tag "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Názov:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Interpret:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Komentár:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Rok:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "ÄÃslo skladby:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Žáner:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "KopÃrovaÅ¥ tagy albumu"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "Prilepiť tagy albumu"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Premenlivý,\n"
+"priem. bitrate: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu Bajtov"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Chyba"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "VYHĽADÃVAM %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Nepodarilo sa nájsť %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "PRIPÃJAM SA NA %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Nepodarilo sa pripojiť na %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "PRIPOJENÃ: ÄAKÃM NA ODPOVEÄ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Nepodarilo sa pripojiť na %s\n"
+"Server oznámil: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "PREDÄÃTAVAM: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Klasický Rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "TaneÄný"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disko"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "Novodobý"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Iné"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industriálny"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "AlternatÃvny"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vokály"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klasický"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Inštrumentálny"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Hra"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Zvukový klip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Hluk"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "MeditaÄný"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Inštrumentálny Pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Inštrumentálny Rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Etnický"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gotický"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Elektronický"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Komédia"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Kultový"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Kresťanský Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Kabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "Nová vlna"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Muzikál"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folklór"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Národný Folklór"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latino"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtic"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gotický Rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "ProgresÃvny Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symfonický Rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Pomalý Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Ľahké poÄúvanie"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "ReÄ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber Music"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symfónia"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satira"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folkór"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Balada"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Balada"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhythmic Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Sólo bicie"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-HOUSE"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Kresťanský Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Kresťanský Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "O MPEG Audio plugine"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 dekódovacà engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG Audio Plugin"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Vyberte adresár kde chcete ukladať streamy Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Konfigurácia Ogg Vorbis Audio pluginu"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis Tagy:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Formát titulku:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "Nastavenie ReplayGain:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Povoliť Clipping Prevention"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Povoliť ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Typ ReplayGain:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "použiť Gain/Peak skladieb"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "použiť Gain/Peak albumov"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Povoliť 6dB Boost + Hard Limiting"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Vyskytla sa chyba:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Chyba!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Nepodarilo sa zmeniť tag (pri otváranà súboru)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Nepodarilo sa zmeniť tag (pri zatváranà súboru)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Nepodarilo sa zmeniť tag"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Tag Ogg Vorbis"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Dátum:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Popis:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Umiestnenie:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Verzia:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ÄÃslo ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organizácia:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Gain skladby:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Peak skladby:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Gain albumu:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Peak albumu:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Informácie o Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Dĺžka:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (nominálne)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d Bajtov"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis Audio Plugin"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "O Ogg Vorbis Audio plugine"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV Audio Plugin"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS Výstupný Plugin"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "O ovládaÄi OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Štandardný (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Štandardný"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Konfigurácia ovládaÄa OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Audio zariadenie:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "PoužiÅ¥ alternatÃvne zariadenie:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mixovacie zariadenie:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Zariadenia"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "VeľkosÅ¥ zásobnÃka (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "PredÄÃtanie"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Nastavenia mixovania:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Hlasitosť ovláda Master a nie PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixér"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "O ESounD Plugine"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Konfigurácia výstupného ESD Pluginu"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "PoužiÅ¥ vzdialený poÄÃtaÄ"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Hlasitosť ovláda mixér OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Server"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound Výstupný Plugin"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "O ovládaÄi ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s výstupný plugin"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "Neznáma zvuková karta"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "Štandardné PCM zariadenie (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Konfigurácia ovládaÄa ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "Mixér:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "PoužÃÅ¥ softwarové ovládanie hlasitosti"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixovacia karta:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Nastavenia zariadenia"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "RozÅ¡Ãrené možnosti:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Äas zásobnÃka (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Äasový úsek (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Äas zásobnÃka (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mód Mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "RozÅ¡Ãrené možnosti"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Prepnúť Dekorácie"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Zavrieť"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Výber farby"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Možnosti:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Interpret/Umelec"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Žáner"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Názov súboru"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Cesta k súboru"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "PrÃpona súboru"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Názov skladby"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "ÄÃslo skladby"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Dátum"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Rok"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Komentár"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: ZobraziÅ¥ \"...\" len ak je %n prÃtomný"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"PrehrávaÄ médià založený na XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 BMP Development Team\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "Vývojári:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "With Additional Help:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+#, fuzzy
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "Domovská stránka a grafika:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "Bretónsky:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ÄÃnsky:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+#, fuzzy
+msgid "Czech:"
+msgstr "Francúzsky:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "Holandsky:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "Å panielsky:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "Francúzsky:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "Nemecky:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Nemecky:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "Grécky:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "MaÄarsky:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "Taliansky:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "Japonsky:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "Kórejsky:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "LitovÄina:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+#, fuzzy
+msgid "Macedonian:"
+msgstr "Rumunsky:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "Poľsky:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Rumunsky:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "Rusky:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "Å panielsky:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "Švédsky:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Rumunsky:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "Welshsky:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "O BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "Credits"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "Prekladatelia"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr ""
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr ""
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr ""
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Otvoriť"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Otvoriť/Preset"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Otvoriť/Automaticky otvoriť preset"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Otvoriť/Štandardný"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Otvoriť/Nulový"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Otvoriť/Zo súboru"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Otvoriť/Z WinAMP EQF súboru"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importovať"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importovať/WinAMP Presety"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Uložiť"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Uložiť/Preset"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Uložiť/Auto otváracà preset"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Uložiť/Štandardný"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Uložiť/Do súboru"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/Uložiť/Do WinAMP EQF súboru"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Vymazať"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Vymazať/Preset"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Vymazať/Auto otváracà preset"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP Ekvalizér"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "Preset"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Presety"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Otvoriť preset"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Otvoriť auto-preset"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Otvoriť preset ekvalizéru"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Uložiť preset"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Uložiť auto-preset"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Uložiť preset ekvalizéru"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Vymazať preset"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Vymazať auto-preset"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: voľba `%s' je neprÃstupná\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: voľba `--%s' nepovoľuje argument\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: voľba `%c%s' nepovoľuje argument\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: voľba `%s' vyžaduje argument\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nerozpoznaná voľba `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nerozpoznaná voľba `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: nepovolená voľba -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: nesprávna voľba -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: voľba vyžaduje argument -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: voľba `-W %s' je neprÃpustná\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: voľba `-W %s' nepovoľuje argument\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Nepodarilo sa prehrať súbory.</big></b>\n"
+"\n"
+"Nasledovné súbory sa nepodarilo prehraÅ¥, skontrolujte Äi:\n"
+"1. sú prÃstupné.\n"
+"2. ste povolili vyžadované pluginy."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Druhýkrát nezobrazovať toto varovanie"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "Zobraziť viac _detailov"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Názov súboru"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Názov súboru:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Žiadny z pluginov nerozoznal tento súbor"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Vstupný plugin: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Nepodarilo sa vytvoriť log súbor (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Nepodarilo sa vytvoriť adresár (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Použitie: beep-media-player [voľby] [súbory] ...\n"
+"\n"
+"Voľby:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "ZobraziÅ¥ tento text a skonÄiÅ¥"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Vybrať BMP/XMMS sedenie (Štandardne: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Vrátiť sa späť v playliste"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "ZaÄaÅ¥ hraÅ¥ aktuálny playlist"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Zapauzovať aktuálnu skladbu"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Zastaviť aktuálnu skladbu"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pauza ak hrá, inak prehrať"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Posunúť vpred v playliste"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "NevyÄistiÅ¥ playlist"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "Zobraziť hlavné okno"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ID predchádzajúcej session"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ZobraziÅ¥ verziu programu a skonÄiÅ¥\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Nastal prÃznak SIGSEGV\n"
+"\n"
+"Môže to byÅ¥ spôsobené chybou v BMP. Ak neviete preÄo sa tak stalo, poÅ¡lite "
+"nám mail na beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Nepodarilo sa naÄÃtaÅ¥ vzhľad.</big></b>\n"
+"\n"
+"Skontrolujte Äi je skin '%s' použÃvateľný a Äi je Å¡tandardný skin "
+"nainštalovaný v '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"PrepáÄte, verzia GTK+ (%d.%d.%d), ktorú máte nepracuje s BMP.\n"
+"ProsÃm použite GTK+ verzie %s alebo novÅ¡ie.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Bohužiaľ použitie vlákien (threads) nie je podporované na vašej platforme.\n"
+"\n"
+"Ak máte Linux s podporou libc5 a nainštalovali ste Glib & GTK+ predtým ako\n"
+"ste inštalovali LinuxThreads budete musiet rekompilovať Glib & GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Nepodarilo sa otvoriť display, koniec."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Zobraziť detaily skladby"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Automatický posun názvu skladby"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/VizualizaÄný mód"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/VizualizaÄný mód/Analyzér"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/VizualizaÄný mód/Osciloskop"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/VizualizaÄný mód/Vypnúť"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Mód analyzéru"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Mód analyzéru/Normálny"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Mód analyzéru/OheÅ"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Mód analyzéru/Vertikálne Äiary"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Mód analyzéru/Äiary"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Mód analyzéru/Obdĺžniky"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Mód analyzéru/Stropy"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Mód osciloskopu"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Mód osciloskopu/Bodový osciloskop"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Mód osciloskopu/Äiarový osciloskop"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Mód osciloskopu/Vyplnený osciloskop"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr ""
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr ""
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr ""
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Obnovovacà režim"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Obnovovacà režim/Plný (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Obnovovacà režim/PoloviÄný (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Obnovovacà režim/Štvrtinový (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Obnovovacà režim/Osminový (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Zaniknutie analyzéru"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Zaniknutie analyzéru/Najpomalšie"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Zaniknutie analyzéru/Pomalé"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Zaniknutie analyzéru/Stredné"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Zaniknutie analyzéru/Rýchle"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Zaniknutie analyzéru/Najrýchlejšie"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Zaniknutie vrcholov"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Zaniknutie vrcholov/Najpomalšie"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Zaniknutie vrcholov/Pomalé"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Zaniknutie vrcholov/Stredné"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Zaniknutie vrcholov/Rýchle"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Zaniknutie vrcholov/Najrýchlejšie"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Opakovanie"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Miešanie"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Prehrať"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Pauza"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Zastaviť"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Predchádzajúca"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Äaľšia"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/SkoÄiÅ¥ na zaÄiatok playlistu"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/PreskoÄiÅ¥ na súbor"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/PreskoÄiÅ¥ na Äas"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Nastavenia"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/O prehrávaÄi BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Koniec"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/Pridať/Súbory..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Pridať/Internetové miesto..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Zobraziť editor playlistu"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/Zobraziť ekvalizér"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Äas ubehnutý"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Äas zostávajúci"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Vždy navrchu"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Zobraziť na všetkých plochách"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/ZrolovaÅ¥ prehrávaÄ"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/Zrolovať editor playlistu"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/Zrolovať ekvalizér"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr ""
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr ""
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "PreskoÄiÅ¥ na Äas"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minúty:sekundy"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Dĺžka skladby:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "Rada"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Rada"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "PreskoÄiÅ¥ na skladbu"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filter: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "Pridať Adresáre"
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Pridať/Internetovú adresu..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "SKOK NA: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "HLASITOSŤ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "VYVÃŽENIE: %d%% VĽAVO"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "VYVÃŽENIE: STRED"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "VYVÃŽENIE: %d%% VPRAVO"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "MENO MOŽNOSTÃ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ZAKÃZAŤ VŽDY NAVRCHU (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "POVOLIŤ VŽDY NAVRCHU (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ZAKÃZAŤ VŽDY NAVRCHU"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "POVOLIŤ VŽDY NAVRCHU"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr ""
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr ""
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Toto CD nie je možné prehrávať.</big></b>\n"
+"\n"
+"V mechanike nie je CD, alebo vložené CD nie je audio CD.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Nepodarilo sa inicializovať audio.</big></b>\n"
+"\n"
+"ProsÃm skontrolujte:\n"
+"1. Äi máte zapnutý správny výstupný plugin.\n"
+"2. Äi žiadne iné programy neblokuju zvukovú kartu.\n"
+"3. Äi je vaÅ¡a zvuková karta správne nakonfigurovaná.\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Odstrániť vybrané"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/Odstrániť vybrané"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/Odstrániť vybrané"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/PrepÃnaÄ rady"
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/Pridať/Súbory..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Pridať/Internetovú adresu..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Pridať/Adresáre..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/Pridať/Súbory..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/VyÄistiÅ¥ zoznam"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Odstrániť nedostupné súbory"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Nový zoznam"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/Triediť zoznam"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Nový zoznam"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Obnoviť zobrazenie"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Triediť výber"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/Triediť výber"
+
+#: beep/playlistwin.c:230
+#, fuzzy
+msgid "/Select All"
+msgstr "Vybrať všetky"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Náhodne premiešať zoznam"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Prevrátiť poradie"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Triediť zoznam"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Triediť zoznam/Podľa názvu"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Triediť zoznam/Podľa názvu súboru"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Triediť zoznam/Podľa cesty a názvu súboru"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Triediť zoznam/Podľa dátumu"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Triediť výber"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Triediť výber/Podľa názvu"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Triediť výber/Podľa názvu súboru"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Triediť výber/Podľa cesty a názvu súboru"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Triediť výber/Podľa dátumu"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Nepodarilo sa uložiť playlist do \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s už existuje. PokraÄovaÅ¥?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Nepodarilo sa uložiť playlist! Neznámy typ súboru %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "NaÄÃtaÅ¥ playlist"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Uložiť playlist"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "Editor playlistu BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "Vzhľad"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "Ekvalizér"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "Myš"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "Playlist"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "Pluginy"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "Interpret"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "ÄÃsloskladby"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "Adresár"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Povolené"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "Popis"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "Kategória"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "Okno NastavenÃ"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "Pridať súbory"
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/Vystrihnúť súbory"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "Pridať súbory"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (nesprávne UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "Nastavenia BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>Pluginy</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_Zoznam prehrávacÃch pluginov:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>Médiá</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_Zoznam bežných pluginov:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>Základné</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "_Zoznam vizualizaÄných pluginov:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>Visualizácia</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "_Zoznam efekt pluginov:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>Efekty</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_Aktuálny výstupný plugin:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"Zmena sa teraz prejavila v BMP databáze nastavenÃ, ale neprejavà sa na "
+"prehrávanà až po Äaľšiu skladbu!\n"
+"\n"
+"Máte však možnosť zastaviť a znova spustiť prehrávanie aby sa prejavila."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>Výstup</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>Vzhľad</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skiny</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Fonty</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_PrehrávaÄ:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_Playlist:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "Vyberte font hlavného okna:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Vyberte font playlistu:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Rôzne</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "ZobrazovaÅ¥ ÄÃsla skladieb v playliste"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "PoužÃvaÅ¥ vlastné kurzory"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>Myš</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>Koliesko myši</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Koliesko myši menà hlasitosť o"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "percent"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Myš posúva playlist o"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "riadkov"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>Playlist</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b><Názov súboru/b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "KonvertovaÅ¥ podtržnÃky na medzery"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "Konvertovať %20 na medzery"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>Metadáta</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "NaÄÃtaÅ¥ metadáta (tag informácie) zo zvukových súborov."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "NaÄÃtaÅ¥ metadáta z playlistov a súborov"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "NaÄÃtaÅ¥ metadáta pri pridávanà súboru do playlistu alebo pri otváranÃ"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "Pri otváranÃ"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "NaÄÃtaÅ¥ metadáta na požiadanie pri zobrazenà súboru v playliste"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "Pri zobrazenÃ"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>Prehrávanie</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "KeÄ skonÄà prehrávanie skladby, automaticky nepokraÄovaÅ¥ Äaľšou."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "NepokraÄovaÅ¥ v playliste"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "Pauza medzi skladbami"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "Pauza na"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "sekúnd"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>Zobrazenie skladby</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "Vlastný text:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"NÃZOV\n"
+"INTERPRET - NÃZOV\n"
+"INTERPRET - ALBUM - NÃZOV\n"
+"ALBUM - NÃZOV\n"
+"Vlastné"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "Zobraziť informácie o formáte názvu"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>Ekvalizér</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>Presety</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Názov preset súboru:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "PrÃpona preset súboru:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "Dostupné _Presety"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "Vybrať všetky"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "OdznaÄiÅ¥ vÅ¡etky"
+
+#~ msgid "Default skin:"
+#~ msgstr "Štandardný vzhľad:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Nepodarilo sa inicializovať gnome-vfs.\n"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Prehrať CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/5 sekúnd REW"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/5 sekúnd FFWD"
+
+#~ msgid "/Add"
+#~ msgstr "/Pridať"
+
+#~ msgid "/Playback"
+#~ msgstr "/Prehrávanie"
+
+#~ msgid "/_Options"
+#~ msgstr "/M_ožnosti"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/NepokraÄovaÅ¥ v playliste"
+
+#~ msgid "Add URL"
+#~ msgstr "Pridať URL"
+
+#~ msgid "/By extension"
+#~ msgstr "/Podľa prÃpony"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Playlist"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Zavrieť okno"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Triediť podľa názvu"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Triediť podľa názvu súboru"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Triediť podľa dátumu"
+
+#~ msgid "Play Files"
+#~ msgstr "Prehrávať súbory"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/stamp-po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/stamp-po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/stamp-po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1 @@
+timestamp
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/sv.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3937 @@
+# Swedish language translation for BMP
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# -----
+# Martin Persenius <martin at persenius.net>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-02-29 02:46+0100\n"
+"Last-Translator: Martin Persenius <martin at persenius.net>\n"
+"Language-Team: Sweden\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"NPOT-Creation-Date: 2004-02-21 19:35+0200\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD-ljudinsticksmodul"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD-spår %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(okänd)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "Enhet %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Kunde ej öppna enhet %s\n"
+"Fel: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Kunde ej läsa innehållsförteckning\n"
+"Kontrollera att CD:n är i spelaren\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"Enhet %s OK.\n"
+"Skivan har %d spår"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d dataspår)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"Total längd: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"Digitalljudläsning inte testat, eftersom skivan inte har några ljudspår.\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"Test av digitalljudläsning: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"Test av digitalljudläsning misslyckades: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Kunde ej kontrollera mappen %s\n"
+"Fel: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Fel: %s finns, men är inte en mapp"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "Mapp %s OK."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "Enhet:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_Enhet:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "Enh_et:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Spelläge:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Analog"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "Digitalljudläsning"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "Volymkontrol:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "Ingen mixer"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM-enhet"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS-mixer"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "Kontrollera enhet..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "Ta bort enhet"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "Konfiguration av CD-ljudspelare"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "Lägg till enhet"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "Enhet"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "Utiliser CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "Récupérer la liste du serveur"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "Voir la fenêtre réseau"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB-server"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD-Index:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "Använd CD-index"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD-indexserver"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Spårnamn:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "Kör över generella titlar"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "Namnformat:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD-info"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "Välj mappen där du vill spara MPEG-strömmen:"
+
+#: Input/mpg123/configure.c:344
+#, fuzzy
+msgid "MPEG Audio Plugin Configuration"
+msgstr "bmp: Konfiguration av MPEG-ljudinsticksmodul"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "Upplösning:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 bitar"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 bitar"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Kanaler:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "Stereo (om tillgängligt)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Mono"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "Ner sampla:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "Avkodare:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "Automatiskt upptäckande"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow!-optimerad avkodare!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX-optimerad avkodare"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU-avkodare"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "Options"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "Innehåll"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "Ãndelse"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "Ãndelse och innehÃ¥ll"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "Avkodare"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "Buffrande:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "Buffertstorlek (kB):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "Förbuffert (procent):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "Använd en proxy"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "Värd:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "Port:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "Använd autentisering"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Användarnamn:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "Lösenord:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "Spara ström till disk:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "Spara ström till disk"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "Sökväg:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "Bläddra"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "Aktivera UDP-kanal för Icecast-metadata"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "Strömmar"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3-markering:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "Inaktivera ID3V3-markeringar"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr ""
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3-format:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Titel"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Kunde ej skriva till fil: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Kunde ej skriva markering!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Kunde ej öppna fil: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "Fil-info"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "Ok"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Kunde ej kapa fil: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Kunde ej ta bort markering!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "Ingen markering att ta bort!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "Stereo"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Sammansatt stereo"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "Dubbel kanal"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "Enkel kanal"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d kbit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "Ingen"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "Nej"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Ja"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Namn:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG-info "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG-nivå:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "Bit-hastighet:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "Uppsamlingstakt:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "Rutor:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "Filstorlek:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Felskydd:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "Copyright:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Orginal:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Betoning:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3-markering "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Titel:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "Artist:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "Album:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Ã
rtal:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "Spårnummer:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "Genre"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr ""
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"Variabel,\n"
+"g.s. bit-hastighet: %d kbit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Fel"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "KOLLAR UPP %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Kunde ej hitta värd %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "ANSLUTER TILL %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Kunde ej ansluta till värd %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "ANSLUTEN: VÃNTAR PÃ
SVAR"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Kunde ej ansluta till värd %s\n"
+"Servern svarade: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "FÃR-BUFFRAR: %dKO/%dKO"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Klassisk rock"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dans"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metall"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "Ãvrigt"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industriell"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternativt"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Dödsmetall"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Skämt"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Bakgrundsljud"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vokal"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Klassiskt"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumentell"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Spelmusik"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Ljudklipp"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospell"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Oljud"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "Alternativ rock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditativ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumentell pop"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumentell rock"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Etnisk musik"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gotisk"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industriell"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Elektronisk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Komedi"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Kult"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsterrap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Topp 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Kristen rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungel"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Ursprungsamerikansk"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelisk"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Stammusik"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musikal"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "HÃ¥rd rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folkdans"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folkdans/Rock"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "Nationalfolkdans"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Ã
terupplivning"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Keltisk"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gotisk rock"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressiv rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychadelisk rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symfonisk rock"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Lugn Rock"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Storband"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Korus"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Akustisk"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humor"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Tal"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Rumsmusik"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonat"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symfoni"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porr groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satir"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Klubb"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folkvisa"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Kraftballad"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhytmisk Soul"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duett"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punkrock"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Trummsolo"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Trumma & Bas"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indisk"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Kristen Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Samtida kristen"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Kristen rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "SynthPop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "Om MPEG-ljudinsticksmodulen"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123-avkodarmotor av Michael Hipp <mh at mpg123.de>\n"
+"Insticksmodul av XMMS-laget"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG-ljudinsticksmodul"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "Välj mappen där du vill spara OGG-Vorbis-strömmarna:"
+
+#: Input/vorbis/configure.c:275
+#, fuzzy
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "bmp: Konfiguration av OGG-Vorbis-ljudinsticksmodul"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "OGG-Vorbis-markering:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "Titelformat:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain-inställningar:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "Aktivera klippskydd"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "Aktivera ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ReplayGain-typ:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "använd spÃ¥rets Ãkning/Topp"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "använd albumets Ãkning/Topp"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "Aktivera 6dB-ökning + Hård begränsning"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"Ett fel påträffades:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Fel!"
+
+#: Input/vorbis/fileinfo.c:242
+#, fuzzy
+msgid "Failed to modify tag (open)"
+msgstr "Kunde ej modifiera markering"
+
+#: Input/vorbis/fileinfo.c:295
+#, fuzzy
+msgid "Failed to modify tag (close)"
+msgstr "Kunde ej modifiera markering"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Kunde ej modifiera markering"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " OGG-Vorbis-markering "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "Datum:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "Beskrivning:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "Plats:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "Version:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC-nummer:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "Organisation:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " OGG-Vorbis-ReplayGain "
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "Spårökning:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "Spårtopp:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "Albumsökning:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "Albumsstopp:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " OGG-Vorbis-info "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Längd:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d kbit/s (nominal)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d bytes"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "OGG-Vorbis-ljudinsticksmodul"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Om OGG-Vorbis-ljudinsticksmodul"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"OGG-Vorbis-insticksmodul av Xiph.org-stiftelsen\n"
+"\n"
+"Orginal kod\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Tillägg från\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Besök Xiph.org-stiftelsen på http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV-ljudinsticksmodul"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS-uppspelningsinsticksmodul"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "Om OSS-drivrutinen"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS-drivrutin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "Förinställning (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "Förinställt"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "Konfiguration av OSS-drivrutin"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "Ljudenhet:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "Använd alternativ enhet:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "Mixerenhet:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "Enheter:"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "Buffertstorlek (ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "Buffrande"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "Mixerinställningar:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "Master-volymkontrol och inte PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "Mixer"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "Om ESounD-insticksmodulen"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD-insticksmodul\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "Konfiguration av ESD-uppspelningsinsticksmodul"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "Använd fjärrvärd"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "Volym kontrollerar OSS-mixer"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "Server"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound-uppspelningsinsticksmodul"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "Om ALSA-drivrutinen"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA-drivrutin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Auteur: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, fuzzy, c-format
+msgid "ALSA %s output plugin"
+msgstr "Insticksmodul för ALSA-uppspelning %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr ""
+
+#: Output/alsa/configure.c:217
+#, fuzzy, c-format
+msgid "Default PCM device (%s)"
+msgstr "Förinställning (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "Konfiguration av ALSA-drivrutin"
+
+#: Output/alsa/configure.c:308
+#, fuzzy
+msgid "Mixer:"
+msgstr "Mixer"
+
+#: Output/alsa/configure.c:316
+#, fuzzy
+msgid "Use software volume control"
+msgstr "Volymkontrol:"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "Mixerkort:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "Enhetsinställningar"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "Avancerade inställningar:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Bufferttid (ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "Tidsperiod (ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Bufferttid (ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap-läge"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "Avancerade inställningar"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/Växla dekorationer"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/Stäng"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "Blur scope"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur scope: Färgval"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "Val:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "Artist"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "Album"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "Genre"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Filnamn"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "Sökväg"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "Filändelse"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Spårnamn"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "Spårnummer"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "Datum"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Ã
r"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "Kommentar"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr ""
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+
+#: beep/about.c:48
+#, fuzzy
+msgid "Developers:"
+msgstr "Avkodare:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr ""
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr ""
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr ""
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr ""
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr ""
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr ""
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr ""
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr ""
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr ""
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr ""
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr ""
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr ""
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr ""
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr ""
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr ""
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr ""
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr ""
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr ""
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+#, fuzzy
+msgid "Chinese:"
+msgstr "Kanaler:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr ""
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+#, fuzzy
+msgid "Dutch:"
+msgstr "/Koppla loss"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr ""
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr ""
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr ""
+
+#: beep/about.c:114
+#, fuzzy
+msgid "German:"
+msgstr "Genre"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr ""
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "Genre"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+#, fuzzy
+msgid "Greek:"
+msgstr "Genre"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr ""
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr ""
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr ""
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr ""
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr ""
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr ""
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr ""
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr ""
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr ""
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr ""
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr ""
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr ""
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr ""
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr ""
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr ""
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr ""
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Organisation:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr ""
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "Om BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr ""
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr ""
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3 KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/Ladda"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/Ladda/inställning"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/Ladda/Ladda automatiskt inställning"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/Ladda/förinställning"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/Ladda/Noll"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/Ladda/från fil"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/Ladda/från WinAMP EQF-fil"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/Importera"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/Importera/WinAMP-inställningar"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/Spara"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/Spara/inställning"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/Spara/ladda automatiskt inställning"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/Spara/förinställning"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/Spara/till fil"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "Sauver/dans un fichier EQF de Winamp"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/Radera"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/Rader/inställning"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/Radera/automatiskt laddat preset"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP Equalizer"
+
+#: beep/equalizer.c:1366
+#, fuzzy
+msgid "Preset"
+msgstr "Förinställningar"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "Förinställningar"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "Ladda inställningar"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "Ladda automatiskt inställningar"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "Ladda equalizer-inställningar"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "Spara inställningar"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "Spara automatisk inställning"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "Spara qualizer-inställningar"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "Radera förinställningar"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "Radera automatisk inställning"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: valet `%s' är tvetydigt\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s valet `--%s' accepterar inte ett argument\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: valet `%c%s' accepterar inte ett argument\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: valet `%s' behöver ett argument\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: okänt val `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: okänt val `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: otillåtet val -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: inkorrekt val -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: val kräver ett argument -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: valet `-W %s' är tvetydigt\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: valet `-W %s' tillåter inte ett argument\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "Vissa inte denna varning igen"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr ""
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Filnamn"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Filnamn:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Ingen insticksmodul kände igen den här filen"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "Insticksmodul: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Kunde ej skapa loggfil (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Kunde ej skapa mapp (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"Användning: beep-media-player [val] [filer] ...\n"
+"\n"
+"Val:\n"
+"--------\n"
+
+#: beep/main.c:630
+#, fuzzy
+msgid "Display this text and exit"
+msgstr "Visa den här texten och avsluta."
+
+#: beep/main.c:633
+#, fuzzy
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "Välj XMMS-session (Förinställt: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "Hoppa båket i spellista"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "Börja spela nuvarande spellista"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "Pausa nuvarande sång"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "Stoppa nuvarande sång"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "Pausa om spelandes, spela annars"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "Hoppas framåt i spellistan"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Rensa inte spellistan"
+
+#: beep/main.c:657
+#, fuzzy
+msgid "Show the main window"
+msgstr "Visa huvudfönstret."
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr ""
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "Tidigare sessions-ID"
+
+#: beep/main.c:666
+#, fuzzy
+msgid "Print version number and exit\n"
+msgstr "Skriv versionsnummer och avsluta."
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"Mottog SIGSEGV\n"
+"\n"
+"Det är möjligt att detta är en bugg i BMP. Skicka en epost till oss på \n"
+"beepmp-devel at lists.sourceforge.net om du inte vet varför det hände.\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"Tyvärr, din GTK+ version (%d.%d.%d) fungerar inte med BMP.\n"
+"Var god använd GTK+ %s eller nyare.\n"
+
+#: beep/main.c:910
+#, fuzzy
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"Tyvärr, trådar stöds inte på din plattform.\n"
+"\n"
+"Om du är på ett libc5-baserat Linux-system och installerat Glib och GTK+ \n"
+"innan du installerade LinuxThreads måste du kompilera om Glib och GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: Kunde ej öppna för visning, avslutar."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/Visa spårdetaljer"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/Scrolla automatiskt till sångnamn"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Visualiseringsläge"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Visualiseringsläge/Analyserare"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Visualiseringsläge/Scope"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Visualiseringsläge/Av"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Analyseringsläge"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Analyseringsläge/Normal"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Analyseringsläge/Eld"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Analyseringsläge/Vertikala linjer"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Analyseringsläge/Linjer"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Analyseringsläge/Staplar"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Analyseringsläge/Toppar"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Scopeläge"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Scopeläge/Punkt"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Scopeläge/Linje"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Scopeläge/Solid"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/Fönsterskuggningsläge"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/Fönsterskuggningsläge/Normal"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/Fönsterskuggningsläge/Smidig"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/Uppdateringsfrekvens"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/Uppdateringsfrekvens/Max (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/Uppdateringsfrekvens/Hög (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/Uppdateringsfrekvens/Mediuml (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/Uppdateringsfrekvens/LÃ¥g (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/Analyserarras"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/Analyserarras/LÃ¥ngsamast"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/Analyserarras/LÃ¥ngsam"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/Analyserarras/Medium"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/Analyserarras/Snabb"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/Analyserarras/Snabbast"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/Toppras"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/Toppras/LÃ¥ngsamast"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/Toppras/LÃ¥ngsam"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/Toppras/Medium"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/Toppras/Snabb"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/Toppras/Snabbast"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/Repetera"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Blanda"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/Spela"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/Paus"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/Stopp"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/Föregående"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/Nästa"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/Hoppa till spellistans start"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/Hoppa till fil"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/Hoppa till tiden"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/Inställningar"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr ""
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/Om BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_Avsluta"
+
+#: beep/mainwin.c:380
+#, fuzzy
+msgid "/Files..."
+msgstr "/Lägg till filer..."
+
+#: beep/mainwin.c:387
+#, fuzzy
+msgid "/Internet location..."
+msgstr "/Lägg till mappar..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/Visa spellistredigeraren"
+
+#: beep/mainwin.c:403
+#, fuzzy
+msgid "/Show Equalizer"
+msgstr "BMP Equalizer"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Tid förfluten"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/Tid kvarvarande"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Alltid högst upp"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr ""
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr ""
+
+#: beep/mainwin.c:418
+#, fuzzy
+msgid "/Roll up Playlist Editor"
+msgstr "/Fokusera spellistsredigeraren"
+
+#: beep/mainwin.c:420
+#, fuzzy
+msgid "/Roll up Equalizer"
+msgstr "/Konfigurera equalizer"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+#, fuzzy
+msgid "Jump to Time"
+msgstr "/Hoppa till tiden"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "minuter:sekunder"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Spårlängd:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "/_Lägg i väntelista"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "Kö"
+
+#: beep/mainwin.c:1618
+#, fuzzy
+msgid "Jump to Track"
+msgstr "bmp: Hoppa till spår"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "Filter:"
+
+#: beep/mainwin.c:1884
+#, fuzzy
+msgid "Add Folders"
+msgstr "/Lägg till filer..."
+
+#: beep/mainwin.c:1935
+#, fuzzy
+msgid "Add Internet Address"
+msgstr "/Lägg till mappar..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "POSITION: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "VOLYM: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "BALANS: %d%% VÃNSTER"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "BALANS: CENTRUM"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "BALANS: %d%% HÃGER"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "VALMENY"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "INAKTIVERA ALLTID ÃVERST (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "AKTIVERA ALLTID ÃVERST (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "INAKTIVERA ALLTID ÃVERST"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "AKTIVERA ALLTID ÃVERST"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "FIL-INFO BOX"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr ""
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "VISUALISERINGSMENY"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+
+#: beep/mainwin.c:2627
+#, fuzzy
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"Kunde ej öppna ljud. Var god kontrollera att:\n"
+"\n"
+"1. Du har den korrekt uppspelningsinsticksmodulen vald.\n"
+"2. Inga andra program blokerar ljudkortet.\n"
+"3. Ditt kort är korrekt konfigurerat."
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/Ta bort valda"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+#, fuzzy
+msgid "/Remove Unselected"
+msgstr "/Ta bort valda"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+#, fuzzy
+msgid "/Remove All"
+msgstr "/Ta bort"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/Kö-växel"
+
+#: beep/playlistwin.c:151
+#, fuzzy
+msgid "/Add CD..."
+msgstr "/Lägg till URL..."
+
+#: beep/playlistwin.c:155
+#, fuzzy
+msgid "/Add Internet Address..."
+msgstr "/Lägg till mappar..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/Lägg till filer..."
+
+#: beep/playlistwin.c:166
+#, fuzzy
+msgid "/Add Files..."
+msgstr "/Lägg till filer..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/Rensa kön"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/Radera otillgängliga filer"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Ny lista"
+
+#: beep/playlistwin.c:204
+#, fuzzy
+msgid "/Load List"
+msgstr "/Sortera l ista"
+
+#: beep/playlistwin.c:208
+#, fuzzy
+msgid "/Save List"
+msgstr "/Ny lista"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/Uppdatera synfält"
+
+#: beep/playlistwin.c:220
+#, fuzzy
+msgid "/Invert Selection"
+msgstr "/Sortera valda"
+
+#: beep/playlistwin.c:226
+#, fuzzy
+msgid "/Select None"
+msgstr "/Sortera valda"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr ""
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/Blanda lista"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/Vänd på lista"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/Sortera l ista"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/Sortera l ista/Genom titel"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/Sortera l ista/Genom filnamn"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/Sortera l ista/Genom sökväg + filnamn"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/Sortera l ista/Genom datum"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/Sortera valda"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/Sortera valda/Genom titel"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/Sortera valda/Genom filnamn"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/Sortera valda/Genom sökväg + filnamn"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/Sortera valda/Genom datum"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Fel vid skrivning av spellista \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s finns redan. Fortsätt?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Kunde ej spara spellista! Okänd filtyp för %s."
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "Ladda spellista"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "Spara spellista"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP-spellistredigerare"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+#, fuzzy
+msgid "Appearance"
+msgstr "Trance"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+#, fuzzy
+msgid "Equalizer"
+msgstr "BMP Equalizer"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+#, fuzzy
+msgid "Mouse"
+msgstr "House"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+#, fuzzy
+msgid "Playlist"
+msgstr "/Spellista"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+#, fuzzy
+msgid "Plugins"
+msgstr "Insticksmoduler"
+
+#: beep/prefswin.c:93
+#, fuzzy
+msgid "Artist"
+msgstr "Artist:"
+
+#: beep/prefswin.c:96
+#, fuzzy
+msgid "Tracknumber"
+msgstr "Spårnummer"
+
+#: beep/prefswin.c:99
+#, fuzzy
+msgid "Filepath"
+msgstr "Sökväg"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+#, fuzzy
+msgid "Enabled"
+msgstr "(aktiverad)"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+#, fuzzy
+msgid "Description"
+msgstr "Beskrivning:"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr ""
+
+#: beep/prefswin.c:1630
+#, fuzzy
+msgid "Preferences Window"
+msgstr "/Inställningar"
+
+#: beep/util.c:882
+#, fuzzy
+msgid "Add/Open Files dialog"
+msgstr "/Lägg till filer..."
+
+#: beep/util.c:940
+#, fuzzy
+msgid "Open Files"
+msgstr "/Ta borta icke valda"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr ""
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+#, fuzzy
+msgid "Add Files"
+msgstr "/Lägg till filer..."
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr ""
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (invalid UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+#, fuzzy
+msgid "BMP Preferences"
+msgstr "/Inställningar"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:147
+#, fuzzy
+msgid "_Media plugin list:"
+msgstr "Teman"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:282
+#, fuzzy
+msgid "_General plugin list:"
+msgstr "Generella insticksmoduler"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:417
+#, fuzzy
+msgid "_Visualization plugin list:"
+msgstr "Visualiseringsinsticksmoduler"
+
+#: beep/glade/prefswin.glade:514
+#, fuzzy
+msgid "<b>Visualization</b>"
+msgstr "/Visualiseringsläge"
+
+#: beep/glade/prefswin.glade:552
+#, fuzzy
+msgid "_Effect plugin list:"
+msgstr "Effektinsticksmoduler"
+
+#: beep/glade/prefswin.glade:649
+#, fuzzy
+msgid "<b>Effects</b>"
+msgstr "Förinställningar"
+
+#: beep/glade/prefswin.glade:693
+#, fuzzy
+msgid "_Current output plugin:"
+msgstr "eSound-uppspelningsinsticksmodul"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:951
+#, fuzzy
+msgid "<b>_Skin</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:1039
+#, fuzzy
+msgid "<b>_Fonts</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:1092
+#, fuzzy
+msgid "_Player:"
+msgstr "/_Spela"
+
+#: beep/glade/prefswin.glade:1131
+#, fuzzy
+msgid "_Playlist:"
+msgstr "/Spellista"
+
+#: beep/glade/prefswin.glade:1159
+#, fuzzy
+msgid "Select main player window font:"
+msgstr "Välj typsnitt för huvudfönstret:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "Välj typsnitt för spellistan:"
+
+#: beep/glade/prefswin.glade:1233
+#, fuzzy
+msgid "<b>_Miscellaneous</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:1285
+#, fuzzy
+msgid "Show track numbers in playlist"
+msgstr "Visa nummer i spellistan"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1455
+#, fuzzy
+msgid "<b>Mouse wheel</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "Mushjulet justerar volymen med (%)"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "Ladda spellista"
+
+#: beep/glade/prefswin.glade:1596
+#, fuzzy
+msgid "lines"
+msgstr "Oldies"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1751
+#, fuzzy
+msgid "<b>Filename</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:1789
+#, fuzzy
+msgid "Convert underscores to blanks"
+msgstr "Konvertera nedsatt streck till tomrum"
+
+#: beep/glade/prefswin.glade:1824
+#, fuzzy
+msgid "Convert %20 to blanks"
+msgstr "Konvertera %20 till tomrum"
+
+#: beep/glade/prefswin.glade:1864
+#, fuzzy
+msgid "<b>Metadata</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:1901
+#, fuzzy
+msgid "Load metadata (tag information) from music files."
+msgstr "Läs markeringsinformation från fil vid:"
+
+#: beep/glade/prefswin.glade:1903
+#, fuzzy
+msgid "Load metadata from playlists and files"
+msgstr "Använd metadata i spellistor"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr ""
+
+#: beep/glade/prefswin.glade:1963
+#, fuzzy
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "Läs sångtitel och längd när sång visas i spellistan"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2013
+#, fuzzy
+msgid "<b>Playback</b>"
+msgstr "/Kontroll"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+
+#: beep/glade/prefswin.glade:2052
+#, fuzzy
+msgid "Don't advance in the playlist"
+msgstr "Rensa inte spellistan"
+
+#: beep/glade/prefswin.glade:2087
+#, fuzzy
+msgid "Pause between songs"
+msgstr "Pausa mellan sånger i"
+
+#: beep/glade/prefswin.glade:2125
+#, fuzzy
+msgid "Pause for"
+msgstr "/Paus"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "sekunder"
+
+#: beep/glade/prefswin.glade:2215
+#, fuzzy
+msgid "<b>Song display</b>"
+msgstr "_Filter:"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2479
+#, fuzzy
+msgid "<b>Presets</b>"
+msgstr "Förinställningar"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "Répetoire des fichiers de pré-réglages:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "Inställningsfilsändelse:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr ""
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr ""
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr ""
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr ""
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "Aktivera SHOUT/Icecast titelströmning"
+
+#, fuzzy
+#~ msgid "Default skin:"
+#~ msgstr "Förinställning (%s)"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/Visualiserings insticksmoduler"
+
+#~ msgid "/Play CD"
+#~ msgstr "/Spela CD-ljud"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/5 sekunder bakåt"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/5 sekunder framåt"
+
+#~ msgid "/Playback"
+#~ msgstr "/Kontroll"
+
+#~ msgid "/_Options"
+#~ msgstr "/_Val"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/Visa grafisk EQ"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/Ladda om tema"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/Fortsätt ej i spellista"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/Vissa på alla skrivbord"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/Fönsterskuggningsläge"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/Fönsterskuggningsläge för spellistan"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/Fönsterskuggningsläge för equalizern"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/Dubbel storlek"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/Lätt flyttning"
+
+#~ msgid "Jump to:"
+#~ msgstr "Hoppa till:"
+
+#~ msgid "Jump"
+#~ msgstr "Hoppa"
+
+#, fuzzy
+#~ msgid "Add URL"
+#~ msgstr "Lägg till URL..."
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "INAKTIVERA DUBBEL STORLEK"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "AKTIVERA DUBBEL STORLEK"
+
+#~ msgid "/By extension"
+#~ msgstr "/Genom ändelse"
+
+#~ msgid "/Playlist"
+#~ msgstr "/Spellista"
+
+#~ msgid "/Close Window"
+#~ msgstr "/Stäng fönster"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/Sortera genom titel"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/Sortera genom filnamn"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/Sortera genom datum"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "Kunde ej radera \"%s\": %s."
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "%d av %d filer borttagna felfritt."
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "BMP: Filer raderade"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "Radera %d filer?"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "Radera: \"%s\"?"
+
+#, fuzzy
+#~ msgid "Play Files"
+#~ msgstr "bmp: Spela filer"
+
+#~ msgid "Load"
+#~ msgstr "laddning"
+
+#, fuzzy
+#~ msgid "Auto-load preset"
+#~ msgstr "/Spara/ladda automatiskt inställning"
+
+#, fuzzy
+#~ msgid "Zero"
+#~ msgstr "Retro"
+
+#, fuzzy
+#~ msgid "From file"
+#~ msgstr "/Ladda/från fil"
+
+#, fuzzy
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "/Ladda/från WinAMP EQF-fil"
+
+#, fuzzy
+#~ msgid "Import"
+#~ msgstr "/Importera"
+
+#, fuzzy
+#~ msgid "WinAMP presets"
+#~ msgstr "/Importera/WinAMP-inställningar"
+
+#, fuzzy
+#~ msgid "To file"
+#~ msgstr "/Spara/till fil"
+
+#, fuzzy
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "Sauver/dans un fichier EQF de Winamp"
+
+#, fuzzy
+#~ msgid "Configure Equalizer"
+#~ msgstr "/Konfigurera equalizer"
+
+#, fuzzy
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "Jämn titelrullning"
+
+#, fuzzy
+#~ msgid "Directory"
+#~ msgstr "Enh_et:"
+
+#, fuzzy
+#~ msgid "Directory browser"
+#~ msgstr "Répetoire des fichiers de pré-réglages:"
+
+#, fuzzy
+#~ msgid "Unplayable files - BMP"
+#~ msgstr "bmp: Ospelbara filer"
+
+#~ msgid ""
+#~ "The following files could not be played. They are either not accessible "
+#~ "or require a dedicated input plugin."
+#~ msgstr ""
+#~ "Följande filer kunde inte spelas upp. De var antingen otillgängliga eller "
+#~ "kräver en särskild insticksmodul."
+
+#, fuzzy
+#~ msgid "/Add/Directories..."
+#~ msgstr "/Lägg till mappar..."
+
+#, fuzzy
+#~ msgid "Add Directories... "
+#~ msgstr "/Lägg till mappar..."
+
+#, fuzzy
+#~ msgid "Look into sub_folders"
+#~ msgstr "Kolla i underkataloger"
+
+#, fuzzy
+#~ msgid "<b>_Filter:</b>"
+#~ msgstr "_Filter:"
+
+#, fuzzy
+#~ msgid "<b>Other options</b>"
+#~ msgstr "_Filter:"
+
+#, fuzzy
+#~ msgid "Update playlist"
+#~ msgstr "Spara spellista"
+
+#~ msgid "Delete"
+#~ msgstr "Radera"
+
+#~ msgid "Close"
+#~ msgstr "Stäng"
+
+#, fuzzy
+#~ msgid "BMP Equalizer Preferences"
+#~ msgstr "BMP Equalizer"
+
+#~ msgid ""
+#~ "If \"Auto\" is enabled on the equalizer, xmms will try to load equalizer "
+#~ "presets like this:\n"
+#~ "1: Look for a preset file in the directory of the file we are about to "
+#~ "play.\n"
+#~ "2: Look for a directory preset file in the same directory.\n"
+#~ "3: Look for a preset saved with the \"auto-load\" feature\n"
+#~ "4: Finally, try to load the \"default\" preset"
+#~ msgstr ""
+#~ "Om \"Auto\" är aktiverat i equalizern, så kommer BMP att försöka ladda "
+#~ "equalizerinställningarna så här:\n"
+#~ "1: Söka efter en inställningsfil i mappen för filen vi pratar om.\n"
+#~ " 2: Söka efter en katalogförinställningsfil i samma katalog.\n"
+#~ "3: Söka efter en förinställning m.h.a. \"auto-laddaren\".\n"
+#~ "4: Och slutligen, försöka ladda urpsrungsinställningen."
+
+#, fuzzy
+#~ msgid "/Jump to Track"
+#~ msgstr "bmp: Hoppa till spår"
+
+#~ msgid "/Save as..."
+#~ msgstr "/Spara som..."
+
+#, fuzzy
+#~ msgid "A_dd all"
+#~ msgstr "Lägg till alla"
+
+#~ msgid "Play"
+#~ msgstr "Spela"
+
+#, fuzzy
+#~ msgid "<b>_Playlist font:</b>"
+#~ msgstr "Police de la liste d'écoute:"
+
+#, fuzzy
+#~ msgid "<b>_Main window font:</b>"
+#~ msgstr "Police de la fenêtre principale:"
+
+#~ msgid "User defined:"
+#~ msgstr "Användarbestämd:"
+
+#~ msgid "Mixer device"
+#~ msgstr "Mixerenhet"
+
+#, fuzzy
+#~ msgid "Settings"
+#~ msgstr "Mixerinställningar:"
+
+#, fuzzy
+#~ msgid "BMP: Add Directories... "
+#~ msgstr "/Lägg till mappar..."
+
+#~ msgid "Import equalizer presets"
+#~ msgstr "Importera inställningar för equalizern"
+
+#~ msgid "Version: %s"
+#~ msgstr "Version: %s"
+
+#~ msgid "/Skin Browser"
+#~ msgstr "/Bläddra bland teman"
+
+#~ msgid "Plugin Name"
+#~ msgstr "Insticksmodulsnamn"
+
+#~ msgid "Enable plugin"
+#~ msgstr "Aktivera insticksmodul"
+
+#~ msgid "Output Plugin"
+#~ msgstr "Uppspelningsinsticksmoduler"
+
+#~ msgid "Effects Plugins"
+#~ msgstr "Effektinsticksmoduler"
+
+#~ msgid "Configure"
+#~ msgstr "Konfigurera"
+
+#~ msgid "About"
+#~ msgstr "Om"
+
+#~ msgid "General Plugins"
+#~ msgstr "Generella insticksmoduler"
+
+#~ msgid "Visualization Plugins"
+#~ msgstr "Visualiseringsinsticksmoduler"
+
+#, fuzzy
+#~ msgid "Read song information only when starting to play"
+#~ msgstr "Läs sång titel och längd endast när sång börjar spelas"
+
+#~ msgid "Demand"
+#~ msgstr "behov"
+
+#, fuzzy
+#~ msgid "Read song information as soon as the song is loaded to the playlist"
+#~ msgstr "Läs sångtitel och längd så snart som sång laddes i spellistan"
+
+#~ msgid "Warn about non-playable files"
+#~ msgstr "Varna om ej-spelbara filer"
+
+#~ msgid "Sort \"Jump to file\" alphabetically"
+#~ msgstr "Sortera \"hoppa till fil\" alfabetiskt"
+
+#~ msgid "Allow multiple instances"
+#~ msgstr "Tillåt flera instanser"
+
+#, fuzzy
+#~ msgid "Show window decorations"
+#~ msgstr "Visa fönsterhanterarens dekorationer"
+
+#~ msgid "Always show clutterbar"
+#~ msgstr "Använd alltid snabbtillgänglighetsbård"
+
+#, fuzzy
+#~ msgid ""
+#~ "The \"clutterbar\" is the row of buttons at the left side of the main "
+#~ "window"
+#~ msgstr ""
+#~ "\"Snabbtillgänglighetsbården\" är raden med knappar på vänster sida om "
+#~ "huvudfönstret"
+
+#~ msgid "Save window positions"
+#~ msgstr "Spara fönstrerpositioner"
+
+#~ msgid "Dim titlebar when inactive"
+#~ msgstr "Dimma titelraden vid inaktivtet"
+
+#~ msgid "Equalizer doublesize linked"
+#~ msgstr "Equalizer dubbel storlek länkad"
+
+#~ msgid "Use '\\' as a directory delimiter"
+#~ msgstr "Använd '\\' som mappavgränsare"
+
+#~ msgid "pixels"
+#~ msgstr "pixlar"
+
+#, fuzzy
+#~ msgid "%"
+#~ msgstr "%d"
+
+#~ msgid "Audio I/O Plugins"
+#~ msgstr "Ljud I/O-insticksmoduler"
+
+#~ msgid "Fonts"
+#~ msgstr "Typsnitt"
+
+#~ msgid "BMP Skin Browser"
+#~ msgstr "BMP Tema bläddrare"
+
+#~ msgid "Select random skin on play"
+#~ msgstr "Välj slumpmässigt tema vid uppspelning"
+
+#~ msgid "/E_xpand"
+#~ msgstr "U_tvidga"
+
+#~ msgid "/_Collapse"
+#~ msgstr "/_Stäng"
+
+#~ msgid "/Rename"
+#~ msgstr "/Byt namn"
+
+#~ msgid "/Collapse Tree"
+#~ msgstr "/Dra ihop träd"
+
+#~ msgid "/New Playlist"
+#~ msgstr "/Ny spellista"
+
+#~ msgid "Searching folders..."
+#~ msgstr "Söker i kataloger..."
+
+#~ msgid "bmp: Add Files..."
+#~ msgstr "bmp: Lägg till filer..."
+
+#~ msgid "bmp: Configure Equalizer"
+#~ msgstr "bmp: Konfigurera equalizer"
+
+#~ msgid "bmp: Jump to time"
+#~ msgstr "bmp: Hoppa till tiden"
+
+#~ msgid "Cannot play CD"
+#~ msgstr "Kan ej spela CD"
+
+#~ msgid ""
+#~ "The inserted CD is not an Audio CD.\n"
+#~ "Unable to start playback."
+#~ msgstr ""
+#~ "Den insatta CD:n är inte en ljud-CD.\n"
+#~ "Kan ej starta uppspelning."
+
+#~ msgid "Warning"
+#~ msgstr "Varning"
+
+#~ msgid ""
+#~ "Realtime priority is a way for BMP to get a higher\n"
+#~ "priority for CPU time. This might give less \"skips\".\n"
+#~ "\n"
+#~ "This requires that BMP is run with root privileges and\n"
+#~ "may, although it's very unusal, lock up your computer.\n"
+#~ "Running BMP with root privilegies might also have\n"
+#~ "security implications.\n"
+#~ "\n"
+#~ "Using this feature is not encouraged.\n"
+#~ "To activate this you need to restart BMP."
+#~ msgstr ""
+#~ "Att sätta prioriteringen till omedelbar är ett sätt för BMP\n"
+#~ "att få högre prioritet om CPU-tiden. Det här kan leda till\n"
+#~ "färre hack.\n"
+#~ "\n"
+#~ "Detta kräver att BMP körs med root-privilegier och\n"
+#~ "kan, om än väldigt ovanligt, låsa din dator.\n"
+#~ "Att köra BMP med root-privilegier kan också ha\n"
+#~ "säkerhetsimplikationer.\n"
+#~ "\n"
+#~ "Användning av detta är inte att rekommendera.\n"
+#~ "För att aktivera den här finessen måste du starta om BMP."
+
+#~ msgid "Transparent playlist window"
+#~ msgstr "Genomskinligt spellistsfönster"
+
+#~ msgid "Use realtime priority when available"
+#~ msgstr "Använd omedelbar prioritet om tillgängligt"
+
+#~ msgid "Run BMP with higher priority (not recomended)"
+#~ msgstr "Kör BMP med högre prioritet (ej rekommenderat)"
+
+#~ msgid "Snap windows at"
+#~ msgstr "Fäst fönstren vid"
+
+#~ msgid "bmp: Preferences and Settings"
+#~ msgstr "bmp: Preferenser och inställningar"
+
+#~ msgid "(none)"
+#~ msgstr "(ingen)"
+
+#~ msgid "bmp: Add Url..."
+#~ msgstr "bmp: Lägg till URL..."
+
+#~ msgid "bmp: Load files"
+#~ msgstr "bmp: Ladda filer"
+
+#~ msgid "bmp"
+#~ msgstr "bmp"
+
+#~ msgid "Unable to write playlist!"
+#~ msgstr "Kunde ej skriva spellista!"
+
+#~ msgid "bmp: Error: File exists!"
+#~ msgstr "bmp: Fel: Filen finns redan!"
+
+#~ msgid "Overwrite"
+#~ msgstr "Skriv över"
+
+#~ msgid "Unknown filetype for %s"
+#~ msgstr "%s är av okänd filtyp"
+
+#~ msgid "Save options"
+#~ msgstr "Spara val"
+
+#~ msgid "Determine file type:"
+#~ msgstr "Bestäm filtyp:"
+
+#~ msgid "bmp: Error: Delete files?"
+#~ msgstr "bmp: Fel: Radera filer?"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/uk.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3446 @@
+# Translation of bmp.pot to Ukrainian for Beep Media Player.
+# Copyright (C) 2005 Mykola Lynnyk<definer at users.sf.net>
+# ÐеÑеклад здÑйÑнено на оÑÐ½Ð¾Ð²Ñ Ð¿ÐµÑÐµÐºÐ»Ð°Ð´Ñ XMMS
+# ÐмиÑÑа ÐовалÑова
+# Based on XMMS translation by Dmytro Koval'ov <kov at tokyo.email.ne.jp>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-07-28 18:19+0400\n"
+"Last-Translator: Mykola Lynnyk<definer at users.sf.net>\n"
+"Language-Team: Ukrainian <linux at linux.org.ua>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿ÑдÑÑимки аÑдÑо компакÑ-диÑкÑв"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD аÑдÑо доÑÑжка %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(невÑдомо)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "ÐÑиÑÑÑÑй %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"Ðе Ð¼Ð¾Ð¶Ñ Ð²ÑдкÑиÑи пÑиÑÑÑÑй %s\n"
+"Ðомилка: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"Ðе Ð¼Ð¾Ð¶Ñ Ð¿ÑоÑиÑаÑи \"Ðглавление\"\n"
+"Ðоже диÑк не вÑÑавлений в пÑивÑд?\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"ÐÑивÑд %s: ÐÐ.\n"
+"Ðа диÑÐºÑ %d доÑÑжок"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d доÑÑжок з даними)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"ÐагалÑна довжина: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr ""
+"ЦиÑÑове зÑиÑÑÐ²Ð°Ð½Ð½Ñ Ð°ÑдÑо не ÑеÑÑовано, оÑкÑлÑки на диÑÐºÑ Ð½ÐµÐ¼Ð° аÑдÑодоÑÑжок\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"ТеÑÑÑÐ²Ð°Ð½Ð½Ñ ÑиÑÑового зÑиÑÑваннÑ: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"ТеÑÑÑÐ²Ð°Ð½Ð½Ñ ÑиÑÑового зÑиÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"Ðе Ð¼Ð¾Ð¶Ñ Ð¿ÐµÑевÑÑиÑи каÑалог %s\n"
+"Ðомилка: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "Ðомилка: %s ÑÑнÑÑ, але не каÑалог"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ÐаÑалог %s в поÑÑдкÑ.."
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "ÐÑиÑÑÑÑй:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "_ÐÑиÑÑÑÑй:"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "_ÐаÑалог:"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "Режим пÑогÑаваннÑ:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "Ðналоговий"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "ЦиÑÑове зÑиÑÑÐ²Ð°Ð½Ð½Ñ Ð°ÑдÑо"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "ÐеÑÑÐ²Ð°Ð½Ð½Ñ Ð³ÑÑнÑÑÑÑ:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "ÐÐµÐ¼Ð°Ñ Ð¼ÑкÑеÑа"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "ÐомпакÑ-диÑк"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "ÐÑкÑÐµÑ OSS"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "ÐеÑевÑÑиÑи пÑиÑÑÑÑй..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "ÐÑибÑаÑи пÑиÑÑÑÑй"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "ÐонÑÑгÑÑаÑÑÑ Ð¿ÑогÑаваÑа компакÑ-диÑкÑв"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "ÐодаÑи пÑиÑÑÑÑй"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "ÐÑиÑÑÑÑй"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "ÐикоÑиÑÑовÑваÑи CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "ÐÑÑимаÑи ÑпиÑок ÑеÑвеÑÑв"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "ÐоказаÑи вÑкно меÑежÑ"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CеÑÐ²ÐµÑ CDDB :"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "ÐÐ½Ð´ÐµÐºÑ CD:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "ÐикоÑиÑÑовÑваÑи ÑÐ½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ-диÑкÑв"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "СеÑÐ²ÐµÑ Ð¸Ð½Ð´ÐµÐºÑов CD:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "Ðазви доÑÑжок:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "ÐÐ°Ñ Ð¿ÐµÑÐµÐ²Ð°Ð³Ñ Ð½Ð°Ð´ загалÑними заголовками"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "ФоÑÐ¼Ð°Ñ Ð½Ð°Ð·Ð²Ð¸:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "ÐнÑоÑмаÑÑÑ Ð¿Ñо компакÑ"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "ÐибеÑÑÑÑ Ð´Ð¸ÑекÑоÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ÑокÑв MPEG:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "ÐмÑна налаÑÑÑÐ²Ð°Ð½Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑдÑÑимки ÑоÑмаÑÑ MPEG"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "РоздÑлÑнÑÑÑÑ:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 бÑÑ"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 бÑÑ"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "Ðанали:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "СÑеÑео (ÑкÑо наÑвне)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "Ðоно"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "ÐменÑиÑи ÑаÑÑоÑÑ ÑакÑÑваннÑ:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 кÐÑ)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 кÐÑ)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 кÐÑ)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "ÐекодеÑ:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "ÐвÑомаÑиÑне визнаÑеннÑ"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "ÐпÑимÑзований Ð´ÐµÐºÐ¾Ð´ÐµÑ 3Dnow!"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "ÐпÑимÑзований Ð´ÐµÐºÐ¾Ð´ÐµÑ MMX"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "ÐÐµÐºÐ¾Ð´ÐµÑ FPU"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "ÐаÑамеÑÑи"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ÐизнаÑаÑи Ñип по вмÑÑÑÑ"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "ÐизнаÑаÑи Ñип по ÑозÑиÑеннÑ"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "ÐизнаÑаÑи Ñип по ÑозÑиÑÐµÐ½Ð½Ñ Ñ Ð²Ð¼ÑÑÑÑ"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "ÐекодÑваннÑ"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ÐÑÑеÑ:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "РозмÑÑ Ð±ÑÑеÑа (кбайÑ):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "ÐопеÑÐµÐ´Ð½Ñ Ð±ÑÑеÑÑÐ²Ð°Ð½Ð½Ñ (вÑдÑоÑкÑв):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "ÐÑокÑÑ:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "ÐоÑиÑÑÑваÑиÑÑ Ð¿ÑокÑÑ"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "ХоÑÑ:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "ÐоÑÑ:"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "ÐикоÑиÑÑовÑваÑи авÑенÑикаÑÑÑ"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "Ðм'Ñ ÐºÐ¾ÑиÑÑÑваÑа:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "ÐаÑолÑ:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "ÐапиÑаÑи поÑÑк на диÑк:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "ÐапиÑаÑи поÑÑк на диÑк:"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "ÐаÑÑÑÑÑ:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "ÐеÑеглÑнÑÑи"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "ÐмикнÑÑи поÑÑк заголовкÑв SHOUT/Icecast"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "ÐоÑÑк"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3-Ñеги:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ÐабоÑониÑи Ñеги ID3V2"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr ""
+"ÐеÑеÑвоÑÑваÑи ID3-Ñеги (назви пÑÑÐµÐ½Ñ ÑоÑо) з локалÑного кодÑÐ²Ð°Ð½Ð½Ñ Ð² ЮнÑкод"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ÐодÑÐ²Ð°Ð½Ð½Ñ ID3-ÑегÑв:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ФоÑÐ¼Ð°Ñ ID3-ÑегÑ:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "Ðаголовок"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð°Ð¿Ð¸ÑаÑи в Ñайл: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð°Ð¿Ð¸ÑаÑи Ñег!"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"Ðе Ð¼Ð¾Ð¶Ñ Ð²ÑдкÑиÑи Ñайл: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "ÐнÑоÑмаÑÑÑ Ð¿Ñо Ñайл"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "ÐÐ"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"Ðеможливо обÑÑзаÑи Ñайл: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ ÑÑеÑÑи Ñег!"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "ÐÐµÐ¼Ð°Ñ ÑÐµÐ³Ñ Ð´Ð»Ñ ÑÑиÑаннÑ!"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "СÑеÑео"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "Ðб'Ñднане ÑÑеÑео"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "ÐодвÑйний канал"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "ÐдинаÑний канал"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d кÐÑÑ/Ñ"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld ÐÑ"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "ÐÑÑого"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 мÑ"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "ÐÑ"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "Так"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "Ðм'Ñ:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " ÐнÑоÑмаÑÑÑ MPEG: "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG ÑÑвенÑ:"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ÐÑÑова ÑаÑÑоÑа:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "ЧаÑÑоÑа:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "ÐадÑÑв:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "РозмÑÑ ÑайлÑ:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "ÐаÑ
иÑÑ Ð²Ñд помилок:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "ÐвÑоÑÑÑке пÑаво:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "ÐÑигÑналÑний:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "ÐиÑазний:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3-Ñег "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "Ðазва:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "ÐиконавеÑÑ:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "ÐлÑбом:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "ÐоменÑаÑ:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "Ð Ñк:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾ÑÑжки:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "СÑилÑ:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "ÐопÑÑваÑи Ñеги алÑбомÑ"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "ÐÑÑавиÑи Ñеги алÑбомÑ"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"ÐмÑнна,\n"
+"CеÑÐµÐ´Ð½Ñ Ð±ÑÑова ÑаÑÑоÑа:: %d кб/Ñ"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu байÑ"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "Ðомилка"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "ШУÐÐЮ %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð½Ð°Ð¹Ñи Ñ
оÑÑ %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "Ð'ÐÐÐУЮСЬ Ð %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð¿Ñд'ÑднаÑиÑÑ Ð´Ð¾ Ñ
оÑÑÑ %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "ÐÐ'ÐÐÐÐÐÐ: ЧÐÐÐЮ ÐÐ ÐÐÐÐÐÐÐÐЬ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"Ðе Ð¼Ð¾Ð¶Ñ Ð¿ÑдклÑÑиÑиÑÑ Ð´Ð¾ Ñ
оÑÑа %s\n"
+"СеÑÐ²ÐµÑ Ð¿Ð¾Ð²Ñдомив: %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "ÐÐ Ð-ÐУФÐÐ : %dÐб/%dÐб"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "ÐлÑз"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "ÐлаÑиÑний Ñок"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "ÐанÑÑÑ"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "ТанÑÑвалÑна"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "ÐиÑко"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Фанк"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "ÐÑанж"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Ð¥Ñп-Хоп"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Ðжаз"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "ÐеÑал"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "ÐÑÑ Ðйдж"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "РеÑÑо"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "ÐнÑÑ"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Ðоп"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "РиÑм-н-блÑз"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Реп"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "РеÒÒÑ"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Рок"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "ТеÑ
но"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "ÐндÑÑÑÑÑалÑний"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "ÐлÑÑеÑнаÑивна"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ска"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Ðез-меÑал"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "ÐвÑкова доÑÑжка"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "ÐвÑо-ÑеÑ
но"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "ТÑÑп-Хоп"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Ðокал"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Ðжаз+Фанк"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Ф'Ñжн"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "ТÑанÑ"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "ÐлаÑиÑна"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "ÐнÑÑÑÑменÑалÑна"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "ÐиÑлоÑа"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "ÐÑм"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "ÐÑа"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "ÐвÑковий клÑп"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "ÐÑалм"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "ШÑм"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "ÐлÑÑеÑнаÑивний Ñок"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "ÐаÑ"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "ÐÑÑа"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Ðанк"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "ÐоÑмÑÑна"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "ÐедиÑаÑÑÑ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "ÐнÑÑÑÑменÑалÑний поп"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "ÐнÑÑÑÑменÑалÑний Ñок"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "ÐÑнÑÑна"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "ÐоÑиÑна"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "ЧоÑна Ñ
вилÑ"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "ТеÑ
но-ÑндÑÑÑÑÑалÑна"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "ÐлекÑÑонна"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Ðоп-Ñолк"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "ÐвÑоданÑ"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "ÐÑÑÑ"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "ÐÑвденний Ñок"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "ÐомедÑйна"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "ÐÑлÑÑова"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "ЧоÑний Ñеп"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "40 найкÑаÑиÑ
"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Ð¥ÑиÑÑиÑнÑÑкий Ñеп"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Ðоп/Фанк"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Ðжангл"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "ÐмеÑиканÑÑка абоÑигенÑÑка"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "ÐабаÑе"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "Ðова Ñ
вилÑ"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "ÐÑиÑ
оделÑÑна"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Рейв"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "ÐмпÑовÑзаÑÑÑ"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "ÐнонÑ"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "ÐлемÑнна"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "ÐиÑлоÑний панк"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "ÐиÑлоÑний джаз"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "ÐолÑка"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "РеÑÑо"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "ÐÑзиÑна"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Рок-н-Ñол"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "ТÑжкий Ñок"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Фолк"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Фолк/Рок"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "ÐаÑÑоналÑний Ñолк"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "СвÑнг"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Швидкий ÑÑÑжн"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "ÐÑбоп"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "ÐаÑиноамеÑиканÑÑка"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "ÐÑдÑодженнÑ"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "ÐелÑÑÑÑка"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "ÐлакиÑна ÑÑава"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "ÐвангаÑд"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "ÐоÑиÑний Ñок"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "ÐÑогÑеÑивний Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "ÐÑиÑ
оделÑÑний Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "СимÑонÑÑний Ñок"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "ÐовÑлÑний Ñок"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "ÐÑÒ-бенд"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "ХоÑ"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Ðегка"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "ÐкÑÑÑиÑна"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "ÐÑмоÑ"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "ÐÑомова"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "ШанÑон"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "ÐпеÑа"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "ÐамеÑна мÑзика"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "СонаÑа"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "СимÑонÑÑ"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "ÐÑима"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "ÐоÑн гÑÑв"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "СаÑиÑа"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "ÐовÑлÑний джем"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "ÐлÑб"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "ТанÒо"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Самба"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "ФолÑклоÑ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ðалада"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "ÐоÑÑжна балада"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "РиÑмÑÑний ÑоÑл"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "ÐÑлÑний ÑÑилÑ"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "ÐÑеÑ"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Ðанк-Ñок"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Соло на ÑдаÑниÑ
"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "Ðкапелла"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "ÐвÑо-дÑм"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "ТанÑÑвалÑний зал"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Ðоа"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "УдаÑÐ½Ñ Ñа баÑ"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "ÐлÑб-дÑм"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "ÐаÑдкоÑ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "ТеÑоÑ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "ÐезалежнÑ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "ÐÑиÑанÑÑкий поп"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "ЧоÑний панк"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "ÐолÑÑкий панк"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "ÐÑÑ"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "ЧоÑний Ñ
ÑиÑÑиÑнÑÑкий Ñеп"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "ТÑжкий меÑал"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "ЧоÑний меÑал"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "ÐеÑеÑ
Ñдний"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "СÑÑаÑна Ñ
ÑиÑÑиÑнÑÑка"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Ð¥ÑиÑÑиÑнÑÑкий Ñок"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "ÐеÑенга"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "СалÑÑа"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "ТÑÐµÑ Ð¼ÐµÑал"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "ÐÑлÑÑиплÑкаÑÑÑ"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "ЯпонÑÑкий поп"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "ÐлекÑÑонний поп"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "ÐÑо модÑÐ»Ñ Ð¿ÑдÑÑимки ÑоÑмаÑÑ MPEG"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"ÐаÑина декодÑÐ²Ð°Ð½Ð½Ñ mpg123 ÑозÑобки Michael Hipp <mh at mpg123.de>\n"
+"ÐодÑÐ»Ñ ÑозÑобки команди XMMS"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿ÑдÑÑимки MPEG"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "ÐибеÑÑÑÑ Ð´Ð¸ÑекÑоÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ÑокÑв Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "ÐмÑна налаÑÑÑÐ²Ð°Ð½Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑдÑÑимки ÑоÑмаÑÑ Ogg Vorbis"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Теги Ogg Vorbis:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "ФоÑÐ¼Ð°Ñ Ð½Ð°Ð·Ð²Ð¸:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "УÑÑановки Ð´Ð»Ñ Ð¿ÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð¿ÑогÑаваннÑ"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "ÐозволиÑи попеÑÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑеÑкакÑÐ²Ð°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "ÐмикнÑÑи пÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð¿ÑогÑаваннÑ"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "Тип пÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð¿ÑогаваннÑ:"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "коÑиÑÑÑваÑиÑÑ Ð¿ÑдÑиленнÑм/пÑковими ÑÑвнÑми Ð´Ð»Ñ Ð´Ð¾ÑÑжок"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "коÑиÑÑÑваÑиÑÑ Ð¿ÑдÑиленнÑм/пÑковими ÑÑвнÑми Ð´Ð»Ñ Ð°Ð»ÑбомÑ"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "ÐозволиÑи пÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ 6дР+ жоÑÑÑке обмеженнÑ"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ÐÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð¿Ñи пÑогÑаваннÑ"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"СÑалаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "Ðомилка!"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð¼ÑниÑи Ñег(вÑдкÑиÑи)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð¼ÑниÑи Ñег(закÑиÑи)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð¼ÑниÑи Ñег"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr " Тег Ogg Vorbis "
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "ÐаÑа:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "ÐпиÑ:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ÐнаÑ
одженнÑ:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "ÐеÑÑÑÑ:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ÐÐ¾Ð¼ÐµÑ ISRC:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ÐÑганÑзаÑÑÑ:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr " Ogg Vorbis ReplayGain"
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "ÐÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ÑÑжок:"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "ÐÑковий ÑÑÐ²ÐµÐ½Ñ Ð´Ð¾ÑÑжок:"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "ÐÑдÑÐ¸Ð»ÐµÐ½Ð½Ñ Ð°Ð»Ñбома:"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "ÐÑковий ÑÑÐ²ÐµÐ½Ñ Ð°Ð»Ñбома:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "ÐнÑоÑмаÑÑÑ Ogg Vorbis: "
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "Ðовжина:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d кÐÑÑ/Ñ (номÑнал)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d ÐÑ"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d байÑ"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿ÑдÑÑимки Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "ÐÑо модÑÐ»Ñ Ð¿ÑддÑÑимки ÑоÑмаÑÑ Ogg Vorbis"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"ÐодÑÐ»Ñ Ogg Vorbis вÑд ФÑндаÑÑÑ Xing.org\n"
+"\n"
+"ÐÑогÑамÑваннÑ\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"ÐнеÑки вÑд\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"ÐÑдвÑдайÑе майданÑик ÑÑндаÑÑÑ Xing.org за адÑеÑÐ¾Ñ http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "ÐодÑÐ»Ñ Ð¿ÑдÑÑимки WAV"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "ÐодÑÐ»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñ Ð·Ð²ÑÐºÑ OSS"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "ÐÑо модÑÐ»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñ OSS"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"ÐÑÐ°Ð¹Ð²ÐµÑ XMMS OSS \n"
+"\n"
+"Ð¦Ñ Ð¿ÑогÑама належиÑÑ Ð´Ð¾ вÑлÑного пÑогÑамного забезпеÑеннÑ. Ðи маÑÑе\n"
+"пÑаво ÑозповÑÑджÑваÑи Ñа/або видозмÑнÑваÑи ÑÑ ÐºÐµÑÑÑÑиÑÑ Ð¿Ñи ÑÑомÑ\n"
+"Ñмовами ÐагалÑÐ½Ð¾Ñ ÐÑблÑÑÐ½Ð¾Ñ ÐÑÑензÑÑ GNU Ñ ÑÐ°ÐºÐ¾Ð¼Ñ Ð²Ð¸Ð³Ð»ÑдÑ, Ñк вона\n"
+"бÑла опÑблÑкована ФÑндаÑÑÑÑ ÐÑлÑного ÐÑогÑамного забезпеÑÐµÐ½Ð½Ñ (Free\n"
+"Software Foundation) або веÑÑÑÑÑ 2 ÐÑÑензÑÑ, або (на ÐÐ°Ñ Ð²Ð¸Ð±ÑÑ)\n"
+"бÑдÑ-ÑÐºÐ¾Ñ Ð¿ÑзнÑÑÐ¾Ñ Ð²ÐµÑÑÑÑÑ.\n"
+"\n"
+"Ð¦Ñ Ð¿ÑогÑама ÑозповÑÑджÑÑÑÑÑÑ Ñз ÑподÑваннÑми, Ñо вона може бÑÑи\n"
+"коÑиÑноÑ, але ÐÐÐ ÐÐЯÐÐÐ ÐÐÐ ÐÐТÐÐ, навÑÑÑ Ð±ÐµÐ· ÑÑÐ²Ð½Ð¾Ñ Ð³Ð°ÑанÑÑÑ Ñого, Ñо\n"
+"ÑÑ Ð¿ÑогÑама може бÑÑи ÐУÐÐÐÐÐЮ або ÐÐÐÐ¥ÐÐÐТЬ ÐÐРЯÐУСЬ ÐÐÐÐУ\n"
+"ÐÐТУ. ÐодалÑÑÑ Ð¿Ð¾Ð´ÑобиÑÑ Ð´Ð¸Ð²ÑÑÑÑÑ Ñ ÐагалÑнÑй ÐÑблÑÑнÑй ÐÑÑензÑÑ GNU.\n"
+"\n"
+"Ðи маÑÑе оÑÑимаÑи копÑÑ ÐагалÑÐ½Ð¾Ñ ÐÑблÑÑÐ½Ð¾Ñ ÐÑÑензÑÑ GNU Ñазом з ÑÑÑÑ\n"
+"пÑогÑамоÑ. ЯкÑо ж Ð½Ñ Ð½Ð°Ð¿Ð¸ÑÑÑÑ Ñ Ð¤ÑндаÑÑÑ ÐÑлÑного ÐÑогÑамного\n"
+"забезпеÑÐµÐ½Ð½Ñ Ð·Ð° адÑеÑÐ¾Ñ 59 Temple Place - Suite 330, Boston, MA\n"
+"02111-1307, USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "ÐÑновний (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "ÐÑновна"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "ÐонÑÑгÑÑаÑÑÑ Ð´ÑайвеÑа OSS"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "ÐвÑковий пÑиÑÑÑÑй:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "ÐоÑиÑÑÑваÑиÑÑ ÑнÑим пÑиÑÑÑоÑм:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "ÐÑиÑÑÑÑй мÑкÑеÑа:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "ÐÑиÑÑÑоÑ"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "РозмÑÑ Ð±ÑÑеÑа (мÑ):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "ÐÑÑеÑ"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "УÑÑановки мÑкÑеÑа:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "ÐÑÑнÑÑÑÑ ÐºÐµÑÑÑ Master, а не PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "ÐÑкÑеÑ"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "ÐÑо модÑÐ»Ñ ESounD"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"ÐодÑÐ»Ñ XMMS ESounD\n"
+"\n"
+"Ð¦Ñ Ð¿ÑогÑама належиÑÑ Ð´Ð¾ вÑлÑного пÑогÑамного забезпеÑеннÑ. Ðи маÑÑе\n"
+"пÑаво ÑозповÑÑджÑваÑи Ñа/або видозмÑнÑваÑи ÑÑ ÐºÐµÑÑÑÑиÑÑ Ð¿Ñи ÑÑомÑ\n"
+"Ñмовами ÐагалÑÐ½Ð¾Ñ ÐÑблÑÑÐ½Ð¾Ñ ÐÑÑензÑÑ GNU Ñ ÑÐ°ÐºÐ¾Ð¼Ñ Ð²Ð¸Ð³Ð»ÑдÑ, Ñк вона\n"
+"бÑла опÑблÑкована ФÑндаÑÑÑÑ ÐÑлÑного ÐÑогÑамного забезпеÑÐµÐ½Ð½Ñ (Free\n"
+"Software Foundation) або веÑÑÑÑÑ 2 ÐÑÑензÑÑ, або (на ÐÐ°Ñ Ð²Ð¸Ð±ÑÑ)\n"
+"бÑдÑ-ÑÐºÐ¾Ñ Ð¿ÑзнÑÑÐ¾Ñ Ð²ÐµÑÑÑÑÑ.\n"
+"\n"
+"Ð¦Ñ Ð¿ÑогÑама ÑозповÑÑджÑÑÑÑÑÑ Ñз ÑподÑваннÑми, Ñо вона може бÑÑи\n"
+"коÑиÑноÑ, але ÐÐÐ ÐÐЯÐÐÐ ÐÐÐ ÐÐТÐÐ, навÑÑÑ Ð±ÐµÐ· ÑÑÐ²Ð½Ð¾Ñ Ð³Ð°ÑанÑÑÑ Ñого, Ñо\n"
+"ÑÑ Ð¿ÑогÑама може бÑÑи ÐУÐÐÐÐÐЮ або ÐÐÐÐ¥ÐÐÐТЬ ÐÐРЯÐУСЬ ÐÐÐÐУ\n"
+"ÐÐТУ. ÐодалÑÑÑ Ð¿Ð¾Ð´ÑобиÑÑ Ð´Ð¸Ð²ÑÑÑÑÑ Ñ ÐагалÑнÑй ÐÑблÑÑнÑй ÐÑÑензÑÑ GNU.\n"
+"\n"
+"Ðи маÑÑе оÑÑимаÑи копÑÑ ÐагалÑÐ½Ð¾Ñ ÐÑблÑÑÐ½Ð¾Ñ ÐÑÑензÑÑ GNU Ñазом з ÑÑÑÑ\n"
+"пÑогÑамоÑ. ЯкÑо ж Ð½Ñ Ð½Ð°Ð¿Ð¸ÑÑÑÑ Ñ Ð¤ÑндаÑÑÑ ÐÑлÑного ÐÑогÑамного\n"
+"забезпеÑÐµÐ½Ð½Ñ Ð·Ð° адÑеÑÐ¾Ñ 59 Temple Place - Suite 330, Boston, MA\n"
+"02111-1307, USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ÐонÑÑÒÑÑаÑÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñ ESD"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "ÐоÑиÑÑÑваÑиÑÑ Ð²Ñддаленим Ñ
оÑÑом"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "ÐÑÑнÑÑÑÑ ÐºÐµÑÑÑ Ð¼ÑкÑÐµÑ OSS"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "СеÑвеÑ"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "ÐиÑ
Ñдний модÑÐ»Ñ ESounD"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "ÐÑо дÑÐ°Ð¹Ð²ÐµÑ ALSA"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"ÐÑÐ°Ð¹Ð²ÐµÑ XMMS ALSA \n"
+"\n"
+"Ð¦Ñ Ð¿ÑогÑама належиÑÑ Ð´Ð¾ вÑлÑного пÑогÑамного забезпеÑеннÑ. Ðи маÑÑе\n"
+"пÑаво ÑозповÑÑджÑваÑи Ñа/або видозмÑнÑваÑи ÑÑ ÐºÐµÑÑÑÑиÑÑ Ð¿Ñи ÑÑомÑ\n"
+"Ñмовами ÐагалÑÐ½Ð¾Ñ ÐÑблÑÑÐ½Ð¾Ñ ÐÑÑензÑÑ GNU Ñ ÑÐ°ÐºÐ¾Ð¼Ñ Ð²Ð¸Ð³Ð»ÑдÑ, Ñк вона\n"
+"бÑла опÑблÑкована ФÑндаÑÑÑÑ ÐÑлÑного ÐÑогÑамного забезпеÑÐµÐ½Ð½Ñ (Free\n"
+"Software Foundation) або веÑÑÑÑÑ 2 ÐÑÑензÑÑ, або (на ÐÐ°Ñ Ð²Ð¸Ð±ÑÑ)\n"
+"бÑдÑ-ÑÐºÐ¾Ñ Ð¿ÑзнÑÑÐ¾Ñ Ð²ÐµÑÑÑÑÑ.\n"
+"\n"
+"Ð¦Ñ Ð¿ÑогÑама ÑозповÑÑджÑÑÑÑÑÑ Ñз ÑподÑваннÑми, Ñо вона може бÑÑи\n"
+"коÑиÑноÑ, але ÐÐÐ ÐÐЯÐÐÐ ÐÐÐ ÐÐТÐÐ, навÑÑÑ Ð±ÐµÐ· ÑÑÐ²Ð½Ð¾Ñ Ð³Ð°ÑанÑÑÑ Ñого, Ñо\n"
+"ÑÑ Ð¿ÑогÑама може бÑÑи ÐУÐÐÐÐÐЮ або ÐÐÐÐ¥ÐÐÐТЬ ÐÐРЯÐУСЬ ÐÐÐÐУ\n"
+"ÐÐТУ. ÐодалÑÑÑ Ð¿Ð¾Ð´ÑобиÑÑ Ð´Ð¸Ð²ÑÑÑÑÑ Ñ ÐагалÑнÑй ÐÑблÑÑнÑй ÐÑÑензÑÑ GNU.\n"
+"\n"
+"Ðи маÑÑе оÑÑимаÑи копÑÑ ÐагалÑÐ½Ð¾Ñ ÐÑблÑÑÐ½Ð¾Ñ ÐÑÑензÑÑ GNU Ñазом з ÑÑÑÑ\n"
+"пÑогÑамоÑ. ЯкÑо ж Ð½Ñ Ð½Ð°Ð¿Ð¸ÑÑÑÑ Ñ Ð¤ÑндаÑÑÑ ÐÑлÑного ÐÑогÑамного\n"
+"забезпеÑÐµÐ½Ð½Ñ Ð·Ð° адÑеÑÐ¾Ñ 59 Temple Place - Suite 330, Boston, MA\n"
+"02111-1307, USA."
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ÐодÑÐ»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñ Ð·Ð²ÑÐºÑ ALSA %s"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "ÐевÑдома звÑкова каÑÑа"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "ÐÑновний PCM пÑиÑÑÑÑй (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ÐонÑÑгÑÑаÑÑÑ Ð´ÑайвеÑа ALSA"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "ÐÑкÑеÑ:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "ÐÑогÑамне кеÑÑÐ²Ð°Ð½Ð½Ñ Ð³ÑÑнÑÑÑÑ"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "ÐÑиÑÑÑÑй мÑкÑеÑа:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "УÑÑановки мÑкÑеÑа"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "ÐодаÑÐºÐ¾Ð²Ñ ÑÑÑановки:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "Ð§Ð°Ñ Ð±ÑÑеÑа (мÑ):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "РозмÑÑ Ð¿ÐµÑÑÐ¾Ð´Ñ (мÑ):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "Ð§Ð°Ñ Ð±ÑÑеÑа (мÑ):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Режим mmap"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "ÐодаÑÐºÐ¾Ð²Ñ ÑÑÑановки"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/ÐеÑемикнÑÑи вÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¾Ð±ÑамленнÑ"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/ÐакÑиÑи"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "РозмиÑий оÑÑилоÑкоп"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "РозмиÑий оÑÑилоÑкоп: вибÑÑ ÐºÐ¾Ð»ÑоÑÑ"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "ÐаÑамеÑÑи:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "ÐиконавеÑÑ/ÐÑÑиÑÑ"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "ÐлÑбом"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "СÑилÑ"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "Ðазва ÑайлÑ"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "ÐаÑÑÑÑÑ Ð´Ð¾ ÑайлÑ"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "РозÑиÑÐµÐ½Ð½Ñ ÑайлÑ"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "Ðазва доÑÑжки"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾ÑÑжкии"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "ÐаÑа"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "Ð Ñк"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "ÐоменÑаÑ"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: ÐÑдобÑажаÑи \"...\", коли ÐµÐ»ÐµÐ¼ÐµÐ½Ñ %n пÑиÑÑÑнÑй"
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"ÐÑлÑÑимедÑйний пÑогÑÐ°Ð²Ð°Ñ Ð½Ð° оÑÐ½Ð¾Ð²Ñ XMMS\n"
+"\n"
+"Copyright (C) 2003-2004 Ðоманда ÑозÑобникÑв BMP\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "РазÑобники:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "РдодаÑÐºÐ¾Ð²Ð¾Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev <dan at ats.energo.ru>"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "ÐомаÑÐ½Ñ ÑÑоÑÑнка й гÑаÑÑка:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr ""
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr ""
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ÐиÑайÑÑкий:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "ЧеÑÑкий:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "ÐолладÑÑкий:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "ÐÑпанÑÑкий:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "ФÑанÑÑзÑкий:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "ÐÑмеÑÑкий:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "ÐÑмеÑÑкий:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "ÐÑеÑÑкий:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "УгоÑÑÑкий"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "ÐÑалÑйÑÑкий:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "ЯпонÑÑкий:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "ÐоÑейÑÑкий:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ÐиÑовÑÑкий:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "ÐакедонÑÑкий"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "ÐолÑÑкий:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "Ð ÑмÑнÑÑкий:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "РоÑÑйÑÑкий:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "СловаÑÑкий"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "ÐÑпанÑÑкий:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "ШведÑÑкий:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "Ð ÑмÑнÑÑкий:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "ÐаллÑйÑÑкий:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "ÐÑо пÑогÑамÑ"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "ÐвÑоÑи"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ÐеÑекладаÑÑ"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "PREAMP"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60 ÐÑ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170 ÐÑ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310 ÐÑ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600 ÐÑ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1 кÐÑ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3 кÐÑ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6 кÐÑ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12 кÐÑ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14 кÐÑ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16 кÐÑ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/ÐаванÑажиÑи"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/ÐаванÑажиÑи/ÐопеÑÐµÐ´Ð½Ñ ÑÑÑановки"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/ÐаванÑажиÑи/ÐвÑомаÑиÑÐ½Ñ ÑÑÑановки"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/ÐаванÑажиÑи/Ðо замовÑаннÑ"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/ÐаванÑажиÑи/ÐÑлÑ"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/ÐаванÑажиÑи/Ð ÑайлÑ"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/ÐаванÑажиÑи/Ð ÑÐ°Ð¹Ð»Ñ EQF WinAMP"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/ÐмпоÑÑ"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/ÐмпоÑÑ/УÑÑановки WinAMP"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/ÐбеÑегÑи"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/ÐбеÑегÑи/УÑÑановки"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/ÐбеÑегÑи/ÐвÑомаÑиÑÐ½Ñ ÑÑÑановки"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/ÐбеÑегÑи/СÑандаÑÑÐ½Ñ "
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/ÐбеÑегÑи/Ð Ñайл"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/ÐбеÑегÑи/Ð Ñайл EQF WinAMP"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/СÑеÑÑи"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/СÑеÑÑи/УÑÑановки"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/СÑеÑÑи/ÐвÑомаÑиÑÐ½Ñ ÑÑÑановки"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "ÐÐºÐ²Ð°Ð»Ð°Ð¹Ð·ÐµÑ ÐÐÐ "
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "ÐопеÑÐµÐ´Ð½Ñ ÑÑÑановка"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "ÐопеÑÐµÐ´Ð½Ñ ÑÑÑановки"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "ÐаванÑажиÑи ÑÑÑановки"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "ÐаванÑажиÑи авÑомаÑиÑÐ½Ñ ÑÑÑановкии"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "ÐаванÑажиÑи ÑÑÑановки еквалайзеÑа"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "ÐбеÑегÑи ÑÑÑановки"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "ÐбеÑегÑи авÑомаÑиÑÐ½Ñ ÑÑÑановки"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "ÐбеÑегÑи ÑÑÑановки еквалайзеÑа"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "СÑеÑÑи ÑÑÑановки"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "СÑеÑÑи авÑомаÑиÑÐ½Ñ ÑÑÑановки"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: паÑамеÑÑ `%s' - неоднознаÑний\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: паÑамеÑÑ `--%s' не може маÑи аÑгÑменÑÑв\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: паÑамеÑÑ `%c%s' не може маÑи аÑгÑменÑÑ\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: паÑамеÑÑÑ `%s' необÑ
Ñдний аÑгÑменÑ\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: не ÑозпÑзнано паÑамеÑÑÑ `--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: не ÑозпÑзнано паÑамеÑÑÑ `%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: невÑÑний паÑамеÑÑ -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: невÑÑний паÑамеÑÑ -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: паÑамеÑÑÑ Ð½ÐµÐ¾Ð±Ñ
Ñдний аÑгÑÐ¼ÐµÐ½Ñ -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: паÑамеÑÑ `-W %s' неоднознаÑний\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: опÑÑÑ `-W %s' не повинна маÑи аÑгÑменÑа\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Ðе Ð¼Ð¾Ð¶Ñ Ð³ÑаÑи Ñайли.</big></b>\n"
+"\n"
+"ÐÐµÐ²Ð½Ñ Ñайли не можÑÑÑ Ð±ÑÑи вÑдÑвоÑенÑ. ÐÑдÑ-лаÑка, пеÑевÑÑÑе :\n"
+"1. ÐаÑвнÑÑÑÑ ÑиÑ
ÑайлÑв.\n"
+"2. УвÑÐ¼ÐºÐ½ÐµÐ½Ð½Ñ Ð½ÐµÐ¾Ð±Ñ
ÑдниÑ
аÑдÑо-модÑлÑв."
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "ÐÑлÑÑе не показÑваÑи Ñе попеÑедженнÑ"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "_ÐокладнÑÑе"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "Ðм'Ñ ÑайлÑ"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "BMP: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "Ðм'Ñ ÑайлÑ:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "Ðоден модÑÐ»Ñ Ð²Ð²Ð¾Ð´Ñ Ð½Ðµ ÑозпÑÐ·Ð½Ð°Ñ Ñей Ñайл"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "ÐодÑÐ»Ñ Ð²Ð²Ð¾Ð´Ñ: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ ÑÑвоÑиÑи Ñайл жÑÑÐ½Ð°Ð»Ñ (%s)!\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ ÑÑвоÑиÑи диÑекÑоÑÑÑ (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ÐикоÑиÑÑаннÑ: beep-media-player [паÑамеÑÑи] [Ñайли] ...\n"
+"\n"
+"ÐаÑамеÑÑи:\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "ÐадÑÑкÑваÑи Ñей ÑекÑÑ Ñ Ð²Ð¸Ð¹Ñи"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "ÐÑÑановиÑи ÑеÑÑÑ Ð´Ð»Ñ ÐÐÐ /XMMS (по замовÑаннÑ: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "ÐеÑейÑи до попеÑеднÑÐ¾Ñ Ð¿ÑÑÐ½Ñ Ñ ÑпиÑкÑ"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "ÐоÑаÑи пÑогÑаваÑи поÑоÑний ÑпиÑок"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "ÐÑизÑпиниÑи поÑоÑÐ½Ñ Ð¿ÑÑнÑ"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "ÐÑпиниÑи поÑоÑÐ½Ñ Ð¿ÑÑнÑ"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "ÐÑизÑпиниÑи, ÑкÑо Ñо-небÑÑÑ Ð¿ÑогÑаÑÑÑÑÑ, в ÑнÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð¿ÑогÑаваÑи"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "ÐеÑейÑи до наÑÑÑÐ¿Ð½Ð¾Ñ Ð¿ÑÑÐ½Ñ Ñ ÑпиÑÐºÑ Ð¿ÑÑенÑ"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "Ðе оÑиÑаÑи ÑпиÑок пÑогÑаваннÑ"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "ÐоказаÑи головне вÑкно."
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "ÐкÑивÑваÑи BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "ÐденÑиÑÑкаÑÐ¾Ñ Ð¿Ð¾Ð¿ÐµÑеднÑго ÑеанÑÑ"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "ÐадÑÑкÑваÑи Ð½Ð¾Ð¼ÐµÑ Ð²ÐµÑÑÑÑ Ñ Ð·Ð°Ð²ÐµÑÑиÑи ÑобоÑÑ.\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"ÐÑÑмано SIGSEGV\n"
+"\n"
+"Ðожливо, Ñе помилка в BMP. ЯкÑо ви не знаÑÑе, ÑÐ¾Ð¼Ñ Ñе ÑÑалоÑÑ, вÑдпÑавÑе "
+"повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð°Ð²Ð°Ð½ÑажиÑи ÑемÑ.</big></b>\n"
+"\n"
+"ÐеÑевÑÑÑе,Ñи пÑидаÑна до викоÑиÑÑÐ°Ð½Ð½Ñ Ñема '%s' Ñ Ð²ÑÑановлена Ñипова Ñема в "
+"'%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"ÐибаÑÑе, ваÑа GTK+ веÑÑÑÑ (%d.%d.%d) не пÑаÑÑваÑиме з BMP.\n"
+"ÐÑдÑ-лаÑка, викоÑиÑовÑйÑе GTK+ %s або кÑаÑÑ.\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"ÐÑоÑÑиÑе, гÑлки не пÑдÑÑÑмÑÑÑÑÑÑ Ð½Ð° ваÑÑй плаÑÑоÑмÑ.\n"
+"\n"
+"ЯкÑо ви викоÑиÑÑовÑÑÑе лÑнÑÐºÑ ÑиÑÑÐµÐ¼Ñ Ð½Ð° оÑÐ½Ð¾Ð²Ñ libc5 Ñ Ð²ÑÑановленими Glib Ñ "
+"GTK+ вам\n"
+"пеÑед вÑÑановленнÑм LinuxThreads ÑлÑд пеÑекомпÑлÑваÑи Glib Ñ GTK+.\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "ÐÐÐ : Ðе Ð¼Ð¾Ð¶Ñ Ð²ÑдкÑиÑи екÑан Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ, виÑ
Ñд."
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/ÐнÑоÑмаÑÑÑ Ð¿Ñо пÑÑнÑ"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/ÐвÑомаÑиÑна пÑокÑÑÑка назви пÑÑнÑ"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/Режим вÑзÑалÑзаÑÑÑ"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/Режим вÑзÑалÑзаÑÑÑ/ÐналÑзаÑоÑ"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/Режим вÑзÑалÑзаÑÑÑ/ÐÑаÑÑк"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/Режим вÑзÑализаÑÑÑ/Ðимкнено"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/Режим аналÑзаÑоÑа"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/Режим аналÑзаÑоÑа/ÐвиÑайний"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/Режим аналÑзаÑоÑа/ÐолÑм'Ñ"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/Режим аналÑзаÑоÑа/ÐеÑÑикалÑÐ½Ñ Ð»ÑнÑÑ"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/Режим аналÑзаÑоÑа/ÐÑнÑÑ"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/Режим аналÑзаÑоÑа/СмÑги"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/Режим аналÑзаÑоÑа/ÐÑки"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/Режим гÑаÑÑка"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/Режим гÑаÑÑка/ТоÑки"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/Режим гÑаÑÑка/ÐÑнÑÑ"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/Режим гÑаÑÑка/Ðаливка"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/ÐÑи мÑнÑмÑÐ·Ð¾Ð²Ð°Ð½Ð¾Ð¼Ñ Ð²ÑкнÑ"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/ÐÑи мÑнÑмÑÐ·Ð¾Ð²Ð°Ð½Ð¾Ð¼Ñ Ð¾ÐºÐ½Ðµ/ÐвиÑайний"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/ÐÑи мÑнÑмÑÐ·Ð¾Ð²Ð°Ð½Ð¾Ð¼Ñ Ð²ÑкнÑ/Ðлавний"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/ЧаÑÑоÑа поновленнÑ"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/ЧаÑÑоÑа поновленнÑ/Ðовна (~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/ЧаÑÑоÑа поновленнÑ/Ðоловина (~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/ЧаÑÑоÑа поновленнÑ/ЧеÑвеÑÑÑ (~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/ЧаÑÑоÑа поновленнÑ/ÐоÑÑма (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð°Ð½Ð°Ð»ÑзаÑоÑа"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/ÐадÑÐ½Ð½Ñ ÐналÑзаÑоÑа/ÐайповÑлÑнÑÑе"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/ÐадÑÐ½Ð½Ñ ÐналÑзаÑоÑа/ÐовÑлÑне"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/ÐадÑÐ½Ð½Ñ ÐналÑзаÑоÑа/СеÑеднÑ"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/ÐадÑÐ½Ð½Ñ ÐналÑзаÑоÑа/Швидке"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/ÐадÑÐ½Ð½Ñ ÐналÑзаÑоÑа/ÐайÑвидÑе"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð¿ÑкÑв"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð¿ÑкÑв/ÐайповÑлÑнÑÑе"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð¿ÑкÑв/ÐовÑлÑне"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð¿ÑкÑв/СеÑеднÑ"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð¿ÑкÑв/Швидке"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/ÐадÑÐ½Ð½Ñ Ð¿ÑкÑв/ÐайÑвидÑе"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/ÐовÑоÑÑваÑи"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/Ðипадково"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ÐÑаÑи"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/ÐÑизÑпиниÑи"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/ÐÑпиниÑи"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/ÐопеÑÐµÐ´Ð½Ñ Ð¿ÑÑнÑ"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/ÐаÑÑÑпна пÑÑнÑ"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/ÐеÑейÑи до пеÑÑÐ¾Ñ Ð¿ÑÑÐ½Ñ Ñ ÑпиÑкÑ"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/ÐеÑейÑи до ÑайлÑ"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/ÐеÑейÑи до ÑаÑÑ"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/ÐалаÑÑÑваннÑ"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/ÐиглÑд"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/ÐÑо BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/_ÐийÑи"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/ÐодаÑи Файли..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/ÐодаÑи ÐдÑеÑÑ Ð² ÑнÑеÑнеÑ..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/ÐоказаÑи ÑедакÑÐ¾Ñ ÑпиÑÐºÑ Ð¿ÑÑенÑ"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/ÐквалайзеÑ"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/Ð§Ð°Ñ Ð²Ñд поÑаÑкÑ"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/ЧаÑ, Ñо залиÑивÑÑ"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/Ðавжди згоÑи"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/Ðа вÑÑ ÑÑÑлÑниÑÑ"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/ÐгоÑнÑÑи пÑогÑаваÑ"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/ÐгоÑнÑÑи ÑедакÑÐ¾Ñ ÑпиÑÐºÑ Ð¿ÑогÑаваннÑ"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/ÐгоÑнÑÑи еквалайзеÑ"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "ÐеÑейÑи до ÑаÑÑ"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "Ñ
вилин:ÑекÑнд"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "Ðовжина доÑÑжки:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "ÐодаÑи до ÑпиÑкÑ"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "ÐодаÑи до ÑпиÑкÑ"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "ÐеÑейÑи до доÑÑжки"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "ФÑлÑÑÑ: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "ÐодаÑи каÑалог"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "ÐодаÑи ÐдÑеÑÑ ÑнÑеÑнеÑ..."
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "ÐÐÐ ÐÐÐТÐТРÐÐ: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "ÐУЧÐÐСТЬ: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "ÐÐÐÐÐС: %d%% ÐÐÐÐРУЧ"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "ÐÐÐÐÐС: ЦÐÐТР"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "ÐÐÐÐÐС: %d%% ÐÐ ÐÐÐРУЧ"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "ÐÐÐЮ ÐÐЦÐÐ"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "ÐÐÐÐÐ ÐÐÐТРСÐÐÐÐÐÐÐЯ ÐÐÐÐРУ (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "ÐÐÐÐÐÐÐТРСÐÐÐÐÐÐÐЯ ÐÐÐÐРУ (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "ÐÐÐÐÐ ÐÐÐТРСÐÐÐÐÐÐÐЯ ÐÐÐÐРУ"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "ÐÐÐÐÐÐÐТРСÐÐÐÐÐÐÐЯ ÐÐÐÐРУ "
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "ÐÐÐÐÐ ÐÐФÐÐ ÐÐЦÐРФÐÐÐУ"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** ÐÐÐÐÐÐÐÐÐ Ð ÐÐÐÐРУСУÐУТР**"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "ÐÐÐЮ ÐÐÐУÐÐÐÐÐЦÐÐ"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>Ðе знайдено звÑкового CD.</big></b>\n"
+"\n"
+"ÐомпакÑ-диÑк вÑдÑÑÑнÑй або не мÑÑÑиÑÑ Ð°ÑдÑодоÑÑжок.\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>Ðе Ð¼Ð¾Ð¶Ñ Ð²ÑдкÑиÑи аÑдÑопÑиÑÑÑÑй</big></b>\n"
+"\n"
+"ÐÑдÑ-лаÑка впевнÑÑÑÑÑ, Ñо:\n"
+"1. Ðи вибÑали вÑÑний виÑ
Ñдний модÑлÑ\n"
+"2. ÐнÑÑ Ð¿ÑогÑами не блокÑÑÑÑ Ð·Ð²ÑÐºÐ¾Ð²Ñ Ð¿Ð»Ð°ÑÑ\n"
+"3. ÐаÑа звÑкова плаÑа ÑконÑÑÒÑÑована вÑÑно \n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/ÐидалиÑи вибÑане"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/ÐидалиÑи ÐРвибÑане"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/ÐидалиÑи вÑе"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/ÐоÑÑавиÑи пÑÑÐ½Ñ Ð² ÑеÑгÑ"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/ÐодаÑи CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/ÐобадаÑи адÑеÑÑ ÑнÑеÑнеÑ..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/ÐодаÑи Ñайли..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/ÐодаÑи Ñайли..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/ÐÑиÑÑиÑи ÑеÑгÑ"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/ÐидалиÑи недоÑÑÑÐ¿Ð½Ñ Ñайли"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/Ðовий ÑпиÑок"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/СоÑÑÑваÑи ÑпиÑок"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/Ðовий ÑпиÑок"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/ÐбновиÑи видимий ÑпиÑок"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/ÐнвеÑÑÑваÑи вибÑане"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/СоÑÑÑваÑи вибÑане"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "ÐибÑаÑи вÑе"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/ÐеÑемÑÑаÑи ÑпиÑок"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/ÐнвеÑÑÑваÑи ÑпиÑок"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/СоÑÑÑваÑи ÑпиÑок"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/СоÑÑÑваÑи ÑпиÑок/Ðа назвоÑ"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/СоÑÑÑваÑи ÑпиÑок/Ðа Ñменем ÑайлÑ"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/СоÑÑÑваÑи ÑпиÑок/Ðа ÑлÑÑ
ом й Ñменем ÑайлÑ"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/СоÑÑÑваÑи ÑпиÑок/Ðа даÑоÑ"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/СоÑÑÑваÑи вибÑане"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/СоÑÑÑваÑи вибÑане/Ðа назвоÑ"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/СоÑÑÑваÑи вибÑане/Ðа Ñменем ÑайлÑ"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/СоÑÑÑваÑи вибÑане/Ðа ÑлÑÑ
ом й Ñменем ÑайлÑ"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/СоÑÑÑваÑи вибÑане/Ðа даÑоÑ"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "Ðомилка пÑи запиÑÑ ÑпиÑÐºÑ Ð¿ÑогÑÐ°Ð²Ð°Ð½Ð½Ñ \"%s\": %s"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s вже ÑÑнÑÑ. ÐÑодовжиÑи?"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð±ÐµÑегÑи ÑпиÑок пÑогÑаваннÑ! ÐевÑдомий Ñип ÑÐ°Ð¹Ð»Ñ %s"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "ÐÑоÑиÑаÑи ÑпиÑок пÑогÑаваннÑ"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "ÐбеÑегÑи ÑпиÑок пÑогÑаваннÑ"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "РедакÑÐ¾Ñ ÑпиÑÐºÑ Ð¿ÑогÑÐ°Ð²Ð°Ð½Ð½Ñ BMP"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "ÐовнÑÑнÑй виглÑд"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "ÐквалайзеÑ"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "ÐиÑа"
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "СпиÑок пÑогÑаваннÑ"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "ÐодÑлÑ"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "ÐиконавеÑÑ"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾ÑÑжки"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "ШлÑÑ
до ÑайлÑ"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "Ðмикнено"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "ÐпиÑ"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "ÐаÑегоÑÑÑ"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "ÐÑкно налаÑÑÑванÑ"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "ÐÑкно Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑайлÑв"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "ÐÑдкÑиÑи Ñайли"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "ÐакÑиÑи вÑкно пÑÑÐ»Ñ Ð²ÑдкÑиÑÑÑ"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "ÐодаÑи Ñайли"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "ÐакÑиÑи вÑкно пÑÑÐ»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (недопÑÑÑима поÑлÑдовнÑÑÑÑ Ð®Ð½Ñкод)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ BMP"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐодÑлÑ</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "_СпиÑок модÑлÑв пÑдÑÑимки мÑзиÑниÑ
ÑоÑмаÑÑв:"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>ÐедÑа</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "_СпиÑок модÑлÑв загалÑного пÑизнаÑеннÑ:"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>ÐагалÑнÑ</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "СпиÑок модÑлÑв _вÑзÑалÑзаÑÑÑ:"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>ÐÑзÑалÑзаÑÑÑ</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "СпиÑок модÑлÑв _еÑекÑÑв:"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>ÐÑекÑи</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "_ÐоÑоÑний модÑÐ»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñ Ð·Ð²ÑкÑ:"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"ÐмÑни задÑÑÐ½Ñ Ð² конÑигÑÑаÑÑÑ Ð±Ð°Ð·Ð¸ даниÑ
BMP, але не маÑимÑÑÑ ÐµÑекÑÑ Ð¿Ñд ÑÐ°Ñ "
+"пÑогÑÐ°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ наÑÑÑÐ¿Ð½Ð¾Ñ Ð¿ÑÑнÑ!\n"
+"\n"
+"Щоб змÑни подÑÑли, ви можеÑе пеÑезапÑÑÑиÑи пÑогÑаваннÑ."
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>ÐивÑд звÑкÑ</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐовнÑÑнÑй виглÑд</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>_Тема</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>_ШÑиÑÑи</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "_Ðоловне вÑкно пÑогÑаваÑа:"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "_СпиÑок пÑогÑаваннÑ:"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "ÐибÑÑ ÑÑиÑÑÑ Ð´Ð»Ñ Ð³Ð¾Ð»Ð¾Ð²Ð½Ð¾Ð³Ð¾ вÑкна"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "ÐибÑÑ ÑÑиÑÑÑ Ð´Ð»Ñ ÑпиÑÐºÑ Ð¿ÑогÑаваннÑ"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>_Ð Ñзне</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "ÐоказÑваÑи номеÑи пÑÑÐµÐ½Ñ Ñ ÑпиÑÐºÑ Ð¿ÑогÑаваннÑ"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "ÐикоÑиÑÑовÑваÑи кÑÑÑоÑи, вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ ÑемоÑ"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐиÑа</b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>ÐолеÑо миÑÑ</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "ÐовоÑÐ¾Ñ ÐºÐ¾Ð»ÐµÑа миÑÑ Ð·Ð¼ÑнÑÑ Ð³ÑÑнÑÑÑÑ Ð½Ð°"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "вÑдÑоÑкÑв"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "ÐовоÑÐ¾Ñ ÐºÐ¾Ð»ÐµÑа миÑÑ Ð¿ÑокÑÑÑÑÑ ÑпиÑок пÑогÑÐ°Ð²Ð°Ð½Ð½Ñ Ð½Ð°"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "ÑÑдкÑв"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>СпиÑок пÑогÑаваннÑ</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>Ðм'Ñ ÑайлÑ</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "ÐеÑеÑвоÑÑваÑи пÑдкÑеÑÐ»ÐµÐ½Ð½Ñ Ð² пÑобÑл"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "ÐеÑеÑвоÑÑваÑи %20 в пÑобÑл"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ÐнÑоÑмаÑÑÑ Ð¿Ñо пÑÑÐ½Ñ Ñа виконавÑÑ</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr ""
+"ÐаванÑажÑваÑи ÑнÑоÑмаÑÑÑ Ð¿Ñо пÑÑÐ½Ñ Ñа виконавÑÑ (ÑнÑоÑмаÑÑйний Ñег) з "
+"мÑзиÑниÑ
ÑайлÑв."
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr ""
+"ÐаванÑажÑваÑи ÑнÑоÑмаÑÑÑ Ð¿Ñо пÑÑÐ½Ñ Ð· мÑзиÑниÑ
ÑайлÑв Ñ ÑпиÑкÑв пÑогÑаваннÑ"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr ""
+"ÐаванÑажÑваÑи ÑнÑоÑмаÑÑÑ Ð¿Ñо пÑÑÐ½Ñ Ñа виконавÑÑ Ð¿Ñи Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑÐ°Ð¹Ð»Ñ Ð² ÑпиÑок "
+"пÑогÑÐ°Ð²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ вÑдкÑиÑÑÑ"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "ÐÑи вÑдкÑиÑÑÑ"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr ""
+"ÐаванÑажÑваÑи ÑнÑоÑмаÑÑÑ Ð¿Ñо пÑÑÐ½Ñ Ñа виконавÑÑ Ð¿Ñи вÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑÐ°Ð¹Ð»Ñ Ð² "
+"ÑпиÑÐºÑ Ð¿ÑогÑаваннÑ"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "ÐÑи вÑдобÑаженнÑ"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ÐÑдÑвоÑеннÑ</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr ""
+"Ðо завеÑÑÐµÐ½Ð½Ñ Ð¿ÑогÑÐ°Ð²Ð°Ð½Ð½Ñ Ð¿ÑÑнÑ, не пеÑеÑÑваÑиÑÑ Ð°Ð²ÑомаÑиÑно до наÑÑÑпноÑ."
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "Ðе пÑоÑÑваÑиÑÑ Ð² ÑпиÑÐºÑ Ð¿ÑогÑаваннÑ"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "ÐаÑза мÑж пÑÑнÑми"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "ÐÑизÑпинÑÑи на"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ÑекÑнд"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>ÐÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ пÑÑни</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "ÐÑобливий ÑÑдок:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"Ðазва\n"
+"ÐиконавеÑÑ - Ðазва\n"
+"ÐиконавеÑÑ - ÐлÑбом - Ðазва\n"
+"ÐлÑбом - Ðазва\n"
+"ÐÑобливе"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "ÐоказаÑи ÑнÑоÑмаÑÑÑ Ð¿Ñо ÑÑдок назви"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>ÐквалайзеÑ</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>ÐопеÑÐµÐ´Ð½Ñ ÑÑÑановки</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "ÐаÑÐ°Ð»Ð¾Ð³Ñ Ð¿Ð¾Ð¿ÐµÑеднÑÑ
ÑÑÑановок:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "РозÑиÑÐµÐ½Ð½Ñ ÑÐ°Ð¹Ð»Ñ Ð¿Ð¾Ð¿ÐµÑеднÑÑ
ÑÑÑановок:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "ÐоÑÑÑÐ¿Ð½Ñ _попеÑÐµÐ´Ð½Ñ ÑÑÑановки:"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "ÐакÑиÑи вÑкно пÑÑÐ»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "ÐибÑаÑи вÑе"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "СкаÑÑваÑи видÑленнÑ"
+
+#~ msgid "Default skin:"
+#~ msgstr "ÐÑновна Ñема:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "Ðе Ð¼Ð¾Ð¶Ñ ÑнÑÑÑалÑзÑваÑи gnome-vfs.\n"
+
+#~ msgid "/By extension"
+#~ msgstr "/Ðа ÑозÑиÑеннÑм"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_CN.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,5028 @@
+# Simplified Chinese translation for BMP
+# Chong Kai Xiong <descender at phreaker.net>, 2004-2005
+# Based on:
+# Simplified Chinese localization file for xmms.
+# Copyright (C) 2000 Taiwan Linux User Group
+# Jouston Huang <http://Linuxfab.cx> <jouston at linuxfab.cx>, 2000.
+# Andrew Lee <andrew at cle.linux.org.tw>, 2000.
+# Chih-Wei Huang <cwhuang at linux.org.tw>, 2000.
+# Danny Zeng <danny at zeng.com.cn>, 2000
+# Shiyu Tang <ShiyuTang at netscape.net>, 2003
+# Shiyu Tang <shiyutang at netscape.net>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.7.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2005-10-22 14:34+0800\n"
+"Last-Translator: Chong Kai Xiong <descender at phreaker.net>\n"
+"Language-Team: Chinese/Simplified <i18n-translation at lists.linux.net.cn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD é³é¢æ件"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD é³è½¨ %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(æªç¥)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "驱å¨å¨ %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"æå¼è®¾å¤ %s 失败\n"
+"é误ï¼%s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"读åç®å½å¤±è´¥\n"
+"å¯è½æ¤é©±å¨å¨ä¸æ²¡æçï¼\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"驱å¨å¨ %s 没æé®é¢ã\n"
+"çä¸å
±æ %d æ¡é³è½¨"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr "(%d æ¡æ°æ®è½¨)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"æ»é¿åº¦ï¼%d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr "æ æ³è¿è¡æ°ç é³é¢æåæµè¯ãå
ç¢æ²¡æé³è½¨ã\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"æ°ç é³é¢æåæµè¯ï¼æå\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"æ°ç é³é¢æåæµè¯å¤±è´¥ï¼%s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"æ£æ¥ç®å½ %s 失败\n"
+"é误ï¼%s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "é误ï¼%s åå¨ï¼ä½ä¸æ¯ç®å½"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ç®å½ %s 没æé®é¢ã"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "设å¤ï¼"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "设å¤(_D)ï¼"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "ç®å½(_e)ï¼"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "ææ¾æ¨¡å¼ï¼"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "模æ"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "æ°åé³é¢æ©å±"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "é³éæ§å¶ï¼"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "æ æ··é³å¨"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM 驱å¨å¨"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS æ··é³å¨"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "æ´æ¹é©±å¨å¨..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "移é¤é©±å¨å¨"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD å±çææ¾å¨é
ç½®"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "æ·»å 驱å¨å¨"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "设å¤"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDBï¼"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "ä½¿ç¨ CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "è·å¾æå¡å¨æ¸
å"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "æ¾ç¤ºç½ç»çªå£"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB æå¡å¨ï¼"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD ç´¢å¼ï¼"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "ä½¿ç¨ CD ç´¢å¼"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD ç´¢å¼æå¡å¨ï¼"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "é³è½¨å称ï¼"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "è¦çé常æ é¢"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "åç§°æ ¼å¼ï¼"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "å
çä¿¡æ¯"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "请éæ©ä½ æ³è¦ä¿å MPEG æµçç®å½ï¼"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG é³é¢æ件é
ç½®"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "å辨çï¼"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 ä½"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 ä½"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "声éï¼"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "ç«ä½å£°ï¼å¦ææçè¯ï¼"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "å声"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "éä½åæ ·ï¼"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "解ç å¨ï¼"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "èªå¨æ£æµ"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! ä¼åç解ç å¨"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX ä¼åç解ç å¨"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU 解ç å¨"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "é项"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "ç®å½"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "æ©å±å"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "æ©å±ååç®å½"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "解ç å¨"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ç¼å²ï¼"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "ç¼å²åºå¤§å° (Kb)ï¼"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "åæç¼å²åº (%)ï¼"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "代çæå¡å¨ï¼"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "使ç¨ä»£çæå¡å¨"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "主æºåï¼"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "端å£ï¼"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "使ç¨èº«ä»½éªè¯"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "使ç¨è
å称ï¼"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "å£ä»¤ï¼"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "å°æµåå
¥ç£çï¼"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "å°æµåå
¥ç£ç"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "è·¯å¾ï¼"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "æµè§"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "å¯ç¨ Icecast Metadata UDP éé"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "æµ"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 æ ç¾ï¼"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "ç¦ç¨ ID3v2 æ ç¾"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "å°é UTF-8 ID3 æ ç¾è½¬æ¢æ UTF-8"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 ç¼ç ï¼"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 æ ¼å¼ï¼"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "æ é¢"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"æ æ³åå
¥æ件ï¼%s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "æ æ³åå
¥æ ç¾ï¼"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"æ æ³æå¼æ件ï¼%s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "æ件信æ¯"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "ç¡®å®"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"æ æ³æªææ件ï¼%s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "æ æ³ç§»é¤æ ç¾ï¼"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "没æè¦ç§»é¤çæ ç¾ï¼"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "ç«ä½å£°"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "èåç«ä½å£°"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "å声é"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "å声é"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld-Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "æ "
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "å¦"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "æ¯"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "æ²åï¼"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr " MPEG ä¿¡æ¯ "
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG Levelï¼"
+
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ä½éçï¼"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "éæ ·çï¼"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "帧æ°ï¼"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "æ件大å°ï¼"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "Error Protectionï¼"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "çæï¼"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "Originalï¼"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "Emphasisï¼"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 æ ç¾ "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "æ²åï¼"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "èºæ¯å®¶ï¼"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "ä¸è¾ï¼"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "å¤æ³¨ï¼"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "年份ï¼"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "é³è½¨å·ï¼"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "é£æ ¼ï¼"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "å¤å¶ä¸è¾æ ç¾"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "ç²è´´ä¸è¾æ ç¾"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s·-·BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "ä¸å¯ç¨"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"ä½éçï¼å¯åï¼\n"
+"å¹³åä½éçï¼%d kb/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu·Bytes"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "é误"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "æ£å¨å¯»æ¾ %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "æ æ³æ¾å°ä¸»æº %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "æ£å¨è¿æ¥å°ä¸»æº %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "æ æ³è¿æ¥å°ä¸»æº %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "å·²è¿æ¥ï¼æ£çå¾
ååº"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"æ æ³è¿æ¥å°ä¸»æº %s\n"
+"æå¡å¨æ¥åï¼%s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "åæç¼å²ï¼%dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "Blues èè°"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "Classic Rock å¤å
¸ææ»"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "Country 乡æ"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "Dance èè¹"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco 迪æ¯ç§"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "Funk 乡åä¹"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "Grunge"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "Jazz çµå£«"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "Metal éå±"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "New Age æ°æ¶ä»£"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "Oldies ææ§"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "å
¶å®"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "Pop æµè¡"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "R&B èæä¸èè°"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "Rap æ²å»ä¹"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "Reggae çæ ¼è"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "Rock ææ»"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "Techno"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "Industrial å·¥ä¸æ¶ä»£"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "Alternative"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska æ¯å¡"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "Death Metal ééå±"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "Pranks"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "Soundtrack çµå½±é
ä¹"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "Euro-Techno"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "Ambient ç¯å¢"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "Vocal 声ä¹"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "Jazz+Funk çµå£«ä¹+乡åä¹"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "Fusion èå"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "Trance è¿·éä¹"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "Classical å¤å
¸é³ä¹"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "Instrumental å¤å
¸"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "Acid è¿·å¹»"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House æ
åº"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "Game 游æ"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "Sound Clip"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "Gospel ç¦é³"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "Noise åªé³"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "Bass ä½é³"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "Soul çµæ"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "Punk æå
"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "Space 空é´"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "Meditative æ²æ"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "Instrumental Pop éå±æµè¡"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "Instrumental Rock éå±ææ»"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "Ethnic å¼æå¾"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "Gothic å¥ç¹å¼"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "Darkwave"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "Techno-Industrial"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "Electronic çµå£°"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "Pop-Folk æµè¡æ°æ"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "Eurodance 欧洲èè¹"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "Dream 梦幻"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "Southern Rock åæ¹ææ»"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "Comedy åå§"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "Cult ç¥ä»ª"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "Top 40"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "Christian Rap"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "Pop/Funk æµè¡/乡åä¹"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "Jungle ä¸æ"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "Native American ç¾æ´²åè"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "Cabaret å¡å·´è±é
é¦ä¹"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "New Wave"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "Psychedelic è¿·å¹»ä¹"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "Rave ç欢"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "Showtunes"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "Trailer"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "Lo-Fi"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "Tribal é¨è½"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "Acid Punk è¿·å¹»æå
"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "Acid Jazz è¿·å¹»çµå£«"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "Polka æ³¢å°å¡èæ²"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "Retro ææ§"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "Musical é³ä¹å§"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "Rock & Roll ææ»"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "Hard Rock"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "Folk æ°ä¹"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "Folk/Rock æ°ä¹/ææ»"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "National Folk æ°æé³ä¹"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "Swing ææä¹"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Bebob"
+msgstr "Bebob åæ®çµå£«ä¹"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "Latin æä¸ä¹"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "Revival èé"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "Celtic å¯å°ç¹äºº"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "Bluegrass èèé³ä¹"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "Avantgarde"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "Gothic Rock å¥ç¹å¼ææ»"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "Progressive Rock æ¸è¿å¼ææ»"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "Psychedelic Rock è¿·å¹»å¼ææ»"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "Symphonic Rock 交åä¹å¼ææ»"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "Slow Rock æ
¢éææ»"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "Big Band çµå£«ä¹å¢"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "Chorus åå±"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "Easy Listening"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "Acoustic éçµå£°ä¹å¨"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "Humour å¹½é»"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "Speech 讲è¯"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "Chanson å°è°"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "Opera æå§"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "Chamber Music 室å
ä¹"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "Sonata å¥é¸£æ²"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "Symphony 交åä¹"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "Porn Groove"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "Satire 讽åº"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "Club"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "Tango æ¢æ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "Samba æ¡å·´"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "Folklore æ°é´ä¼ 说"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "Ballad åäºæ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "Power Ballad 强ççåäºæ"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "Rhythmic Soul èæçµä¹"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "Freestyle èªç±å¼"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "Duet äºéå¥"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "Punk Rock æ客ææ»"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "Drum Solo åç¬é¼å¥"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "A Cappella"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "Dance Hall èå
"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa æé¿"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "Drum & Bass å»é¼åä½é³"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House 俱ä¹é¨"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "Hardcore"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "Terror ææ"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "Indie"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "BritPop"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "Beat"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "Heavy Metal ééå±"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "Black Metal é»è²éå±"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "Crossover æ··åé³ä¹"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "Contemporary Christian"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "Christian Rock"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "Merengue"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "Salsa"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "Thrash Metal éå±æå»ä¹"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "Anime æ¥æ¬å¨ç»"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "JPop æ¥æ¬æµè¡æ²"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "å
³äº MPEG æ件"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 解ç å¨ç± Michael Hipp <mh at mpg123.de> å¶ä½\n"
+"æä»¶ç± XMMS å°ç»æä¾"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG é³é¢æ件"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "请éæ©ä¸ä¸ªç®å½ç¨æ¥åæ¾æ¨ç Ogg Vorbis æµæ件ï¼"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis é³é¢æ件é
ç½®"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis æ è®°ï¼"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "æ é¢æ ¼å¼ï¼"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "ReplayGain 设å®ï¼"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "å¯ç¨çé³é²æ¤"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "å¯å¨ ReplayGain"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ReplayGain ç±»åï¼"
+
+#: Input/vorbis/configure.c:532
+msgid "use Track Gain/Peak"
+msgstr "使ç¨é³è½¨å¢ç/å³°å¼"
+
+#: Input/vorbis/configure.c:542
+msgid "use Album Gain/Peak"
+msgstr "使ç¨ä¸è¾å¢ç/å³°å¼"
+
+#: Input/vorbis/configure.c:554
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "å¯ç¨ 6 dB æ¨è¿ + 硬æé"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"åçé误ï¼\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "é误ï¼"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "ä¿®æ¹æ 记失败(å¼)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "ä¿®æ¹æ 记失败(å
³)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "ä¿®æ¹æ 记失败"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "Ogg Vorbis æ è®°"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "æ¥æï¼"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "æè¿°ï¼"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ä½ç½®ï¼"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "çæ¬ï¼"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC ç¼å·ï¼"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "ç»ç»ï¼"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr "Ogg Vorbis ReplayGain"
+
+#: Input/vorbis/fileinfo.c:761
+msgid "Track gain:"
+msgstr "é³è½¨å¢çï¼"
+
+#: Input/vorbis/fileinfo.c:771
+msgid "Track peak:"
+msgstr "é³è½¨å³°å¼ï¼"
+
+#: Input/vorbis/fileinfo.c:782
+msgid "Album gain:"
+msgstr "ä¸è¾å¢çï¼"
+
+#: Input/vorbis/fileinfo.c:792
+msgid "Album peak:"
+msgstr "ä¸è¾å³°å¼ï¼"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr "Ogg Vorbis ä¿¡æ¯"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "é¿åº¦ï¼"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d Kbit/s (é¢å®)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d B"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis é³é¢æ件"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "å
³äº Ogg Vorbis æ件"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg·Vorbis·æä»¶ç± Xiph.org åºéä¼å¶ä½\n"
+"\n"
+"åä½ï¼\n"
+"Tony·Arcieri·<bascule at inferno.tusculum.edu>\n"
+"Contributions·from\n"
+"Chris·Montgomery·<monty at xiph.org>\n"
+"Peter·Alm·<peter at xmms.org>\n"
+"Michael·Smith·<msmith at labyrinth.edu.au>\n"
+"Jack·Moffitt·<jack at icecast.org>\n"
+"Jorn·Baayen·<jorn at nl.linux.org>\n"
+"Haavard·Kvaalen·<havardk at xmms.org>\n"
+"Gian-Carlo·Pascutto·<gcp at sjeng.org>\n"
+"\n"
+"è¯·è®¿é® Xiph.org åºéä¼ç½ç«ï¼ http://www.xiph.org/\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV é³é¢æ件"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS è¾åºæ件"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "å
³äº OSS å¼æ¾é³æç³»ç»é©±å¨ç¨å¼"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS å¼æ¾é³æç³»ç»é©±å¨ç¨åº\n"
+"\n"
+"è¿ä¸ªç¨åºæ¯èªç±è½¯ä»¶ï¼æ¨å¯ä»¥å¤å¶ææ¯ä¿®æ¹è¿ä¸ªç¨åºã\n"
+"æ¡ä»¶æ¯æ¨è¦éµå® GNU ä¸è¬å
Œ
±è®¸å¯è¯ GPL è¿ä¸ªç±èªç±è½¯ä»¶åºéä¼æåºçç\n"
+"ææ声æï¼æ¨å¯ä»¥éæ©ç¬¬äºçææ´åé¢ççæ¬ã\n"
+"\n"
+"è¿ä¸ªç¨å¼å表æ¶æ¯æå¾
å®å°ä¼å¾å¥½ç¨çï¼ä½æ¯æ²¡æä»»ä½ä¿è¯ï¼\n"
+"çè³ä¸ä¼éå«çä¿è¯å®å¯ä»¥éå®æéåä»»ä½ç¹å®ç®çã\n"
+"æ¨å¯ä»¥ç±é
读 GNU ä¸è¬å
Œ
±è®¸å¯è¯ GPL æ¥è·å¾æ´å¤ç»èã\n"
+"\n"
+"æ£å¸¸æ
åµä¸ï¼æ¨å¨æ¶å°è¿ä¸ªè½¯ä»¶çåæ¶ï¼ä¹åºè¯¥æ¶å° GNU\n"
+"GPL ææï¼å¦æ没æï¼è¯·è¿ç»èªç±è½¯ä»¶åºéä¼ï¼å°åæ¯ï¼\n"
+"59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "é»è®¤å¼ (%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "é»è®¤"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS 驱å¨ç¨åºé
ç½®"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "é³é¢è®¾å¤ï¼"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "使ç¨æ¿ä»£è®¾å¤ï¼"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "æ··é³è®¾å¤ï¼"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "设å¤"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "ç¼å²åºå¤§å° (ms)ï¼"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "ç¼å²"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "æ··é³å¨è®¾å®ï¼"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "主é³éæ§å¶ä¸æ¯ PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "æ··é³å¨"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "å
³äº ESounD æ件"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD æ件 v0.1\n"
+"\n"
+"è¿ä¸ªç¨åºæ¯èªç±è½¯ä»¶ï¼æ¨å¯ä»¥å¤å¶ææ¯ä¿®æ¹è¿ä¸ªç¨åºã\n"
+"æ¡ä»¶æ¯æ¨è¦éµå® GNU ä¸è¬å
Œ
±è®¸å¯è¯ GPL è¿ä¸ªç±èªç±è½¯ä»¶åºéä¼æåºçç\n"
+"ææ声æï¼æ¨å¯ä»¥éæ©ç¬¬äºçææ´åé¢ççæ¬ã\n"
+"\n"
+"è¿ä¸ªç¨å¼å表æ¶æ¯æå¾
å®å°ä¼å¾å¥½ç¨çï¼ä½æ¯æ²¡æä»»ä½ä¿è¯ï¼\n"
+"çè³ä¸ä¼éå«çä¿è¯å®å¯ä»¥éå®æéåä»»ä½ç¹å®ç®çã\n"
+"æ¨å¯ä»¥ç±é
读 GNUä¸è¬å
Œ
±è®¸å¯è¯ GPL æ¥è·å¾æ´å¤ç»èã\n"
+"\n"
+"æ£å¸¸æ
åµä¸ï¼æ¨å¨æ¶å°è¿ä¸ªè½¯ä»¶çåæ¶ï¼ä¹åºè¯¥æ¶å° GNU\n"
+"GPL ææï¼å¦æ没æï¼è¯·è¿ç»èªç±è½¯ä»¶åºéä¼ï¼å°åæ¯ï¼\n"
+"59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD è¾åºæ件é
ç½®"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "使ç¨è¿ç¨ä¸»æº"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "é³éæ§å¶ OSS æ··é³å¨"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "æå¡å¨"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound è¾åºæ件"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "å
³äº ALSA 驱å¨ç¨åº"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA 驱å¨ç¨åº\n"
+"\n"
+"è¿ä¸ªç¨åºæ¯èªç±è½¯ä»¶ï¼æ¨å¯ä»¥å¤å¶ææ¯ä¿®æ¹è¿ä¸ªç¨åºã\n"
+"æ¡ä»¶æ¯æ¨è¦éµå® GNU ä¸è¬å
Œ
±è®¸å¯è¯ GPL è¿ä¸ªç±èªç±è½¯ä»¶åºéä¼æåºçç\n"
+"ææ声æï¼æ¨å¯ä»¥éæ©ç¬¬äºçææ´åé¢ççæ¬ã\n"
+"\n"
+"è¿ä¸ªç¨å¼å表æ¶æ¯æå¾
å®å°ä¼å¾å¥½ç¨çï¼ä½æ¯æ²¡æä»»ä½ä¿è¯ï¼\n"
+"çè³ä¸ä¼éå«çä¿è¯å®å¯ä»¥éå®æéåä»»ä½ç¹å®ç®çã\n"
+"æ¨å¯ä»¥ç±é
读 GNU ä¸è¬å
Œ
±è®¸å¯è¯ GPL æ¥è·å¾æ´å¤ç»èã\n"
+"\n"
+"æ£å¸¸æ
åµä¸ï¼æ¨å¨æ¶å°è¿ä¸ªè½¯ä»¶çåæ¶ï¼ä¹åºè¯¥æ¶å° GNU\n"
+"GPL ææï¼å¦æ没æï¼è¯·è¿ç»èªç±è½¯ä»¶åºéä¼ï¼å°åæ¯ï¼\n"
+"59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s è¾åºæ件"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "æªç¥å£°å¡"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "é»è®¤ PCM 设å¤(%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA 驱å¨ç¨åºé
ç½®"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "æ··é³å¨:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "使ç¨è½¯ä»¶é³éæ§å¶ï¼"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "æ··é³è®¾å¤ï¼"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "设å¤è®¾ç½®ï¼"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "é«çº§è®¾ç½®ï¼"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "ç¼å²åºå¤§å° (ms)ï¼"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "å¨æå¤§å° (ms)ï¼"
+
+#: Output/alsa/configure.c:402
+msgid "Thread buffer time (ms):"
+msgstr "ç¼å²åºå¤§å° (ms)ï¼"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr "å¤çº¿ç¨æ¨¡å¼"
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap 模å¼"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "é«çº§è®¾ç½®"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/åæ¢çªå£è£
饰"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/å
³é"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "æåèå´"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "æåèå´ï¼ é¢è²éæ©"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "é项ï¼"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "æ¼å¥è
/èºæ¯å®¶"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "ä¸è¾"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "é£æ ¼"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "æ件å"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "æ件路å¾"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "æ件æ©å±å"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "é³è½¨å称"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "é³è½¨ç¼å·"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "æ¥æ"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "年份"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "å¤æ³¨"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: å¦æ %n å
ç´ åå¨ï¼æ¾ç¤ºâ...â"
+
+#: beep/about.c:42
+#, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"åºäº XMMS çåªä½ææ¾æº\n"
+"\n"
+"çæææ (C) 2003-2004 BMP å¼åå°ç»\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "å¼åè
ï¼"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr ""
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr ""
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong å¼ å¯é"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr ""
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr ""
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr ""
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr ""
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "æä¾å¸®å©è
ï¼"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr ""
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr ""
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr ""
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr ""
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr ""
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr ""
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr ""
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr ""
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr ""
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr ""
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr ""
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr ""
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr ""
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr ""
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr ""
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr ""
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr ""
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr ""
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "主页åå¾å½¢ï¼"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "巴西è¡èçè¯ï¼"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr ""
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "å¸åå¡å°¼è¯ï¼"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr ""
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ä¸æï¼"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "æ·å
è¯ï¼"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr ""
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "è·å
°è¯ï¼"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr ""
+
+#: beep/about.c:108
+msgid "Finnish:"
+msgstr "è¬å
°è¯ï¼"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "æ³è¯ï¼"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr ""
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "å¾·è¯ï¼"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr ""
+
+#: beep/about.c:117
+msgid "Georgian: "
+msgstr "ä¹æ²»äºè¯ï¼"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "å¸è
è¯ï¼"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr ""
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "åçå©è¯ï¼"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr ""
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "æ大å©è¯ï¼"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr ""
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "æ¥è¯ï¼"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr ""
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "æè¯ï¼"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr ""
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ç«é¶å®è¯ï¼"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr ""
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "马å
¶é¡¿è¯ï¼"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr ""
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "æ³¢å
°è¯ï¼"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr ""
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "ç½é©¬å°¼äºè¯ï¼"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "ä¿è¯ï¼"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr ""
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "æ¯æ´ä¼å
è¯ï¼"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr ""
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "西ççè¯ï¼"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr ""
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "çå
¸è¯ï¼"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr ""
+
+#: beep/about.c:165
+msgid "Ukrainian:"
+msgstr "ä¹å
å
°è¯ï¼"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "å¨å°æ¯è¯ï¼"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "å
³äº BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "è´è°¢"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ç¿»è¯è
"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "åæå¤ç"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60Hz"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170Hz"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310Hz"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600Hz"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHz"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHz"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHz"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHz"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHz"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHz"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/è£
å
¥"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/è£
å
¥/é¢è®¾"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/è£
å
¥/èªå¨è£
å
¥é¢è®¾"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/è£
å
¥/é»è®¤"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/è£
å
¥/å½é¶"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/è£
å
¥/ä»æ件"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/è£
å
¥/ä» WinAMP EQF æ件"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/导å
¥"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/导å
¥/WinAMP é¢è®¾"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/ä¿å"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/ä¿å/é¢è®¾"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/ä¿å/èªå¨è¯»åé¢è®¾"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/ä¿å/é»è®¤"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/ä¿å/å°æ件"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/ä¿å/å° WinAMP EQF æ件"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/å é¤"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/å é¤/é¢è®¾"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/å é¤/èªå¨è¯»åé¢è®¾"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP åè¡¡å¨"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "é¢è®¾"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "é¢è®¾"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "读åé¢è®¾"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "读åèªå¨é¢è®¾"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "读ååè¡¡å¨é¢è®¾"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "ä¿åé¢è®¾"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "ä¿åèªå¨é¢è®¾"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "ä¿ååè¡¡å¨é¢è®¾"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "å é¤é¢è®¾"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "å é¤èªå¨é¢è®¾"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%sï¼é项â%sâä¸æç¡®\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%sï¼é项â--%sâä¸å
许使ç¨åæ°\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%sï¼é项â%c%sâä¸å
许使ç¨åæ°\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%sï¼é项â%sâéè¦åæ°\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%sï¼æ æ³è¾¨è¯çé项â--%sâ\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%sï¼æ æ³è¾¨è¯çé项â%c%sâ\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%sï¼ä¸æ£ç¡®çé项 -- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%sï¼æ²¡æè¿æ ·çé项 -- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%sï¼é项éè¦åæ° -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%sï¼é项â-W %sâæ æ³è¾¨è¯\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%sï¼é项â-W %sâä¸å
许åæ°\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>æ æ³ææ¾æ件ã</big></b>\n"
+"\n"
+"ä¸è½ææ¾ä¸åçæ件ã"
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "ä¸è¦åæ¾ç¤ºè¿è¦å"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "æ¾ç¤ºæ´å¤ç»è(_d)"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "æ件å"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "æ件åï¼"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "没æè¾å
¥æ件å¯è¯å«æ¤æ件"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "è¾å
¥æ件ï¼%s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "æ æ³å建æ¥å¿æ件 (%s)ï¼\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep åªä½ææ¾æº"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr ""
+"æ°å»ºç®å½ %s 失败\n"
+"é误ï¼%s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"ç¨æ³ï¼beep-media-player [é项] [æ件] ...\n"
+"\n"
+"é项ï¼\n"
+"âââ\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "æ¾ç¤ºæå并éåº"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "éæ© BMP/XMMS ä¼è¯ (é»è®¤ï¼0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "å¨ææ¾å表ä¸ååè·³"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "å¼å§ææ¾ç°æå表"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "æåå½åææ²"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "åæ¢å½åææ²"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "å¦æ£ææ¾åæåï¼å¦åææ¾"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "å¨ææ¾å表ä¸ååè·³"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "ä¸è¦æ¸
é¤ææ¾å表"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "æ¾ç¤ºä¸»çªå£"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "æ¿æ´» BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "以å¾è¿æ¥ ID"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "æ¾ç¤ºçæ¬å·å¹¶éåº\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"æ¶å° SIGSEGV ä¿¡å·\n"
+"\n"
+"è¿å¯è½æ¯ BMP ç¨åºéçé误ã æ¨å¦æä¸ç¥éè¿æ¯æä¹ä¸åäºï¼è¯·ç¨é®ä»¶èç»æ们ãå°"
+"åæ¯ï¼beepmp-devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>æ æ³å è½½ç®è¤ã</big></b>\n"
+"\n"
+"请æ£æ¥è®¾å¨'%s'çç®è¤æ¯å¯ç¨çï¼å¹¶ä¸ç¡®ä¿é»è®¤ç®è¤ä¹å·²æ£ç¡®å®è£
å°'%s'ã\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"æ±æï¼æ¨ç GTK+ çæ¬(%d.%d.%d)ä¸è½åBMP ä¸èµ·å·¥ä½ã\n"
+"è¯·ä½¿ç¨ GTK+ %s æ以åççæ¬ã\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"å¾æ±æï¼æ¨çå¹³å°å¥½åä¸æ¯æ线ç¨ã\n"
+"\n"
+"å¦æä½ åæ¬ä½¿ç¨ libc5 ç Linux 并ä¸è£
äº GLIB & GTK+ \n"
+"ä¹ååå®è£
äº LinuxThreadsï¼è¯·éæ°ç¼è¯ GLIB & GTK+ã\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: æ æ³æå¼æ¾ç¤ºå¨ï¼å³å°éåºã"
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/æ¥çé³è½¨ä¿¡æ¯"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/èªå¨å·å¨æå"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/è§è§å模å¼"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/è§è§å模å¼/åæå¨"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/è§è§å模å¼/示波å¨"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/è§è§å模å¼/å
³é"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/åæå¨æ¨¡å¼"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/åæå¨æ¨¡å¼/æ£å¸¸"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/åæå¨æ¨¡å¼/ç«ç°"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/åæå¨æ¨¡å¼/åç´çº¿"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/åæå¨æ¨¡å¼/线段"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/åæå¨æ¨¡å¼/æ¡ç¶"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/åæå¨æ¨¡å¼/山峰"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/示波å¨æ¨¡å¼"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/示波å¨æ¨¡å¼/ç¹æ£æ¥å¨"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/示波å¨æ¨¡å¼/ç°æ£æ¥å¨"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/示波å¨æ¨¡å¼/åºä½æ£æ¥å¨"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/çªå£é´å½± VU 模å¼"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/çªå£é´å½± VU 模å¼/æ£å¸¸"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/çªå£é´å½± VU 模å¼/å¹³æ»"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/å·æ°ç"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/å·æ°ç/å
¨é(约 50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/å·æ°ç/ä¸å(约 25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/å·æ°ç/ååä¹ä¸(约 13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/å·æ°ç/å
«åä¹ä¸(约 6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/åæå¨æ¶æ£"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/åæå¨æ¶æ£/ææ
¢"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/åæå¨æ¶æ£/æ
¢"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/åæå¨æ¶æ£/ä¸ç"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/åæå¨æ¶æ£/å¿«"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/åæå¨æ¶æ£/æå¿«"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/顶ç¹æ¶æ£"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/顶ç¹æ¶æ£/ææ
¢"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/顶ç¹æ¶æ£/æ
¢"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/顶ç¹æ¶æ£/ä¸æ¸©ä¸ç«"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/顶ç¹æ¶æ£/å¿«"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/顶ç¹æ¶æ£/æå¿«"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/éå¤ææ¾"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/ä¹±åºææ¾"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ææ¾"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/æå"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/åæ¢"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/åä¸é¦"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/ä¸ä¸æ²"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/è·³å°å表æå"
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/è·³å°æ件"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/è·³å°ç¹å®æ¶é´"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/é¦é项"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/æ¾ç¤º(_V)"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/å
³äº BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/éåº(_Q)"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/æ件..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/ç½å..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/æ¾ç¤ºææ¾å表"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/æ¾ç¤ºåè¡¡å¨"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/å·²è¿æ¶é´"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/å©ä½æ¶é´"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/æ°¸è¿å¨ä¸å±"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/æ¾å¨å
¨é¨å·¥ä½åºä¸"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/å·èµ·ææ¾æº"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/å·èµ·ææ¾å表"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/å·èµ·åè¡¡å¨"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr ""
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "å¯åä½æ°ç"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "è·³å°ç¹å®æ¶é´"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "å:ç§"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "é³è½¨é¿åº¦ï¼"
+
+#: beep/mainwin.c:1364
+msgid "Un_queue"
+msgstr "ä¸æé(_q)"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+msgid "_Queue"
+msgstr "æé(_Q)"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "è·³å°é³è½¨"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "è¿æ»¤: "
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "æ·»å æ件"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "æ·»å ç½å"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "æ寻ï¼%d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "é³éï¼%d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "平衡ï¼%d%% å·¦"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "平衡ï¼ä¸å¿"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "平衡ï¼%d%% å³"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "é项èå"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "åæ¶æ°¸è¿å¨æä¸å± (N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "æ°¸è¿å¨æä¸å± (N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "åæ¶æ°¸è¿å¨æä¸å±"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "æ°¸è¿å¨æä¸å±"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "æ件信æ¯æ¡"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "ï¼ï¼åå大å°åè½å·²ç»è¢«å é¤ï¼ï¼"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "å¯è§ææèå"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>æ¾ä¸å°è½ææ¾ç CDã</big></b>\n"
+"\n"
+"没ææ¾å
¥ CDï¼æè
æ¾å
¥çä¸æ¯é³é¢Â·CDã\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>æ æ³ä½¿ç¨é³é¢è®¾å¤ã</big></b>\n"
+"请确å®:\n"
+"1. æ¨æ¯å¦éæ©äºæ£ç¡®çè¾åºæ件ã\n"
+"2. 没æå
¶ä»çç¨å¼æ£å¨ä½¿ç¨é³æå¡ã\n"
+"3. æ¨çé³æå¡ææ£å¸¸é©±å¨ã\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/å é¤éä¸"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/å é¤éæ©ä»¥å¤"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/å é¤å
¨é¨"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/æéåæ¢"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/æ·»å CDããã"
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/æ·»å ç½åããã"
+
+#: beep/playlistwin.c:161
+msgid "/Add Folders..."
+msgstr "/æ·»å æ件夹..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/æ·»å æ件ããã"
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/æ¸
é¤éå"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/移é¤ä¸åå¨çæ件"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/æ°å»ºå表"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/æå¼å表"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/ä¿åå表"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/æ´æ°è§å¾"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/å转éæ©"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/å
¨é¨ä¸é"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/å
¨é¨éä¸"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/æä¹±å表"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/å转å表"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/æåºå表"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/æåºå表/ææ²åæåº"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/æåºå表/ææ件åæåº"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/æåºå表/æè·¯å¾+æ件åæåº"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/æåºå表/ææ¥ææåº"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/æåºéæ©"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/æåºéæ©/ææ²åæåº"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/æåºéæ©/ææ件åæåº"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/æåºéæ©/æè·¯å¾+æ件åæåº"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/æåºéæ©/ææ¥ææåº"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "åå
¥ææ¾å表â%sâï¼%s åºé"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s å·²ç»åå¨ã继ç»ï¼"
+
+#: beep/playlistwin.c:818
+#, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr ""
+"æ æ³ä¿åææ¾å表ï¼\n"
+"æªç¥æ件类å %s\n"
+
+#: beep/playlistwin.c:928
+msgid "Load Playlist"
+msgstr "è£
å
¥ææ¾å表"
+
+#: beep/playlistwin.c:940
+msgid "Save Playlist"
+msgstr "ä¿åææ¾å表"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP ææ¾å表"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "å¤è§"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "åè¡¡å¨"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "é¼ æ "
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "ææ¾å表"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "æ件"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "èºæ¯å®¶"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "é³è½¨ç¼å·"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "æ件路å¾"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "å¯ç¨"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "æè¿°"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "项ç®"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "é¦é项"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "æå¼/æ·»å æ件çä¼è¯"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "æå¼æ件"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "æå¼åå
³é对è¯"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "æ·»å æ件"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "æ·»å åå
³é对è¯"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (é UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP é¦é项"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>æ件</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "åªä½æ件表(_M)ï¼"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>åªä½</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "éç¨æ件表(_G)ï¼"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>常è§</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "å¯è§æææ件表(_V)ï¼"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>å¯è§åææ</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "æææ件表(_E)ï¼"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>ææ</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "å½åè¾åºæ件(_C)ï¼"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr "ä¿®æ¹å°å¨ææ¾ä¸ä¸é¦ææ¶çæãæ¨ä¹å¯ä»¥æååæ¢å¤ææ¾ä»¥è®©ä¿®æ¹çæã"
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>è¾åº</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>å¤è§</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>ç®è¤(_S)</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>åä½(_F)</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "ææ¾å¨(_P)ï¼"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "ææ¾å表(_P)ï¼"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "éæ©ä¸»çªå£åä½ï¼"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "éæ©ææ¾å表åä½ï¼"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>æ项(_M)</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "å¨ææ¾å表ä¸æ¾ç¤ºç¼å·"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "使ç¨èªå®å
æ "
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>é¼ æ </b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>é¼ æ æ»è½®</b>"
+
+#: beep/glade/prefswin.glade:1499
+msgid "Changes volume by"
+msgstr "è°èé³é"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "%"
+
+#: beep/glade/prefswin.glade:1547
+msgid "Scrolls playlist by"
+msgstr "å表æ»å¨"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "è¡"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>ææ¾å表</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>æ件å</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "å°ä¸å线转æ¢æç©ºæ ¼"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "å° %20 转æ¢æç©ºæ ¼"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>å
æ°æ®</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "ä»æ件ä¸è·åå
ç´ æ®ã"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "使ç¨ææ¾å表ä¸çå
æ°æ®"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "æå¼æ件æè
ææ件å å
¥å表æ¶å è½½åæ°æ®"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "è£
å
¥æ¶"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "å½ææ²å¨ææ¾å表ä¸å¯è§æ¶è¯»ååæ°æ®"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "æ¾ç¤ºæ¶"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ææ¾</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "ææ²æå®åï¼ä¸è¦èªå¨å¿«è¿ã"
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "ä¸å
许å表快è¿"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "å¨ææ²ä¹é´æå"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "æå"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ç§"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>ææ²æ¾ç¤º</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "èªå®æ ¼å¼ï¼"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr ""
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"æ²å\n"
+"èºæ¯å®¶ ï¼ æ²å\n"
+"èºæ¯å®¶ ï¼ ä¸è¾ ï¼ æ²å\n"
+"ä¸è¾ ï¼ æ²å\n"
+"èªå®"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "æ¾ç¤ºæ é¢æ ¼å¼ä¿¡æ¯"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>åè¡¡å¨</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>é¢è®¾</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "ç®å½é¢è®¾æ件ï¼"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "æ件é¢è®¾æ©å±åï¼"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "å¯ç¨é¢è®¾ï¼"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "æ·»å åå
³é对è¯"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "å
¨é¨éä¸"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "å
¨é¨ä¸é"
+
+#~ msgid "Default skin:"
+#~ msgstr "é»è®¤ç®è¤ï¼"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "æ æ³åå§å gnome-vfsã\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/ä¸å
许ææ¾å表快è¿"
+
+#~ msgid "/By extension"
+#~ msgstr "/ç±æ件æ©å±å"
+
+#~ msgid "Add Folders - BMP"
+#~ msgstr "æ·»å æ件夹"
+
+#~ msgid "Add URL"
+#~ msgstr "æ·»å URL"
+
+#~ msgid "/Sort by Title"
+#~ msgstr "/ææ²åæåº"
+
+#~ msgid "/Sort by Filename"
+#~ msgstr "/ææ件åæåº"
+
+#~ msgid "/Sort by Date"
+#~ msgstr "/ææ¥ææåº"
+
+#~ msgid "/Play CD"
+#~ msgstr "/ææ¾ CD"
+
+#~ msgid "/5 seconds REW"
+#~ msgstr "/åå 5 ç§"
+
+#~ msgid "/5 seconds FFWD"
+#~ msgstr "/åå 5 ç§"
+
+#~ msgid "/Add"
+#~ msgstr "/æ·»å "
+
+#~ msgid "/Playback"
+#~ msgstr "/ææ¾"
+
+#~ msgid "/_Options"
+#~ msgstr "/é项(_O)"
+
+#~ msgid "/Playlist"
+#~ msgstr "/ææ¾å表"
+
+#~ msgid "/Close Window"
+#~ msgstr "/å
³éçªå£"
+
+#~ msgid "Play Files"
+#~ msgstr "ææ¾æ件"
+
+#~ msgid "Failed to delete \"%s\": %s."
+#~ msgstr "å é¤å¤±è´¥â%sâï¼%sã"
+
+#~ msgid "%d of %d files successfully deleted."
+#~ msgstr "æåå é¤ %d 个æ件ï¼æ»å
± %d 个"
+
+#~ msgid "XMMS: Files deleted"
+#~ msgstr "XMMSï¼æ件已å é¤"
+
+#~ msgid "Really delete %d files?"
+#~ msgstr "ç¡®å®è¦å é¤ %d 个æ件åï¼"
+
+#~ msgid "Really delete: \"%s\"?"
+#~ msgstr "确认å é¤ï¼â%sâï¼"
+
+#~ msgid "Load"
+#~ msgstr "è£
å
¥"
+
+#~ msgid "Auto-load preset"
+#~ msgstr "èªå¨è¯»åé¢è®¾å¼"
+
+#~ msgid "Zero"
+#~ msgstr "å½é¶"
+
+#~ msgid "From file"
+#~ msgstr "ä»æ件"
+
+#~ msgid "From WinAMP EQF file"
+#~ msgstr "ä» WinAMP EQF æ件"
+
+#~ msgid "Import"
+#~ msgstr "导å
¥"
+
+#~ msgid "WinAMP presets"
+#~ msgstr "WinAMP é¢è®¾"
+
+#~ msgid "To file"
+#~ msgstr "å°æ件"
+
+#~ msgid "To WinAMP EQF file"
+#~ msgstr "å° WinAMP EQF æ件"
+
+#~ msgid "Configure Equalizer"
+#~ msgstr "é
ç½®åè¡¡å¨"
+
+#~ msgid "Enable SHOUT/Icecast title streaming"
+#~ msgstr "å¯ç¨ SHOUT/Icecast æ²åæµ"
+
+#~ msgid "XMMS compatibility mode"
+#~ msgstr "XMMS å
¼å®¹æ¨¡å¼"
+
+#~ msgid "/Visualization plugins"
+#~ msgstr "/å¯è§åæææ件"
+
+#~ msgid "/Show Graphical EQ"
+#~ msgstr "/æ¾ç¤ºå¾å½¢åè¡¡å¨"
+
+#~ msgid "/Reload skin"
+#~ msgstr "/éæ°å è½½ç®è¤"
+
+#~ msgid "/Show on all desktops"
+#~ msgstr "/å¨æææ¡é¢ä¸æ¾ç¤º"
+
+#~ msgid "/WindowShade Mode"
+#~ msgstr "/çªå£é´å½±æ¨¡å¼"
+
+#~ msgid "/Playlist WindowShade Mode"
+#~ msgstr "/ææ¾å表çªå£é´å½±æ¨¡å¼"
+
+#~ msgid "/Equalizer WindowShade Mode"
+#~ msgstr "/åè¡¡å¨çªå£é´å½±æ¨¡å¼"
+
+#~ msgid "/DoubleSize"
+#~ msgstr "/两åæ¾å¤§"
+
+#~ msgid "/Easy Move"
+#~ msgstr "/å¦æ移å¨"
+
+#~ msgid "Jump to:"
+#~ msgstr "è·³å°ï¼"
+
+#~ msgid "Jump"
+#~ msgstr "è·³è·"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "åæ¶å å模å¼"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "å¼å¯å å模å¼"
+
+#~ msgid "Smooth title scrolling in main window"
+#~ msgstr "让æ é¢å¹³æ»å·å¨"
+
+#~ msgid "Unplayable files - BMP"
+#~ msgstr "æ æ³ææ¾çæ件"
+
+#~ msgid ""
+#~ "The following files could not be played. They are either not accessible "
+#~ "or require a dedicated input plugin."
+#~ msgstr "æ æ³ææ¾ä»¥ä¸çæ件ã æ æ³è®¿é®æè
没æéåçè¾å
¥æ件"
+
+#~ msgid "_Look for plugins in:"
+#~ msgstr "å¨ä»¥ä¸ç®å½æç´¢æ件(_L)ï¼"
+
+#~ msgid "<span size=\"medium\"><b>Settings</b></span>"
+#~ msgstr "<span size=\"medium\"><b>设置</b></span>"
+
+#~ msgid "Directory"
+#~ msgstr "ç®å½ï¼"
+
+#~ msgid "Directory browser"
+#~ msgstr "ç®å½æµè§å¨"
+
+#~ msgid "/Add/Directories..."
+#~ msgstr "/æ·»å /ç®å½..."
+
+#~ msgid "Add Directories... "
+#~ msgstr "æ·»å ç®å½"
+
+#~ msgid "Look into sub_folders"
+#~ msgstr "æ¥æ¾åç®å½"
+
+#~ msgid "<b>_Filter:</b>"
+#~ msgstr "<b>è¿æ»¤(_F)ï¼</b>"
+
+#~ msgid "<b>Other options</b>"
+#~ msgstr "<b>å
¶ä»</b>"
+
+#~ msgid ""
+#~ "Update the playlist according to the settings. This doesn't happen "
+#~ "automatically because it can take a very long time when having a lot of "
+#~ "files in the list."
+#~ msgstr "æ ¹æ®è®¾ç½®æ´æ°ææ¾å表ã"
+
+#~ msgid "Update playlist"
+#~ msgstr "æ´æ°ææ¾å表"
+
+#~ msgid "Delete"
+#~ msgstr "å é¤"
+
+#~ msgid "Close"
+#~ msgstr "å
³é"
+
+#~ msgid "BMP Equalizer Preferences"
+#~ msgstr "BMP åè¡¡å¨é¦é页"
+
+#~ msgid ""
+#~ "If \"Auto\" is enabled on the equalizer, xmms will try to load equalizer "
+#~ "presets like this:\n"
+#~ "1: Look for a preset file in the directory of the file we are about to "
+#~ "play.\n"
+#~ "2: Look for a directory preset file in the same directory.\n"
+#~ "3: Look for a preset saved with the \"auto-load\" feature\n"
+#~ "4: Finally, try to load the \"default\" preset"
+#~ msgstr ""
+#~ "å¦æ设å®âèªå¨âåè¡¡å¨, BMP å°ä¼æç
§ä¸å顺åºå è½½åè¡¡å¨ï¼\n"
+#~ "1: å¨æ们è¦ææ¾çæ件æå¨ç®å½ä¸å¯»æ¾ä¸ä¸ªé¢è®¾æ件ã\n"
+#~ "2: å¨åä¸ç®å½ä¸å¯»æ¾ä¸ä¸ªç®å½é¢è®¾æ件ã\n"
+#~ "3: 寻æ¾å©ç¨âèªå¨è¯»åâä¿åçé¢è®¾æ件ã\n"
+#~ "4: æåå°è¯âé»è®¤âé¢è®¾å¼"
+
+#~ msgid "/Jump to Track"
+#~ msgstr "/è·³å°é³è½¨"
+
+#~ msgid "/Save as..."
+#~ msgstr "/å¦å为..."
+
+#~ msgid "A_dd all"
+#~ msgstr "æ·»å å
¨é¨(_d)"
+
+#~ msgid "Play"
+#~ msgstr "ææ¾"
+
+#~ msgid "_Skin list:"
+#~ msgstr "ç®è¤(_S)ï¼"
+
+#~ msgid "<b>_Playlist font:</b>"
+#~ msgstr "<b>ææ¾å表åä½(_P)ï¼</b>"
+
+#~ msgid "<b>_Main window font:</b>"
+#~ msgstr "<b>主çªå£åä½(_M)ï¼</b>"
+
+#~ msgid "ALSA Output Plugin %s"
+#~ msgstr "ALSA è¾åºæ件 %s"
+
+#~ msgid "User defined:"
+#~ msgstr "ç¨æ·å®ä¹ï¼"
+
+#~ msgid "Mixer device"
+#~ msgstr "æ··é³è®¾å¤ï¼"
+
+#, fuzzy
+#~ msgid "Settings"
+#~ msgstr "æ··é³å¨è®¾å®ï¼"
+
+#, fuzzy
+#~ msgid "Blur Scope"
+#~ msgstr "æåèå´"
+
+#~ msgid "Choose a preferences category"
+#~ msgstr "请éæ©é¦é项ç®"
+
+#, fuzzy
+#~ msgid "BMP: Add Directories... "
+#~ msgstr "/æ·»å ç®å½"
+
+#~ msgid "Import equalizer presets"
+#~ msgstr "导å
¥åè¡¡å¨é¢è®¾å¼"
+
+#~ msgid "Version: %s"
+#~ msgstr "çæ¬ï¼ %s"
+
+#~ msgid "/Skin Browser"
+#~ msgstr "/ç®è¤æµè§å¨"
+
+#~ msgid "Plugin Name"
+#~ msgstr "æ件å"
+
+#~ msgid "Enable plugin"
+#~ msgstr "å¯ç¨æ件"
+
+#~ msgid "Output Plugin"
+#~ msgstr "è¾åºæ件"
+
+#~ msgid "Effects Plugins"
+#~ msgstr "æææ件"
+
+#~ msgid "Configure"
+#~ msgstr "é
ç½®"
+
+#~ msgid "About"
+#~ msgstr "å
³äº"
+
+#~ msgid "General Plugins"
+#~ msgstr "éç¨æ件"
+
+#~ msgid "Visualization Plugins"
+#~ msgstr "å¯è§æææ件"
+
+#, fuzzy
+#~ msgid "Read file tag on"
+#~ msgstr "读åä¿¡æ¯çæ¶é´"
+
+#, fuzzy
+#~ msgid "Read song information only when starting to play"
+#~ msgstr "ä»
å½ææ²å¼å§ææ¾æ¶æ读åææ²æ é¢åé¿åº¦"
+
+#~ msgid "Demand"
+#~ msgstr "æé"
+
+#, fuzzy
+#~ msgid "Read song information as soon as the song is loaded to the playlist"
+#~ msgstr "å½ææ²è£
å
¥ææ¾æ¸
åæ¶è¯»åææ²æ é¢åé¿åº¦"
+
+#~ msgid "Warn about non-playable files"
+#~ msgstr "è¦åæ æ³ææ¾ç件"
+
+#~ msgid "Sort \"Jump to file\" alphabetically"
+#~ msgstr "ç¨åæ¯é¡ºåºæåâè·³å°æ件â"
+
+#~ msgid "Allow multiple instances"
+#~ msgstr "å
许å¤ä¸ªç¨åºæ§è¡"
+
+#, fuzzy
+#~ msgid "Show window decorations"
+#~ msgstr "æ¾ç¤ºçªå£ç®¡çå¨çè£
饰"
+
+#~ msgid "Always show clutterbar"
+#~ msgstr "æ°¸è¿æ¾ç¤º clutterbar"
+
+#, fuzzy
+#~ msgid ""
+#~ "The \"clutterbar\" is the row of buttons at the left side of the main "
+#~ "window"
+#~ msgstr "âclutterbarâãå°±æ¯ä¸»çªå£å·¦ä¾§çä¸è¡æé®"
+
+#~ msgid "Save window positions"
+#~ msgstr "ä¿åçªå£ä½ç½®"
+
+#~ msgid "Dim titlebar when inactive"
+#~ msgstr "å½ç¨åºä¸æ§è¡æ¶éææ é¢å"
+
+#~ msgid "Equalizer doublesize linked"
+#~ msgstr "åå大å°çåè¡¡å¨å·²è¿æ¥"
+
+#~ msgid "Use '\\' as a directory delimiter"
+#~ msgstr "ç¨â\\âä½ä¸ºç®å½åé符å·"
+
+#~ msgid "pixels"
+#~ msgstr "åç´ "
+
+#, fuzzy
+#~ msgid "%"
+#~ msgstr "%d"
+
+#~ msgid "Audio I/O Plugins"
+#~ msgstr "é³é¢è¾å
¥è¾åºæ件"
+
+#~ msgid "Fonts"
+#~ msgstr "åä½"
+
+#~ msgid "BMP Skin Browser"
+#~ msgstr "BMP ç®è¤æµè§å¨"
+
+#~ msgid "Select random skin on play"
+#~ msgstr "å¨ææ¾æ¶éæºéæ©ç®è¤"
+
+#~ msgid "/_Enqueue"
+#~ msgstr "/å å
¥å表(_E)"
+
+#, fuzzy
+#~ msgid "/_Collapse"
+#~ msgstr "/å
³é"
+
+#~ msgid "/Remove"
+#~ msgstr "/å é¤"
+
+#, fuzzy
+#~ msgid "/Rename"
+#~ msgstr "/å é¤"
+
+#~ msgid "/New Playlist"
+#~ msgstr "/æ°å»ºå表"
+
+#~ msgid "Searching folders..."
+#~ msgstr "æ£å¨æç´¢..."
+
+#~ msgid "bmp: Jump to time"
+#~ msgstr "bmp: è·³å°ç¹å®æ¶é´"
+
+#~ msgid "Cannot play CD"
+#~ msgstr "æ æ³ææ¾ CD"
+
+#~ msgid ""
+#~ "The inserted CD is not an Audio CD.\n"
+#~ "Unable to start playback."
+#~ msgstr ""
+#~ "æå
¥çCD并éé³é¢CDã\n"
+#~ "æ æ³ææ¾ã"
+
+#~ msgid "bmp: Add Files..."
+#~ msgstr "bmp: æ·»å æ件..."
+
+#~ msgid "bmp: Configure Equalizer"
+#~ msgstr "bmp: é
ç½®åè¡¡å¨"
+
+#~ msgid "bmp"
+#~ msgstr "bmp"
+
+#~ msgid "Unable to write playlist!"
+#~ msgstr "æ æ³åå
¥ææ¾æ¸
åï¼"
+
+#~ msgid "bmp: Error: File exists!"
+#~ msgstr "bmp: éè¯¯ï¼ æ件已åå¨ï¼"
+
+#~ msgid "Overwrite"
+#~ msgstr "è¦ç"
+
+#~ msgid "Unknown filetype for %s"
+#~ msgstr "%s çæ件类åæªç¥"
+
+#~ msgid "Save options"
+#~ msgstr "ä¿åé项"
+
+#~ msgid "Determine file type:"
+#~ msgstr "ç¡®å®æ件类åï¼"
+
+#~ msgid "bmp: Error: Delete files?"
+#~ msgstr "bmp: éè¯¯ï¼ å é¤æ件ï¼"
+
+#~ msgid "Warning"
+#~ msgstr "è¦å"
+
+#~ msgid ""
+#~ "Realtime priority is a way for BMP to get a higher\n"
+#~ "priority for CPU time. This might give less \"skips\".\n"
+#~ "\n"
+#~ "This requires that BMP is run with root privileges and\n"
+#~ "may, although it's very unusal, lock up your computer.\n"
+#~ "Running BMP with root privilegies might also have\n"
+#~ "security implications.\n"
+#~ "\n"
+#~ "Using this feature is not encouraged.\n"
+#~ "To activate this you need to restart BMP."
+#~ msgstr ""
+#~ "å®æ¶ä¼å
级å¯ä»¥ä¿è¯ BMP æ¢å°è¶³å¤ç CPU èµæº, \n"
+#~ "è¿æ ·è°é³æçé³çæ
åµå°±ä¼æ¯è¾å°åºç°ã\n"
+#~ "\n"
+#~ "è¿è¦æ± BMP 以 root çæéè¿è¡ãç¶èå¨æäºä¸å¸¸\n"
+#~ "è§çæ
åµä¸ï¼è¿ä¸ªæéæå¯è½ä¼éä½æ¨ççµèã以\n"
+#~ "root æéè¿è¡ BMP è¿å¯è½å¯¼è´å
¶å®çå®å
¨é®é¢ã\n"
+#~ "\n"
+#~ "ä¸æ¨è使ç¨æ¤ç¹æ§ã\n"
+#~ "è¦æ¿æ´»æ¤é项ï¼æ¨éè¦éæ°å¯å¨ BMPã"
+
+#~ msgid "Transparent playlist window"
+#~ msgstr "éæçææ¾å表çªå£"
+
+#~ msgid "Use realtime priority when available"
+#~ msgstr "å¯è½æ¶ä½¿ç¨å®æ¶æé"
+
+#~ msgid "Run BMP with higher priority (not recomended)"
+#~ msgstr "以è¾é«ä¼å
级è¿è¡ BMP (ä¸æ¨è)"
+
+#~ msgid "Snap windows at"
+#~ msgstr "å·èµ·çªå£çä½ç½®"
+
+#~ msgid "bmp: Preferences and Settings"
+#~ msgstr "bmp: é¦é页"
+
+#~ msgid "(none)"
+#~ msgstr "(æ )"
+
+#~ msgid "bmp: Add Url..."
+#~ msgstr "bmp: æ·»å URL..."
+
+#~ msgid "bmp: Load files"
+#~ msgstr "bmp: è£
å
¥æ件"
+
+#~ msgid "Bitrate:"
+#~ msgstr "ä½éçï¼"
+
+#~ msgid "Samplerate:"
+#~ msgstr "éæ ·çï¼"
+
+#~ msgid "Filesize:"
+#~ msgstr "æ件大å°ï¼"
+
+#~ msgid "Echo Plugin %s"
+#~ msgstr "åé³æ件 %s"
+
+#~ msgid ""
+#~ "Echo Plugin\n"
+#~ "By Johan Levin 1999.\n"
+#~ "\n"
+#~ "Surround echo by Carl van Schaik 1999"
+#~ msgstr ""
+#~ "åé³æ件\n"
+#~ "\n"
+#~ "Johan Levin 1999 å¶ä½\n"
+#~ "ç¯ç»å£°ç± Carl van Schaik 1999 å¶ä½"
+
+#~ msgid "Configure Echo"
+#~ msgstr "设å®åé³"
+
+#~ msgid "Delay: (ms)"
+#~ msgstr "延è¿ï¼(ms)"
+
+#~ msgid "Feedback: (%)"
+#~ msgstr "åé¦ï¼(%)"
+
+#~ msgid "Volume: (%)"
+#~ msgstr "é³éï¼(%)"
+
+#~ msgid "Surround echo"
+#~ msgstr "ç¯ç»åé³"
+
+#~ msgid "Cancel"
+#~ msgstr "åæ¶"
+
+#~ msgid "Apply"
+#~ msgstr "åºç¨"
+
+#~ msgid ""
+#~ "Extra Stereo Plugin\n"
+#~ "\n"
+#~ "By Johan Levin 1999."
+#~ msgstr ""
+#~ "è¶
强ç«ä½å£°æ件\n"
+#~ "\n"
+#~ "Johan Levin 1999 å¶ä½"
+
+#~ msgid "Extra Stereo Plugin %s"
+#~ msgstr "è¶
强ç«ä½å£°æ件 %s"
+
+#~ msgid "About Extra Stereo Plugin"
+#~ msgstr "å
³äºè¶
强ç«ä½å£°æ件"
+
+#~ msgid "Configure Extra Stereo"
+#~ msgstr "é
ç½®è¶
强ç«ä½å£°"
+
+#~ msgid "Effect intensity:"
+#~ msgstr "ææ强度ï¼"
+
+#~ msgid "About Voice Removal Plugin"
+#~ msgstr "å
³äºäººå£°æ¶é¤æ件"
+
+#~ msgid ""
+#~ "XMMS Voice Removal Plugin\n"
+#~ "\n"
+#~ "A simple voice removal plugin by Anders Carlsson <andersca at gnu.org>"
+#~ msgstr ""
+#~ "XMMS 人声æ¶é¤æ件\n"
+#~ "\n"
+#~ "ä¸ä¸ªç®åç人声æ¶é¤æ件ï¼ç± Anders Carlsson <andersca at gnu.org> å¶ä½"
+
+#~ msgid "Voice removal plugin %s"
+#~ msgstr "æ¶é¤äººå£°æ件 %s"
+
+#~ msgid "XMMS IRman Plugin:"
+#~ msgstr "XMMS IRman æ件ï¼"
+
+#~ msgid ""
+#~ "Created by Charles Sielski <stray at teklabs.net>\n"
+#~ "Control XMMS with your TV / VCR / Stereo remote \n"
+#~ "IRman page - http://www.evation.com/irman/"
+#~ msgstr ""
+#~ "Charles Sielski <stray at teklabs.net> å¶ä½\n"
+#~ "å©ç¨ä½ ç TV / VCR / ç«ä½å£°é¥æ§å¨æä½ XMMS\n"
+#~ "IRman é¦é¡µ - http://www.evation.com/irman/"
+
+#~ msgid "Prev"
+#~ msgstr "ä¸ä¸æ²"
+
+#~ msgid "Vol +"
+#~ msgstr "é³éå¢å "
+
+#~ msgid "Seek -5s"
+#~ msgstr "å¿«é 5 ç§"
+
+#~ msgid "Seek +5s"
+#~ msgstr "å¿«è¿ 5 ç§"
+
+#~ msgid "Vol -"
+#~ msgstr "é³ééä½"
+
+#~ msgid "Shuffle"
+#~ msgstr "ä¹±åºææ¾"
+
+#~ msgid "Repeat"
+#~ msgstr "éå¤ææ¾"
+
+#~ msgid "+100"
+#~ msgstr "å 100"
+
+#~ msgid "0"
+#~ msgstr "0"
+
+#~ msgid "1"
+#~ msgstr "1"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "3"
+#~ msgstr "3"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "6"
+#~ msgstr "6"
+
+#~ msgid "7"
+#~ msgstr "7"
+
+#~ msgid "8"
+#~ msgstr "8"
+
+#~ msgid "9"
+#~ msgstr "9"
+
+#~ msgid "`%s' Button Setup"
+#~ msgstr "â%sâæé®è®¾ç½®"
+
+#~ msgid "Enter code or use remote"
+#~ msgstr "é®å
¥æ°åæ使ç¨é¥æ§å¨"
+
+#~ msgid "XMMS IRman Configuration"
+#~ msgstr "XMMS é¥æ§å¨é
ç½®"
+
+#~ msgid "Device: "
+#~ msgstr "设å¤ï¼"
+
+#~ msgid "IR code length: "
+#~ msgstr "红å¤ç é¿åº¦ï¼"
+
+#~ msgid "Controls:"
+#~ msgstr "æ§å¶ï¼"
+
+#~ msgid "General"
+#~ msgstr "ä¸è¬"
+
+#~ msgid "IRman Control %s"
+#~ msgstr "IRman 红å¤æ§å¶ %s"
+
+#~ msgid "unable to open port `%s' (%s)\n"
+#~ msgstr "æ æ³æå¼ç«¯å£â%sâ(%s)\n"
+
+#~ msgid "About Joystick Driver"
+#~ msgstr "å
³äºææ驱å¨ç¨åº"
+
+#~ msgid ""
+#~ "Joystick Control Plugin\n"
+#~ "\n"
+#~ "Created by Tim Ferguson <timf at dgs.monash.edu.au>.\n"
+#~ "http://www.dgs.monash.edu.au/~timf/\n"
+#~ "\n"
+#~ "5+ button support by Justin Wake <justin at globalsoft.com.au>\n"
+#~ "\n"
+#~ "Control XMMS with one or two joysticks.\n"
+#~ msgstr ""
+#~ "æææ§å¶æ件\n"
+#~ "\n"
+#~ "ç± Tim Ferguson <timf at dgs.monash.edu.au> å¶ä½\n"
+#~ " http://www.dgs.monash.edu.au/~timf/\n"
+#~ "\n"
+#~ "5+ æé®æ¯æç± Justin Wake <justin at globalsoft.com.au> å¶ä½\n"
+#~ "\n"
+#~ "使ç¨ä¸ä¸ªæ两个æææ§å¶ XMMSã\n"
+
+#~ msgid "Play/Pause"
+#~ msgstr "ææ¾/æå"
+
+#~ msgid "Next Track"
+#~ msgstr "ä¸ä¸é³è½¨"
+
+#~ msgid "Prev Track"
+#~ msgstr "åä¸é³è½¨"
+
+#~ msgid "Fwd 5 tracks"
+#~ msgstr "åè¿ 5 æ¡é³è½¨"
+
+#~ msgid "Back 5 tracks"
+#~ msgstr "åé 5 æ¡é³è½¨"
+
+#~ msgid "Volume Up"
+#~ msgstr "é³éå 大"
+
+#~ msgid "Volume Down"
+#~ msgstr "é³éåå°"
+
+#~ msgid "Forward 5s"
+#~ msgstr "å¿«è¿ 5 ç§"
+
+#~ msgid "Rewind 5s"
+#~ msgstr "å¿«é 5 ç§"
+
+#~ msgid "Alternate"
+#~ msgstr "è½®æµ"
+
+#~ msgid "Nothing"
+#~ msgstr "æ "
+
+#~ msgid "XMMS Joystick Configuration"
+#~ msgstr "XMMS ææ设å®"
+
+#~ msgid "Joystick 1:"
+#~ msgstr "ææ 1ï¼"
+
+#~ msgid "Joystick 2:"
+#~ msgstr "ææ 2ï¼"
+
+#~ msgid "Sensitivity (10-32767):"
+#~ msgstr "çµæ度ï¼10-32767ï¼ï¼"
+
+#~ msgid "Directionals:"
+#~ msgstr "æ¹åï¼"
+
+#~ msgid "Directionals (alternate):"
+#~ msgstr "æ¹åï¼è½®æµï¼ï¼"
+
+#~ msgid "Button %d:"
+#~ msgstr "æé® %dï¼"
+
+#~ msgid "Joystick Control %s"
+#~ msgstr "æææ§å¶ %s"
+
+#~ msgid "Joystick Control"
+#~ msgstr "æææ§å¶"
+
+#~ msgid ""
+#~ "\n"
+#~ "Joystick Control: error reading"
+#~ msgstr ""
+#~ "\n"
+#~ "æææ§å¶ï¼è¯»æ¶åºé"
+
+#~ msgid "Song Change %s"
+#~ msgstr "ææ²åæ¢ %s"
+
+#~ msgid "Song Change Configuration"
+#~ msgstr "ææ²åæ¢é
ç½®"
+
+#~ msgid "Song change"
+#~ msgstr "ææ²åæ¢"
+
+#~ msgid ""
+#~ "Shell-command to run when xmms changes song. It can optionally include "
+#~ "the string %%s which will be replaced by the new song title."
+#~ msgstr ""
+#~ "å¨ xmms æ¹åææ²æ¶æ§è¡çå¤å£³å½ä»¤ãå®å¯ä»¥å
å«å符串 %%sï¼æ°ææ²çæ é¢ä¼ä»£æ¿"
+#~ "å®ã"
+
+#~ msgid "Command:"
+#~ msgstr "å½ä»¤ï¼"
+
+#~ msgid "Shell-command to run when xmms reaches the end of the playlist."
+#~ msgstr "å½ xmms è¾¾å°ææ¾å表çç»å°¾æ¶æ§è¡çå¤å£³å½ä»¤ã"
+
+#~ msgid "CD Audio Player %s"
+#~ msgstr "CD ææ¾å¨ %s"
+
+#, fuzzy
+#~ msgid "Latitude"
+#~ msgstr "Latin æä¸ä¹"
+
+#~ msgid "CDDB"
+#~ msgstr "CDDB"
+
+#, fuzzy
+#~ msgid "No site information available"
+#~ msgstr "ç«ä½å£°ï¼å¦ææçè¯ï¼"
+
+#~ msgid "CDDB servers"
+#~ msgstr "CDDB æå¡å¨"
+
+#~ msgid "About mikmod plugin"
+#~ msgstr "å
³äº mikmod æ件"
+
+#~ msgid ""
+#~ "Mikmod Plugin\n"
+#~ "http://www.multimania.com/miodrag/mikmod/\n"
+#~ "Ported to xmms by J. Nick Koston"
+#~ msgstr ""
+#~ "Mikmod æ件\n"
+#~ "http://www.multimania.com/miodrag/mikmod/\n"
+#~ "ç± J. Nick Koston 移æ¤å° XMMS"
+
+#~ msgid "MikMod Player %s"
+#~ msgstr "MikMod ææ¾å¨ %s"
+
+#~ msgid "Couldn't load mod"
+#~ msgstr "æ æ³å è½½ mod æ件"
+
+#~ msgid "MikMod Configuration"
+#~ msgstr "MikMod é
ç½®"
+
+#, fuzzy
+#~ msgid "Downsample:"
+#~ msgstr "éä½åæ ·ï¼"
+
+#~ msgid "Look for hidden patterns in modules "
+#~ msgstr "寻æ¾æ¨¡åä¸éèçæ ·å¼"
+
+#~ msgid "Use surround mixing"
+#~ msgstr "使ç¨ç¯ç»å£°æ··é³ææ"
+
+#~ msgid "Force volume fade at the end of the module"
+#~ msgstr "强迫é³éå¨æ¨¡åç»ææ¶æ·¡åº"
+
+#~ msgid "Use interpolation"
+#~ msgstr "使ç¨æå¼æ³"
+
+#~ msgid "Default panning separation"
+#~ msgstr "é»è®¤å¹³ç§»é´é"
+
+#~ msgid "MPG123 Configuration"
+#~ msgstr "MPG123 é
ç½®"
+
+#~ msgid "Save"
+#~ msgstr "ä¿å"
+
+#~ msgid "Remove ID3"
+#~ msgstr "ç§»é¤ ID3 æ ç¾"
+
+#~ msgid "File Info - %s"
+#~ msgstr "æä»¶ä¿¡æ¯ - %s"
+
+#~ msgid ""
+#~ "%s\n"
+#~ "Error protection: %s\n"
+#~ "Copyright: %s\n"
+#~ "Original: %s\n"
+#~ "Emphasis: %s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "é误ä¿æ¤ï¼%s\n"
+#~ "çæææï¼%s\n"
+#~ "ååï¼%s\n"
+#~ "éç¹ï¼%s"
+
+#~ msgid ""
+#~ "%d frames\n"
+#~ "Filesize: %lu B"
+#~ msgstr ""
+#~ "%d 帧\n"
+#~ "æ件大å°ï¼%lu B"
+
+#~ msgid "Couldn't connect to host %s:%d"
+#~ msgstr "æ æ³è¿ç»å°ä¸»æº %s:%d"
+
+#~ msgid "About MPEG Layer 1/2/3 plugin"
+#~ msgstr "å
³äº MPEG Layer 1/2/3 ææ¾å¨"
+
+#~ msgid "MPEG Layer 1/2/3 Player %s"
+#~ msgstr "MPEG Layer 1/2/3 ææ¾å¨ %s"
+
+#~ msgid "About Tone Generator"
+#~ msgstr "å
³äºé³è°çæå¨"
+
+#, fuzzy
+#~ msgid ""
+#~ "Sinus tone generator by Haavard Kvaalen <havardk at xmms.org>\n"
+#~ "Modified by Daniel J. Peng <danielpeng at bigfoot.com>\n"
+#~ "\n"
+#~ "To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+#~ "e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+#~ msgstr ""
+#~ "Sinus é³è°çæå¨, ä½è
Haavard Kvaalen <havardk at xmms.org>\n"
+#~ "\n"
+#~ "è¦ä½¿ç¨å®, å¢å ä¸ä¸ª URL: tone://é¢ç\n"
+#~ "ä¾å¦, tone://2000 å°æ¼å¥ 2000Hz çé³è°"
+
+#~ msgid "Tone Generator: "
+#~ msgstr "é³è°çæå¨ï¼"
+
+#~ msgid "Tone Generator %s"
+#~ msgstr "é³è°çæå¨ %s"
+
+#~ msgid "Remove Tag"
+#~ msgstr "å é¤æ ç¾"
+
+#~ msgid "Nominal bitrate: %d kbps"
+#~ msgstr "æ£å¸¸ä½éçï¼%d kbps"
+
+#~ msgid "Channels: %d"
+#~ msgstr "声éï¼%d"
+
+#~ msgid "Wave Player %s"
+#~ msgstr "波形ææ¾å¨ %s"
+
+#~ msgid "OSS Driver %s"
+#~ msgstr "å¼æ¾é³æç³»ç»é©±å¨ç¨å¼ %s"
+
+#~ msgid "Disk Writer Plugin %s"
+#~ msgstr "åå
¥ç£çæ件 %s"
+
+#~ msgid ""
+#~ "You cannot use the Disk Writer plugin\n"
+#~ "when you're running in realtime mode."
+#~ msgstr ""
+#~ "å½æ¨è¿è¡äºå®æ¶æ¨¡å¼æ¶ï¼\n"
+#~ "ä¸å¯ä»¥ä½¿ç¨åå
¥ç£çæ件"
+
+#~ msgid "Select the directory where you want to store the output files:"
+#~ msgstr "请éæ©ç®å½æ¥åæ¾è¾åºçæ件ï¼"
+
+#~ msgid "Disk Writer Configuration"
+#~ msgstr "åå
¥ç£ç设å®"
+
+#~ msgid "Solaris audio plugin %s"
+#~ msgstr "Solaris é³ææ件 %s"
+
+#~ msgid "About Solaris Audio Driver"
+#~ msgstr "å
³äº Solaris Audio 驱å¨"
+
+#~ msgid ""
+#~ "XMMS Solaris Audio Driver\n"
+#~ "\n"
+#~ "Written by John Riddoch (jr at scms.rgu.ac.uk)\n"
+#~ "with help from many contributors."
+#~ msgstr ""
+#~ "XMMS Solaris é³é¢é©±å¨ç¨åº\n"
+#~ "\n"
+#~ "ä½è
John Riddoch (jr at scms.rgu.ac.uk)\n"
+#~ "并å¾å°ä¼å¤è´¡ç®è
ç帮å©ã"
+
+#~ msgid "Default - %s"
+#~ msgstr "é»è®¤å¼ - %s"
+
+#~ msgid "Soundcard #%d - %s"
+#~ msgstr "å£°å¡ #%d - %s"
+
+#~ msgid "Configure Solaris driver"
+#~ msgstr "é
ç½® Solaris 驱å¨"
+
+#~ msgid "Always use AUDIODEV environment variable"
+#~ msgstr "请ä¸ç´ä½¿ç¨ AUDIODEV ç¯å¢åé"
+
+#~ msgid "Output ports:"
+#~ msgstr "è¾åºç«¯å£ï¼"
+
+#~ msgid "Line out"
+#~ msgstr "线路è¾å
¥"
+
+#~ msgid "Headphones"
+#~ msgstr "è³æº"
+
+#~ msgid "Internal speaker"
+#~ msgstr "å
ç½®åå"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "å
³äº Sun 驱å¨ç¨åº"
+
+#~ msgid "Audio control device:"
+#~ msgstr "é³é¢æ§å¶è®¾å¤ï¼"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "é³éæ§å¶è®¾å¤ï¼"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "XMMS ç¨æ·ä¸ææ··é³å¨"
+
+#~ msgid "Status"
+#~ msgstr "ç¶åµ"
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Sun 驱å¨ç¨åºé
ç½®"
+
+#~ msgid "BSD Sun Driver %s"
+#~ msgstr "BSD Sun 驱å¨ç¨åº %s"
+
+#~ msgid "Color Entry"
+#~ msgstr "彩è²æ¡ç®"
+
+#~ msgid "OpenGL Spectrum configuration"
+#~ msgstr "OpenGL é¢è°±é
ç½®"
+
+#~ msgid "3DFX Fullscreen mode"
+#~ msgstr "3DFX å
¨å±å¹æ¨¡å¼"
+
+#~ msgid "OpenGL Spectrum analyzer"
+#~ msgstr "OpenGL å
è°±åæå¨"
+
+#~ msgid "OpenGL Spectrum analyzer %s"
+#~ msgstr "OpenGL å
è°±åæå¨ %s"
+
+#~ msgid "Simple spectrum analyzer %s"
+#~ msgstr "ç®åå
è°±åæå¨ %s"
+
+#~ msgid "Spectrum analyzer"
+#~ msgstr "å
è°±åæå¨"
+
+#~ msgid "ERROR: Couldn't find %s\n"
+#~ msgstr "é误ï¼æ æ³æ¾å° %s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "--------\n"
+#~ "\n"
+#~ "-h, --help\t\tDisplay this text and exit.\n"
+#~ "-g, --geometry\t\tSet the geometry (for example +20+20)\n"
+#~ "-s, --session\t\tSet the xmms session to use (Default: 0)\n"
+#~ "-c, --command\t\tCommand to launch xmms (Default: xmms)\n"
+#~ "-i, --icon\t\tSet the icon to use when xmms is not running\n"
+#~ "-n, --single\t\tOnly a single click is needed to start xmms\n"
+#~ "-t, --title\t\tDisplay song title when mouse is in window\n"
+#~ "-v, --version\t\tDisplay version information and exit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ç¨æ³ï¼%s [é项]\n"
+#~ "\n"
+#~ "é项ï¼\n"
+#~ "--------\n"
+#~ "\n"
+#~ "-h, --help\t\tæ¾ç¤ºè¿äºæå并离å¼\n"
+#~ "-g, --geometry\t\t设å®çªå£ä½ç½®å大å°ï¼ä¾å¦ï¼+20+20ï¼\n"
+#~ "-s, --session\t\t设å®ä½¿ç¨åªä¸ª XMMS ä¼è¯ï¼é»è®¤ä¸ºï¼0ï¼\n"
+#~ "-c, --command\t\tç¨äºèµ·å¨ XMMS çæ令ï¼é»è®¤ä¸ºï¼xmmsï¼\n"
+#~ "-i, --icon\t\t设å®å½ XMMS ä¸å¨æ§è¡ä¸æ¶æ¾ç¤ºçå¾æ \n"
+#~ "-n, --single\t\tåªè¦æä¸ä¸å°±å¯ä»¥å¯å¨ XMMS\n"
+#~ "-t, --title\t\tå½é¼ æ å¨çªå£å
æ¶æ¾ç¤ºææ²çæ é¢\n"
+#~ "-v, --version\t\tæ¾ç¤ºçæ¬ä¿¡æ¯å¹¶éåº\n"
+#~ "\n"
+
+#~ msgid "Main Programming:"
+#~ msgstr "ç¼ç¨ä¸»åï¼"
+
+#~ msgid "Peter Alm"
+#~ msgstr "Peter Alm"
+
+#~ msgid "Additional Programming:"
+#~ msgstr "å
¶ä»ç¨åºåï¼"
+
+#~ msgid "Haavard Kvaalen"
+#~ msgstr "Haavard Kvaalen"
+
+#~ msgid "Derrik Pates"
+#~ msgstr "Derrik Pates"
+
+#~ msgid "Sean Atkinson"
+#~ msgstr "Sean Atkinson"
+
+#~ msgid "Jorn Baayen"
+#~ msgstr "Jorn Baayen"
+
+#~ msgid "James M. Cape"
+#~ msgstr "James M. Cape"
+
+#~ msgid "Anders Carlsson (effect plugins)"
+#~ msgstr "Anders Carlssonï¼è¥å¹²æææ件ï¼"
+
+#~ msgid "Chun-Chung Chen (xfont patch)"
+#~ msgstr "Chun-Chung Chenï¼xfont è¡¥ä¸ï¼"
+
+#~ msgid "Tim Ferguson (joystick plugin)"
+#~ msgstr "Tim Fergusonï¼æ¸¸æææ件ï¼"
+
+#~ msgid "Ben Gertzfield"
+#~ msgstr "Ben Gertzfield"
+
+#~ msgid "Vesa Halttunen"
+#~ msgstr "Vesa Halttunen"
+
+#~ msgid "Logan Hanks"
+#~ msgstr "Logan Hanks"
+
+#~ msgid "Eric L. Hernes (FreeBSD patches)"
+#~ msgstr "Eric L. Hernesï¼FreeBSD è¡¥ä¸ï¼"
+
+#~ msgid "Ville Herva"
+#~ msgstr "Ville Herva"
+
+#~ msgid "higway (MMX)"
+#~ msgstr "higway (MMX)"
+
+#~ msgid "Michael Hipp and others (MPG123 engine)"
+#~ msgstr "Michael Hipp ç人ï¼MPG123 å¼æï¼"
+
+#~ msgid "Olle Hallnas (compiling fixes)"
+#~ msgstr "Olle Hallnas (ç¼è¯ä¿®æ£)"
+
+#~ msgid "Osamu Kayasono (3DNow!/MMX)"
+#~ msgstr "Osamu Kayasono (3DNow!/MMX)"
+
+#~ msgid "Lyle B Kempler"
+#~ msgstr "Lyle B Kempler"
+
+#~ msgid "J. Nick Koston (MikMod plugin)"
+#~ msgstr "J. Nick Kostonï¼MikMod æ件ï¼"
+
+#~ msgid "Aaron Lehmann"
+#~ msgstr "Aaron Lehmann"
+
+#~ msgid "Johan Levin (echo + stereo plugin)"
+#~ msgstr "Johan Levinï¼åé³ + ç«ä½å£°æ件ï¼"
+
+#~ msgid "Eric Lindvall"
+#~ msgstr "Eric Lindvall"
+
+#~ msgid "Colin Marquardt"
+#~ msgstr "Colin Marquardt"
+
+#~ msgid "Willem Monsuwe"
+#~ msgstr "Willem Monsuwe"
+
+#~ msgid "John Riddoch (Solaris plugin)"
+#~ msgstr "John Riddochï¼Solaris è¡¥ä¸ï¼"
+
+#~ msgid "Josip Rodin"
+#~ msgstr "Josip Rodin"
+
+#~ msgid "Pablo Saratxaga (i18n)"
+#~ msgstr "Pablo Saratxagaï¼å½é
åï¼"
+
+#~ msgid "Carl van Schaik (pro logic plugin)"
+#~ msgstr "Carl van Schaikï¼pro logic æ件ï¼"
+
+#~ msgid "Joerg Schuler"
+#~ msgstr "Joerg Schuler"
+
+#~ msgid "Charles Sielski (irman plugin)"
+#~ msgstr "Charles Sielskiï¼irman æ件ï¼"
+
+#~ msgid "Espen Skoglund"
+#~ msgstr "Espen Skoglund"
+
+#~ msgid "Matthieu Sozeau (ALSA plugin)"
+#~ msgstr "Matthieu Sozeauï¼ALSA æ件ï¼"
+
+#~ msgid "Kimura Takuhiro (3DNow!)"
+#~ msgstr "Kimura Takuhiro (3DNow!)"
+
+#~ msgid "Zinx Verituse"
+#~ msgstr "Zinx Verituse"
+
+#~ msgid "Ryan Weaver (RPMs among other things)"
+#~ msgstr "Ryan Weaverï¼RPM åå
¶å®å
容ï¼"
+
+#~ msgid "Chris Wilson"
+#~ msgstr "Chris Wilson"
+
+#~ msgid "Dave Yearke"
+#~ msgstr "Dave Yearke"
+
+#~ msgid "Stephan K. Zitz"
+#~ msgstr "Stephan K. Zitz"
+
+#~ msgid "Leonard \"Blayde\" Tan"
+#~ msgstr "Leonard \"Blayde\" Tan"
+
+#~ msgid "Robin Sylvestre (Equalizer and Playlist)"
+#~ msgstr "Robin Sylvestreï¼åè¡¡å¨åææ¾æ¸
åï¼"
+
+#, fuzzy
+#~ msgid "Thomas Nilsson (New titles and cleanups)"
+#~ msgstr "Thomas Nilssonï¼æ°æ é¢åæ´çï¼"
+
+#~ msgid "Thomas Nilsson"
+#~ msgstr "Thomas Nilsson"
+
+#~ msgid "Support and Docs:"
+#~ msgstr "æ¯æåææ¡£ï¼"
+
+#~ msgid "Olle Hallnas"
+#~ msgstr "Olle Hallnas"
+
+#~ msgid "Afrikaans:"
+#~ msgstr "åéè·å
°è¯ï¼"
+
+#~ msgid "Albanian:"
+#~ msgstr "é¿å°å·´å°¼äºè¯"
+
+#, fuzzy
+#~ msgid "Naim Daka"
+#~ msgstr "Nazmi Savga"
+
+#~ msgid "Azerbaijani:"
+#~ msgstr "é¿å¡æçè¯ï¼"
+
+#~ msgid "Vasif Ismailoglu"
+#~ msgstr "Vasif Ismailoglu"
+
+#~ msgid "Basque:"
+#~ msgstr "å·´æ¯å
è¯ï¼"
+
+#~ msgid "Juan Carlos Castro y Castro"
+#~ msgstr "Juan Carlos Castro y Castro"
+
+#~ msgid "Bulgarian:"
+#~ msgstr "ä¿å å©äºè¯ï¼"
+
+#~ msgid "Yovko D. Lambrev"
+#~ msgstr "Yovko D. Lambrev"
+
+#~ msgid "Catalan:"
+#~ msgstr "å æ³°ç½å°¼äºè¯ï¼"
+
+#~ msgid "Quico Llach"
+#~ msgstr "Quico Llach"
+
+#~ msgid "Jordi Mallach"
+#~ msgstr "Jordi Mallach"
+
+#~ msgid "Chun-Chung Chen"
+#~ msgstr "Chun-Chung Chen"
+
+#~ msgid "Jouston Huang"
+#~ msgstr "Jouston Huang"
+
+#~ msgid "Chih-Wei Huang"
+#~ msgstr "Chih-Wei Huang"
+
+#~ msgid "Danny Zeng"
+#~ msgstr ""
+#~ "Danny Zeng\n"
+#~ "Shiyu Tang"
+
+#~ msgid "Croatian:"
+#~ msgstr "å
ç½å°äºè¯ï¼"
+
+#~ msgid "Vlatko Kosturjak"
+#~ msgstr "Vlatko Kosturjak"
+
+#~ msgid "Vladimir Vuksan"
+#~ msgstr "Vladimir Vuksan"
+
+#~ msgid "Radek Vybiral"
+#~ msgstr "Radek Vybiral"
+
+#~ msgid "Danish:"
+#~ msgstr "丹麦è¯ï¼"
+
+#~ msgid "Nikolaj Berg Amondsen"
+#~ msgstr "Nikolaj Berg Amondsen"
+
+#~ msgid "Troels Liebe Bentsen"
+#~ msgstr "Troels Liebe Bentsen"
+
+#~ msgid "Kenneth Christiansen"
+#~ msgstr "Kenneth Christiansen"
+
+#~ msgid "Keld Simonsen"
+#~ msgstr "Keld Simonsen"
+
+#~ msgid "Wilmer van der Gaast"
+#~ msgstr "Wilmer van der Gaast"
+
+#~ msgid "Tom Laermans"
+#~ msgstr "Tom Laermans"
+
+#~ msgid "Esperanto:"
+#~ msgstr "ä¸çè¯ï¼"
+
+#~ msgid "D. Dale Gulledge"
+#~ msgstr "D. Dale Gulledge"
+
+#~ msgid "Estonian:"
+#~ msgstr "ç±æ²å°¼äºè¯"
+
+#~ msgid "Arnaud Boissinot"
+#~ msgstr "Arnaud Boissinot"
+
+#~ msgid "Eric Fernandez-Bellot"
+#~ msgstr "Eric Fernandez-Bellot"
+
+#~ msgid "Galician:"
+#~ msgstr "å å©è¥¿äºè¯ï¼"
+
+#~ msgid "Stefan Siegel"
+#~ msgstr "Stefan Siegel"
+
+#~ msgid "Kyritsis Athanasios"
+#~ msgstr "Kyritsis Athanasios"
+
+#~ msgid "Arpad Biro"
+#~ msgstr "Arpad Biro"
+
+#~ msgid "Budi Rachmanto"
+#~ msgstr "Budi Rachmanto"
+
+#~ msgid "Irish:"
+#~ msgstr "ç±å°å
°è¯ï¼"
+
+#~ msgid "Alastair McKinstry"
+#~ msgstr "Alastair McKinstry"
+
+#~ msgid "Paolo Lorenzin"
+#~ msgstr "Paolo Lorenzin"
+
+#~ msgid "Hiroshi Takekawa"
+#~ msgstr "Hiroshi Takekawa"
+
+#~ msgid "Jaegeum Choe"
+#~ msgstr "Jaegeum Choe"
+
+#~ msgid "Sang-Jin Hwang"
+#~ msgstr "Sang-Jin Hwang"
+
+#~ msgid "Byeong-Chan Kim"
+#~ msgstr "Byeong-Chan Kim"
+
+#~ msgid "Man-Yong Lee"
+#~ msgstr "Man-Yong Lee"
+
+#~ msgid "Gediminas Paulauskas"
+#~ msgstr "Gediminas Paulauskas"
+
+#~ msgid "Latvian:"
+#~ msgstr "æè±ç»´äºè¯ï¼"
+
+#~ msgid "Vitauts Stochka"
+#~ msgstr "Vitauts Stochka"
+
+#~ msgid "Malay:"
+#~ msgstr "马æ¥è¯"
+
+#~ msgid "Norwegian:"
+#~ msgstr "æªå¨è¯ï¼"
+
+#~ msgid "Terje Bjerkelia"
+#~ msgstr "Terje Bjerkelia"
+
+#~ msgid "Roy-Magne Mo"
+#~ msgstr "Roy-Magne Mo"
+
+#~ msgid "Grzegorz Kowal"
+#~ msgstr "Grzegorz Kowal"
+
+#~ msgid "Portuguese:"
+#~ msgstr "è¡èçè¯ï¼"
+
+#~ msgid "Jorge Costa"
+#~ msgstr "Jorge Costa"
+
+#~ msgid "Florin Grad"
+#~ msgstr "Florin Grad"
+
+#~ msgid "Valek Filippov"
+#~ msgstr "Valek Filippov"
+
+#~ msgid "Alexandr P. Kovalenko"
+#~ msgstr "Alexandr P. Kovalenko"
+
+#~ msgid "Aleksey Smirnov"
+#~ msgstr "Aleksey Smirnov"
+
+#~ msgid "Serbian:"
+#~ msgstr "å¡å°ç»´äºè¯ï¼"
+
+#~ msgid "Tomislav Jankovic"
+#~ msgstr "Tomislav Jankovic"
+
+#~ msgid "Pavol Cvengros"
+#~ msgstr "Pavol Cvengros"
+
+#~ msgid "Tomas Hornocek"
+#~ msgstr "Tomas Hornocek"
+
+#~ msgid "Jan Matis"
+#~ msgstr "Jan Matis"
+
+#~ msgid "Fabian Mandelbaum"
+#~ msgstr "Fabian Mandelbaum"
+
+#~ msgid "Christian Rose"
+#~ msgstr "Christian Rose"
+
+#~ msgid "Fuad Sabanovic"
+#~ msgstr "Fuad Sabanovic"
+
+#~ msgid "Tajik:"
+#~ msgstr "å¡åå
è¯ï¼"
+
+#~ msgid "Roger Kovacs"
+#~ msgstr "Roger Kovacs"
+
+#~ msgid "Dilshod Marupov"
+#~ msgstr "Dilshod Marupov"
+
+#~ msgid "Thai:"
+#~ msgstr "æ³°è¯ï¼"
+
+#~ msgid "Supphachoke Suntiwichaya"
+#~ msgstr "Supphachoke Suntiwichaya"
+
+#~ msgid "Turkish:"
+#~ msgstr "åè³å
¶è¯ï¼"
+
+#~ msgid "Nazmi Savga"
+#~ msgstr "Nazmi Savga"
+
+#~ msgid "Dmytro Koval'ov"
+#~ msgstr "Dmytro Koval'ov"
+
+#~ msgid "Vietnamese:"
+#~ msgstr "è¶åè¯ï¼"
+
+#~ msgid "Trinh Minh Thanh"
+#~ msgstr "Trinh Minh Thanh"
+
+#~ msgid "Walloon:"
+#~ msgstr "ç¦é¾è¯ï¼"
+
+#~ msgid "Lucyin Mahin"
+#~ msgstr "Lucyin Mahin"
+
+#~ msgid "Pablo Saratxaga"
+#~ msgstr "Pablo Saratxaga"
+
+#~ msgid "XMMS %s - Cross platform multimedia player"
+#~ msgstr "XMMS %s - 跨平å°çå¤åªä½ææ¾å¨"
+
+#, fuzzy
+#~ msgid "Copyright (C) 1997-2004 4Front Technologies and The XMMS Team"
+#~ msgstr "1997-2004 4Front Technologies çæææ"
+
+#~ msgid "/Load/-"
+#~ msgstr "/è£
å
¥/-"
+
+#~ msgid "/Save/-"
+#~ msgstr "/ä¿å/-"
+
+#~ msgid "No output plugin has been selected"
+#~ msgstr "没æéä¸è¾åºæ件"
+
+#~ msgid "/File Info"
+#~ msgstr "/æ件信æ¯"
+
+#~ msgid "/Analyzer Mode/-"
+#~ msgstr "/åæå¨æ¨¡å¼/-"
+
+#~ msgid "/Play Directory"
+#~ msgstr "/ææ¾ç®å½"
+
+#~ msgid "/Play Location"
+#~ msgstr "/ææ¾ä½ç½®"
+
+#~ msgid "/View File Info"
+#~ msgstr "/æ¥çæ件信æ¯"
+
+#~ msgid "/Playback/Play"
+#~ msgstr "/ææ¾/ææ¾"
+
+#~ msgid "/Playback/Pause"
+#~ msgstr "/ææ¾/æå"
+
+#~ msgid "/Playback/Stop"
+#~ msgstr "/ææ¾/åæ¢"
+
+#~ msgid "/Playback/Next"
+#~ msgstr "/ææ¾/ä¸ä¸é¦"
+
+#~ msgid "/Playback/Back 5 Seconds"
+#~ msgstr "/ææ¾/åå 5 ç§"
+
+#~ msgid "/Playback/Fwd 5 Seconds"
+#~ msgstr "/ææ¾/åå 5 ç§"
+
+#~ msgid "/Playback/Start of List"
+#~ msgstr "/ææ¾/ææ¾æ¸
åå¼å§"
+
+#~ msgid "/Playback/10 Tracks Back"
+#~ msgstr "/ææ¾/åååé¦æ"
+
+#~ msgid "/Playback/10 Tracks Fwd"
+#~ msgstr "/ææ¾/åååé¦æ"
+
+#~ msgid "/Playback/Jump to Time"
+#~ msgstr "/ææ¾/è·³å°ç¹å®æ¶é´"
+
+#~ msgid "/Playback/Jump to File"
+#~ msgstr "/ææ¾/è·³è³æ件"
+
+#~ msgid "/Exit"
+#~ msgstr "/离å¼"
+
+#~ msgid "Jump to file"
+#~ msgstr "è·³å°æ件"
+
+#~ msgid "Search: "
+#~ msgstr "æç´¢ï¼"
+
+#~ msgid "Select directory to add:"
+#~ msgstr "éæ©è¦å¢å çç®å½ï¼"
+
+#~ msgid "Enter location to play:"
+#~ msgstr "è¾å
¥è¦ææ¾çä½ç½®ï¼"
+
+#~ msgid "Couldn't open audio"
+#~ msgstr "æ æ³æå¼é³é¢"
+
+#~ msgid ""
+#~ "\n"
+#~ "Segmentation fault\n"
+#~ "\n"
+#~ "You've probably found a bug in XMMS, please visit\n"
+#~ "http://bugs.xmms.org and fill out a bug report.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "段é误\n"
+#~ "\n"
+#~ "ä½ å¯è½åç°äºä¸ä¸ª XMMS çç¨åºé误ï¼è¯·æ¥è¿ä¸ªç½ç«\n"
+#~ "http://bugs.xmms.orgï¼å¹¶å¡«åæ
éæ¥åã\n"
+
+#~ msgid "X Multimedia System"
+#~ msgstr "X å¤åªä½ç³»ç»"
+
+#~ msgid "/Physically Delete Files"
+#~ msgstr "/ç©çå é¤æ件"
+
+#, fuzzy
+#~ msgid "/Queue - Unqueue"
+#~ msgstr "/ææ¾/å表 - ä¸å表"
+
+#~ msgid "/Add/Url"
+#~ msgstr "/æ·»å /URL"
+
+#~ msgid "/Remove/Crop"
+#~ msgstr "/å é¤/æªé"
+
+#~ msgid "/Remove/Misc"
+#~ msgstr "/å é¤/å
¶å®"
+
+#~ msgid "/Selection/Select None"
+#~ msgstr "/éæ©/æ¸
é¤éæ©"
+
+#~ msgid "/Selection/Invert Selection"
+#~ msgstr "/éæ©/å转éæ©"
+
+#~ msgid "/Selection/-"
+#~ msgstr "/éæ©/-"
+
+#~ msgid "/Selection/Read Extended Info"
+#~ msgstr "/éæ©/读åæ©å±ä¿¡æ¯"
+
+#~ msgid "/Sort"
+#~ msgstr "/æåº"
+
+#~ msgid "/Playlist/Load List"
+#~ msgstr "/ææ¾å表/è£
å
¥å表"
+
+#~ msgid "/Playlist/Save List"
+#~ msgstr "/ææ¾å表/ä¿åå表"
+
+#~ msgid "Enter URL to add:"
+#~ msgstr "é®å
¥è¦æ·»å ç URLï¼"
+
+#~ msgid "XMMS Playlist"
+#~ msgstr "XMMS ææ¾æ¸
å"
+
+#~ msgid "Input plugins"
+#~ msgstr "è¾å
¥æ件"
+
+#~ msgid "play"
+#~ msgstr "ææ¾"
+
+#~ msgid "Use fontsets (Enable for multi-byte charset support)"
+#~ msgstr "使ç¨åä½éï¼æ¯æä¸æçå¤åèè¯è¨æ¶éè¦éä¸ï¼"
+
+#~ msgid "Main Window"
+#~ msgstr "主çªå£"
+
+#~ msgid "Use X font"
+#~ msgstr "ä½¿ç¨ X åä½"
+
+#~ msgid " (disabled)"
+#~ msgstr "ï¼ç¦ç¨ï¼"
+
+#~ msgid "Skin selector"
+#~ msgstr "ç®è¤éæ©å¨"
+
+#~ msgid "Add selected files"
+#~ msgstr "å¢å éæ©çæ件"
+
+#~ msgid "Add all files in directory"
+#~ msgstr "å¢å ç®å½ä¸ææçæ件"
+
+#~ msgid "Samplerate: %ld Hz"
+#~ msgstr "éæ ·çï¼%ld Hz"
+
+#~ msgid "xmms applet"
+#~ msgstr "XMMS å°åºç¨"
+
+#~ msgid "Copyright (C) Anders Carlsson 1999), Hiroshi Takekawa 2001"
+#~ msgstr "çæ (C) Anders Carlsson 1999), Hiroshi Takekawa 2001"
+
+#~ msgid ""
+#~ "A simple xmms gnome panel applet by Anders Carlsson.\n"
+#~ "Some code is from wmxmms by Mikael Alm.\n"
+#~ "Tooltip support by Hiroshi Takekawa."
+#~ msgstr ""
+#~ "ä¸ä¸ªç®åç xmms gnome é¢æ¿å°ç¨åºï¼ä½è
Anders Carlssonã\n"
+#~ "æé¨ä»½çç¨å¼ç æ¥èª Mikael Alm ç wmxmmsã\n"
+#~ "Hiroshi Takekawa æ·»å äºå·¥å
·æ示æ¯æã"
+
+#~ msgid "About..."
+#~ msgstr "å
³äºããã"
+
+#~ msgid "XMMS"
+#~ msgstr "XMMS"
+
+#~ msgid ""
+#~ "The SHA-1 hash function failed to properly\n"
+#~ "generate a test key. As such, Xmms will\n"
+#~ "not be able to contact a CD Index server.\n"
+#~ msgstr ""
+#~ "SHA-1 åå¸åè½ä¸è½æ£ç¡®çææµè¯å¯ç ã\n"
+#~ "ç»æï¼Xmms ä¸è½å CD ç´¢å¼æå¡å¨èç»ã\n"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ " Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "XMMS BSD Sun 驱å¨ç¨åº\n"
+#~ "\n"
+#~ " çæææ (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "ç»´æ¤è
ï¼<vedge at csoft.org>.\n"
+
+#~ msgid "Copyright (C) 1997-2002 The XMMS Team"
+#~ msgstr "çæ (C) 1997-2002 The XMMS Team"
+
+#~ msgid "/Sticky"
+#~ msgstr "/é è¾¹"
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.gmo
===================================================================
(Binary files differ)
Property changes on: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.gmo
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.po
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.po 2007-01-25 06:57:15 UTC (rev 610)
+++ trunk/src/target/OM-2007/applications/openmoko-simplemediaplayer/po/zh_TW.po 2007-01-25 06:50:09 UTC (rev 611)
@@ -0,0 +1,3475 @@
+# traditional Chinese translation of Beep Media Player.
+# Copyright (C) 2001, 03, 2004 Free Software Foundation, Inc.
+# Chao-Hsiung Liao <pesder.liao at msa.hinet.net>, 2003, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bmp 0.9.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-10-22 14:40+0800\n"
+"PO-Revision-Date: 2004-07-28 21:35+0800\n"
+"Last-Translator: Chao-Hsiung Liao <pesder.liao at msa.hinet.net>\n"
+"Language-Team: chinese (traditional) <zh-l10n at linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#: Input/cdaudio/cdaudio.c:180
+msgid "CD Audio Plugin"
+msgstr "CD é³æå¤æç¨å¼"
+
+#: Input/cdaudio/cdaudio.c:1004 Input/cdaudio/cdaudio.c:1013
+#, c-format
+msgid "CD Audio Track %02u"
+msgstr "CD é³è» %02u"
+
+#: Input/cdaudio/cdinfo.c:157 Input/cdaudio/cdinfo.c:158
+#: Input/cdaudio/cdinfo.c:159
+msgid "(unknown)"
+msgstr "(æªç¥ç)"
+
+#: Input/cdaudio/configure.c:199 Input/cdaudio/configure.c:213
+#: Input/cdaudio/configure.c:541
+#, c-format
+msgid "Drive %d"
+msgstr "ç£ç¢ %d"
+
+#: Input/cdaudio/configure.c:259
+#, c-format
+msgid ""
+"Failed to open device %s\n"
+"Error: %s\n"
+"\n"
+msgstr ""
+"éåè£ç½® %s 失æ\n"
+"é¯èª¤: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:266
+msgid ""
+"Failed to read \"Table of Contents\"\n"
+"Maybe no disc in the drive?\n"
+"\n"
+msgstr ""
+"è®åâç®éâæ失æ\n"
+"ä¹è¨±ç£ç¢ä¸æ²æå
ç¢çï¼\n"
+"\n"
+
+#: Input/cdaudio/configure.c:270
+#, c-format
+msgid ""
+"Device %s OK.\n"
+"Disc has %d tracks"
+msgstr ""
+"è£ç½® %s OKã\n"
+"å
ç¢æ %d åé³è»"
+
+#: Input/cdaudio/configure.c:279
+#, c-format
+msgid " (%d data tracks)"
+msgstr " (%d åè³æ段è»)"
+
+#: Input/cdaudio/configure.c:280
+#, c-format
+msgid ""
+"\n"
+"Total length: %d:%d\n"
+msgstr ""
+"\n"
+"總é·åº¦: %d:%d\n"
+
+#: Input/cdaudio/configure.c:285
+msgid "Digital audio extraction not tested as the disc has no audio tracks\n"
+msgstr "æ¸ä½é³æææ¾å°æªæ¸¬è©¦æå
ç¢ä¸æ²æé³è»\n"
+
+#: Input/cdaudio/configure.c:302
+msgid ""
+"Digital audio extraction test: OK\n"
+"\n"
+msgstr ""
+"æ¸ä½é³æææ¾æ¸¬è©¦: OK\n"
+"\n"
+
+#: Input/cdaudio/configure.c:306
+#, c-format
+msgid ""
+"Digital audio extraction test failed: %s\n"
+"\n"
+msgstr ""
+"æ¸ä½é³æææ¾æ¸¬è©¦å¤±æ: %s\n"
+"\n"
+
+#: Input/cdaudio/configure.c:316
+#, c-format
+msgid ""
+"Failed to check directory %s\n"
+"Error: %s"
+msgstr ""
+"檢æ¥ç®é %s 失æ\n"
+"é¯èª¤: %s"
+
+#: Input/cdaudio/configure.c:322
+#, c-format
+msgid "Error: %s exist, but is not a directory"
+msgstr "é¯èª¤: %s åå¨ï¼ä½ä¸æ¯ç®é"
+
+#: Input/cdaudio/configure.c:325
+#, c-format
+msgid "Directory %s OK."
+msgstr "ç®é %s OKã"
+
+#: Input/cdaudio/configure.c:369
+msgid "Device:"
+msgstr "è£ç½®:"
+
+#: Input/cdaudio/configure.c:377
+msgid "_Device:"
+msgstr "è£ç½®(_D):"
+
+#: Input/cdaudio/configure.c:387
+msgid "Dir_ectory:"
+msgstr "ç®é(_E):"
+
+#: Input/cdaudio/configure.c:399
+msgid "Play mode:"
+msgstr "ææ¾æ¨¡å¼:"
+
+#: Input/cdaudio/configure.c:405
+msgid "Analog"
+msgstr "é¡æ¯"
+
+#: Input/cdaudio/configure.c:413
+msgid "Digital audio extraction"
+msgstr "æ¸ä½é³æææ¾"
+
+#: Input/cdaudio/configure.c:423
+msgid "Volume control:"
+msgstr "é³éæ§å¶:"
+
+#: Input/cdaudio/configure.c:429
+msgid "No mixer"
+msgstr "ç¡æ··é³ç¨å¼"
+
+#: Input/cdaudio/configure.c:435
+msgid "CDROM drive"
+msgstr "CDROM"
+
+#: Input/cdaudio/configure.c:441
+msgid "OSS mixer"
+msgstr "OSS æ··é³ç¨å¼"
+
+#: Input/cdaudio/configure.c:464
+msgid "Check drive..."
+msgstr "檢æ¥ç£ç¢..."
+
+#: Input/cdaudio/configure.c:470
+msgid "Remove drive"
+msgstr "移é¤ç£ç¢"
+
+#: Input/cdaudio/configure.c:515
+msgid "CD Audio Player Configuration"
+msgstr "CD é³æ¨ææ¾å¨çµæ
"
+
+#: Input/cdaudio/configure.c:553
+msgid "Add drive"
+msgstr "å å
¥ç£ç¢"
+
+#: Input/cdaudio/configure.c:561
+msgid "Device"
+msgstr "è£ç½®"
+
+#: Input/cdaudio/configure.c:571
+msgid "CDDB:"
+msgstr "CDDB:"
+
+#: Input/cdaudio/configure.c:582
+msgid "Use CDDB"
+msgstr "ä½¿ç¨ CDDB"
+
+#: Input/cdaudio/configure.c:586
+msgid "Get server list"
+msgstr "åå¾ä¼ºæå¨æ¸
å®"
+
+#: Input/cdaudio/configure.c:589
+msgid "Show network window"
+msgstr "顯示網路è¦çª"
+
+#: Input/cdaudio/configure.c:599
+msgid "CDDB server:"
+msgstr "CDDB 伺æå¨:"
+
+#: Input/cdaudio/configure.c:614
+msgid "CD Index:"
+msgstr "CD ç´¢å¼:"
+
+#: Input/cdaudio/configure.c:621
+msgid "Use CD Index"
+msgstr "ä½¿ç¨ CD ç´¢å¼"
+
+#: Input/cdaudio/configure.c:630
+msgid "CD Index server:"
+msgstr "CD ç´¢å¼ä¼ºæå¨:"
+
+#: Input/cdaudio/configure.c:645
+msgid "Track names:"
+msgstr "é³è»å稱:"
+
+#: Input/cdaudio/configure.c:652 Input/mpg123/configure.c:799
+#: Input/vorbis/configure.c:472
+msgid "Override generic titles"
+msgstr "è¦èåå§æ¨é¡"
+
+#: Input/cdaudio/configure.c:668
+msgid "Name format:"
+msgstr "åç¨±æ ¼å¼:"
+
+#: Input/cdaudio/configure.c:680
+msgid "CD Info"
+msgstr "CD è³è¨"
+
+#: Input/mpg123/configure.c:260
+msgid "Select the directory where you want to store the MPEG streams:"
+msgstr "é¸ææ¨æ³ç¨ä¾å²å MPEG 串æµçç®é:"
+
+#: Input/mpg123/configure.c:344
+msgid "MPEG Audio Plugin Configuration"
+msgstr "MPEG é³æå¤æç¨å¼çµæ
"
+
+#: Input/mpg123/configure.c:361
+msgid "Resolution:"
+msgstr "解æ度:"
+
+#: Input/mpg123/configure.c:369
+msgid "16 bit"
+msgstr "16 ä½å
"
+
+#: Input/mpg123/configure.c:378
+msgid "8 bit"
+msgstr "8 ä½å
"
+
+#: Input/mpg123/configure.c:385 Input/vorbis/fileinfo.c:862
+#: Input/vorbis/fileinfo.c:918
+msgid "Channels:"
+msgstr "è²é:"
+
+#: Input/mpg123/configure.c:393
+msgid "Stereo (if available)"
+msgstr "ç«é«è²(å¦æå¯ç¨)"
+
+#: Input/mpg123/configure.c:404
+msgid "Mono"
+msgstr "å®è²é"
+
+#: Input/mpg123/configure.c:411
+msgid "Down sample:"
+msgstr "éä½å樣:"
+
+#: Input/mpg123/configure.c:420
+msgid "1:1 (44 kHz)"
+msgstr "1:1 (44 kHz)"
+
+#: Input/mpg123/configure.c:431
+msgid "1:2 (22 kHz)"
+msgstr "1:2 (22 kHz)"
+
+#: Input/mpg123/configure.c:442
+msgid "1:4 (11 kHz)"
+msgstr "1:4 (11 kHz)"
+
+#: Input/mpg123/configure.c:455
+msgid "Decoder:"
+msgstr "解碼å¨:"
+
+#: Input/mpg123/configure.c:464
+msgid "Automatic detection"
+msgstr "èªååµæ¸¬"
+
+#: Input/mpg123/configure.c:472
+msgid "3DNow! optimized decoder"
+msgstr "3DNow! æä½³å解碼å¨"
+
+#: Input/mpg123/configure.c:480
+msgid "MMX optimized decoder"
+msgstr "MMX æä½³å解碼å¨"
+
+#: Input/mpg123/configure.c:487
+msgid "FPU decoder"
+msgstr "FPU 解碼å¨"
+
+#: Input/mpg123/configure.c:513
+msgid "Options"
+msgstr "é¸é
"
+
+#: Input/mpg123/configure.c:520
+msgid "Content"
+msgstr "å
§å®¹"
+
+#: Input/mpg123/configure.c:526
+msgid "Extension"
+msgstr "延伸"
+
+#: Input/mpg123/configure.c:532
+msgid "Extension and content"
+msgstr "延伸èå
§å®¹"
+
+#: Input/mpg123/configure.c:556
+msgid "Decoder"
+msgstr "解碼å¨"
+
+#: Input/mpg123/configure.c:560 Input/vorbis/configure.c:287
+#: Output/OSS/configure.c:302 Output/esd/configure.c:171
+msgid "Buffering:"
+msgstr "ç·©è¡:"
+
+#: Input/mpg123/configure.c:573 Input/vorbis/configure.c:299
+msgid "Buffer size (kb):"
+msgstr "ç·©è¡å大å°(kb):"
+
+#: Input/mpg123/configure.c:588 Input/vorbis/configure.c:313
+#: Output/OSS/configure.c:329 Output/esd/configure.c:198
+msgid "Pre-buffer (percent):"
+msgstr "é å
ç·©è¡(ç¾åæ¯):"
+
+#: Input/mpg123/configure.c:602 Input/vorbis/configure.c:327
+msgid "Proxy:"
+msgstr "代ç伺æå¨:"
+
+#: Input/mpg123/configure.c:612 Input/vorbis/configure.c:337
+msgid "Use proxy"
+msgstr "使ç¨ä»£ç伺æå¨"
+
+#: Input/mpg123/configure.c:625 Input/vorbis/configure.c:350
+#: Output/esd/configure.c:114 Output/esd/configure.c:144
+msgid "Host:"
+msgstr "主æ©:"
+
+#: Input/mpg123/configure.c:635 Input/vorbis/configure.c:360
+#: Output/esd/configure.c:153
+msgid "Port:"
+msgstr "é£æ¥å :"
+
+#: Input/mpg123/configure.c:648 Input/vorbis/configure.c:373
+msgid "Use authentication"
+msgstr "使ç¨é©è"
+
+#: Input/mpg123/configure.c:665 Input/vorbis/configure.c:390
+msgid "Username:"
+msgstr "使ç¨è
å稱:"
+
+#: Input/mpg123/configure.c:676 Input/vorbis/configure.c:401
+msgid "Password:"
+msgstr "å¯ç¢¼:"
+
+#: Input/mpg123/configure.c:693 Input/vorbis/configure.c:418
+msgid "Save stream to disk:"
+msgstr "å°ä¸²æµå²åå°ç£ç¢:"
+
+#: Input/mpg123/configure.c:704 Input/vorbis/configure.c:429
+msgid "Save stream to disk"
+msgstr "å°ä¸²æµå²åå°ç£ç¢"
+
+#: Input/mpg123/configure.c:718 Input/vorbis/configure.c:443
+msgid "Path:"
+msgstr "è·¯å¾:"
+
+#: Input/mpg123/configure.c:728 Input/vorbis/configure.c:453
+msgid "Browse"
+msgstr "ç覽"
+
+#: Input/mpg123/configure.c:734
+msgid "SHOUT/Icecast:"
+msgstr "SHOUT/Icecast:"
+
+#: Input/mpg123/configure.c:748
+msgid "Enable Icecast Metadata UDP Channel"
+msgstr "åç¨ Icecast ä¸ç¹¼è³æå¿ UDP é »é"
+
+#: Input/mpg123/configure.c:755 Input/vorbis/configure.c:460
+msgid "Streaming"
+msgstr "串æµ"
+
+#: Input/mpg123/configure.c:757
+msgid "ID3 Tags:"
+msgstr "ID3 æ¨ç±¤:"
+
+#: Input/mpg123/configure.c:765
+msgid "Disable ID3V2 tags"
+msgstr "åç¨ ID3V2 æ¨ç±¤"
+
+#: Input/mpg123/configure.c:774
+msgid "Convert non-UTF8 ID3 tags to UTF8"
+msgstr "å°é UTF8 ç ID3 æ¨ç±¤è½æçº UTF8 æ ¼å¼"
+
+#: Input/mpg123/configure.c:787
+msgid "ID3 encoding:"
+msgstr "ID3 編碼:"
+
+#: Input/mpg123/configure.c:812
+msgid "ID3 format:"
+msgstr "ID3 æ ¼å¼:"
+
+#: Input/mpg123/configure.c:826 Input/vorbis/configure.c:499
+#: beep/prefswin.c:95
+msgid "Title"
+msgstr "æ¨é¡"
+
+#: Input/mpg123/fileinfo.c:471
+#, c-format
+msgid ""
+"%s\n"
+"Unable to write to file: %s"
+msgstr ""
+"%s\n"
+"ç¡æ³å¯«å
¥æªæ¡: %s"
+
+#: Input/mpg123/fileinfo.c:472 Input/mpg123/fileinfo.c:477
+msgid "Couldn't write tag!"
+msgstr "ç¡æ³å¯«å
¥æ¨ç±¤ï¼"
+
+#: Input/mpg123/fileinfo.c:476 Input/mpg123/fileinfo.c:567
+#, c-format
+msgid ""
+"%s\n"
+"Unable to open file: %s"
+msgstr ""
+"%s\n"
+"ç¡æ³éåæªæ¡: %s"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+msgid "File Info"
+msgstr "æªæ¡è³è¨"
+
+#: Input/mpg123/fileinfo.c:479 Input/mpg123/fileinfo.c:570
+#: Input/mpg123/http.c:220 Input/mpg123/mpg123.c:1184
+#: Input/vorbis/fileinfo.c:212 Input/vorbis/http.c:218
+#: Input/vorbis/vorbis.c:802 Output/OSS/about.c:54 Output/esd/about.c:49
+#: Output/alsa/about.c:53
+msgid "Ok"
+msgstr "確å®"
+
+#: Input/mpg123/fileinfo.c:556
+#, c-format
+msgid ""
+"%s\n"
+"Unable to truncate file: %s"
+msgstr ""
+"%s\n"
+"ç¡æ³æªæ·æªæ¡: %s"
+
+#: Input/mpg123/fileinfo.c:558 Input/mpg123/fileinfo.c:568
+msgid "Couldn't remove tag!"
+msgstr "ç¡æ³ç§»é¤æ¨ç±¤ï¼"
+
+#: Input/mpg123/fileinfo.c:562
+msgid "No tag to remove!"
+msgstr "æ²ææ¨ç±¤å¯ç§»é¤ï¼"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Stereo"
+msgstr "ç«é«è²"
+
+#: Input/mpg123/fileinfo.c:602
+msgid "Joint stereo"
+msgstr "è¯åç«é«è²"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Dual channel"
+msgstr "éè²é"
+
+#: Input/mpg123/fileinfo.c:603
+msgid "Single channel"
+msgstr "å®è²é"
+
+#: Input/mpg123/fileinfo.c:618 Input/mpg123/fileinfo.c:1258
+#: Input/mpg123/fileinfo.c:1379
+#, c-format
+msgid "%d KBit/s"
+msgstr "%d KBit/s"
+
+#: Input/mpg123/fileinfo.c:619 Input/mpg123/fileinfo.c:1262
+#: Input/mpg123/fileinfo.c:1383
+#, c-format
+msgid "%ld Hz"
+msgstr "%ld Hz"
+
+#: Input/mpg123/fileinfo.c:639
+msgid "None"
+msgstr "ç¡"
+
+#: Input/mpg123/fileinfo.c:640
+msgid "50/15 ms"
+msgstr "50/15 ms"
+
+#: Input/mpg123/fileinfo.c:642
+msgid "CCIT J.17"
+msgstr "CCIT J.17"
+
+#: Input/mpg123/fileinfo.c:643
+msgid "No"
+msgstr "å¦"
+
+#: Input/mpg123/fileinfo.c:644
+msgid "Yes"
+msgstr "æ¯"
+
+#: Input/mpg123/fileinfo.c:691 Input/vorbis/fileinfo.c:557
+msgid "Name:"
+msgstr "å稱:"
+
+#: Input/mpg123/fileinfo.c:707
+msgid " MPEG Info "
+msgstr "MPEG è³è¨"
+
+#: Input/mpg123/fileinfo.c:722 Input/mpg123/fileinfo.c:1122
+msgid "MPEG Level:"
+msgstr "MPEG çç´:"
+
+# No good translation of bit rate can be found. -- Abel
+#: Input/mpg123/fileinfo.c:735 Input/mpg123/fileinfo.c:1125
+#: Input/vorbis/fileinfo.c:836 Input/vorbis/fileinfo.c:912
+msgid "Bit rate:"
+msgstr "ä½å
ç:"
+
+#: Input/mpg123/fileinfo.c:748 Input/mpg123/fileinfo.c:1128
+#: Input/vorbis/fileinfo.c:849 Input/vorbis/fileinfo.c:915
+msgid "Sample rate:"
+msgstr "å樣ç:"
+
+#: Input/mpg123/fileinfo.c:762 Input/mpg123/fileinfo.c:1143
+msgid "Frames:"
+msgstr "å½±æ ¼:"
+
+#: Input/mpg123/fileinfo.c:775 Input/mpg123/fileinfo.c:1146
+#: Input/vorbis/fileinfo.c:888 Input/vorbis/fileinfo.c:924
+msgid "File size:"
+msgstr "æªæ¡å¤§å°:"
+
+#: Input/mpg123/fileinfo.c:798 Input/mpg123/fileinfo.c:1131
+msgid "Error Protection:"
+msgstr "é¯èª¤é²è·:"
+
+#: Input/mpg123/fileinfo.c:811 Input/mpg123/fileinfo.c:1134
+#: Input/vorbis/fileinfo.c:718
+msgid "Copyright:"
+msgstr "çæ¬:"
+
+#: Input/mpg123/fileinfo.c:824 Input/mpg123/fileinfo.c:1137
+msgid "Original:"
+msgstr "åå§:"
+
+#: Input/mpg123/fileinfo.c:837 Input/mpg123/fileinfo.c:1140
+msgid "Emphasis:"
+msgstr "å¢å¹
:"
+
+#: Input/mpg123/fileinfo.c:851
+msgid " ID3 Tag "
+msgstr " ID3 æ¨ç±¤ "
+
+#: Input/mpg123/fileinfo.c:859 Input/vorbis/fileinfo.c:580
+msgid "Title:"
+msgstr "æ¨é¡:"
+
+#: Input/mpg123/fileinfo.c:874 Input/vorbis/fileinfo.c:591
+msgid "Artist:"
+msgstr "è人:"
+
+#: Input/mpg123/fileinfo.c:889 Input/vorbis/fileinfo.c:602
+msgid "Album:"
+msgstr "å°è¼¯:"
+
+#: Input/mpg123/fileinfo.c:904 Input/vorbis/fileinfo.c:613
+msgid "Comment:"
+msgstr "註解:"
+
+#: Input/mpg123/fileinfo.c:926
+msgid "Year:"
+msgstr "年份:"
+
+#: Input/mpg123/fileinfo.c:938 Input/vorbis/fileinfo.c:636
+msgid "Track number:"
+msgstr "é³è»è碼:"
+
+#: Input/mpg123/fileinfo.c:970 Input/vorbis/fileinfo.c:648
+msgid "Genre:"
+msgstr "æ¨æ²é¡å:"
+
+#: Input/mpg123/fileinfo.c:1007
+msgid "Copy album tags"
+msgstr "è¤è£½å°è¼¯æ¨ç±¤"
+
+#: Input/mpg123/fileinfo.c:1008
+msgid "Paste album tags"
+msgstr "è²¼ä¸å°è¼¯æ¨ç±¤"
+
+#: Input/mpg123/fileinfo.c:1101 Input/vorbis/fileinfo.c:1014
+#: beep/mainwin.c:780
+#, c-format
+msgid "%s - BMP"
+msgstr "%s - BMP"
+
+#: Input/mpg123/fileinfo.c:1123 Input/mpg123/fileinfo.c:1126
+#: Input/mpg123/fileinfo.c:1129 Input/mpg123/fileinfo.c:1132
+#: Input/mpg123/fileinfo.c:1135 Input/mpg123/fileinfo.c:1138
+#: Input/mpg123/fileinfo.c:1141 Input/mpg123/fileinfo.c:1144
+#: Input/mpg123/fileinfo.c:1147 Input/vorbis/fileinfo.c:913
+#: Input/vorbis/fileinfo.c:916 Input/vorbis/fileinfo.c:919
+#: Input/vorbis/fileinfo.c:922 Input/vorbis/fileinfo.c:925
+msgid "N/A"
+msgstr "N/A"
+
+#: Input/mpg123/fileinfo.c:1250 Input/mpg123/fileinfo.c:1371
+#, c-format
+msgid ""
+"Variable,\n"
+"avg. bitrate: %d KBit/s"
+msgstr ""
+"å¯è®çï¼\n"
+"å¹³åä½å
ç: %d KBit/s"
+
+#: Input/mpg123/fileinfo.c:1264 Input/mpg123/fileinfo.c:1266
+#: Input/mpg123/fileinfo.c:1267 Input/mpg123/fileinfo.c:1268
+#: Input/mpg123/fileinfo.c:1385 Input/mpg123/fileinfo.c:1387
+#: Input/mpg123/fileinfo.c:1388 Input/mpg123/fileinfo.c:1389
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: Input/mpg123/fileinfo.c:1269 Input/mpg123/fileinfo.c:1390
+#: Input/vorbis/fileinfo.c:957
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: Input/mpg123/fileinfo.c:1270 Input/mpg123/fileinfo.c:1391
+#, c-format
+msgid "%lu Bytes"
+msgstr "%lu ä½å
çµ"
+
+#: Input/mpg123/http.c:220 Input/vorbis/http.c:218
+msgid "Error"
+msgstr "é¯èª¤"
+
+#: Input/mpg123/http.c:374 Input/vorbis/http.c:326
+#, c-format
+msgid "LOOKING UP %s"
+msgstr "å°æ¾ %s"
+
+#: Input/mpg123/http.c:379 Input/vorbis/http.c:331
+#, c-format
+msgid "Couldn't look up host %s"
+msgstr "æ¾ä¸å°ä¸»æ© %s"
+
+#: Input/mpg123/http.c:392 Input/vorbis/http.c:344
+#, c-format
+msgid "CONNECTING TO %s:%d"
+msgstr "é£ç·å° %s:%d"
+
+#: Input/mpg123/http.c:400 Input/mpg123/http.c:420 Input/vorbis/http.c:352
+#: Input/vorbis/http.c:372
+#, c-format
+msgid "Couldn't connect to host %s"
+msgstr "ç¡æ³é£ç·å°ä¸»æ© %s"
+
+#: Input/mpg123/http.c:483 Input/vorbis/http.c:420
+msgid "CONNECTED: WAITING FOR REPLY"
+msgstr "å·²é£ç·ï¼çå¾
åæ"
+
+#: Input/mpg123/http.c:520 Input/vorbis/http.c:457
+#, c-format
+msgid ""
+"Couldn't connect to host %s\n"
+"Server reported: %s"
+msgstr ""
+"ç¡æ³é£ç·å°ä¸»æ© %s\n"
+"伺æå¨åå ±ï¼ %s"
+
+#: Input/mpg123/http.c:638 Input/vorbis/http.c:556
+#, c-format
+msgid "PRE-BUFFERING: %dKB/%dKB"
+msgstr "é å
ç·©è¡: %dKB/%dKB"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Blues"
+msgstr "è調"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Classic Rock"
+msgstr "å¤å
¸æ滾"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Country"
+msgstr "éæé³æ¨"
+
+#: Input/mpg123/mpg123.c:40 Input/vorbis/fileinfo.c:83
+msgid "Dance"
+msgstr "èæ²"
+
+# 迪æ¯å¯ is just a translation in pronunciation, and not widely
+# used. Rejected. -- Abel
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Disco"
+msgstr "Disco"
+
+# Some tranlate it to éåï¼but mostly they say is funk jazz
+# çå
is widely used in Taiwan - Woodman
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Funk"
+msgstr "æ¾å®¢(Funk)"
+
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Grunge"
+msgstr "è»åº«æ滾(Grunge)"
+
+# Some may use å»å, but this is again from pronunciation, and not
+# appropriate enough in meaning. Untranslated here. -- Abel
+#: Input/mpg123/mpg123.c:41 Input/vorbis/fileinfo.c:84
+msgid "Hip-Hop"
+msgstr "Hip-Hop"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Jazz"
+msgstr "çµå£«æ¨"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Metal"
+msgstr "é屬"
+
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "New Age"
+msgstr "æ°ä¸ç´é³æ¨(New Age)"
+
+# Hard to distinguish this with Retro -- Abel
+#: Input/mpg123/mpg123.c:42 Input/vorbis/fileinfo.c:85
+msgid "Oldies"
+msgstr "æ·èé³æ¨"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Other"
+msgstr "å
¶å®"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Pop"
+msgstr "æµè¡æ²"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "R&B"
+msgstr "ç¯å¥è調(R&B)"
+
+# Or is 說å±æ¨ better? -- Abel
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Rap"
+msgstr "é¥èæ¨(Rap)"
+
+#: Input/mpg123/mpg123.c:43 Input/vorbis/fileinfo.c:86
+msgid "Reggae"
+msgstr "é·é¬¼æ¨(Reggae)"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Rock"
+msgstr "æ滾æ¨"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Techno"
+msgstr "é»åèæ²(Techno)"
+
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Industrial"
+msgstr "å·¥æ¥æ滾(Industrial)"
+
+# Alternative Rock is just one kind of alternative music. -- Abel
+#: Input/mpg123/mpg123.c:44 Input/vorbis/fileinfo.c:87
+msgid "Alternative"
+msgstr "å¦é¡é³æ¨"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Ska"
+msgstr "Ska"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Death Metal"
+msgstr "æ»äº¡é屬(Death Metal)"
+
+# Not è£é£¾! -- Abel
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Pranks"
+msgstr "æ¡ä½å"
+
+#: Input/mpg123/mpg123.c:45 Input/vorbis/fileinfo.c:88
+msgid "Soundtrack"
+msgstr "é»å½±åè²å¤§ç¢"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Euro-Techno"
+msgstr "æé¸é»åèæ²(Euro-Techno)"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Ambient"
+msgstr "ç°å¢é³æ¨(Ambient)"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Trip-Hop"
+msgstr "Trip-Hop"
+
+#: Input/mpg123/mpg123.c:46 Input/vorbis/fileinfo.c:89
+msgid "Vocal"
+msgstr "è²æ¨"
+
+# damn those who created these ID3 genres -- Abel
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Jazz+Funk"
+msgstr "çµå£«+æ¾å®¢(Jazz+Funk)"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Fusion"
+msgstr "èåçµå£«æ¨(Fusion)"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Trance"
+msgstr "è¿·å¹»é»å(Trance)"
+
+#: Input/mpg123/mpg123.c:47 Input/vorbis/fileinfo.c:90
+msgid "Classical"
+msgstr "å¤å
¸é³æ¨"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Instrumental"
+msgstr "æ¨å¨æ¼å¥"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Acid"
+msgstr "è¿·å¹»é³æ¨(Acid)"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "House"
+msgstr "House"
+
+#: Input/mpg123/mpg123.c:48 Input/vorbis/fileinfo.c:91
+msgid "Game"
+msgstr "éæ²é³æ¨"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Sound Clip"
+msgstr "é³æ¨é¸è¼¯"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Gospel"
+msgstr "ç¦é³é³æ¨"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "Noise"
+msgstr "åªé³é³æ¨"
+
+#: Input/mpg123/mpg123.c:49 Input/vorbis/fileinfo.c:92
+msgid "AlternRock"
+msgstr "AlternRock"
+
+# Ugly, but keep it anyway. I can't think of anything better. -- Abel
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Bass"
+msgstr "è²æ¯"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Soul"
+msgstr "ééæ¨(Soul)"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Punk"
+msgstr "é¾å
é³æ¨(Punk)"
+
+#: Input/mpg123/mpg123.c:50 Input/vorbis/fileinfo.c:93
+msgid "Space"
+msgstr "太空æ滾"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Meditative"
+msgstr "å¥æ³é³æ¨"
+
+#: Input/mpg123/mpg123.c:51 Input/vorbis/fileinfo.c:94
+msgid "Instrumental Pop"
+msgstr "æµè¡æ¨æ¼å¥"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Instrumental Rock"
+msgstr "æ滾æ¨æ¼å¥"
+
+# How to distinguish this with æ°æé³æ¨? -- Abel
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Ethnic"
+msgstr "å°æ¸æ°æé³æ¨"
+
+#: Input/mpg123/mpg123.c:52 Input/vorbis/fileinfo.c:95
+msgid "Gothic"
+msgstr "æå¾·æ滾(Gothic)"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Darkwave"
+msgstr "é»æ½®é³æ¨(Darkwave)"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Techno-Industrial"
+msgstr "é»åå·¥æ¥æ滾"
+
+#: Input/mpg123/mpg123.c:53 Input/vorbis/fileinfo.c:96
+msgid "Electronic"
+msgstr "é»åé³æ¨"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Pop-Folk"
+msgstr "æµè¡æ°æ"
+
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Eurodance"
+msgstr "æé¸èæ²(Eurodance)"
+
+# This entry is taken from Sun. -- Abel
+#: Input/mpg123/mpg123.c:54 Input/vorbis/fileinfo.c:97
+msgid "Dream"
+msgstr "夢幻é³æ¨(Dream)"
+
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Southern Rock"
+msgstr "åæ¹æ滾(Southern Rock)"
+
+# This entry is taken from Sun. -- Abel
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Comedy"
+msgstr "ååé³æ¨"
+
+# This entry is taken from Sun. -- Abel
+#: Input/mpg123/mpg123.c:55 Input/vorbis/fileinfo.c:98
+msgid "Cult"
+msgstr "å¶åå´æé³æ¨(Cult)"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Gangsta Rap"
+msgstr "幫派é¥èæ¨(Gangsta Rap)"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Top 40"
+msgstr "æµè¡ææ²æè¡æ¦é 40 ä½"
+
+#: Input/mpg123/mpg123.c:56 Input/vorbis/fileinfo.c:99
+msgid "Christian Rap"
+msgstr "åºç£é¥èæ¨"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Pop/Funk"
+msgstr "æµè¡æ¨/æ¾å®¢"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Jungle"
+msgstr "å¢æé³æ¨(Jungle)"
+
+#: Input/mpg123/mpg123.c:57 Input/vorbis/fileinfo.c:100
+msgid "Native American"
+msgstr "ç¾åæ¬åé³æ¨"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Cabaret"
+msgstr "å¤ç¸½æé³æ¨(Cabaret)"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "New Wave"
+msgstr "æ°æµªæ½®é³æ¨(New Wave)"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Psychedelic"
+msgstr "è¿·å¹»é³æ¨"
+
+#: Input/mpg123/mpg123.c:58 Input/vorbis/fileinfo.c:101
+msgid "Rave"
+msgstr "é³èé³æ¨(Rave)"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Showtunes"
+msgstr "æèåé³æ¨(Showtunes)"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Trailer"
+msgstr "é»å½±é åçé³æ¨"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Lo-Fi"
+msgstr "ä½å³ç(Lo-Fi)"
+
+#: Input/mpg123/mpg123.c:59 Input/vorbis/fileinfo.c:102
+msgid "Tribal"
+msgstr "é¨è½é³æ¨"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Punk"
+msgstr "è¿·å¹»é¾å
(Acid Punk)"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Acid Jazz"
+msgstr "è¿·å¹»çµå£«(Acid Jazz)"
+
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Polka"
+msgstr "æ³¢ç¾å¡èæ²(Polka)"
+
+# Hard to distinguish this with Oldies -- Abel
+#: Input/mpg123/mpg123.c:60 Input/vorbis/fileinfo.c:103
+msgid "Retro"
+msgstr "復å¤é³æ¨(Retro)"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Musical"
+msgstr "é³æ¨å"
+
+# Can't distinguish Rock from Rock 'n' Roll -- Abel
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Rock & Roll"
+msgstr "æ滾æ¨"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Hard Rock"
+msgstr "硬å¼æ滾(Hard Rock)"
+
+#: Input/mpg123/mpg123.c:61 Input/vorbis/fileinfo.c:104
+msgid "Folk"
+msgstr "æ°è¬ "
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Folk/Rock"
+msgstr "æ°è¬ æ滾"
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "National Folk"
+msgstr "å家æ°è¬ "
+
+#: Input/mpg123/mpg123.c:62 Input/vorbis/fileinfo.c:105
+msgid "Swing"
+msgstr "ææºæ¨(Swing)"
+
+# I can't find any trad. Chinese name for this one. -- Abel
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Fast-Fusion"
+msgstr "Fast-Fusion"
+
+# Some referred it as "Bebob"? -- Abel
+#
+# Many Chinese Jazz Web site mentioned this word
+# I think is ok to use "æ¯åå" -- Woodman
+#
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+#, fuzzy
+msgid "Bebob"
+msgstr "æ¯ååçµå£«(Bebop)"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Latin"
+msgstr "æä¸é³æ¨"
+
+#: Input/mpg123/mpg123.c:63 Input/vorbis/fileinfo.c:106
+msgid "Revival"
+msgstr "復èé³æ¨"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Celtic"
+msgstr "å
ç¾ç¹é³æ¨(Celtic)"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Bluegrass"
+msgstr "èæ ¹è調(Bluegrass)"
+
+#: Input/mpg123/mpg123.c:64 Input/vorbis/fileinfo.c:107
+msgid "Avantgarde"
+msgstr "åè¡çµå£«(Avantgarde)"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Gothic Rock"
+msgstr "æå¾·æ滾(Gothic Rock)"
+
+#: Input/mpg123/mpg123.c:65 Input/vorbis/fileinfo.c:108
+msgid "Progressive Rock"
+msgstr "åè¡æ滾(Progressive Rock)"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Psychedelic Rock"
+msgstr "è¿·å¹»æ滾"
+
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Symphonic Rock"
+msgstr "交é¿æ滾"
+
+# Distinguish this from "Soft Rock" -- Abel
+#: Input/mpg123/mpg123.c:66 Input/vorbis/fileinfo.c:109
+msgid "Slow Rock"
+msgstr "æ
¢æ滾(Slow Rock)"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Big Band"
+msgstr "大åæ¨é"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Chorus"
+msgstr "åå±"
+
+#: Input/mpg123/mpg123.c:67 Input/vorbis/fileinfo.c:110
+msgid "Easy Listening"
+msgstr "è¼é³æ¨"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Acoustic"
+msgstr "åé³é³æ¨(Acoustic)"
+
+# Sun translate it toãå¹½é»ã, but I think the one below is
+# better -- Abel
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Humour"
+msgstr "詼諧æ¨"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Speech"
+msgstr "æ¼èªª"
+
+#: Input/mpg123/mpg123.c:68 Input/vorbis/fileinfo.c:111
+msgid "Chanson"
+msgstr "æ³åé¦é "
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Opera"
+msgstr "æå"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Chamber Music"
+msgstr "室æ¨æ¼å¥"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Sonata"
+msgstr "å¥é³´æ²"
+
+#: Input/mpg123/mpg123.c:69 Input/vorbis/fileinfo.c:112
+msgid "Symphony"
+msgstr "交é¿æ²"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Booty Bass"
+msgstr "Booty Bass"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Primus"
+msgstr "Primus"
+
+#: Input/mpg123/mpg123.c:70 Input/vorbis/fileinfo.c:113
+msgid "Porn Groove"
+msgstr "æ
è²é³æ¨"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Satire"
+msgstr "è«·åºæ²"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Slow Jam"
+msgstr "Slow Jam"
+
+# Inspired from Sun -- Abel
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Club"
+msgstr "俱æ¨é¨é³æ¨"
+
+#: Input/mpg123/mpg123.c:71 Input/vorbis/fileinfo.c:114
+msgid "Tango"
+msgstr "æ¢æ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Samba"
+msgstr "森巴"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Folklore"
+msgstr "æ°ä¿é³æ¨"
+
+# èæ¨æ² is the commonly used term in Taiwan, but I think this translation
+# is much better. -- Abel
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Ballad"
+msgstr "æ
æ"
+
+#: Input/mpg123/mpg123.c:72 Input/vorbis/fileinfo.c:115
+msgid "Power Ballad"
+msgstr "å¼·åæ
æ(Power Ballad)"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Rhythmic Soul"
+msgstr "ç¯å¥ééæ¨"
+
+# This entry is taken from Sun. -- Abel
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Freestyle"
+msgstr "èªç±å½¢å¼é³æ¨"
+
+#: Input/mpg123/mpg123.c:73 Input/vorbis/fileinfo.c:116
+msgid "Duet"
+msgstr "äºéå¥"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Punk Rock"
+msgstr "é¾å
æ滾(Punk Rock)"
+
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "Drum Solo"
+msgstr "é¼æç¨å¥"
+
+# Although ç¡ä¼´å¥åå± maybe better, but é¿å¡è²æ is widly useã - woodman
+#: Input/mpg123/mpg123.c:74 Input/vorbis/fileinfo.c:117
+msgid "A Cappella"
+msgstr "é¿å¡è²æ(A Cappella)"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Euro-House"
+msgstr "Euro-House"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Dance Hall"
+msgstr "è廳é³æ¨"
+
+#: Input/mpg123/mpg123.c:75 Input/vorbis/fileinfo.c:118
+msgid "Goa"
+msgstr "Goa"
+
+# Bad, I don't want to translate this. Ugly. -- Abel
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Drum & Bass"
+msgstr "é¼åè²æ¯"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Club-House"
+msgstr "Club-House"
+
+#: Input/mpg123/mpg123.c:76 Input/vorbis/fileinfo.c:119
+msgid "Hardcore"
+msgstr "硬è(Hardcore)"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Terror"
+msgstr "é©æé³æ¨"
+
+# This entry is taken from Sun. -- Abel
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Indie"
+msgstr "ç¨ç«è£½ä½å±ç(Indie)"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "BritPop"
+msgstr "è±å¼æ滾"
+
+#: Input/mpg123/mpg123.c:77 Input/vorbis/fileinfo.c:120
+msgid "Negerpunk"
+msgstr "Negerpunk"
+
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Polsk Punk"
+msgstr "Polsk Punk"
+
+# Sun çãæææ¨ãæé»æªãä¸éæä¸è¯å®éæ¯å¦ãæ²ææ¨ãã -- Abel
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Beat"
+msgstr "æ²ææ¨"
+
+# Taiwan never had this translated, There's no good translation
+# so far -- Abel
+#: Input/mpg123/mpg123.c:78 Input/vorbis/fileinfo.c:121
+msgid "Christian Gangsta Rap"
+msgstr "Christian Gangsta Rap"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Heavy Metal"
+msgstr "éé屬(Heavy Metal)"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Black Metal"
+msgstr "é»é屬(Black Metal)"
+
+#: Input/mpg123/mpg123.c:79 Input/vorbis/fileinfo.c:122
+msgid "Crossover"
+msgstr "è·¨çé³æ¨(Crossover)"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Contemporary Christian"
+msgstr "ç¾ä»£åºç£æ主é¡é³æ¨"
+
+#: Input/mpg123/mpg123.c:80 Input/vorbis/fileinfo.c:123
+msgid "Christian Rock"
+msgstr "åºç£æ滾"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Merengue"
+msgstr "ç¾å«æ ¼èæ²(Merengue)"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Salsa"
+msgstr "騷æ²èæ²(Salsa)"
+
+#: Input/mpg123/mpg123.c:81 Input/vorbis/fileinfo.c:124
+msgid "Thrash Metal"
+msgstr "éæé屬(Thrash Metal)"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Anime"
+msgstr "å漫ç«(Anime)"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "JPop"
+msgstr "æ¥æ¬æµè¡æ²"
+
+#: Input/mpg123/mpg123.c:82 Input/vorbis/fileinfo.c:125
+msgid "Synthpop"
+msgstr "Synthpop"
+
+#: Input/mpg123/mpg123.c:1181
+msgid "About MPEG Audio Plugin"
+msgstr "éæ¼ MPEG é³æå¤æç¨å¼"
+
+#: Input/mpg123/mpg123.c:1182
+msgid ""
+"mpg123 decoding engine by Michael Hipp <mh at mpg123.de>\n"
+"Plugin by The XMMS team"
+msgstr ""
+"mpg123 解碼å¼æä¾èª Michael Hipp <mh at mpg123.de>\n"
+"å¤æç¨å¼ä¾èª XMMS åé"
+
+#: Input/mpg123/mpg123.c:1218
+msgid "MPEG Audio Plugin"
+msgstr "MPEG é³æå¤æç¨å¼"
+
+#: Input/vorbis/configure.c:192
+msgid "Select the directory where you want to store the Ogg Vorbis streams:"
+msgstr "é¸ææ¨æ³è¦ç¨ä¾å²å Ogg Vorbis 串æµçç®é:"
+
+#: Input/vorbis/configure.c:275
+msgid "Ogg Vorbis Audio Plugin Configuration"
+msgstr "Ogg Vorbis é³æå¤æç¨å¼çµæ
"
+
+#: Input/vorbis/configure.c:464
+msgid "Ogg Vorbis Tags:"
+msgstr "Ogg Vorbis æ¨ç±¤:"
+
+#: Input/vorbis/configure.c:485 beep/glade/prefswin.glade:2261
+msgid "Title format:"
+msgstr "æ¨é¡æ ¼å¼:"
+
+#: Input/vorbis/configure.c:503
+msgid "ReplayGain Settings:"
+msgstr "éæå¢çè¨å®å¼:"
+
+#: Input/vorbis/configure.c:511
+msgid "Enable Clipping Prevention"
+msgstr "åç¨ä¸æ·é²è·"
+
+#: Input/vorbis/configure.c:516
+msgid "Enable ReplayGain"
+msgstr "åç¨ææ¾å¢ç"
+
+#: Input/vorbis/configure.c:521
+msgid "ReplayGain Type:"
+msgstr "ææ¾å¢çé¡å:"
+
+#: Input/vorbis/configure.c:532
+#, fuzzy
+msgid "use Track Gain/Peak"
+msgstr "使ç¨é³è»å¢ç/å°å³°"
+
+#: Input/vorbis/configure.c:542
+#, fuzzy
+msgid "use Album Gain/Peak"
+msgstr "使ç¨å°è¼¯å¢ç/å°å³°"
+
+#: Input/vorbis/configure.c:554
+#, fuzzy
+msgid "Enable 6dB Boost + Hard Limiting"
+msgstr "åç¨ 6dB éä½é³ + éå¶"
+
+#: Input/vorbis/configure.c:560
+msgid "ReplayGain"
+msgstr "ææ¾å¢ç"
+
+#: Input/vorbis/fileinfo.c:210
+#, c-format
+msgid ""
+"An error occured:\n"
+"%s"
+msgstr ""
+"ç¼çé¯èª¤:\n"
+"%s"
+
+#: Input/vorbis/fileinfo.c:212
+msgid "Error!"
+msgstr "é¯èª¤ï¼"
+
+#: Input/vorbis/fileinfo.c:242
+msgid "Failed to modify tag (open)"
+msgstr "編輯æ¨ç±¤å¤±æ(éå)"
+
+#: Input/vorbis/fileinfo.c:295
+msgid "Failed to modify tag (close)"
+msgstr "編輯æ¨ç±¤å¤±æ(éé)"
+
+#: Input/vorbis/fileinfo.c:320 Input/vorbis/fileinfo.c:329
+msgid "Failed to modify tag"
+msgstr "編輯æ¨ç±¤å¤±æ"
+
+#: Input/vorbis/fileinfo.c:572
+msgid " Ogg Vorbis Tag "
+msgstr "Ogg Vorbis æ¨ç±¤"
+
+#: Input/vorbis/fileinfo.c:624
+msgid "Date:"
+msgstr "æ¥æ:"
+
+#: Input/vorbis/fileinfo.c:666
+msgid "Description:"
+msgstr "æè¿°:"
+
+#: Input/vorbis/fileinfo.c:676
+msgid "Location:"
+msgstr "ä½ç½®:"
+
+#: Input/vorbis/fileinfo.c:686
+msgid "Version:"
+msgstr "çæ¬:"
+
+#: Input/vorbis/fileinfo.c:697
+msgid "ISRC number:"
+msgstr "ISRC ç·¨è:"
+
+#: Input/vorbis/fileinfo.c:708
+msgid "Organization:"
+msgstr "åé«:"
+
+#: Input/vorbis/fileinfo.c:755
+msgid " Ogg Vorbis ReplayGain "
+msgstr "Ogg Vorbis ææ¾å¢ç"
+
+#: Input/vorbis/fileinfo.c:761
+#, fuzzy
+msgid "Track gain:"
+msgstr "é³è»å¢ç:"
+
+#: Input/vorbis/fileinfo.c:771
+#, fuzzy
+msgid "Track peak:"
+msgstr "é³è»å°å³°:"
+
+#: Input/vorbis/fileinfo.c:782
+#, fuzzy
+msgid "Album gain:"
+msgstr "å°è¼¯å¢ç:"
+
+#: Input/vorbis/fileinfo.c:792
+#, fuzzy
+msgid "Album peak:"
+msgstr "å°è¼¯å°å³°:"
+
+#: Input/vorbis/fileinfo.c:821
+msgid " Ogg Vorbis Info "
+msgstr " Ogg Vorbis è³è¨"
+
+#: Input/vorbis/fileinfo.c:875 Input/vorbis/fileinfo.c:921
+msgid "Length:"
+msgstr "é·åº¦:"
+
+#: Input/vorbis/fileinfo.c:955
+#, c-format
+msgid "%d KBit/s (nominal)"
+msgstr "%d KBit/s (ä¸è¬)"
+
+#: Input/vorbis/fileinfo.c:956
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: Input/vorbis/fileinfo.c:959
+#, c-format
+msgid "%d:%.2d"
+msgstr "%d:%.2d"
+
+#: Input/vorbis/fileinfo.c:961
+#, c-format
+msgid "%d Bytes"
+msgstr "%d ä½å
çµ"
+
+#: Input/vorbis/vorbis.c:134
+msgid "Ogg Vorbis Audio Plugin"
+msgstr "Ogg Vorbis é³æå¤æç¨å¼"
+
+#: Input/vorbis/vorbis.c:784
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "éæ¼æ¯Ogg Vorbis é³æå¤æç¨å¼"
+
+#: Input/vorbis/vorbis.c:790
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis å¤æç¨å¼ä¾èª Xiph.org åºéæ\n"
+"\n"
+"åå§ç¢¼ä¾èª\n"
+"Tony Arcieri <bascule at inferno.tusculum.edu>\n"
+"ç±ä¸å人å¡ç¼ä½\n"
+"Chris Montgomery <monty at xiph.org>\n"
+"Peter Alm <peter at xmms.org>\n"
+"Michael Smith <msmith at labyrinth.edu.au>\n"
+"Jack Moffitt <jack at icecast.org>\n"
+"Jorn Baayen <jorn at nl.linux.org>\n"
+"Haavard Kvaalen <havardk at xmms.org>\n"
+"Gian-Carlo Pascutto <gcp at sjeng.org>\n"
+"\n"
+"æ¨å¯ä»¥å° http://www.xiph.org/ åè§ Xiph.org\n"
+
+#: Input/wav/wav.c:67
+msgid "WAV Audio Plugin"
+msgstr "WAV é³æå¤æç¨å¼"
+
+#: Output/OSS/OSS.c:50
+msgid "OSS Output Plugin"
+msgstr "OSS 輸åºå¤æç¨å¼"
+
+#: Output/OSS/about.c:39
+msgid "About OSS Driver"
+msgstr "éæ¼ OSS é©
åç¨å¼"
+
+#: Output/OSS/about.c:40
+msgid ""
+"XMMS OSS Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS OSS é©
åç¨å¼\n"
+"\n"
+" æ¬ç¨å¼æ¯èªç±è»é«ï¼æ¨å¯ä»¥éµç
§èªç±è»é«åºéæ (Free Software Foundation) \n"
+"åºçç GNU éç¨å
Œ
±è¨±å¯èæ¢æ¬¾(GNU General Public License) 第äºç\n"
+"ä¾ä¿®æ¹åéæ°ç¼ä½éä¸ç¨å¼ï¼æè
èªç±é¸æ使ç¨ä»»ä½æ´æ°ç\n"
+"çæ¬ã\n"
+"\n"
+"ç¼ä½éä¸ç¨å¼çç®çæ¯å¸æå®æç¨ï¼\n"
+"ä½æ²æä»»ä½æä¿ãçè³æ²æé©åç¹å®ç®ç\n"
+"èé±å«çæä¿ãæ´è©³ç´°çæ
æ³è«åé±\n"
+"GNU éç¨å
Œ
±è¨±å¯èã\n"
+"\n"
+"æ¨æ該已ç¶åç¨å¼ä¸èµ·æ¶å°ä¸ä»½ GNU\n"
+"éç¨å
Œ
±è¨±å¯èçå¯æ¬ãå¦æéæ²æï¼å¯«ä¿¡çµ¦ï¼ Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/OSS/configure.c:149
+#, c-format
+msgid "Default (%s)"
+msgstr "é è¨å¼(%s)"
+
+#: Output/OSS/configure.c:167
+msgid "Default"
+msgstr "é è¨å¼"
+
+#: Output/OSS/configure.c:199
+msgid "OSS Driver configuration"
+msgstr "OSS é©
åç¨å¼çµæ
"
+
+#: Output/OSS/configure.c:215 Output/alsa/configure.c:295
+msgid "Audio device:"
+msgstr "é³æè£ç½®:"
+
+#: Output/OSS/configure.c:237 Output/OSS/configure.c:278
+msgid "Use alternate device:"
+msgstr "使ç¨æ¿ä»£è£ç½®:"
+
+#: Output/OSS/configure.c:258 Output/alsa/configure.c:339
+msgid "Mixer device:"
+msgstr "æ··é³è£ç½®:"
+
+#: Output/OSS/configure.c:300
+msgid "Devices"
+msgstr "è£ç½®"
+
+#: Output/OSS/configure.c:315 Output/esd/configure.c:184
+msgid "Buffer size (ms):"
+msgstr "ç·©è¡å大å°(ms):"
+
+#: Output/OSS/configure.c:340 Output/esd/configure.c:209
+msgid "Buffering"
+msgstr "ç·©è¡å"
+
+#: Output/OSS/configure.c:341
+msgid "Mixer Settings:"
+msgstr "æ··é³ç¨å¼è¨å®å¼:"
+
+#: Output/OSS/configure.c:347
+msgid "Volume controls Master not PCM"
+msgstr "主é³éæ§å¶ä¸æ¯ PCM"
+
+#: Output/OSS/configure.c:353
+msgid "Mixer"
+msgstr "æ··é³ç¨å¼"
+
+#: Output/esd/about.c:34
+msgid "About ESounD Plugin"
+msgstr "éæ¼ ESounD å¤æç¨å¼"
+
+#: Output/esd/about.c:35
+msgid ""
+"XMMS ESounD Plugin\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+msgstr ""
+"XMMS ESounD å¤æç¨å¼\n"
+"\n"
+" æ¬ç¨å¼æ¯èªç±è»é«ï¼æ¨å¯ä»¥éµç
§èªç±è»é«åºéæ (Free Software Foundation) \n"
+"åºçç GNU éç¨å
Œ
±è¨±å¯èæ¢æ¬¾(GNU General Public License) 第äºç\n"
+"ä¾ä¿®æ¹åéæ°ç¼ä½éä¸ç¨å¼ï¼æè
èªç±é¸æ使ç¨ä»»ä½æ´æ°ç\n"
+"çæ¬ã\n"
+"\n"
+"ç¼ä½éä¸ç¨å¼çç®çæ¯å¸æå®æç¨ï¼\n"
+"ä½æ²æä»»ä½æä¿ãçè³æ²æé©åç¹å®ç®ç\n"
+"èé±å«çæä¿ãæ´è©³ç´°çæ
æ³è«åé±\n"
+"GNU éç¨å
Œ
±è¨±å¯èã\n"
+"\n"
+"æ¨æ該已ç¶åç¨å¼ä¸èµ·æ¶å°ä¸ä»½ GNU\n"
+"éç¨å
Œ
±è¨±å¯èçå¯æ¬ãå¦æéæ²æï¼å¯«ä¿¡çµ¦ï¼ Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA."
+
+#: Output/esd/configure.c:102
+msgid "ESD Output Plugin configuration"
+msgstr "ESD 輸åºå¤æç¨å¼çµæ
"
+
+#: Output/esd/configure.c:125
+msgid "Use remote host"
+msgstr "使ç¨é 端主æ©"
+
+#: Output/esd/configure.c:132
+msgid "Volume controls OSS mixer"
+msgstr "é³éæ§å¶ OSS æ··é³ç¨å¼"
+
+#: Output/esd/configure.c:169
+msgid "Server"
+msgstr "伺æå¨"
+
+#: Output/esd/esd.c:47
+msgid "eSound Output Plugin"
+msgstr "eSound 輸åºå¤æç¨å¼"
+
+#: Output/alsa/about.c:36
+msgid "About ALSA Driver"
+msgstr "éæ¼ ALSA é©
åç¨å¼"
+
+#: Output/alsa/about.c:37
+msgid ""
+"XMMS ALSA Driver\n"
+"\n"
+" This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.\n"
+"Author: Matthieu Sozeau (mattam at altern.org)"
+msgstr ""
+"XMMS ALSA é©
åç¨å¼\n"
+"\n"
+" æ¬ç¨å¼æ¯èªç±è»é«ï¼æ¨å¯ä»¥éµç
§èªç±è»é«åºéæ (Free Software Foundation) \n"
+"åºçç GNU éç¨å
Œ
±è¨±å¯èæ¢æ¬¾(GNU General Public License) 第äºç\n"
+"ä¾ä¿®æ¹åéæ°ç¼ä½éä¸ç¨å¼ï¼æè
èªç±é¸æ使ç¨ä»»ä½æ´æ°ç\n"
+"çæ¬ã\n"
+"\n"
+"ç¼ä½éä¸ç¨å¼çç®çæ¯å¸æå®æç¨ï¼\n"
+"ä½æ²æä»»ä½æä¿ãçè³æ²æé©åç¹å®ç®ç\n"
+"èé±å«çæä¿ãæ´è©³ç´°çæ
æ³è«åé±\n"
+"GNU éç¨å
Œ
±è¨±å¯èã\n"
+"\n"
+"æ¨æ該已ç¶åç¨å¼ä¸èµ·æ¶å°ä¸ä»½ GNU\n"
+"éç¨å
Œ
±è¨±å¯èçå¯æ¬ãå¦æéæ²æï¼å¯«ä¿¡çµ¦ï¼ Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
+"USA.ä½è
: Matthieu Sozeau (mattam at altern.org)"
+
+#: Output/alsa/alsa.c:46
+#, c-format
+msgid "ALSA %s output plugin"
+msgstr "ALSA %s 輸åºå¤æç¨å¼"
+
+#: Output/alsa/configure.c:164
+msgid "Unknown soundcard"
+msgstr "ä¸æçé³æå¡"
+
+#: Output/alsa/configure.c:217
+#, c-format
+msgid "Default PCM device (%s)"
+msgstr "é è¨ç PCM è£ç½® (%s)"
+
+#: Output/alsa/configure.c:280
+msgid "ALSA Driver configuration"
+msgstr "ALSA é©
åç¨å¼çµæ
"
+
+#: Output/alsa/configure.c:308
+msgid "Mixer:"
+msgstr "æ··é³ç¨å¼:"
+
+#: Output/alsa/configure.c:316
+msgid "Use software volume control"
+msgstr "使ç¨è»é«é³éæ§å¶"
+
+#: Output/alsa/configure.c:326
+msgid "Mixer card:"
+msgstr "æ··é³å¡:"
+
+#: Output/alsa/configure.c:359
+msgid "Device settings"
+msgstr "è£ç½®è¨å®å¼"
+
+#: Output/alsa/configure.c:361
+msgid "Advanced settings:"
+msgstr "é²éè¨å®:"
+
+#: Output/alsa/configure.c:374
+msgid "Buffer time (ms):"
+msgstr "ç·©è¡æé(ms):"
+
+#: Output/alsa/configure.c:388
+msgid "Period time (ms):"
+msgstr "æé(ms):"
+
+#: Output/alsa/configure.c:402
+#, fuzzy
+msgid "Thread buffer time (ms):"
+msgstr "ç·©è¡æé(ms):"
+
+#: Output/alsa/configure.c:416
+msgid "Multi-thread mode"
+msgstr ""
+
+#: Output/alsa/configure.c:421
+msgid "Mmap mode"
+msgstr "Mmap 模å¼"
+
+#: Output/alsa/configure.c:427
+msgid "Advanced settings"
+msgstr "é²éè¨å®"
+
+#: Visualization/blur_scope/blur_scope.c:57
+msgid "/Toggle Decorations"
+msgstr "/åæè£é£¾"
+
+#: Visualization/blur_scope/blur_scope.c:59
+msgid "/-"
+msgstr "/-"
+
+#: Visualization/blur_scope/blur_scope.c:60
+msgid "/Close"
+msgstr "/éé"
+
+#: Visualization/blur_scope/blur_scope.c:198
+msgid "Blur scope"
+msgstr "模ç³ç¯å"
+
+#: Visualization/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "模ç³ç¯åï¼è²å½©é¸æ"
+
+#: Visualization/blur_scope/config.c:83
+msgid "Options:"
+msgstr "é¸é
:"
+
+#: libbeep/titlestring.c:324
+msgid "Performer/Artist"
+msgstr "æ¼åºè
/è人"
+
+#: libbeep/titlestring.c:325 beep/prefswin.c:94
+msgid "Album"
+msgstr "å°è¼¯"
+
+#: libbeep/titlestring.c:326 beep/prefswin.c:97
+msgid "Genre"
+msgstr "æ¨æ²é¡å"
+
+#: libbeep/titlestring.c:327
+msgid "File name"
+msgstr "æªæ¡å稱"
+
+#: libbeep/titlestring.c:328
+msgid "File path"
+msgstr "æªæ¡çè·¯å¾"
+
+#: libbeep/titlestring.c:329
+msgid "File extension"
+msgstr "延伸æªå"
+
+#: libbeep/titlestring.c:330
+msgid "Track name"
+msgstr "é³è»å稱"
+
+#: libbeep/titlestring.c:331
+msgid "Track number"
+msgstr "é³è»ç·¨è"
+
+#: libbeep/titlestring.c:332 beep/prefswin.c:100
+msgid "Date"
+msgstr "æ¥æ"
+
+#: libbeep/titlestring.c:333 beep/prefswin.c:101
+msgid "Year"
+msgstr "年份"
+
+#: libbeep/titlestring.c:334 beep/prefswin.c:102
+msgid "Comment"
+msgstr "註解"
+
+#: libbeep/titlestring.c:385
+msgid "%{n:...%}: Display \"...\" only if element %n is present"
+msgstr "%{n:...%}: å¦æåºç¾å
ç´ %n æåªé¡¯ç¤º \"...\""
+
+#: beep/about.c:42
+#, fuzzy, c-format
+msgid ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"A media player based on XMMS\n"
+"\n"
+"Copyright (C) 2003-2005 BMP Development Team\n"
+msgstr ""
+"<big><b>Beep Media Player %s</b></big>\n"
+"ä¸ååºæ¼ XMMS çåªé«ææ¾ç¨å¼\n"
+"\n"
+"çæ¬ (C) 2003-2004 BMP éç¼åé\n"
+
+#: beep/about.c:48
+msgid "Developers:"
+msgstr "éç¼äººå¡:"
+
+#: beep/about.c:49
+msgid "Artem Baguinski"
+msgstr "Artem Baguinski"
+
+#: beep/about.c:50 beep/about.c:85 beep/about.c:169
+msgid "Edward Brocklesby"
+msgstr "Edward Brocklesby"
+
+#: beep/about.c:51 beep/about.c:99
+msgid "Chong Kai Xiong"
+msgstr "Chong Kai Xiong"
+
+#: beep/about.c:52 beep/about.c:84
+msgid "Milosz Derezynski"
+msgstr "Milosz Derezynski"
+
+#: beep/about.c:53
+msgid "David Lau"
+msgstr "David Lau"
+
+#: beep/about.c:54
+msgid "Ole Andre Vadla Ravnaas"
+msgstr "Ole Andre Vadla Ravnaas"
+
+#: beep/about.c:55
+msgid "Michiel Sikkes"
+msgstr "Michiel Sikkes"
+
+#: beep/about.c:58
+msgid "With Additional Help:"
+msgstr "åå
¶ä»çååè
:"
+
+#: beep/about.c:59
+msgid "Andrei Badea"
+msgstr "Andrei Badea"
+
+#: beep/about.c:60
+msgid "Peter Behroozi"
+msgstr "Peter Behroozi"
+
+#: beep/about.c:61
+msgid "Bernard Blackham"
+msgstr "Bernard Blackham"
+
+#: beep/about.c:62
+msgid "Oliver Blin"
+msgstr "Oliver Blin"
+
+#: beep/about.c:63
+msgid "Tomas Bzatek"
+msgstr "Tomas Bzatek"
+
+#: beep/about.c:64 beep/about.c:149
+msgid "Liviu Danicel"
+msgstr "Liviu Danicel"
+
+#: beep/about.c:65
+msgid "Jon Dowland"
+msgstr "Jon Dowland"
+
+#: beep/about.c:66
+msgid "Artur Frysiak"
+msgstr "Artur Frysiak"
+
+#: beep/about.c:67
+msgid "Sebastian Kapfer"
+msgstr "Sebastian Kapfer"
+
+#: beep/about.c:68
+msgid "Lukas Koberstein"
+msgstr "Lukas Koberstein"
+
+#: beep/about.c:69 beep/about.c:153
+msgid "Dan Korostelev"
+msgstr "Dan Korostelev"
+
+#: beep/about.c:70
+msgid "Jolan Luff"
+msgstr "Jolan Luff"
+
+#: beep/about.c:71
+msgid "Michael Marineau"
+msgstr "Michael Marineau"
+
+#: beep/about.c:72
+msgid "Tim-Philipp Muller"
+msgstr "Tim-Philipp Muller"
+
+#: beep/about.c:73
+msgid "Julien Portalier"
+msgstr "Julien Portalier"
+
+#: beep/about.c:74
+msgid "Andrew Ruder"
+msgstr "Andrew Ruder"
+
+#: beep/about.c:75
+msgid "Olivier Samyn"
+msgstr "Olivier Samyn"
+
+#: beep/about.c:76
+msgid "Martijn Vernooij"
+msgstr "Martijn Vernooij"
+
+#: beep/about.c:79
+msgid "ClearSky skin:"
+msgstr ""
+
+#: beep/about.c:80
+msgid "Will Reinhart"
+msgstr ""
+
+#: beep/about.c:83
+msgid "Homepage and Graphics:"
+msgstr "é¦é èåç:"
+
+#: beep/about.c:92
+msgid "Brazilian Portuguese:"
+msgstr "巴西è¡èçèª:"
+
+#: beep/about.c:93
+msgid "Philipi Pinto"
+msgstr "Philipi Pinto"
+
+#: beep/about.c:95
+msgid "Breton:"
+msgstr "å¸åå¡å°¼èª:"
+
+#: beep/about.c:96
+msgid "Thierry Vignaud"
+msgstr "Thierry Vignaud"
+
+#: beep/about.c:98
+msgid "Chinese:"
+msgstr "ä¸æ:"
+
+#: beep/about.c:100
+msgid "Chao-Hsiung Liao"
+msgstr ""
+
+#: beep/about.c:102
+msgid "Czech:"
+msgstr "æ·å
èª:"
+
+#: beep/about.c:103
+msgid "Jan Narovec"
+msgstr "Jan Narovec"
+
+#: beep/about.c:105
+msgid "Dutch:"
+msgstr "è·èèª:"
+
+#: beep/about.c:106
+msgid "Laurens Buhler"
+msgstr "Laurens Buhler"
+
+#: beep/about.c:108
+#, fuzzy
+msgid "Finnish:"
+msgstr "西ççèª:"
+
+#: beep/about.c:109
+msgid "Pauli Virtanen"
+msgstr ""
+
+#: beep/about.c:111
+msgid "French:"
+msgstr "æ³èª:"
+
+#: beep/about.c:112
+msgid "David Le Brun"
+msgstr "David Le Brun"
+
+#: beep/about.c:114
+msgid "German:"
+msgstr "å¾·èª:"
+
+#: beep/about.c:115
+msgid "Matthias Debus"
+msgstr "Matthias Debus"
+
+#: beep/about.c:117
+#, fuzzy
+msgid "Georgian: "
+msgstr "å¾·èª:"
+
+#: beep/about.c:118
+msgid "George Machitidze"
+msgstr ""
+
+#: beep/about.c:120
+msgid "Greek:"
+msgstr "å¸èèª:"
+
+#: beep/about.c:121
+msgid "Kouzinopoulos Haris"
+msgstr "Kouzinopoulos Haris"
+
+#: beep/about.c:122
+msgid "Stavros Giannouris"
+msgstr ""
+
+#: beep/about.c:124
+msgid "Hindi:"
+msgstr ""
+
+#: beep/about.c:125
+msgid "Dhananjaya Sharma"
+msgstr ""
+
+#: beep/about.c:127
+msgid "Hungarian:"
+msgstr "åçå©èª:"
+
+#: beep/about.c:128
+msgid "Laszlo Dvornik"
+msgstr "Laszlo Dvornik"
+
+#: beep/about.c:130
+msgid "Italian:"
+msgstr "義大å©èª:"
+
+#: beep/about.c:131
+msgid "Alessio D'Ascanio"
+msgstr "Alessio D'Ascanio"
+
+#: beep/about.c:133
+msgid "Japanese:"
+msgstr "æ¥èª:"
+
+#: beep/about.c:134
+msgid "Takeshi Aihana"
+msgstr "Takeshi Aihana"
+
+#: beep/about.c:136
+msgid "Korean:"
+msgstr "éèª:"
+
+#: beep/about.c:137
+msgid "DongCheon Park"
+msgstr "DongCheon Park"
+
+#: beep/about.c:139
+msgid "Lithuanian:"
+msgstr "ç«é¶å®èª:"
+
+#: beep/about.c:140
+msgid "Rimas Kudelis"
+msgstr "Rimas Kudelis"
+
+#: beep/about.c:142
+msgid "Macedonian:"
+msgstr "馬å
¶é èª:"
+
+#: beep/about.c:143
+msgid "Arangel Angov"
+msgstr "Arangel Angov"
+
+#: beep/about.c:145
+msgid "Polish:"
+msgstr "æ³¢èèª:"
+
+#: beep/about.c:146
+msgid "Jacek Wolszczak"
+msgstr "Jacek Wolszczak"
+
+#: beep/about.c:148
+msgid "Romanian:"
+msgstr "ç¾
馬尼äºèª:"
+
+#: beep/about.c:151
+msgid "Russian:"
+msgstr "ä¿ç¾
æ¯èª:"
+
+#: beep/about.c:152
+msgid "Pavlo Bohmat"
+msgstr "Pavlo Bohmat"
+
+#: beep/about.c:154
+msgid "Vitaly Lipatov"
+msgstr ""
+
+#: beep/about.c:156
+msgid "Slovak:"
+msgstr "æ¯æ´ä¼å
èª:"
+
+#: beep/about.c:157
+msgid "Pavel Kanzelsberger"
+msgstr "Pavel Kanzelsberger"
+
+#: beep/about.c:159
+msgid "Spanish:"
+msgstr "西ççèª:"
+
+#: beep/about.c:160
+msgid "Francisco Javier F. Serrador"
+msgstr "Francisco Javier F. Serrador"
+
+#: beep/about.c:162
+msgid "Swedish:"
+msgstr "çå
¸èª:"
+
+#: beep/about.c:163
+msgid "Martin Persenius"
+msgstr "Martin Persenius"
+
+#: beep/about.c:165
+#, fuzzy
+msgid "Ukrainian:"
+msgstr "ç¾
馬尼äºèª:"
+
+#: beep/about.c:166
+msgid "Mykola Lynnyk"
+msgstr ""
+
+#: beep/about.c:168
+msgid "Welsh:"
+msgstr "å¨ç¾æ¯èª:"
+
+#: beep/about.c:266
+msgid "About BMP"
+msgstr "éæ¼ BMP"
+
+#: beep/about.c:311
+msgid "Credits"
+msgstr "å·¥ä½äººå¡"
+
+#: beep/about.c:315
+msgid "Translators"
+msgstr "ç¿»è¯äººå¡"
+
+#: beep/eq_slider.c:93
+msgid "PREAMP"
+msgstr "åç½®æ¾å¤§å¨"
+
+#: beep/eq_slider.c:93
+msgid "60HZ"
+msgstr "60HZ"
+
+#: beep/eq_slider.c:93
+msgid "170HZ"
+msgstr "170HZ"
+
+#: beep/eq_slider.c:94
+msgid "310HZ"
+msgstr "310HZ"
+
+#: beep/eq_slider.c:94
+msgid "600HZ"
+msgstr "600HZ"
+
+#: beep/eq_slider.c:94
+msgid "1KHZ"
+msgstr "1KHZ"
+
+#: beep/eq_slider.c:95
+msgid "3KHZ"
+msgstr "3KHZ"
+
+#: beep/eq_slider.c:95
+msgid "6KHZ"
+msgstr "6KHZ"
+
+#: beep/eq_slider.c:95
+msgid "12KHZ"
+msgstr "12KHZ"
+
+#: beep/eq_slider.c:96
+msgid "14KHZ"
+msgstr "14KHZ"
+
+#: beep/eq_slider.c:96
+msgid "16KHZ"
+msgstr "16KHZ"
+
+#: beep/equalizer.c:127
+msgid "/Load"
+msgstr "/è¼å
¥"
+
+#: beep/equalizer.c:128
+msgid "/Load/Preset"
+msgstr "/è¼å
¥/è¨å®çµå"
+
+#: beep/equalizer.c:130
+msgid "/Load/Auto-load preset"
+msgstr "/è¼å
¥/èªåè¼å
¥è¨å®çµå"
+
+#: beep/equalizer.c:132
+msgid "/Load/Default"
+msgstr "/è¼å
¥/é è¨å¼"
+
+#: beep/equalizer.c:135
+msgid "/Load/Zero"
+msgstr "/è¼å
¥/é¶"
+
+#: beep/equalizer.c:138
+msgid "/Load/From file"
+msgstr "/è¼å
¥/å¾æªæ¡"
+
+#: beep/equalizer.c:140
+msgid "/Load/From WinAMP EQF file"
+msgstr "/è¼å
¥/å¾ WinAMP EQF æªæ¡"
+
+#: beep/equalizer.c:142
+msgid "/Import"
+msgstr "/å¯å
¥"
+
+#: beep/equalizer.c:143
+msgid "/Import/WinAMP Presets"
+msgstr "/å¯å
¥/WinAMP è¨å®çµå"
+
+#: beep/equalizer.c:145
+msgid "/Save"
+msgstr "/å²å"
+
+#: beep/equalizer.c:146
+msgid "/Save/Preset"
+msgstr "/å²å/è¨å®çµå"
+
+#: beep/equalizer.c:148
+msgid "/Save/Auto-load preset"
+msgstr "/å²å/èªåè¼å
¥è¨å®çµå"
+
+#: beep/equalizer.c:150
+msgid "/Save/Default"
+msgstr "/å²å/é è¨å¼"
+
+#: beep/equalizer.c:153
+msgid "/Save/To file"
+msgstr "/å²å/è³æªæ¡"
+
+#: beep/equalizer.c:155
+msgid "/Save/To WinAMP EQF file"
+msgstr "/å²å/çº WinAMP E.QF æªæ¡"
+
+#: beep/equalizer.c:157
+msgid "/Delete"
+msgstr "/åªé¤"
+
+#: beep/equalizer.c:158
+msgid "/Delete/Preset"
+msgstr "/åªé¤/è¨å®çµå"
+
+#: beep/equalizer.c:160
+msgid "/Delete/Auto-load preset"
+msgstr "/åªé¤/èªåè¼å
¥è¨å®çµå"
+
+#: beep/equalizer.c:741
+msgid "BMP Equalizer"
+msgstr "BMP çåå¨"
+
+#: beep/equalizer.c:1366
+msgid "Preset"
+msgstr "è¨å®çµå"
+
+#: beep/equalizer.c:1409
+msgid "Presets"
+msgstr "è¨å®çµå"
+
+#: beep/equalizer.c:1468
+msgid "Load preset"
+msgstr "è¼å
¥è¨å®çµå"
+
+#: beep/equalizer.c:1482
+msgid "Load auto-preset"
+msgstr "è¼å
¥èªåè¨å®çµå"
+
+#: beep/equalizer.c:1507 beep/equalizer.c:1513 beep/equalizer.c:1520
+msgid "Load equalizer preset"
+msgstr "è¼å
¥çåå¨è¨å®çµå"
+
+#: beep/equalizer.c:1529
+msgid "Save preset"
+msgstr "å²åè¨å®çµå"
+
+#: beep/equalizer.c:1548
+msgid "Save auto-preset"
+msgstr "å²åèªåè¨å®çµå"
+
+#: beep/equalizer.c:1581 beep/equalizer.c:1600
+msgid "Save equalizer preset"
+msgstr "å²åçåå¨è¨å®çµå"
+
+#: beep/equalizer.c:1609
+msgid "Delete preset"
+msgstr "åªé¤è¨å®çµå"
+
+#: beep/equalizer.c:1625
+msgid "Delete auto-preset"
+msgstr "åªé¤èªåè¨å®çµå"
+
+#: beep/getopt.c:616
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: é¸é
`%s' æ¯æ¨¡ç¨å
©å¯ç\n"
+
+#: beep/getopt.c:638
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: é¸é
`--%s' ä¸å
許ä¸åå¼æ¸\n"
+
+#: beep/getopt.c:644
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: é¸é
`%c%s' ä¸å
許ä¸åå¼æ¸\n"
+
+#: beep/getopt.c:661 beep/getopt.c:819
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: é¸é
`%s' éè¦ä¸åå¼æ¸\n"
+
+#: beep/getopt.c:687
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ä¸èªèçé¸é
`--%s'\n"
+
+#: beep/getopt.c:691
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ä¸èªèçé¸é
`%c%s'\n"
+
+#: beep/getopt.c:715
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ç¡æçé¸é
-- %c\n"
+
+#: beep/getopt.c:718
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ç¡æçé¸é
-- %c\n"
+
+#: beep/getopt.c:745 beep/getopt.c:861
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: é¸é
éè¦ä¸åå¼æ¸ -- %c\n"
+
+#: beep/getopt.c:790
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: é¸é
`-W %s' æ¯æ¨¡ç¨å
©å¯ç\n"
+
+#: beep/getopt.c:805
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: é¸é
`-W %s' ä¸å
許ä¸åé¸é
\n"
+
+#: beep/input.c:299
+msgid ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"The following files could not be played. Please check that:\n"
+"1. they are accessible.\n"
+"2. you have enabled the media plugins required."
+msgstr ""
+"<b><big>Unable to play files.</big></b>\n"
+"\n"
+"ç¡æ³ææ¾ä¸åæªæ¡ãè«æª¢æ¥ï¼\n"
+"1. å®åæ¯å¯ååçã\n"
+"2. æ¨å·²ç¶åç¨æéçåªé«å¤æç¨å¼ã"
+
+#: beep/input.c:324
+msgid "Don't show this warning anymore"
+msgstr "以å¾ä¸è¦å顯示éåè¦åã"
+
+#: beep/input.c:326
+msgid "Show more _details"
+msgstr "顯示æ´å¤ç´°ç¯(_D)"
+
+#: beep/input.c:340 beep/prefswin.c:98 beep/prefswin.c:447 beep/prefswin.c:535
+#: beep/prefswin.c:624 beep/prefswin.c:720
+msgid "Filename"
+msgstr "æªæ¡å稱"
+
+#: beep/input.c:489
+#, c-format
+msgid "bmp: %s"
+msgstr "bmp: %s"
+
+#: beep/input.c:505
+msgid "Filename:"
+msgstr "æªæ¡å稱:"
+
+#: beep/input.c:523
+msgid "No input plugin recognized this file"
+msgstr "æ²æ輸å
¥å¤æç¨å¼é©ç¨æ¼æ¤æªæ¡"
+
+#: beep/input.c:525
+#, c-format
+msgid "Input plugin: %s"
+msgstr "輸å
¥å¤æç¨å¼: %s"
+
+#: beep/logger.c:120
+#, c-format
+msgid "Unable to create log file (%s)!\n"
+msgstr "ç¡æ³å»ºç«ç´éæª(%s)ï¼\n"
+
+#: beep/main.c:77 beep/main.c:79
+msgid "Beep Media Player"
+msgstr "Beep Media Player"
+
+#: beep/main.c:371
+#, c-format
+msgid "Could not create directory (%s): %s"
+msgstr "ç¡æ³å»ºç«ç®é (%s): %s"
+
+#: beep/main.c:625
+msgid ""
+"Usage: beep-media-player [options] [files] ...\n"
+"\n"
+"Options:\n"
+"--------\n"
+msgstr ""
+"使ç¨æ¹æ³ï¼ beep-media-player [é¸é
] [æªæ¡] ...\n"
+"\n"
+"é¸é
ï¼\n"
+"--------\n"
+
+#: beep/main.c:630
+msgid "Display this text and exit"
+msgstr "顯示æ¤æå並é¢é"
+
+#: beep/main.c:633
+msgid "Select BMP/XMMS session (Default: 0)"
+msgstr "é¸æ BMP/XMMS å·¥ä½é段 (é è¨: 0)"
+
+#: beep/main.c:636
+msgid "Skip backwards in playlist"
+msgstr "忽ç¥ææ¾æ¸
å®ä¸å¾æ¹"
+
+#: beep/main.c:639
+msgid "Start playing current playlist"
+msgstr "éå§ææ¾ç®åçææ¾æ¸
å®"
+
+#: beep/main.c:642
+msgid "Pause current song"
+msgstr "æ«åç®åçææ²"
+
+#: beep/main.c:645
+msgid "Stop current song"
+msgstr "åæ¢ç®åçææ²"
+
+#: beep/main.c:648
+msgid "Pause if playing, play otherwise"
+msgstr "æ«åæ£å¨ææ¾çï¼ææ¾å
¶ä»ç"
+
+#: beep/main.c:651
+msgid "Skip forward in playlist"
+msgstr "忽ç¥ææ¾æ¸
å®ä¸åæ¹"
+
+#: beep/main.c:654
+msgid "Don't clear the playlist"
+msgstr "ä¸è¦æ¸
é¤æ¤ææ¾æ¸
å®"
+
+#: beep/main.c:657
+msgid "Show the main window"
+msgstr "顯示主è¦çª"
+
+#: beep/main.c:660
+msgid "Activate BMP"
+msgstr "æ´»å BMP"
+
+#: beep/main.c:663
+msgid "Previous session ID"
+msgstr "åä¸åå·¥ä½é段 ID"
+
+#: beep/main.c:666
+msgid "Print version number and exit\n"
+msgstr "åå°æ¿æ¬ç·¨è並é¢é\n"
+
+#: beep/main.c:841
+msgid ""
+"\n"
+"Received SIGSEGV\n"
+"\n"
+"This could be a bug in BMP. If you don't know why this happened, send a mail "
+"to us at beepmp-devel at lists.sourceforge.net\n"
+"\n"
+msgstr ""
+"\n"
+"æ¶å° SIGSEGV\n"
+"\n"
+"éå¯è½æ¯ BMP裡çé¯èª¤ãå¦ææ¨ä¸ç¥éçºä»éº¼æç¼çé種äºï¼è«å³ E mail å° beepmp-"
+"devel at lists.sourceforge.net\n"
+"\n"
+
+#: beep/main.c:864
+#, c-format
+msgid ""
+"<b><big>Unable to load skin.</big></b>\n"
+"\n"
+"Check that skin at '%s' is usable and default skin is properly installed at "
+"'%s'\n"
+msgstr ""
+"<b><big>ç¡æ³è¼å
¥é¢æ¿ã</big></b>\n"
+"\n"
+"è«æª¢æ¥ä½æ¼ '%s' çé¢æ¿æ¯å¯ç¨çèé è¨é¢æ¿å·²æ£ç¢ºçå®è£å¨ '%s'\n"
+
+#: beep/main.c:899
+#, c-format
+msgid ""
+"Sorry, your GTK+ version (%d.%d.%d) does not work with BMP.\n"
+"Please use GTK+ %s or newer.\n"
+msgstr ""
+"æ±æï¼æ¨ç GTK+ çæ¬ (%d.%d.%d) ä¸é©ç¨æ¼ BMPã\n"
+"è«ä½¿ç¨ GTK+ %s æè¼æ°ççæ¬ã\n"
+
+#: beep/main.c:910
+msgid ""
+"Sorry, threads isn't supported on your platform.\n"
+"\n"
+"If you're on a libc5 based linux system and installed Glib & GTK+ before "
+"you\n"
+"installed LinuxThreads you need to recompile Glib & GTK+.\n"
+msgstr ""
+"æ±æï¼æ¨çå¹³å°ä¸¦ä¸æ¯æ´å·è¡ç·ã\n"
+"\n"
+"å¦ææ¨ä½¿ç¨åºæ¼ libc5 ç linux 系統並å®è£ Glib è GTK+ ï¼å¨æ¨\n"
+"å®è£ LinuxThreads ä¹åæ¨éè¦éæ°ç·¨è¯ Glib è GTK+ã\n"
+
+#: beep/main.c:923
+msgid "BMP: Unable to open display, exiting."
+msgstr "BMP: ç¡æ³éå顯示ï¼æ£å¨é¢éã"
+
+#: beep/mainwin.c:235 beep/mainwin.c:361 beep/playlistwin.c:125
+msgid "/View Track Details"
+msgstr "/檢è¦é³è»è©³ç´°è³æ"
+
+#: beep/mainwin.c:238
+msgid "/Autoscroll Songname"
+msgstr "/èªåæ²åææ²å稱"
+
+#: beep/mainwin.c:248
+msgid "/Visualization Mode"
+msgstr "/è¦è¦ºå模å¼"
+
+#: beep/mainwin.c:249
+msgid "/Visualization Mode/Analyzer"
+msgstr "/è¦è¦ºå模å¼/åæå¨"
+
+#: beep/mainwin.c:251
+msgid "/Visualization Mode/Scope"
+msgstr "/è¦è¦ºå模å¼/ç¯å"
+
+#: beep/mainwin.c:253
+msgid "/Visualization Mode/Off"
+msgstr "/è¦è¦ºå模å¼/éé"
+
+#: beep/mainwin.c:255
+msgid "/Analyzer Mode"
+msgstr "/åæå¨æ¨¡å¼"
+
+#: beep/mainwin.c:256
+msgid "/Analyzer Mode/Normal"
+msgstr "/åæå¨æ¨¡å¼/ä¸è¬"
+
+#: beep/mainwin.c:258
+msgid "/Analyzer Mode/Fire"
+msgstr "/åæå¨æ¨¡å¼/ç«ç°"
+
+#: beep/mainwin.c:260
+msgid "/Analyzer Mode/Vertical Lines"
+msgstr "/åæå¨æ¨¡å¼/åç´ç·"
+
+#: beep/mainwin.c:263
+msgid "/Analyzer Mode/Lines"
+msgstr "/åæå¨æ¨¡å¼/ç·ç"
+
+#: beep/mainwin.c:265
+msgid "/Analyzer Mode/Bars"
+msgstr "/åæå¨æ¨¡å¼/é·æ¢"
+
+#: beep/mainwin.c:268
+msgid "/Analyzer Mode/Peaks"
+msgstr "/åæå¨æ¨¡å¼/波峰"
+
+#: beep/mainwin.c:270
+msgid "/Scope Mode"
+msgstr "/ç¯å模å¼"
+
+#: beep/mainwin.c:271
+msgid "/Scope Mode/Dot Scope"
+msgstr "/ç¯å模å¼/é»ç"
+
+#: beep/mainwin.c:273
+msgid "/Scope Mode/Line Scope"
+msgstr "/ç¯å模å¼/ç·å½¢"
+
+#: beep/mainwin.c:275
+msgid "/Scope Mode/Solid Scope"
+msgstr "/ç¯å模å¼/å¯å¯¦"
+
+#: beep/mainwin.c:277
+msgid "/WindowShade VU Mode"
+msgstr "/è¦çªé°å½± VU 模å¼"
+
+#: beep/mainwin.c:278
+msgid "/WindowShade VU Mode/Normal"
+msgstr "/è¦çªé°å½± VU 模å¼/ä¸è¬"
+
+#: beep/mainwin.c:280
+msgid "/WindowShade VU Mode/Smooth"
+msgstr "/è¦çªé°å½± VU 模å¼/å¹³æ»"
+
+#: beep/mainwin.c:282
+msgid "/Refresh Rate"
+msgstr "/éæ°æ´çé »ç"
+
+#: beep/mainwin.c:283
+msgid "/Refresh Rate/Full (~50 fps)"
+msgstr "/éæ°æ´çé »ç/å
¨é(~50 fps)"
+
+#: beep/mainwin.c:285
+msgid "/Refresh Rate/Half (~25 fps)"
+msgstr "/éæ°æ´çé »ç/åé(~25 fps)"
+
+#: beep/mainwin.c:287
+msgid "/Refresh Rate/Quarter (~13 fps)"
+msgstr "/éæ°æ´çé »ç/ååä¹ä¸(~13 fps)"
+
+#: beep/mainwin.c:289
+msgid "/Refresh Rate/Eighth (~6 fps)"
+msgstr "/éæ°æ´çé »ç/å
«åä¹ä¸ (~6 fps)"
+
+#: beep/mainwin.c:291
+msgid "/Analyzer Falloff"
+msgstr "/åæå¨ä¸éé度"
+
+#: beep/mainwin.c:292
+msgid "/Analyzer Falloff/Slowest"
+msgstr "/åæå¨ä¸éé度/ææ
¢"
+
+#: beep/mainwin.c:294
+msgid "/Analyzer Falloff/Slow"
+msgstr "/åæå¨ä¸éé度/æ
¢"
+
+#: beep/mainwin.c:296
+msgid "/Analyzer Falloff/Medium"
+msgstr "/åæå¨ä¸éé度/ä¸ç"
+
+#: beep/mainwin.c:298
+msgid "/Analyzer Falloff/Fast"
+msgstr "/åæå¨ä¸éé度/å¿«"
+
+#: beep/mainwin.c:300
+msgid "/Analyzer Falloff/Fastest"
+msgstr "/åæå¨ä¸éé度/æå¿«"
+
+#: beep/mainwin.c:302
+msgid "/Peaks Falloff"
+msgstr "/波峰ä¸éé度"
+
+#: beep/mainwin.c:303
+msgid "/Peaks Falloff/Slowest"
+msgstr "/波峰ä¸éé度/ææ
¢"
+
+#: beep/mainwin.c:305
+msgid "/Peaks Falloff/Slow"
+msgstr "/波峰ä¸éé度/æ
¢"
+
+#: beep/mainwin.c:307
+msgid "/Peaks Falloff/Medium"
+msgstr "/波峰ä¸éé度/ä¸ç"
+
+#: beep/mainwin.c:309
+msgid "/Peaks Falloff/Fast"
+msgstr "/波峰ä¸éé度/å¿«"
+
+#: beep/mainwin.c:311
+msgid "/Peaks Falloff/Fastest"
+msgstr "/波峰ä¸éé度/æå¿«"
+
+#: beep/mainwin.c:326
+msgid "/Repeat"
+msgstr "/éè¤"
+
+#: beep/mainwin.c:328
+msgid "/Shuffle"
+msgstr "/é¨æ©"
+
+#: beep/mainwin.c:335
+msgid "/Play"
+msgstr "/ææ¾"
+
+#: beep/mainwin.c:337
+msgid "/Pause"
+msgstr "/æ«å"
+
+#: beep/mainwin.c:339
+msgid "/Stop"
+msgstr "/åæ¢"
+
+#: beep/mainwin.c:341
+msgid "/Previous"
+msgstr "/ä¸åé³è»"
+
+#: beep/mainwin.c:343
+msgid "/Next"
+msgstr "/ä¸åé³è»"
+
+#: beep/mainwin.c:346
+msgid "/Jump to Playlist Start"
+msgstr "/è·³è³ææ¾æ¸
å®éé "
+
+#: beep/mainwin.c:349
+msgid "/Jump to File"
+msgstr "/è·³è³æªæ¡"
+
+#: beep/mainwin.c:351
+msgid "/Jump to Time"
+msgstr "/è·³è³æå»"
+
+#: beep/mainwin.c:364
+msgid "/Preferences"
+msgstr "/å好è¨å®"
+
+#: beep/mainwin.c:366
+msgid "/_View"
+msgstr "/檢è¦(_V)"
+
+#: beep/mainwin.c:368
+msgid "/About BMP"
+msgstr "/éæ¼ BMP"
+
+#: beep/mainwin.c:370
+msgid "/_Quit"
+msgstr "/é¢é(_Q)"
+
+#: beep/mainwin.c:380
+msgid "/Files..."
+msgstr "/æªæ¡(_F)..."
+
+#: beep/mainwin.c:387
+msgid "/Internet location..."
+msgstr "/網路ä½ç½®..."
+
+#: beep/mainwin.c:401
+msgid "/Show Playlist Editor"
+msgstr "/顯示ææ¾æ¸
å®ç·¨è¼¯å¨"
+
+#: beep/mainwin.c:403
+msgid "/Show Equalizer"
+msgstr "/顯示çåå¨"
+
+#: beep/mainwin.c:406
+msgid "/Time Elapsed"
+msgstr "/æç¨æé"
+
+#: beep/mainwin.c:408
+msgid "/Time Remaining"
+msgstr "/å©é¤æé"
+
+#: beep/mainwin.c:411
+msgid "/Always On Top"
+msgstr "/æä¸å±¤é¡¯ç¤º"
+
+#: beep/mainwin.c:413
+msgid "/Put on All Workspaces"
+msgstr "/ç½®æ¼ææå·¥ä½å"
+
+#: beep/mainwin.c:416
+msgid "/Roll up Player"
+msgstr "/æ¶èµ·ææ¾ç¨å¼"
+
+#: beep/mainwin.c:418
+msgid "/Roll up Playlist Editor"
+msgstr "/æ¶èµ·ææ¾æ¸
å®ç·¨è¼¯å¨"
+
+#: beep/mainwin.c:420
+msgid "/Roll up Equalizer"
+msgstr "/æ¶èµ·çåå¨"
+
+#: beep/mainwin.c:782 beep/mainwin.c:3098
+msgid "BMP"
+msgstr "BMP"
+
+#: beep/mainwin.c:820
+msgid "VBR"
+msgstr "VBR"
+
+#: beep/mainwin.c:1246
+msgid "Jump to Time"
+msgstr "è·³è³æå»"
+
+#: beep/mainwin.c:1267
+msgid "minutes:seconds"
+msgstr "å:ç§"
+
+#: beep/mainwin.c:1277
+msgid "Track length:"
+msgstr "é³è»é·åº¦:"
+
+#: beep/mainwin.c:1364
+#, fuzzy
+msgid "Un_queue"
+msgstr "ä½å"
+
+#: beep/mainwin.c:1366 beep/mainwin.c:1688
+#, fuzzy
+msgid "_Queue"
+msgstr "ä½å"
+
+#: beep/mainwin.c:1618
+msgid "Jump to Track"
+msgstr "è·³è³é³è»"
+
+#: beep/mainwin.c:1657
+msgid "Filter: "
+msgstr "é濾å¨:"
+
+#: beep/mainwin.c:1884
+msgid "Add Folders"
+msgstr "å å
¥è³æ夾"
+
+#: beep/mainwin.c:1935
+msgid "Add Internet Address"
+msgstr "å å
¥ç¶²è·¯ä½å"
+
+#: beep/mainwin.c:2063
+#, c-format
+msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "å°æ¾: %d:%-2.2d/%d:%-2.2d (%d%%)"
+
+#: beep/mainwin.c:2095 beep/mainwin.c:2769
+#, c-format
+msgid "VOLUME: %d%%"
+msgstr "é³é: %d%%"
+
+#: beep/mainwin.c:2126 beep/mainwin.c:2772
+#, c-format
+msgid "BALANCE: %d%% LEFT"
+msgstr "平衡: %d%% 左"
+
+#: beep/mainwin.c:2130 beep/mainwin.c:2775
+msgid "BALANCE: CENTER"
+msgstr "平衡: ä¸å¤®"
+
+#: beep/mainwin.c:2134 beep/mainwin.c:2777
+#, c-format
+msgid "BALANCE: %d%% RIGHT"
+msgstr "平衡: %d%% å³"
+
+#: beep/mainwin.c:2544
+msgid "OPTIONS MENU"
+msgstr "é¸é
é¸å®"
+
+#: beep/mainwin.c:2549
+msgid "DISABLE ALWAYS ON TOP (N/A)"
+msgstr "åç¨æä¸å±¤é¡¯ç¤º(N/A)"
+
+#: beep/mainwin.c:2551
+msgid "ENABLE ALWAYS ON TOP (N/A)"
+msgstr "åç¨æä¸å±¤é¡¯ç¤º(N/A)"
+
+#: beep/mainwin.c:2554
+msgid "DISABLE ALWAYS ON TOP"
+msgstr "åç¨æä¸å±¤é¡¯ç¤º"
+
+#: beep/mainwin.c:2556
+msgid "ENABLE ALWAYS ON TOP"
+msgstr "åç¨æä¸å±¤é¡¯ç¤º"
+
+#: beep/mainwin.c:2559
+msgid "FILE INFO BOX"
+msgstr "æªæ¡è³è¨æ¹å¡"
+
+#: beep/mainwin.c:2562
+msgid "** DOUBLESIZE HAS BEEN REMOVED **"
+msgstr "** éå大å°å·²ç¶è¢«ç§»é¤äº **"
+
+#: beep/mainwin.c:2565
+msgid "VISUALIZATION MENU"
+msgstr "è¦è¦ºåé¸å®"
+
+#: beep/mainwin.c:2610
+msgid ""
+"<b><big>No playable CD found.</big></b>\n"
+"\n"
+"No CD inserted, or inserted CD is not an audio CD.\n"
+msgstr ""
+"<b><big>æ¾ä¸å°å¯ä¾ææ¾ç CD ã</big></b>\n"
+"\n"
+"å¯è½æ¯æ²ææå
¥ CD ï¼ææå
¥ç CD ä¸æ¯é³æ¨ CDã\n"
+
+#: beep/mainwin.c:2627
+msgid ""
+"<b><big>Couldn't open audio.</big></b>\n"
+"\n"
+"Please check that:\n"
+"1. You have the correct output plugin selected.\n"
+"2. No other programs is blocking the soundcard.\n"
+"3. Your soundcard is configured properly.\n"
+msgstr ""
+"<b><big>ç¡æ³éåé³æ¨ã</big></b>\n"
+"\n"
+"è«æª¢æ¥ä¸åäºé
ï¼\n"
+"1. æ¨å·²ç¶é¸ææ£ç¢ºç輸åºå¤æç¨å¼ã\n"
+"2. æ²æå
¶ä»çç¨å¼ä½ç¨é³æå¡ã\n"
+"3. æ¨çé³æå¡å·²æ£ç¢ºè¨å®ã\n"
+
+#: beep/playlistwin.c:131 beep/playlistwin.c:192
+msgid "/Remove Selected"
+msgstr "/移é¤é¸åç"
+
+#: beep/playlistwin.c:135 beep/playlistwin.c:188
+msgid "/Remove Unselected"
+msgstr "/移é¤æªé¸åç"
+
+#: beep/playlistwin.c:139 beep/playlistwin.c:184
+msgid "/Remove All"
+msgstr "/移é¤å
¨é¨"
+
+#: beep/playlistwin.c:145
+msgid "/Queue Toggle"
+msgstr "/ä½ååæ"
+
+#: beep/playlistwin.c:151
+msgid "/Add CD..."
+msgstr "/å å
¥ CD..."
+
+#: beep/playlistwin.c:155
+msgid "/Add Internet Address..."
+msgstr "/å å
¥ç¶²è·¯ä½å..."
+
+#: beep/playlistwin.c:161
+#, fuzzy
+msgid "/Add Folders..."
+msgstr "/å å
¥æªæ¡..."
+
+#: beep/playlistwin.c:166
+msgid "/Add Files..."
+msgstr "/å å
¥æªæ¡..."
+
+#: beep/playlistwin.c:172
+msgid "/Clear Queue"
+msgstr "/æ¸
é¤ä½å"
+
+#: beep/playlistwin.c:178
+msgid "/Remove Unavailable Files"
+msgstr "/移é¤ç¡æ³ä½¿ç¨çæªæ¡"
+
+#: beep/playlistwin.c:198
+msgid "/New List"
+msgstr "/æ°å¢æ¸
å®"
+
+#: beep/playlistwin.c:204
+msgid "/Load List"
+msgstr "/è¼å
¥æ¸
å®"
+
+#: beep/playlistwin.c:208
+msgid "/Save List"
+msgstr "/å²åæ¸
å®"
+
+#: beep/playlistwin.c:214
+msgid "/Update View"
+msgstr "/æ´æ°æª¢è¦"
+
+#: beep/playlistwin.c:220
+msgid "/Invert Selection"
+msgstr "/ååé¸æ"
+
+#: beep/playlistwin.c:226
+msgid "/Select None"
+msgstr "/åæ¶é¸æ"
+
+#: beep/playlistwin.c:230
+msgid "/Select All"
+msgstr "/é¸æå
¨é¨"
+
+#: beep/playlistwin.c:236
+msgid "/Randomize List"
+msgstr "/é¨æ©æ¸
å®"
+
+#: beep/playlistwin.c:238
+msgid "/Reverse List"
+msgstr "/åè½æ¸
å®"
+
+#: beep/playlistwin.c:241
+msgid "/Sort List"
+msgstr "/æåºæ¸
å®"
+
+#: beep/playlistwin.c:242
+msgid "/Sort List/By Title"
+msgstr "/æåºæ¸
å®/ä¾æ¨é¡"
+
+#: beep/playlistwin.c:244
+msgid "/Sort List/By Filename"
+msgstr "/æåºæ¸
å®/ä¾æªæ¡å稱"
+
+#: beep/playlistwin.c:246
+msgid "/Sort List/By Path + Filename"
+msgstr "/æåºæ¸
å®/ä¾è·¯å¾ + æªæ¡å稱"
+
+#: beep/playlistwin.c:248
+msgid "/Sort List/By Date"
+msgstr "/æåºæ¸
å®/ä¾æ¥æ"
+
+#: beep/playlistwin.c:250
+msgid "/Sort Selection"
+msgstr "/æåºé¸æå"
+
+#: beep/playlistwin.c:251
+msgid "/Sort Selection/By Title"
+msgstr "/æåºé¸æå/ä¾æ¨é¡"
+
+#: beep/playlistwin.c:253
+msgid "/Sort Selection/By Filename"
+msgstr "/æåºé¸æå/ä¾æªæ¡å稱"
+
+#: beep/playlistwin.c:255
+msgid "/Sort Selection/By Path + Filename"
+msgstr "/æåºé¸æå/ä¾è·¯å¾ + æªæ¡å稱"
+
+#: beep/playlistwin.c:257
+msgid "/Sort Selection/By Date"
+msgstr "/æåºé¸æå/ä¾æ¥æ"
+
+#: beep/playlistwin.c:783
+#, c-format
+msgid "Error writing playlist \"%s\": %s"
+msgstr "寫å
¥ææ¾æ¸
å® \"%s\": %s æç¼çé¯èª¤"
+
+#: beep/playlistwin.c:804
+#, c-format
+msgid "%s already exist. Continue?"
+msgstr "%s å·²ç¶åå¨ãæ¯å¦ç¹¼çºï¼"
+
+#: beep/playlistwin.c:818
+#, fuzzy, c-format
+msgid ""
+"<b><big>Unable to save playlist.</big></b>\n"
+"\n"
+"Unknown file type for '%s'.\n"
+msgstr "ç¡æ³å²åææ¾æ¸
å®ï¼ %s çºæªç¥çæªæ¡é¡å"
+
+#: beep/playlistwin.c:928
+#, fuzzy
+msgid "Load Playlist"
+msgstr "è¼å
¥ææ¾æ¸
å®"
+
+#: beep/playlistwin.c:940
+#, fuzzy
+msgid "Save Playlist"
+msgstr "å²åææ¾æ¸
å®"
+
+#: beep/playlistwin.c:1675
+msgid "BMP Playlist Editor"
+msgstr "BMP ææ¾æ¸
å®ç·¨è¼¯å¨"
+
+#: beep/prefswin.c:83 beep/glade/prefswin.glade:1379
+msgid "Appearance"
+msgstr "å¤è§"
+
+#: beep/prefswin.c:84 beep/glade/prefswin.glade:2783
+msgid "Equalizer"
+msgstr "çåå¨"
+
+#: beep/prefswin.c:85 beep/glade/prefswin.glade:1669
+msgid "Mouse"
+msgstr "æ»é¼ "
+
+#: beep/prefswin.c:86 beep/glade/prefswin.glade:2403
+msgid "Playlist"
+msgstr "ææ¾æ¸
å®"
+
+#: beep/prefswin.c:87 beep/glade/prefswin.glade:869
+msgid "Plugins"
+msgstr "å¤æç¨å¼"
+
+#: beep/prefswin.c:93
+msgid "Artist"
+msgstr "è人"
+
+#: beep/prefswin.c:96
+msgid "Tracknumber"
+msgstr "é³è»ç·¨è"
+
+#: beep/prefswin.c:99
+msgid "Filepath"
+msgstr "æªæ¡è·¯å¾"
+
+#: beep/prefswin.c:417 beep/prefswin.c:504 beep/prefswin.c:593
+#: beep/prefswin.c:689
+msgid "Enabled"
+msgstr "å·²åç¨"
+
+#: beep/prefswin.c:433 beep/prefswin.c:520 beep/prefswin.c:609
+#: beep/prefswin.c:705
+msgid "Description"
+msgstr "æè¿°"
+
+#: beep/prefswin.c:1462
+msgid "Category"
+msgstr "åé¡"
+
+#: beep/prefswin.c:1630
+msgid "Preferences Window"
+msgstr "å好è¨å®è¦çª"
+
+#: beep/util.c:882
+msgid "Add/Open Files dialog"
+msgstr "å å
¥/éåæªæ¡å°è©±æ¹å¡"
+
+#: beep/util.c:940
+msgid "Open Files"
+msgstr "éåæªæ¡"
+
+#: beep/util.c:944
+msgid "Close dialog on Open"
+msgstr "éééåå°è©±æ¹å¡"
+
+#: beep/util.c:956 beep/glade/addfiles.glade:8
+msgid "Add Files"
+msgstr "å å
¥æªæ¡"
+
+#: beep/util.c:960
+msgid "Close dialog on Add"
+msgstr "ééå å
¥å°è©±æ¹å¡"
+
+#: beep/util.c:1176
+msgid " (invalid UTF-8)"
+msgstr " (ç¡æç UTF-8)"
+
+#: beep/glade/prefswin.glade:8
+msgid "BMP Preferences"
+msgstr "BMP å好è¨å®"
+
+#: beep/glade/prefswin.glade:85
+msgid "<span size=\"xx-large\"><b>Plugins</b></span>"
+msgstr "<span size=\"xx-large\"><b>å¤æç¨å¼</b></span>"
+
+#: beep/glade/prefswin.glade:147
+msgid "_Media plugin list:"
+msgstr "åªé«å¤æç¨å¼æ¸
å®(_M):"
+
+#: beep/glade/prefswin.glade:244
+msgid "<span size=\"medium\"><b>Media</b></span>"
+msgstr "<span size=\"medium\"><b>åªé«</b></span>"
+
+#: beep/glade/prefswin.glade:282
+msgid "_General plugin list:"
+msgstr "ä¸è¬å¤æç¨å¼æ¸
å®(_G):"
+
+#: beep/glade/prefswin.glade:379
+msgid "<span size=\"medium\"><b>General</b></span>"
+msgstr "<span size=\"medium\"><b>ä¸è¬</b></span>"
+
+#: beep/glade/prefswin.glade:417
+msgid "_Visualization plugin list:"
+msgstr "è¦è¦ºåå¤æç¨å¼æ¸
å®(_V):"
+
+#: beep/glade/prefswin.glade:514
+msgid "<b>Visualization</b>"
+msgstr "<b>è¦è¦ºå</b>"
+
+#: beep/glade/prefswin.glade:552
+msgid "_Effect plugin list:"
+msgstr "ææå¤æç¨å¼æ¸
å®(_E):"
+
+#: beep/glade/prefswin.glade:649
+msgid "<b>Effects</b>"
+msgstr "<b>ææ</b>"
+
+#: beep/glade/prefswin.glade:693
+msgid "_Current output plugin:"
+msgstr "ç®åç輸åºå¤æç¨å¼(_C):"
+
+#: beep/glade/prefswin.glade:753
+msgid ""
+"The change is now effective in BMP's configuration database, but won't take "
+"effect for playback until the next song!\n"
+"\n"
+"Optionally, you can stop and restart playback for the change to take effect."
+msgstr ""
+"æ¤è®æ´ç®ååªæå½±é¿ BMP ççµæ
è³æ庫ï¼ç´å°ä¸ä¸é¦ææ²ææå½±é¿ææ¾åè½ï¼\n"
+"\n"
+"æè
ï¼æ¨ä¹å¯ä»¥åæ¢ä¸¦éæ°ææ¾ä»¥ä½¿è®æ´ç«å»çæã"
+
+#: beep/glade/prefswin.glade:835
+msgid "<span size=\"medium\"><b>Output</b></span>"
+msgstr "<span size=\"medium\"><b>輸åº</b></span>"
+
+#: beep/glade/prefswin.glade:894
+msgid "<span size=\"xx-large\"><b>Appearance</b></span>"
+msgstr "<span size=\"xx-large\"><b>å¤è§</b></span>"
+
+#: beep/glade/prefswin.glade:951
+msgid "<b>_Skin</b>"
+msgstr "<b>é¢æ¿(_S)</b>"
+
+#: beep/glade/prefswin.glade:1039
+msgid "<b>_Fonts</b>"
+msgstr "<b>åå(_F)</b>"
+
+#: beep/glade/prefswin.glade:1092
+msgid "_Player:"
+msgstr "ææ¾ç¨å¼(_P)"
+
+#: beep/glade/prefswin.glade:1131
+msgid "_Playlist:"
+msgstr "ææ¾æ¸
å®(_P)"
+
+#: beep/glade/prefswin.glade:1159
+msgid "Select main player window font:"
+msgstr "é¸æ主ææ¾ç¨å¼è¦çªåå:"
+
+#: beep/glade/prefswin.glade:1181
+msgid "Select playlist font:"
+msgstr "é¸æææ¾æ¸
å®åå:"
+
+#: beep/glade/prefswin.glade:1233
+msgid "<b>_Miscellaneous</b>"
+msgstr "<b>éé
(_M)</b>"
+
+#: beep/glade/prefswin.glade:1285
+msgid "Show track numbers in playlist"
+msgstr "顯示ææ¾æ¸
å®ä¸çé³è»ç·¨è"
+
+#: beep/glade/prefswin.glade:1335
+msgid "Use custom cursors"
+msgstr "使ç¨èªè¨æ¸¸æ¨"
+
+#: beep/glade/prefswin.glade:1404
+msgid "<span size=\"xx-large\"><b>Mouse</b></span>"
+msgstr "<span size=\"xx-large\"><b>æ»é¼ </b></span>"
+
+#: beep/glade/prefswin.glade:1455
+msgid "<b>Mouse wheel</b>"
+msgstr "<b>æ»é¼ 滾輪</b>"
+
+#: beep/glade/prefswin.glade:1499
+#, fuzzy
+msgid "Changes volume by"
+msgstr "æ»é¼ 滾輪æ¹è®é³éä¾"
+
+#: beep/glade/prefswin.glade:1523
+msgid "percent"
+msgstr "ç¾åæ¯"
+
+#: beep/glade/prefswin.glade:1547
+#, fuzzy
+msgid "Scrolls playlist by"
+msgstr "æ»é¼ æ²åææ¾æ¸
å®ä¾"
+
+#: beep/glade/prefswin.glade:1596
+msgid "lines"
+msgstr "ç·æ¢"
+
+#: beep/glade/prefswin.glade:1694
+msgid "<span size=\"xx-large\"><b>Playlist</b></span>"
+msgstr "<span size=\"xx-large\"><b>ææ¾æ¸
å®</b></span>"
+
+#: beep/glade/prefswin.glade:1751
+msgid "<b>Filename</b>"
+msgstr "<b>æªæ¡å稱</b>"
+
+#: beep/glade/prefswin.glade:1789
+msgid "Convert underscores to blanks"
+msgstr "è½æä¸åç·çºç©ºç½"
+
+#: beep/glade/prefswin.glade:1824
+msgid "Convert %20 to blanks"
+msgstr "è½æ %20 çºç©ºç½"
+
+#: beep/glade/prefswin.glade:1864
+msgid "<b>Metadata</b>"
+msgstr "<b>ä¸ç¹¼è³æ</b>"
+
+#: beep/glade/prefswin.glade:1901
+msgid "Load metadata (tag information) from music files."
+msgstr "å¾é³æ¨æªæ¡è¼å
¥ä¸ç¹¼è³æ(æ¨ç±¤è³è¨)"
+
+#: beep/glade/prefswin.glade:1903
+msgid "Load metadata from playlists and files"
+msgstr "å¾ææ¾æ¸
å®èæªæ¡è¼å
¥ä¸ç¹¼è³æ"
+
+#: beep/glade/prefswin.glade:1941
+msgid "Load metadata when adding the file to the playlist or opening it"
+msgstr "ç¶å å
¥æªæ¡å°ææ¾æ¸
å®æéåå®æè¼å
¥ä¸ç¹¼è³æ"
+
+#: beep/glade/prefswin.glade:1943
+msgid "On load"
+msgstr "è¼å
¥æ"
+
+#: beep/glade/prefswin.glade:1963
+msgid "Load metadata on demand when displaying the file in the playlist"
+msgstr "å¨ææ¾æ¸
å®è£¡é¡¯ç¤ºæªæ¡æå³å¾ä¼ºæç¨å¼è¼å
¥ç¸éä¸ç¹¼è³æ"
+
+#: beep/glade/prefswin.glade:1965
+msgid "On display"
+msgstr "顯示æ"
+
+#: beep/glade/prefswin.glade:2013
+msgid "<b>Playback</b>"
+msgstr "<b>ææ¾</b>"
+
+#: beep/glade/prefswin.glade:2050
+msgid "When finished playing a song, don't automatically advance to the next."
+msgstr "ç¶ææ¾å®ä¸é¦ææ²ï¼ä¸è¦èªåé²å
¥ä¸ä¸é¦ã"
+
+#: beep/glade/prefswin.glade:2052
+msgid "Don't advance in the playlist"
+msgstr "ææ¾æ¸
å®ä¸ä½¿ç¨é²éåè½"
+
+#: beep/glade/prefswin.glade:2087
+msgid "Pause between songs"
+msgstr "ææ²éå å
¥æ«å"
+
+#: beep/glade/prefswin.glade:2125
+msgid "Pause for"
+msgstr "æ«å"
+
+#: beep/glade/prefswin.glade:2167
+msgid "seconds"
+msgstr "ç§"
+
+#: beep/glade/prefswin.glade:2215
+msgid "<b>Song display</b>"
+msgstr "<b>ææ²é¡¯ç¤º</b>"
+
+#: beep/glade/prefswin.glade:2285
+msgid "Custom string:"
+msgstr "èªè¨å串:"
+
+#: beep/glade/prefswin.glade:2315 beep/glade/prefswin.glade:2547
+#: beep/glade/prefswin.glade:2570
+msgid "*"
+msgstr "*"
+
+#: beep/glade/prefswin.glade:2332
+msgid ""
+"TITLE\n"
+"ARTIST - TITLE\n"
+"ARTIST - ALBUM - TITLE\n"
+"ALBUM - TITLE\n"
+"Custom"
+msgstr ""
+"æ¨é¡\n"
+"è人 - æ¨é¡\n"
+"è人 - å°è¼¯ - æ¨é¡\n"
+"å°è¼¯ - æ¨é¡\n"
+"èªè¨"
+
+#: beep/glade/prefswin.glade:2350
+msgid "Show information about titlestring format"
+msgstr "顯示æéæ¨é¡åä¸²æ ¼å¼çè³è¨"
+
+#: beep/glade/prefswin.glade:2428
+msgid "<span size=\"xx-large\"><b>Equalizer</b></span>"
+msgstr "<span size=\"xx-large\"><b>çåå¨</b></span>"
+
+#: beep/glade/prefswin.glade:2479
+msgid "<b>Presets</b>"
+msgstr "<b>è¨å®çµå</b>"
+
+#: beep/glade/prefswin.glade:2587
+msgid "Directory preset file:"
+msgstr "ç®éè¨å®çµåæªæ¡:"
+
+#: beep/glade/prefswin.glade:2611
+msgid "File preset extension:"
+msgstr "è¨å®çµå延伸æªå:"
+
+#: beep/glade/prefswin.glade:2655
+msgid "Available _Presets:"
+msgstr "å¯é¸ç¨çè¨å®çµå(_P):"
+
+#: beep/glade/addfiles.glade:77
+msgid "Close Dialog on Add"
+msgstr "ééå å
¥å°è©±æ¹å¡"
+
+#: beep/glade/addfiles.glade:105
+msgid "Select All"
+msgstr "é¸æå
¨é¨"
+
+#: beep/glade/addfiles.glade:116
+msgid "Deselect All"
+msgstr "åæ¶å
¨é¸"
+
+#~ msgid "Default skin:"
+#~ msgstr "é è¨é¢æ¿:"
+
+#~ msgid "Vlad Gerasimov"
+#~ msgstr "Vlad Gerasimov"
+
+#~ msgid "Could not initialize gnome-vfs.\n"
+#~ msgstr "ç¡æ³åå§å gnome-vfsã\n"
+
+#~ msgid "/No Playlist Advance"
+#~ msgstr "/ä¸ä½¿ç¨ææ¾æ¸
å®é²éé
ç®"
+
+#~ msgid "/By extension"
+#~ msgstr "/ä¾å»¶ä¼¸æªå"
More information about the commitlog
mailing list