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,
+                          &current_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, &current_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(&current_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, &micros);
+        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, &micros);
+        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/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/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