summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore74
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/action.c113
-rw-r--r--apps/action.h11
-rw-r--r--apps/alarm_menu.c161
-rw-r--r--apps/buffering.c109
-rw-r--r--apps/buffering.h7
-rw-r--r--apps/core_keymap.c146
-rw-r--r--apps/core_keymap.h72
-rw-r--r--apps/cuesheet.c101
-rw-r--r--apps/debug_menu.c155
-rw-r--r--apps/features.txt4
-rw-r--r--apps/filetree.c83
-rw-r--r--apps/filetypes.c5
-rw-r--r--apps/gui/bitmap/list.c176
-rw-r--r--apps/gui/folder_select.c2
-rw-r--r--apps/gui/list.c26
-rw-r--r--apps/gui/list.h53
-rw-r--r--apps/gui/option_select.c62
-rw-r--r--apps/gui/option_select.h9
-rw-r--r--apps/gui/quickscreen.c24
-rw-r--r--apps/gui/skin_engine/skin_backdrops.c18
-rw-r--r--apps/gui/skin_engine/skin_engine.c33
-rw-r--r--apps/gui/skin_engine/skin_engine.h2
-rw-r--r--apps/gui/skin_engine/skin_parser.c245
-rw-r--r--apps/gui/statusbar-skinned.c7
-rw-r--r--apps/gui/statusbar-skinned.h2
-rw-r--r--apps/gui/statusbar.c12
-rw-r--r--apps/gui/statusbar.h3
-rw-r--r--apps/gui/viewport.c2
-rw-r--r--apps/gui/wps.c4
-rw-r--r--apps/iap/iap-core.c1
-rw-r--r--apps/keymaps/keymap-agptekrocker.c1
-rw-r--r--apps/keymaps/keymap-c200.c1
-rw-r--r--apps/keymaps/keymap-clip.c1
-rw-r--r--apps/keymaps/keymap-creativezv.c2
-rw-r--r--apps/keymaps/keymap-creativezvm.c2
-rw-r--r--apps/keymaps/keymap-e200.c1
-rw-r--r--apps/keymaps/keymap-erosq.c4
-rw-r--r--apps/keymaps/keymap-fiiom3k.c45
-rw-r--r--apps/keymaps/keymap-fiiom3klinux.c1
-rw-r--r--apps/keymaps/keymap-fuze.c1
-rw-r--r--apps/keymaps/keymap-fuzeplus.c1
-rw-r--r--apps/keymaps/keymap-gigabeat-s.c2
-rw-r--r--apps/keymaps/keymap-gigabeat.c2
-rw-r--r--apps/keymaps/keymap-h10.c1
-rw-r--r--apps/keymaps/keymap-h1x0_h3x0.c2
-rw-r--r--apps/keymaps/keymap-hdd1630.c2
-rw-r--r--apps/keymaps/keymap-hdd6330.c2
-rw-r--r--apps/keymaps/keymap-hm60x.c1
-rw-r--r--apps/keymaps/keymap-hm801.c1
-rw-r--r--apps/keymaps/keymap-ihifi.c1
-rw-r--r--apps/keymaps/keymap-ihifi770.c1
-rw-r--r--apps/keymaps/keymap-ihifi800.c1
-rw-r--r--apps/keymaps/keymap-m200.c1
-rw-r--r--apps/keymaps/keymap-ma.c1
-rw-r--r--apps/keymaps/keymap-meizu-m6sl.c2
-rw-r--r--apps/keymaps/keymap-mini2440.c2
-rw-r--r--apps/keymaps/keymap-mr100.c2
-rw-r--r--apps/keymaps/keymap-mr500.c2
-rw-r--r--apps/keymaps/keymap-nwz.c1
-rw-r--r--apps/keymaps/keymap-nwza860.c2
-rw-r--r--apps/keymaps/keymap-sa9200.c1
-rw-r--r--apps/keymaps/keymap-touchscreen.c2
-rw-r--r--apps/keymaps/keymap-xduoox20.c1
-rw-r--r--apps/keymaps/keymap-xduoox3.c1
-rw-r--r--apps/keymaps/keymap-xduoox3ii.c1
-rw-r--r--apps/keymaps/keymap-yh8xx_yh9xx.c1
-rw-r--r--apps/keymaps/keymap-zen.c1
-rw-r--r--apps/keymaps/keymap-zenxfi3.c1
-rw-r--r--apps/lang/arabic.lang21
-rw-r--r--apps/lang/basque.lang19
-rw-r--r--apps/lang/bulgarian.lang23
-rw-r--r--apps/lang/catala.lang19
-rw-r--r--apps/lang/chinese-simp.lang921
-rw-r--r--apps/lang/chinese-trad.lang3400
-rw-r--r--apps/lang/czech.lang30
-rw-r--r--apps/lang/dansk.lang19
-rw-r--r--apps/lang/deutsch.lang23
-rw-r--r--apps/lang/english-us.lang106
-rw-r--r--apps/lang/english.lang434
-rw-r--r--apps/lang/espanol.lang19
-rw-r--r--apps/lang/finnish.lang19
-rw-r--r--apps/lang/francais.lang23
-rw-r--r--apps/lang/galego.lang19
-rw-r--r--apps/lang/greek.lang23
-rw-r--r--apps/lang/hebrew.lang21
-rw-r--r--apps/lang/hrvatski.lang19
-rw-r--r--apps/lang/italiano.lang611
-rw-r--r--apps/lang/japanese.lang23
-rw-r--r--apps/lang/korean.lang19
-rw-r--r--apps/lang/latviesu.lang17
-rw-r--r--apps/lang/lietuviu.lang19
-rw-r--r--apps/lang/magyar.lang19
-rw-r--r--apps/lang/nederlands.lang276
-rw-r--r--apps/lang/norsk-nynorsk.lang19
-rw-r--r--apps/lang/norsk.lang23
-rw-r--r--apps/lang/polski.lang291
-rw-r--r--apps/lang/portugues-brasileiro.lang19
-rw-r--r--apps/lang/portugues.lang21
-rw-r--r--apps/lang/romaneste.lang19
-rw-r--r--apps/lang/russian.lang30
-rw-r--r--apps/lang/slovak.lang947
-rw-r--r--apps/lang/slovenscina.lang19
-rw-r--r--apps/lang/srpski.lang32
-rw-r--r--apps/lang/svenska.lang21
-rw-r--r--apps/lang/tagalog.lang19
-rw-r--r--apps/lang/thai.lang19
-rw-r--r--apps/lang/turkce.lang6762
-rw-r--r--apps/lang/ukrainian.lang19
-rw-r--r--apps/lang/vlaams.lang25
-rw-r--r--apps/lang/walon.lang19
-rw-r--r--apps/main.c19
-rw-r--r--apps/menu.c2
-rw-r--r--apps/menus/display_menu.c3
-rw-r--r--apps/menus/playback_menu.c48
-rw-r--r--apps/menus/playlist_menu.c7
-rw-r--r--apps/menus/radio_menu.c6
-rw-r--r--apps/menus/recording_menu.c4
-rw-r--r--apps/menus/settings_menu.c25
-rw-r--r--apps/menus/theme_menu.c19
-rw-r--r--apps/menus/time_menu.c8
-rw-r--r--apps/misc.c43
-rw-r--r--apps/misc.h1
-rw-r--r--apps/onplay.c329
-rw-r--r--apps/onplay.h3
-rw-r--r--apps/open_plugin.c2
-rw-r--r--apps/pcmbuf.c2
-rw-r--r--apps/playback.c93
-rw-r--r--apps/playback.h3
-rw-r--r--apps/playlist.c132
-rw-r--r--apps/playlist_viewer.c32
-rw-r--r--apps/plugin.c43
-rw-r--r--apps/plugin.h24
-rw-r--r--apps/plugins/CATEGORIES4
-rw-r--r--apps/plugins/SOURCES8
-rw-r--r--apps/plugins/SOURCES.app_build1
-rw-r--r--apps/plugins/battery_bench.c25
-rw-r--r--apps/plugins/chessbox/chessbox.c3
-rw-r--r--apps/plugins/chopper.c25
-rw-r--r--apps/plugins/credits.c26
-rw-r--r--apps/plugins/imageviewer/gif/gif.c16
-rw-r--r--apps/plugins/imageviewer/gif/gif_decoder.c45
-rw-r--r--apps/plugins/imageviewer/gif/gif_decoder.h1
-rw-r--r--apps/plugins/imageviewer/imageviewer.c36
-rw-r--r--apps/plugins/imageviewer/imageviewer_button.h2
-rw-r--r--apps/plugins/keybox.c2
-rw-r--r--apps/plugins/keyremap.c2131
-rw-r--r--apps/plugins/lastfm_scrobbler.c617
-rw-r--r--apps/plugins/lib/SOURCES1
-rw-r--r--apps/plugins/lib/action_helper.h2
-rwxr-xr-xapps/plugins/lib/action_helper.pl2
-rw-r--r--apps/plugins/lib/button_helper.h2
-rwxr-xr-xapps/plugins/lib/button_helper.pl5
-rw-r--r--apps/plugins/lib/printcell_helper.c528
-rw-r--r--apps/plugins/lib/printcell_helper.h45
-rwxr-xr-xapps/plugins/lua/rbdefines_helper.pl2
-rw-r--r--apps/plugins/lua/rocklib.c12
-rw-r--r--apps/plugins/lua_scripts/dbgettags.lua15
-rw-r--r--apps/plugins/lua_scripts/random_playlist.lua558
-rw-r--r--apps/plugins/mpegplayer/mpeg_misc.c1
-rw-r--r--apps/plugins/multiboot_select.c346
-rw-r--r--apps/plugins/pictureflow/pictureflow.c1205
-rw-r--r--apps/plugins/plugin_crt0.c3
-rw-r--r--apps/plugins/properties.c211
-rw-r--r--apps/plugins/puzzles/rockbox.c6
-rw-r--r--apps/plugins/rb_info.c110
-rw-r--r--apps/plugins/solitaire.c3
-rw-r--r--apps/plugins/test_kbd.c46
-rw-r--r--apps/plugins/viewers.config3
-rw-r--r--apps/rbcodec_helpers.c10
-rw-r--r--apps/recorder/albumart.c2
-rw-r--r--apps/recorder/jpeg_load.c15
-rw-r--r--apps/recorder/jpeg_load.h7
-rw-r--r--apps/recorder/keyboard.c183
-rw-r--r--apps/recorder/pcm_record.c55
-rw-r--r--apps/recorder/peakmeter.c2
-rw-r--r--apps/recorder/recording.c261
-rw-r--r--apps/root_menu.c4
-rw-r--r--apps/screens.c37
-rw-r--r--apps/screens.h6
-rw-r--r--apps/scrobbler.c287
-rw-r--r--apps/settings.c5
-rw-r--r--apps/settings.h41
-rw-r--r--apps/settings_list.c68
-rw-r--r--apps/shortcuts.c40
-rw-r--r--apps/tagcache.c127
-rw-r--r--apps/tagcache.h12
-rw-r--r--apps/tagnavi.config10
-rw-r--r--apps/tagtree.c106
-rw-r--r--apps/talk.c9
-rw-r--r--apps/tree.c8
-rw-r--r--bootloader/SOURCES7
-rw-r--r--bootloader/iaudio_coldfire.c6
-rw-r--r--bootloader/iriver_h1x0.c4
-rw-r--r--bootloader/iriver_h300.c4
-rw-r--r--bootloader/mpio_hd200_hd300.c6
-rw-r--r--bootloader/x1000.c501
-rw-r--r--bootloader/x1000/boot.c252
-rw-r--r--bootloader/x1000/gui.c237
-rw-r--r--bootloader/x1000/install.c81
-rw-r--r--bootloader/x1000/main.c99
-rw-r--r--bootloader/x1000/recovery.c206
-rw-r--r--bootloader/x1000/utils.c340
-rw-r--r--bootloader/x1000/x1000bootloader.h203
-rw-r--r--docs/CREDITS4
-rw-r--r--docs/PLUGIN_API27
-rw-r--r--firmware/SOURCES20
-rw-r--r--firmware/asm/thread.h10
-rw-r--r--firmware/backlight.c10
-rw-r--r--firmware/buflib.c6
-rw-r--r--firmware/common/dir.c93
-rw-r--r--firmware/common/dircache.c13
-rw-r--r--firmware/common/disk.c18
-rw-r--r--firmware/common/file.c21
-rw-r--r--firmware/common/file_internal.c108
-rw-r--r--firmware/common/fileobj_mgr.c103
-rw-r--r--firmware/common/inflate.c34
-rw-r--r--firmware/common/multiboot.c113
-rw-r--r--firmware/common/pathfuncs.c78
-rw-r--r--firmware/common/rb-loader.c95
-rw-r--r--firmware/common/rb_namespace.c341
-rw-r--r--firmware/common/zip.c4
-rw-r--r--firmware/drivers/audio/ak4376.c22
-rw-r--r--firmware/drivers/audio/x1000-codec.c286
-rw-r--r--firmware/drivers/axp-pmu.c202
-rw-r--r--firmware/drivers/fat.c2
-rw-r--r--firmware/drivers/lcd-16bit-common.c168
-rw-r--r--firmware/drivers/lcd-1bit-vert.c1
-rw-r--r--firmware/drivers/lcd-2bit-horz.c1
-rw-r--r--firmware/drivers/lcd-2bit-vert.c1
-rw-r--r--firmware/drivers/lcd-2bit-vi.c1
-rw-r--r--firmware/drivers/lcd-bitmap-common.c34
-rw-r--r--firmware/drivers/lcd-color-common.c19
-rw-r--r--firmware/drivers/rds.c37
-rw-r--r--firmware/drivers/tuner/si4700.c29
-rw-r--r--firmware/export/ak4376.h8
-rw-r--r--firmware/export/audiohw.h13
-rw-r--r--firmware/export/axp-pmu.h6
-rw-r--r--firmware/export/config.h26
-rw-r--r--firmware/export/config/erosqnative.h13
-rw-r--r--firmware/export/config/fiiom3k.h22
-rw-r--r--firmware/export/config/gigabeats.h3
-rw-r--r--firmware/export/config/iaudiox5.h1
-rw-r--r--firmware/export/config/ipod6g.h1
-rw-r--r--firmware/export/config/mrobe500.h2
-rw-r--r--firmware/export/config/samsungypr0.h1
-rw-r--r--firmware/export/config/samsungypr1.h1
-rw-r--r--firmware/export/config/sansaclipplus.h1
-rw-r--r--firmware/export/config/sansaclipzip.h1
-rw-r--r--firmware/export/config/sansae200.h1
-rw-r--r--firmware/export/config/sansafuze.h1
-rw-r--r--firmware/export/config/sansafuzeplus.h1
-rw-r--r--firmware/export/config/sansafuzev2.h1
-rw-r--r--firmware/export/config/shanlingq1.h13
-rw-r--r--firmware/export/i2c-async.h9
-rw-r--r--firmware/export/lcd.h11
-rw-r--r--firmware/export/linuxboot.h192
-rw-r--r--firmware/export/mi4-loader.h22
-rw-r--r--firmware/export/multiboot.h30
-rw-r--r--firmware/export/mv.h4
-rw-r--r--firmware/export/pathfuncs.h7
-rw-r--r--firmware/export/powermgmt.h45
-rw-r--r--firmware/export/rbpaths.h3
-rw-r--r--firmware/export/screendump.h14
-rw-r--r--firmware/export/si4700.h8
-rw-r--r--firmware/export/system.h4
-rw-r--r--firmware/export/x1000-codec.h184
-rw-r--r--firmware/export/x1000.h60
-rw-r--r--firmware/include/buflib.h6
-rw-r--r--firmware/include/dircache_redirect.h69
-rw-r--r--firmware/include/file_internal.h32
-rw-r--r--firmware/include/fileobj_mgr.h5
-rw-r--r--firmware/include/fs_defines.h6
-rw-r--r--firmware/include/inflate.h24
-rw-r--r--firmware/include/rb-loader.h20
-rw-r--r--firmware/include/rb_namespace.h79
-rw-r--r--firmware/kernel/include/mutex.h5
-rw-r--r--firmware/kernel/include/queue.h3
-rw-r--r--firmware/kernel/pthread/corelock.c18
-rw-r--r--firmware/kernel/pthread/mutex.c21
-rw-r--r--firmware/kernel/pthread/thread.c204
-rw-r--r--firmware/linuxboot.c336
-rw-r--r--firmware/powermgmt.c633
-rw-r--r--firmware/rolo.c17
-rw-r--r--firmware/target/arm/as3525/lcd-ssd1303.c3
-rw-r--r--firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c3
-rw-r--r--firmware/target/arm/imx233/creative-zen/lcd-zenmozaic.c4
-rw-r--r--firmware/target/arm/imx233/creative-zen/lcd-zenv.c3
-rw-r--r--firmware/target/arm/imx233/creative-zen/lcd-zenxfistyle.c3
-rw-r--r--firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c3
-rw-r--r--firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c3
-rw-r--r--firmware/target/arm/imx233/debug-imx233.c6
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c3
-rw-r--r--firmware/target/arm/imx233/sony-nwz/lcd-nwze360.c3
-rw-r--r--firmware/target/arm/imx233/sony-nwz/lcd-nwze370.c3
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/fmradio-i2c-gigabeat-s.c49
-rw-r--r--firmware/target/arm/ipod/lcd-gray.c9
-rw-r--r--firmware/target/arm/lcd-ssd1815.c6
-rw-r--r--firmware/target/arm/olympus/mrobe-100/lcd-mr100.c6
-rw-r--r--firmware/target/arm/pp/mi4-loader.c89
-rw-r--r--firmware/target/arm/rk27xx/lcdif-rk27xx.c3
-rw-r--r--firmware/target/arm/s5l8700/debug-s5l8700.c4
-rw-r--r--firmware/target/arm/s5l8700/yps3/lcd-yps3.c11
-rw-r--r--firmware/target/arm/s5l8702/debug-s5l8702.c4
-rw-r--r--firmware/target/arm/samsung/yh920/lcd-yh920.c3
-rw-r--r--firmware/target/coldfire/iaudio/m3/lcd-m3.c6
-rw-r--r--firmware/target/coldfire/iaudio/m5/lcd-m5.c6
-rw-r--r--firmware/target/coldfire/iriver/h100/lcd-h100.c6
-rw-r--r--firmware/target/coldfire/mpio/hd300/lcd-hd300.c3
-rw-r--r--firmware/target/hosted/ibasso/dx50/adc-target.h (renamed from firmware/target/mips/ingenic_x1000/fiiom3k/powermgmt-target.h)0
-rw-r--r--firmware/target/hosted/ibasso/dx90/adc-target.h0
-rw-r--r--firmware/target/hosted/ibasso/pcm-ibasso.c2
-rw-r--r--firmware/target/hosted/ibasso/sysfs-ibasso.c2
-rw-r--r--firmware/target/hosted/rolo.c16
-rw-r--r--firmware/target/hosted/sdl/sim-ui-defines.h8
-rw-r--r--firmware/target/hosted/system-hosted.c1
-rw-r--r--firmware/target/hosted/usb-hiby.c4
-rw-r--r--firmware/target/mips/ingenic_jz47xx/xduoo_x3/lcd-xduoo_x3.c6
-rw-r--r--firmware/target/mips/ingenic_x1000/app.lds18
-rw-r--r--firmware/target/mips/ingenic_x1000/boot-x1000.c280
-rw-r--r--firmware/target/mips/ingenic_x1000/boot-x1000.h38
-rw-r--r--firmware/target/mips/ingenic_x1000/clk-x1000.c59
-rw-r--r--firmware/target/mips/ingenic_x1000/clk-x1000.h4
-rw-r--r--firmware/target/mips/ingenic_x1000/crt0.S126
-rw-r--r--firmware/target/mips/ingenic_x1000/debug-x1000.c6
-rw-r--r--firmware/target/mips/ingenic_x1000/erosqnative/lcd-erosqnative.c23
-rw-r--r--firmware/target/mips/ingenic_x1000/erosqnative/power-erosqnative.c25
-rw-r--r--firmware/target/mips/ingenic_x1000/erosqnative/spl-erosqnative.c63
-rw-r--r--firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c129
-rw-r--r--firmware/target/mips/ingenic_x1000/fiiom3k/power-fiiom3k.c23
-rw-r--r--firmware/target/mips/ingenic_x1000/fiiom3k/spl-fiiom3k.c116
-rw-r--r--firmware/target/mips/ingenic_x1000/installer-x1000.c2
-rw-r--r--firmware/target/mips/ingenic_x1000/lcd-x1000.h8
-rw-r--r--firmware/target/mips/ingenic_x1000/nand-x1000.c17
-rw-r--r--firmware/target/mips/ingenic_x1000/nand-x1000.h3
-rw-r--r--firmware/target/mips/ingenic_x1000/pcm-x1000.c179
-rw-r--r--firmware/target/mips/ingenic_x1000/sfc-x1000.h4
-rw-r--r--firmware/target/mips/ingenic_x1000/shanlingq1/audiohw-shanlingq1.c4
-rw-r--r--firmware/target/mips/ingenic_x1000/shanlingq1/power-shanlingq1.c23
-rw-r--r--firmware/target/mips/ingenic_x1000/shanlingq1/spl-shanlingq1.c116
-rw-r--r--firmware/target/mips/ingenic_x1000/spl-nand-x1000.c50
-rw-r--r--firmware/target/mips/ingenic_x1000/spl-x1000.c224
-rw-r--r--firmware/target/mips/ingenic_x1000/spl-x1000.h24
-rw-r--r--firmware/target/mips/ingenic_x1000/spl.lds6
-rw-r--r--firmware/target/mips/ingenic_x1000/system-x1000.c1
-rw-r--r--firmware/usbstack/usb_storage.c7
-rw-r--r--lib/arm_support/support-arm.S51
-rw-r--r--lib/rbcodec/codecs/libm4a/demux.c31
-rw-r--r--lib/rbcodec/codecs/libm4a/m4a.c148
-rw-r--r--lib/rbcodec/codecs/libm4a/m4a.h1
-rw-r--r--lib/rbcodec/dsp/tdspeed.c9
-rw-r--r--lib/rbcodec/dsp/tdspeed.h1
-rw-r--r--lib/rbcodec/metadata/aac.c2
-rw-r--r--lib/rbcodec/metadata/asap.c19
-rw-r--r--lib/rbcodec/metadata/asf.c81
-rw-r--r--lib/rbcodec/metadata/id3tags.c15
-rw-r--r--lib/rbcodec/metadata/metadata.c38
-rw-r--r--lib/rbcodec/metadata/metadata.h1
-rw-r--r--lib/rbcodec/metadata/metadata_common.c90
-rw-r--r--lib/rbcodec/metadata/metadata_common.h4
-rw-r--r--lib/rbcodec/metadata/mp4.c21
-rw-r--r--lib/rbcodec/metadata/replaygain.c31
-rw-r--r--lib/skin_parser/skin_buffer.c4
-rw-r--r--lib/unwarminder/backtrace-unwarminder.c3
-rw-r--r--lib/x1000-installer/src/xf_nandio.c2
-rw-r--r--lib/x1000-installer/src/xf_package.c2
-rw-r--r--lib/x1000-installer/test_lib/core_alloc.c7
-rw-r--r--lib/x1000-installer/test_lib/core_alloc.h10
-rwxr-xr-xmanual/advanced_topics/main.tex8
-rw-r--r--manual/appendix/config_file_options.tex17
-rw-r--r--manual/appendix/file_formats.tex153
-rw-r--r--manual/configure_rockbox/bookmarking.tex9
-rwxr-xr-xmanual/configure_rockbox/display_options.tex6
-rw-r--r--manual/configure_rockbox/playback_options.tex32
-rw-r--r--manual/configure_rockbox/playlist_options.tex6
-rw-r--r--manual/configure_rockbox/sound_settings.tex61
-rw-r--r--manual/configure_rockbox/startup_shutdown_options.tex5
-rwxr-xr-xmanual/configure_rockbox/system_options.tex107
-rw-r--r--manual/configure_rockbox/time_and_date.tex5
-rw-r--r--manual/getting_started/installation.tex21
-rw-r--r--manual/getting_started/jztool_install.tex3
-rw-r--r--manual/main_menu/main.tex16
-rw-r--r--manual/platform/erosqnative.tex28
-rw-r--r--manual/platform/keymap-erosqnative.tex118
-rw-r--r--manual/platform/keymap-fiiom3k.tex34
-rw-r--r--manual/platform/keymap-xduoox3.tex4
-rw-r--r--manual/plugins/pictureflow.tex119
-rw-r--r--manual/plugins/text_viewer.tex5
-rw-r--r--manual/preamble.tex20
-rw-r--r--manual/rockbox_interface/browsing_and_playing.tex14
-rw-r--r--manual/rockbox_interface/main.tex22
-rw-r--r--manual/rockbox_interface/wps.tex32
-rw-r--r--manual/working_with_playlists/main.tex38
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.pro47
-rw-r--r--rbutil/rbutil.pro83
-rw-r--r--rbutil/rbutilqt/base/progressloggerinterface.h60
-rw-r--r--rbutil/rbutilqt/dmgbuild.cfg9
-rw-r--r--rbutil/rbutilqt/rbutilqt-lang.qrc19
-rw-r--r--rbutil/rbutilqt/rbutilqt.pri229
-rw-r--r--rbutil/rbutilqt/rbutilqt.pro248
-rw-r--r--rbutil/rbutilqt/test/test-compareversion.cpp145
-rw-r--r--rbutil/rbutilqt/test/test-compareversion.pro37
-rw-r--r--rbutil/rbutilqt/test/test-httpget.pro31
-rw-r--r--rbutil/rbutilqt/test/test-playerbuildinfo.pro35
-rw-r--r--rbutil/rbutilqt/test/test-rockboxinfo.pro30
-rw-r--r--rbutil/sansapatcher/sansapatcher.pro38
-rw-r--r--tools/builds.pm11
-rwxr-xr-xtools/configure13
-rwxr-xr-xtools/genlang10
-rw-r--r--tools/rbspeex/rbspeex.c2
-rwxr-xr-xtools/rockboxdev.sh2
-rw-r--r--uisimulator/bitmaps/UI-fiiom3k.bmpbin676310 -> 913878 bytes
-rw-r--r--uisimulator/buttonmap/fiio-m3k.c22
-rw-r--r--uisimulator/common/filesystem-sim.c2
-rw-r--r--uisimulator/common/powermgmt-sim.c56
-rw-r--r--utils/CMakeLists.txt395
-rw-r--r--utils/bspatch/LICENSE (renamed from rbutil/bspatch/LICENSE)0
-rw-r--r--utils/bspatch/Makefile (renamed from rbutil/bspatch/Makefile)0
-rw-r--r--utils/bspatch/bspatch.c (renamed from rbutil/bspatch/bspatch.c)0
-rw-r--r--utils/bspatch/bspatch.h (renamed from rbutil/bspatch/bspatch.h)0
-rw-r--r--utils/bspatch/main.c (renamed from rbutil/bspatch/main.c)0
-rw-r--r--utils/bzip2/LICENSE (renamed from rbutil/bzip2/LICENSE)0
-rw-r--r--utils/bzip2/Makefile (renamed from rbutil/bzip2/Makefile)0
-rw-r--r--utils/bzip2/blocksort.c (renamed from rbutil/bzip2/blocksort.c)0
-rw-r--r--utils/bzip2/bzlib.c (renamed from rbutil/bzip2/bzlib.c)0
-rw-r--r--utils/bzip2/bzlib.h (renamed from rbutil/bzip2/bzlib.h)0
-rw-r--r--utils/bzip2/bzlib_private.h (renamed from rbutil/bzip2/bzlib_private.h)0
-rw-r--r--utils/bzip2/compress.c (renamed from rbutil/bzip2/compress.c)0
-rw-r--r--utils/bzip2/crctable.c (renamed from rbutil/bzip2/crctable.c)0
-rw-r--r--utils/bzip2/decompress.c (renamed from rbutil/bzip2/decompress.c)0
-rw-r--r--utils/bzip2/huffman.c (renamed from rbutil/bzip2/huffman.c)0
-rw-r--r--utils/bzip2/randtable.c (renamed from rbutil/bzip2/randtable.c)0
-rw-r--r--utils/chinachippatcher/Makefile (renamed from rbutil/chinachippatcher/Makefile)0
-rw-r--r--utils/chinachippatcher/chinachip.c (renamed from rbutil/chinachippatcher/chinachip.c)0
-rw-r--r--utils/chinachippatcher/chinachip.h (renamed from rbutil/chinachippatcher/chinachip.h)0
-rw-r--r--utils/chinachippatcher/main.c (renamed from rbutil/chinachippatcher/main.c)0
-rwxr-xr-xutils/cmake/QtTest.cmake134
-rwxr-xr-xutils/cmake/QtTestAddTests.cmake102
-rw-r--r--utils/cmake/deploy.cmake219
-rw-r--r--utils/cmake/download.cmake47
-rw-r--r--utils/cmake/gitversion.cmake58
-rwxr-xr-xutils/common/deploy-themeeditor.py62
-rwxr-xr-xutils/common/deploy.py677
-rwxr-xr-xutils/common/gitscraper.py17
-rwxr-xr-xutils/common/tarball-rbutil.py (renamed from utils/common/deploy-rbutil.py)87
-rw-r--r--utils/e200rpatcher/Makefile (renamed from rbutil/e200rpatcher/Makefile)0
-rw-r--r--utils/e200rpatcher/README (renamed from rbutil/e200rpatcher/README)0
-rw-r--r--utils/e200rpatcher/e200rpatcher.c (renamed from rbutil/e200rpatcher/e200rpatcher.c)0
-rw-r--r--utils/e200rpatcher/e200rpatcher.manifest (renamed from rbutil/e200rpatcher/e200rpatcher.manifest)0
-rw-r--r--utils/e200rpatcher/e200rpatcher.rc (renamed from rbutil/e200rpatcher/e200rpatcher.rc)0
-rw-r--r--utils/ibassoboot/jni/Android.mk (renamed from rbutil/ibassoboot/jni/Android.mk)0
-rw-r--r--utils/ibassoboot/jni/chooser.bmp (renamed from rbutil/ibassoboot/jni/chooser.bmp)bin230454 -> 230454 bytes
-rw-r--r--utils/ibassoboot/jni/ibassodualboot.c (renamed from rbutil/ibassoboot/jni/ibassodualboot.c)0
-rw-r--r--utils/ibassoboot/jni/qdbmp.c (renamed from rbutil/ibassoboot/jni/qdbmp.c)0
-rw-r--r--utils/ibassoboot/jni/qdbmp.h (renamed from rbutil/ibassoboot/jni/qdbmp.h)0
-rw-r--r--utils/ibassoboot/jni/rbmissing.bmp (renamed from rbutil/ibassoboot/jni/rbmissing.bmp)bin230454 -> 230454 bytes
-rw-r--r--utils/ibassoboot/jni/usb.bmp (renamed from rbutil/ibassoboot/jni/usb.bmp)bin230454 -> 230454 bytes
-rw-r--r--utils/ipodpatcher/Makefile (renamed from rbutil/ipodpatcher/Makefile)0
-rw-r--r--utils/ipodpatcher/arc4.c (renamed from rbutil/ipodpatcher/arc4.c)0
-rw-r--r--utils/ipodpatcher/arc4.h (renamed from rbutil/ipodpatcher/arc4.h)0
-rw-r--r--utils/ipodpatcher/fat32format.c (renamed from rbutil/ipodpatcher/fat32format.c)0
-rw-r--r--utils/ipodpatcher/ipodio-posix.c (renamed from rbutil/ipodpatcher/ipodio-posix.c)1
-rw-r--r--utils/ipodpatcher/ipodio-win32-scsi.c (renamed from rbutil/ipodpatcher/ipodio-win32-scsi.c)0
-rw-r--r--utils/ipodpatcher/ipodio-win32.c (renamed from rbutil/ipodpatcher/ipodio-win32.c)1
-rw-r--r--utils/ipodpatcher/ipodio.h (renamed from rbutil/ipodpatcher/ipodio.h)0
-rw-r--r--utils/ipodpatcher/ipodpatcher-aupd.c398
-rw-r--r--utils/ipodpatcher/ipodpatcher.c (renamed from rbutil/ipodpatcher/ipodpatcher.c)355
-rw-r--r--utils/ipodpatcher/ipodpatcher.h (renamed from rbutil/ipodpatcher/ipodpatcher.h)0
-rw-r--r--utils/ipodpatcher/ipodpatcher.manifest (renamed from rbutil/ipodpatcher/ipodpatcher.manifest)0
-rw-r--r--utils/ipodpatcher/ipodpatcher.rc (renamed from rbutil/ipodpatcher/ipodpatcher.rc)0
-rw-r--r--utils/ipodpatcher/main.c (renamed from rbutil/ipodpatcher/main.c)0
-rw-r--r--utils/ipodpatcher/parttypes.h (renamed from rbutil/ipodpatcher/parttypes.h)0
-rw-r--r--utils/jztool/Makefile (renamed from rbutil/jztool/Makefile)0
-rw-r--r--utils/jztool/README.md (renamed from rbutil/jztool/README.md)0
-rw-r--r--utils/jztool/include/jztool.h (renamed from rbutil/jztool/include/jztool.h)0
-rw-r--r--utils/jztool/jztool.c (renamed from rbutil/jztool/jztool.c)0
-rw-r--r--utils/jztool/src/buffer.c (renamed from rbutil/jztool/src/buffer.c)0
-rw-r--r--utils/jztool/src/context.c (renamed from rbutil/jztool/src/context.c)0
-rw-r--r--utils/jztool/src/device_info.c (renamed from rbutil/jztool/src/device_info.c)0
-rw-r--r--utils/jztool/src/identify_file.c (renamed from rbutil/jztool/src/identify_file.c)0
-rw-r--r--utils/jztool/src/jztool_private.h (renamed from rbutil/jztool/src/jztool_private.h)0
-rw-r--r--utils/jztool/src/ucl_unpack.c (renamed from rbutil/jztool/src/ucl_unpack.c)0
-rw-r--r--utils/jztool/src/usb.c (renamed from rbutil/jztool/src/usb.c)0
-rw-r--r--utils/jztool/src/x1000.c (renamed from rbutil/jztool/src/x1000.c)99
-rw-r--r--utils/libtools.make (renamed from rbutil/libtools.make)0
-rw-r--r--utils/mkamsboot/.gitignore (renamed from rbutil/mkamsboot/.gitignore)0
-rw-r--r--utils/mkamsboot/Makefile (renamed from rbutil/mkamsboot/Makefile)0
-rw-r--r--utils/mkamsboot/README (renamed from rbutil/mkamsboot/README)0
-rw-r--r--utils/mkamsboot/dualboot.c (renamed from rbutil/mkamsboot/dualboot.c)0
-rw-r--r--utils/mkamsboot/dualboot.h (renamed from rbutil/mkamsboot/dualboot.h)0
-rw-r--r--utils/mkamsboot/dualboot/.gitignore (renamed from rbutil/mkamsboot/dualboot/.gitignore)0
-rw-r--r--utils/mkamsboot/dualboot/Makefile (renamed from rbutil/mkamsboot/dualboot/Makefile)0
-rw-r--r--utils/mkamsboot/dualboot/bin2c.c (renamed from rbutil/mkamsboot/dualboot/bin2c.c)0
-rw-r--r--utils/mkamsboot/dualboot/dualboot.S (renamed from rbutil/mkamsboot/dualboot/dualboot.S)0
-rw-r--r--utils/mkamsboot/dualboot/nrv2e_d8.S (renamed from rbutil/mkamsboot/dualboot/nrv2e_d8.S)0
-rw-r--r--utils/mkamsboot/main.c (renamed from rbutil/mkamsboot/main.c)0
-rw-r--r--utils/mkamsboot/md5.c (renamed from rbutil/mkamsboot/md5.c)0
-rw-r--r--utils/mkamsboot/md5.h (renamed from rbutil/mkamsboot/md5.h)0
-rw-r--r--utils/mkamsboot/mkamsboot.c (renamed from rbutil/mkamsboot/mkamsboot.c)2
-rw-r--r--utils/mkamsboot/mkamsboot.h (renamed from rbutil/mkamsboot/mkamsboot.h)0
-rw-r--r--utils/mkimxboot/Makefile (renamed from rbutil/mkimxboot/Makefile)0
-rw-r--r--utils/mkimxboot/dualboot.c (renamed from rbutil/mkimxboot/dualboot.c)0
-rw-r--r--utils/mkimxboot/dualboot.h (renamed from rbutil/mkimxboot/dualboot.h)0
-rw-r--r--utils/mkimxboot/dualboot/Makefile (renamed from rbutil/mkimxboot/dualboot/Makefile)0
-rw-r--r--utils/mkimxboot/dualboot/bin2c.c (renamed from rbutil/mkimxboot/dualboot/bin2c.c)0
-rw-r--r--utils/mkimxboot/dualboot/config.h (renamed from rbutil/mkimxboot/dualboot/config.h)0
-rw-r--r--utils/mkimxboot/dualboot/dualboot.c (renamed from rbutil/mkimxboot/dualboot/dualboot.c)0
-rw-r--r--utils/mkimxboot/dualboot/dualboot.lds (renamed from rbutil/mkimxboot/dualboot/dualboot.lds)0
-rw-r--r--utils/mkimxboot/main.c (renamed from rbutil/mkimxboot/main.c)0
-rw-r--r--utils/mkimxboot/md5.c (renamed from rbutil/mkimxboot/md5.c)0
-rw-r--r--utils/mkimxboot/md5.h (renamed from rbutil/mkimxboot/md5.h)0
-rw-r--r--utils/mkimxboot/mkimxboot.c (renamed from rbutil/mkimxboot/mkimxboot.c)0
-rw-r--r--utils/mkimxboot/mkimxboot.h (renamed from rbutil/mkimxboot/mkimxboot.h)0
-rw-r--r--utils/mkmpioboot/Makefile (renamed from rbutil/mkmpioboot/Makefile)0
-rw-r--r--utils/mkmpioboot/main.c (renamed from rbutil/mkmpioboot/main.c)0
-rw-r--r--utils/mkmpioboot/mkmpioboot.c (renamed from rbutil/mkmpioboot/mkmpioboot.c)0
-rw-r--r--utils/mkmpioboot/mkmpioboot.h (renamed from rbutil/mkmpioboot/mkmpioboot.h)0
-rw-r--r--utils/mknwzboot/Makefile (renamed from rbutil/mknwzboot/Makefile)0
-rw-r--r--utils/mknwzboot/install_script.sh (renamed from rbutil/mknwzboot/install_script.sh)0
-rw-r--r--utils/mknwzboot/main.c (renamed from rbutil/mknwzboot/main.c)0
-rw-r--r--utils/mknwzboot/mknwzboot.c (renamed from rbutil/mknwzboot/mknwzboot.c)0
-rw-r--r--utils/mknwzboot/mknwzboot.h (renamed from rbutil/mknwzboot/mknwzboot.h)0
-rw-r--r--utils/mknwzboot/uninstall_script.sh (renamed from rbutil/mknwzboot/uninstall_script.sh)0
-rw-r--r--utils/mkrk27boot/Makefile (renamed from rbutil/mkrk27boot/Makefile)0
-rw-r--r--utils/mkrk27boot/ata-sim.c (renamed from rbutil/mkrk27boot/ata-sim.c)0
-rw-r--r--utils/mkrk27boot/autoconf.h (renamed from rbutil/mkrk27boot/autoconf.h)0
-rw-r--r--utils/mkrk27boot/main.c (renamed from rbutil/mkrk27boot/main.c)0
-rw-r--r--utils/mkrk27boot/mkrk27boot.c (renamed from rbutil/mkrk27boot/mkrk27boot.c)0
-rw-r--r--utils/mkrk27boot/mkrk27boot.h (renamed from rbutil/mkrk27boot/mkrk27boot.h)0
-rw-r--r--utils/mks5lboot/.gitignore (renamed from rbutil/mks5lboot/.gitignore)0
-rw-r--r--utils/mks5lboot/Makefile (renamed from rbutil/mks5lboot/Makefile)0
-rw-r--r--utils/mks5lboot/README (renamed from rbutil/mks5lboot/README)0
-rw-r--r--utils/mks5lboot/dualboot.c (renamed from rbutil/mks5lboot/dualboot.c)0
-rw-r--r--utils/mks5lboot/dualboot.h (renamed from rbutil/mks5lboot/dualboot.h)0
-rw-r--r--utils/mks5lboot/dualboot/.gitignore (renamed from rbutil/mks5lboot/dualboot/.gitignore)0
-rw-r--r--utils/mks5lboot/dualboot/Makefile (renamed from rbutil/mks5lboot/dualboot/Makefile)0
-rw-r--r--utils/mks5lboot/dualboot/autoconf.h (renamed from rbutil/mks5lboot/dualboot/autoconf.h)0
-rw-r--r--utils/mks5lboot/dualboot/bin2c.c (renamed from rbutil/mks5lboot/dualboot/bin2c.c)0
-rw-r--r--utils/mks5lboot/dualboot/dualboot.c (renamed from rbutil/mks5lboot/dualboot/dualboot.c)0
-rw-r--r--utils/mks5lboot/dualboot/dualboot.lds (renamed from rbutil/mks5lboot/dualboot/dualboot.lds)0
-rw-r--r--utils/mks5lboot/dualboot/init.S (renamed from rbutil/mks5lboot/dualboot/init.S)0
-rw-r--r--utils/mks5lboot/ipoddfu.c (renamed from rbutil/mks5lboot/ipoddfu.c)0
-rw-r--r--utils/mks5lboot/main.c (renamed from rbutil/mks5lboot/main.c)0
-rw-r--r--utils/mks5lboot/mkdfu.c (renamed from rbutil/mks5lboot/mkdfu.c)0
-rw-r--r--utils/mks5lboot/mks5lboot.h (renamed from rbutil/mks5lboot/mks5lboot.h)0
-rw-r--r--utils/mktccboot/Makefile (renamed from rbutil/mktccboot/Makefile)0
-rw-r--r--utils/mktccboot/README (renamed from rbutil/mktccboot/README)0
-rw-r--r--utils/mktccboot/main.c (renamed from rbutil/mktccboot/main.c)0
-rw-r--r--utils/mktccboot/mktccboot.c (renamed from rbutil/mktccboot/mktccboot.c)0
-rw-r--r--utils/mktccboot/mktccboot.h (renamed from rbutil/mktccboot/mktccboot.h)0
-rw-r--r--utils/mkzenboot/Makefile (renamed from rbutil/mkzenboot/Makefile)0
-rw-r--r--utils/mkzenboot/dualboot.c (renamed from rbutil/mkzenboot/dualboot.c)0
-rw-r--r--utils/mkzenboot/dualboot.h (renamed from rbutil/mkzenboot/dualboot.h)0
-rw-r--r--utils/mkzenboot/dualboot/Makefile (renamed from rbutil/mkzenboot/dualboot/Makefile)0
-rw-r--r--utils/mkzenboot/dualboot/bin2c.c (renamed from rbutil/mkzenboot/dualboot/bin2c.c)0
-rw-r--r--utils/mkzenboot/dualboot/config.h (renamed from rbutil/mkzenboot/dualboot/config.h)0
-rw-r--r--utils/mkzenboot/dualboot/dualboot.c (renamed from rbutil/mkzenboot/dualboot/dualboot.c)0
-rw-r--r--utils/mkzenboot/dualboot/dualboot.lds (renamed from rbutil/mkzenboot/dualboot/dualboot.lds)0
-rw-r--r--utils/mkzenboot/main.c (renamed from rbutil/mkzenboot/main.c)0
-rw-r--r--utils/mkzenboot/md5.c (renamed from rbutil/mkzenboot/md5.c)0
-rw-r--r--utils/mkzenboot/md5.h (renamed from rbutil/mkzenboot/md5.h)0
-rw-r--r--utils/mkzenboot/mkzenboot.c (renamed from rbutil/mkzenboot/mkzenboot.c)0
-rw-r--r--utils/mkzenboot/mkzenboot.h (renamed from rbutil/mkzenboot/mkzenboot.h)0
-rw-r--r--utils/mkzenboot/utils.c (renamed from rbutil/mkzenboot/utils.c)0
-rw-r--r--utils/mkzenboot/utils.h (renamed from rbutil/mkzenboot/utils.h)0
-rw-r--r--utils/rbutilqt/CMakeLists.txt437
-rw-r--r--utils/rbutilqt/INSTALL (renamed from rbutil/rbutilqt/INSTALL)37
-rw-r--r--utils/rbutilqt/Info.plist (renamed from rbutil/rbutilqt/Info.plist)4
-rw-r--r--utils/rbutilqt/Makefile.libs (renamed from rbutil/rbutilqt/Makefile.libs)20
-rw-r--r--utils/rbutilqt/RockboxUtility.desktop (renamed from rbutil/rbutilqt/RockboxUtility.desktop)0
-rw-r--r--utils/rbutilqt/aboutbox.ui (renamed from rbutil/rbutilqt/aboutbox.ui)0
-rw-r--r--utils/rbutilqt/base/archiveutil.cpp (renamed from rbutil/rbutilqt/base/archiveutil.cpp)0
-rw-r--r--utils/rbutilqt/base/archiveutil.h (renamed from rbutil/rbutilqt/base/archiveutil.h)0
-rw-r--r--utils/rbutilqt/base/autodetection.cpp (renamed from rbutil/rbutilqt/base/autodetection.cpp)10
-rw-r--r--utils/rbutilqt/base/autodetection.h (renamed from rbutil/rbutilqt/base/autodetection.h)5
-rw-r--r--utils/rbutilqt/base/bootloaderinstallams.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallams.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallams.h (renamed from rbutil/rbutilqt/base/bootloaderinstallams.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbase.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallbase.cpp)65
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbase.h (renamed from rbutil/rbutilqt/base/bootloaderinstallbase.h)15
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbspatch.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallbspatch.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbspatch.h (renamed from rbutil/rbutilqt/base/bootloaderinstallbspatch.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallchinachip.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallchinachip.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallchinachip.h (renamed from rbutil/rbutilqt/base/bootloaderinstallchinachip.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallfile.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallfile.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallfile.h (renamed from rbutil/rbutilqt/base/bootloaderinstallfile.h)1
-rw-r--r--utils/rbutilqt/base/bootloaderinstallhelper.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallhelper.cpp)20
-rw-r--r--utils/rbutilqt/base/bootloaderinstallhelper.h (renamed from rbutil/rbutilqt/base/bootloaderinstallhelper.h)1
-rw-r--r--utils/rbutilqt/base/bootloaderinstallhex.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallhex.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallhex.h (renamed from rbutil/rbutilqt/base/bootloaderinstallhex.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallimx.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallimx.cpp)1
-rw-r--r--utils/rbutilqt/base/bootloaderinstallimx.h (renamed from rbutil/rbutilqt/base/bootloaderinstallimx.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallipod.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallipod.cpp)44
-rw-r--r--utils/rbutilqt/base/bootloaderinstallipod.h (renamed from rbutil/rbutilqt/base/bootloaderinstallipod.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallmi4.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallmi4.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallmi4.h (renamed from rbutil/rbutilqt/base/bootloaderinstallmi4.h)1
-rw-r--r--utils/rbutilqt/base/bootloaderinstallmpio.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallmpio.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallmpio.h (renamed from rbutil/rbutilqt/base/bootloaderinstallmpio.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstalls5l.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstalls5l.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstalls5l.h (renamed from rbutil/rbutilqt/base/bootloaderinstalls5l.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstallsansa.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstallsansa.cpp)55
-rw-r--r--utils/rbutilqt/base/bootloaderinstallsansa.h (renamed from rbutil/rbutilqt/base/bootloaderinstallsansa.h)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstalltcc.cpp (renamed from rbutil/rbutilqt/base/bootloaderinstalltcc.cpp)0
-rw-r--r--utils/rbutilqt/base/bootloaderinstalltcc.h (renamed from rbutil/rbutilqt/base/bootloaderinstalltcc.h)0
-rw-r--r--utils/rbutilqt/base/encoderbase.cpp (renamed from rbutil/rbutilqt/base/encoderbase.cpp)0
-rw-r--r--utils/rbutilqt/base/encoderbase.h (renamed from rbutil/rbutilqt/base/encoderbase.h)0
-rw-r--r--utils/rbutilqt/base/encoderexe.cpp (renamed from rbutil/rbutilqt/base/encoderexe.cpp)0
-rw-r--r--utils/rbutilqt/base/encoderexe.h (renamed from rbutil/rbutilqt/base/encoderexe.h)0
-rw-r--r--utils/rbutilqt/base/encoderlame.cpp (renamed from rbutil/rbutilqt/base/encoderlame.cpp)0
-rw-r--r--utils/rbutilqt/base/encoderlame.h (renamed from rbutil/rbutilqt/base/encoderlame.h)0
-rw-r--r--utils/rbutilqt/base/encoderrbspeex.cpp (renamed from rbutil/rbutilqt/base/encoderrbspeex.cpp)0
-rw-r--r--utils/rbutilqt/base/encoderrbspeex.h (renamed from rbutil/rbutilqt/base/encoderrbspeex.h)0
-rw-r--r--utils/rbutilqt/base/encttssettings.cpp (renamed from rbutil/rbutilqt/base/encttssettings.cpp)0
-rw-r--r--utils/rbutilqt/base/encttssettings.h (renamed from rbutil/rbutilqt/base/encttssettings.h)3
-rw-r--r--utils/rbutilqt/base/httpget.cpp (renamed from rbutil/rbutilqt/base/httpget.cpp)29
-rw-r--r--utils/rbutilqt/base/httpget.h (renamed from rbutil/rbutilqt/base/httpget.h)8
-rw-r--r--utils/rbutilqt/base/mspackutil.cpp (renamed from rbutil/rbutilqt/base/mspackutil.cpp)2
-rw-r--r--utils/rbutilqt/base/mspackutil.h (renamed from rbutil/rbutilqt/base/mspackutil.h)4
-rw-r--r--utils/rbutilqt/base/playerbuildinfo.cpp (renamed from rbutil/rbutilqt/base/playerbuildinfo.cpp)52
-rw-r--r--utils/rbutilqt/base/playerbuildinfo.h (renamed from rbutil/rbutilqt/base/playerbuildinfo.h)2
-rw-r--r--utils/rbutilqt/base/progressloglevels.h (renamed from apps/scrobbler.h)16
-rw-r--r--utils/rbutilqt/base/rbsettings.cpp (renamed from rbutil/rbutilqt/base/rbsettings.cpp)1
-rw-r--r--utils/rbutilqt/base/rbsettings.h (renamed from rbutil/rbutilqt/base/rbsettings.h)1
-rw-r--r--utils/rbutilqt/base/rockboxinfo.cpp (renamed from rbutil/rbutilqt/base/rockboxinfo.cpp)70
-rw-r--r--utils/rbutilqt/base/rockboxinfo.h (renamed from rbutil/rbutilqt/base/rockboxinfo.h)0
-rw-r--r--utils/rbutilqt/base/system.cpp (renamed from rbutil/rbutilqt/base/system.cpp)9
-rw-r--r--utils/rbutilqt/base/system.h (renamed from rbutil/rbutilqt/base/system.h)0
-rw-r--r--utils/rbutilqt/base/talkfile.cpp (renamed from rbutil/rbutilqt/base/talkfile.cpp)17
-rw-r--r--utils/rbutilqt/base/talkfile.h (renamed from rbutil/rbutilqt/base/talkfile.h)2
-rw-r--r--utils/rbutilqt/base/talkgenerator.cpp (renamed from rbutil/rbutilqt/base/talkgenerator.cpp)38
-rw-r--r--utils/rbutilqt/base/talkgenerator.h (renamed from rbutil/rbutilqt/base/talkgenerator.h)6
-rw-r--r--utils/rbutilqt/base/ttsbase.cpp (renamed from rbutil/rbutilqt/base/ttsbase.cpp)0
-rw-r--r--utils/rbutilqt/base/ttsbase.h (renamed from rbutil/rbutilqt/base/ttsbase.h)4
-rw-r--r--utils/rbutilqt/base/ttscarbon.cpp (renamed from rbutil/rbutilqt/base/ttscarbon.cpp)2
-rw-r--r--utils/rbutilqt/base/ttscarbon.h (renamed from rbutil/rbutilqt/base/ttscarbon.h)2
-rw-r--r--utils/rbutilqt/base/ttsespeak.h (renamed from rbutil/rbutilqt/base/ttsespeak.h)0
-rw-r--r--utils/rbutilqt/base/ttsespeakng.h (renamed from rbutil/rbutilqt/base/ttsespeakng.h)0
-rw-r--r--utils/rbutilqt/base/ttsexes.cpp (renamed from rbutil/rbutilqt/base/ttsexes.cpp)2
-rw-r--r--utils/rbutilqt/base/ttsexes.h (renamed from rbutil/rbutilqt/base/ttsexes.h)2
-rw-r--r--utils/rbutilqt/base/ttsfestival.cpp (renamed from rbutil/rbutilqt/base/ttsfestival.cpp)98
-rw-r--r--utils/rbutilqt/base/ttsfestival.h (renamed from rbutil/rbutilqt/base/ttsfestival.h)2
-rw-r--r--utils/rbutilqt/base/ttsflite.h (renamed from rbutil/rbutilqt/base/ttsflite.h)0
-rw-r--r--utils/rbutilqt/base/ttsmimic.h (renamed from rbutil/rbutilqt/base/ttsmimic.h)0
-rw-r--r--utils/rbutilqt/base/ttsmssp.h (renamed from rbutil/rbutilqt/base/ttsmssp.h)0
-rw-r--r--utils/rbutilqt/base/ttssapi.cpp (renamed from rbutil/rbutilqt/base/ttssapi.cpp)4
-rw-r--r--utils/rbutilqt/base/ttssapi.h (renamed from rbutil/rbutilqt/base/ttssapi.h)2
-rw-r--r--utils/rbutilqt/base/ttssapi4.h (renamed from rbutil/rbutilqt/base/ttssapi4.h)0
-rw-r--r--utils/rbutilqt/base/ttsswift.h (renamed from rbutil/rbutilqt/base/ttsswift.h)0
-rw-r--r--utils/rbutilqt/base/uninstall.cpp (renamed from rbutil/rbutilqt/base/uninstall.cpp)20
-rw-r--r--utils/rbutilqt/base/uninstall.h (renamed from rbutil/rbutilqt/base/uninstall.h)2
-rw-r--r--utils/rbutilqt/base/utils.cpp (renamed from rbutil/rbutilqt/base/utils.cpp)48
-rw-r--r--utils/rbutilqt/base/utils.h (renamed from rbutil/rbutilqt/base/utils.h)0
-rw-r--r--utils/rbutilqt/base/voicefile.cpp (renamed from rbutil/rbutilqt/base/voicefile.cpp)14
-rw-r--r--utils/rbutilqt/base/voicefile.h (renamed from rbutil/rbutilqt/base/voicefile.h)4
-rw-r--r--utils/rbutilqt/base/zipinstaller.cpp (renamed from rbutil/rbutilqt/base/zipinstaller.cpp)13
-rw-r--r--utils/rbutilqt/base/zipinstaller.h (renamed from rbutil/rbutilqt/base/zipinstaller.h)15
-rw-r--r--utils/rbutilqt/base/ziputil.cpp (renamed from rbutil/rbutilqt/base/ziputil.cpp)3
-rw-r--r--utils/rbutilqt/base/ziputil.h (renamed from rbutil/rbutilqt/base/ziputil.h)4
-rw-r--r--utils/rbutilqt/changelog.txt (renamed from rbutil/rbutilqt/changelog.txt)8
-rw-r--r--utils/rbutilqt/configure.cpp (renamed from rbutil/rbutilqt/configure.cpp)40
-rw-r--r--utils/rbutilqt/configure.h (renamed from rbutil/rbutilqt/configure.h)0
-rw-r--r--utils/rbutilqt/configurefrm.ui (renamed from rbutil/rbutilqt/configurefrm.ui)0
-rw-r--r--utils/rbutilqt/createvoicefrm.ui (renamed from rbutil/rbutilqt/createvoicefrm.ui)0
-rw-r--r--utils/rbutilqt/createvoicewindow.cpp (renamed from rbutil/rbutilqt/createvoicewindow.cpp)14
-rw-r--r--utils/rbutilqt/createvoicewindow.h (renamed from rbutil/rbutilqt/createvoicewindow.h)0
-rw-r--r--utils/rbutilqt/dmgbuild.cfg17
-rw-r--r--utils/rbutilqt/encttscfggui.cpp (renamed from rbutil/rbutilqt/encttscfggui.cpp)275
-rw-r--r--utils/rbutilqt/encttscfggui.h (renamed from rbutil/rbutilqt/encttscfggui.h)16
-rw-r--r--utils/rbutilqt/gui/backupdialog.cpp (renamed from rbutil/rbutilqt/gui/backupdialog.cpp)17
-rw-r--r--utils/rbutilqt/gui/backupdialog.h (renamed from rbutil/rbutilqt/gui/backupdialog.h)0
-rw-r--r--utils/rbutilqt/gui/backupdialogfrm.ui (renamed from rbutil/rbutilqt/gui/backupdialogfrm.ui)0
-rw-r--r--utils/rbutilqt/gui/changelog.cpp (renamed from rbutil/rbutilqt/gui/changelog.cpp)12
-rw-r--r--utils/rbutilqt/gui/changelog.h (renamed from rbutil/rbutilqt/gui/changelog.h)0
-rw-r--r--utils/rbutilqt/gui/changelogfrm.ui (renamed from rbutil/rbutilqt/gui/changelogfrm.ui)0
-rw-r--r--utils/rbutilqt/gui/comboboxviewdelegate.cpp (renamed from rbutil/rbutilqt/gui/comboboxviewdelegate.cpp)0
-rw-r--r--utils/rbutilqt/gui/comboboxviewdelegate.h (renamed from rbutil/rbutilqt/gui/comboboxviewdelegate.h)0
-rw-r--r--utils/rbutilqt/gui/infowidget.cpp (renamed from rbutil/rbutilqt/gui/infowidget.cpp)52
-rw-r--r--utils/rbutilqt/gui/infowidget.h (renamed from rbutil/rbutilqt/gui/infowidget.h)0
-rw-r--r--utils/rbutilqt/gui/infowidgetfrm.ui (renamed from rbutil/rbutilqt/gui/infowidgetfrm.ui)0
-rw-r--r--utils/rbutilqt/gui/selectiveinstallwidget.cpp (renamed from rbutil/rbutilqt/gui/selectiveinstallwidget.cpp)90
-rw-r--r--utils/rbutilqt/gui/selectiveinstallwidget.h (renamed from rbutil/rbutilqt/gui/selectiveinstallwidget.h)1
-rw-r--r--utils/rbutilqt/gui/selectiveinstallwidgetfrm.ui (renamed from rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui)0
-rw-r--r--utils/rbutilqt/icons/audio-input-microphone.svg (renamed from rbutil/rbutilqt/icons/audio-input-microphone.svg)0
-rw-r--r--utils/rbutilqt/icons/audio-volume-high.svg (renamed from rbutil/rbutilqt/icons/audio-volume-high.svg)0
-rw-r--r--utils/rbutilqt/icons/dialog-error.svg (renamed from rbutil/rbutilqt/icons/dialog-error.svg)0
-rw-r--r--utils/rbutilqt/icons/dialog-information.svg (renamed from rbutil/rbutilqt/icons/dialog-information.svg)0
-rw-r--r--utils/rbutilqt/icons/dialog-warning.svg (renamed from rbutil/rbutilqt/icons/dialog-warning.svg)0
-rw-r--r--utils/rbutilqt/icons/document-save.svg (renamed from rbutil/rbutilqt/icons/document-save.svg)0
-rw-r--r--utils/rbutilqt/icons/edit-clear.svg (renamed from rbutil/rbutilqt/icons/edit-clear.svg)0
-rw-r--r--utils/rbutilqt/icons/edit-find.svg (renamed from rbutil/rbutilqt/icons/edit-find.svg)0
-rw-r--r--utils/rbutilqt/icons/go-next.svg (renamed from rbutil/rbutilqt/icons/go-next.svg)0
-rw-r--r--utils/rbutilqt/icons/input-gaming.svg (renamed from rbutil/rbutilqt/icons/input-gaming.svg)0
-rw-r--r--utils/rbutilqt/icons/media-eject.svg (renamed from rbutil/rbutilqt/icons/media-eject.svg)0
-rw-r--r--utils/rbutilqt/icons/multimedia-player.svg (renamed from rbutil/rbutilqt/icons/multimedia-player.svg)0
-rw-r--r--utils/rbutilqt/icons/network-idle.svg (renamed from rbutil/rbutilqt/icons/network-idle.svg)0
-rw-r--r--utils/rbutilqt/icons/package-x-generic.svg (renamed from rbutil/rbutilqt/icons/package-x-generic.svg)0
-rw-r--r--utils/rbutilqt/icons/players/archosfmrecorder-small.png (renamed from rbutil/rbutilqt/icons/players/archosfmrecorder-small.png)bin7028 -> 7028 bytes
-rw-r--r--utils/rbutilqt/icons/players/archosondiofm-small.png (renamed from rbutil/rbutilqt/icons/players/archosondiofm-small.png)bin4902 -> 4902 bytes
-rw-r--r--utils/rbutilqt/icons/players/archosondiosp-small.png (renamed from rbutil/rbutilqt/icons/players/archosondiosp-small.png)bin4896 -> 4896 bytes
-rw-r--r--utils/rbutilqt/icons/players/archosplayer-small.png (renamed from rbutil/rbutilqt/icons/players/archosplayer-small.png)bin4760 -> 4760 bytes
-rw-r--r--utils/rbutilqt/icons/players/archosrecorder-small.png (renamed from rbutil/rbutilqt/icons/players/archosrecorder-small.png)bin5252 -> 5252 bytes
-rw-r--r--utils/rbutilqt/icons/players/archosrecorderv2-small.png (renamed from rbutil/rbutilqt/icons/players/archosrecorderv2-small.png)bin7028 -> 7028 bytes
-rw-r--r--utils/rbutilqt/icons/players/cowond2-small.png (renamed from rbutil/rbutilqt/icons/players/cowond2-small.png)bin2944 -> 2944 bytes
-rw-r--r--utils/rbutilqt/icons/players/fonts-small.png (renamed from rbutil/rbutilqt/icons/players/fonts-small.png)bin4908 -> 4908 bytes
-rw-r--r--utils/rbutilqt/icons/players/gigabeatfx-small.png (renamed from rbutil/rbutilqt/icons/players/gigabeatfx-small.png)bin2264 -> 2264 bytes
-rw-r--r--utils/rbutilqt/icons/players/gigabeats-small.png (renamed from rbutil/rbutilqt/icons/players/gigabeats-small.png)bin3388 -> 3388 bytes
-rw-r--r--utils/rbutilqt/icons/players/gogearhdd1630-small.png (renamed from rbutil/rbutilqt/icons/players/gogearhdd1630-small.png)bin2567 -> 2567 bytes
-rw-r--r--utils/rbutilqt/icons/players/gogearhdd6330-small.png (renamed from rbutil/rbutilqt/icons/players/gogearhdd6330-small.png)bin2226 -> 2226 bytes
-rw-r--r--utils/rbutilqt/icons/players/gogearsa9200-small.png (renamed from rbutil/rbutilqt/icons/players/gogearsa9200-small.png)bin2181 -> 2181 bytes
-rw-r--r--utils/rbutilqt/icons/players/hifimanhm60x-small.png (renamed from rbutil/rbutilqt/icons/players/hifimanhm60x-small.png)bin4605 -> 4605 bytes
-rw-r--r--utils/rbutilqt/icons/players/hifimanhm801-small.png (renamed from rbutil/rbutilqt/icons/players/hifimanhm801-small.png)bin7125 -> 7125 bytes
-rw-r--r--utils/rbutilqt/icons/players/iaudiom3-small.png (renamed from rbutil/rbutilqt/icons/players/iaudiom3-small.png)bin2261 -> 2261 bytes
-rw-r--r--utils/rbutilqt/icons/players/iaudiom5-small.png (renamed from rbutil/rbutilqt/icons/players/iaudiom5-small.png)bin2843 -> 2843 bytes
-rw-r--r--utils/rbutilqt/icons/players/iaudiox5-small.png (renamed from rbutil/rbutilqt/icons/players/iaudiox5-small.png)bin2845 -> 2845 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipod1g2g-small.png (renamed from rbutil/rbutilqt/icons/players/ipod1g2g-small.png)bin5243 -> 5243 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipod3g-small.png (renamed from rbutil/rbutilqt/icons/players/ipod3g-small.png)bin3377 -> 3377 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipod4g-small.png (renamed from rbutil/rbutilqt/icons/players/ipod4g-small.png)bin2581 -> 2581 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipod6g-small.png (renamed from rbutil/rbutilqt/icons/players/ipod6g-small.png)bin2833 -> 2833 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipodcolor-small.png (renamed from rbutil/rbutilqt/icons/players/ipodcolor-small.png)bin2520 -> 2520 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipodmini1g-small.png (renamed from rbutil/rbutilqt/icons/players/ipodmini1g-small.png)bin2316 -> 2316 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipodnano1g-small.png (renamed from rbutil/rbutilqt/icons/players/ipodnano1g-small.png)bin2190 -> 2190 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipodnano2g-small.png (renamed from rbutil/rbutilqt/icons/players/ipodnano2g-small.png)bin2270 -> 2270 bytes
-rw-r--r--utils/rbutilqt/icons/players/ipodvideo-small.png (renamed from rbutil/rbutilqt/icons/players/ipodvideo-small.png)bin2771 -> 2771 bytes
-rw-r--r--utils/rbutilqt/icons/players/iriverh10-small.png (renamed from rbutil/rbutilqt/icons/players/iriverh10-small.png)bin3182 -> 3182 bytes
-rw-r--r--utils/rbutilqt/icons/players/iriverh100-small.png (renamed from rbutil/rbutilqt/icons/players/iriverh100-small.png)bin3606 -> 3606 bytes
-rw-r--r--utils/rbutilqt/icons/players/iriverh10_5gb-small.png (renamed from rbutil/rbutilqt/icons/players/iriverh10_5gb-small.png)bin2631 -> 2631 bytes
-rw-r--r--utils/rbutilqt/icons/players/iriverh300-small.png (renamed from rbutil/rbutilqt/icons/players/iriverh300-small.png)bin3180 -> 3180 bytes
-rw-r--r--utils/rbutilqt/icons/players/mpiohd200-small.png (renamed from rbutil/rbutilqt/icons/players/mpiohd200-small.png)bin16883 -> 16883 bytes
-rw-r--r--utils/rbutilqt/icons/players/mpiohd300-small.png (renamed from rbutil/rbutilqt/icons/players/mpiohd300-small.png)bin14701 -> 14701 bytes
-rw-r--r--utils/rbutilqt/icons/players/mrobe100-small.png (renamed from rbutil/rbutilqt/icons/players/mrobe100-small.png)bin1987 -> 1987 bytes
-rw-r--r--utils/rbutilqt/icons/players/mrobe500-small.png (renamed from rbutil/rbutilqt/icons/players/mrobe500-small.png)bin3075 -> 3075 bytes
-rw-r--r--utils/rbutilqt/icons/players/samsungyh820-small.png (renamed from rbutil/rbutilqt/icons/players/samsungyh820-small.png)bin3225 -> 3225 bytes
-rw-r--r--utils/rbutilqt/icons/players/samsungyh920-small.png (renamed from rbutil/rbutilqt/icons/players/samsungyh920-small.png)bin3358 -> 3358 bytes
-rw-r--r--utils/rbutilqt/icons/players/samsungyh925-small.png (renamed from rbutil/rbutilqt/icons/players/samsungyh925-small.png)bin3447 -> 3447 bytes
-rw-r--r--utils/rbutilqt/icons/players/samsungypr0-small.png (renamed from rbutil/rbutilqt/icons/players/samsungypr0-small.png)bin3038 -> 3038 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansac200-small.png (renamed from rbutil/rbutilqt/icons/players/sansac200-small.png)bin3625 -> 3625 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansaclip-small.png (renamed from rbutil/rbutilqt/icons/players/sansaclip-small.png)bin5843 -> 5843 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansaclipplus-small.png (renamed from rbutil/rbutilqt/icons/players/sansaclipplus-small.png)bin4542 -> 4542 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansaclipzip-small.png (renamed from rbutil/rbutilqt/icons/players/sansaclipzip-small.png)bin7640 -> 7640 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansaconnect-small.png (renamed from rbutil/rbutilqt/icons/players/sansaconnect-small.png)bin6603 -> 6603 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansae200-small.png (renamed from rbutil/rbutilqt/icons/players/sansae200-small.png)bin3901 -> 3901 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansafuze-small.png (renamed from rbutil/rbutilqt/icons/players/sansafuze-small.png)bin4937 -> 4937 bytes
-rw-r--r--utils/rbutilqt/icons/players/sansafuzeplus-small.png (renamed from rbutil/rbutilqt/icons/players/sansafuzeplus-small.png)bin6753 -> 6753 bytes
-rw-r--r--utils/rbutilqt/icons/players/source-small.png (renamed from rbutil/rbutilqt/icons/players/source-small.png)bin4908 -> 4908 bytes
-rw-r--r--utils/rbutilqt/icons/players/vibe500-small.png (renamed from rbutil/rbutilqt/icons/players/vibe500-small.png)bin2891 -> 2891 bytes
-rw-r--r--utils/rbutilqt/icons/players/vx747-small.png (renamed from rbutil/rbutilqt/icons/players/vx747-small.png)bin2732 -> 2732 bytes
-rw-r--r--utils/rbutilqt/icons/players/vx777-small.png (renamed from rbutil/rbutilqt/icons/players/vx777-small.png)bin2445 -> 2445 bytes
-rw-r--r--utils/rbutilqt/icons/preferences-desktop-font.svg (renamed from rbutil/rbutilqt/icons/preferences-desktop-font.svg)0
-rw-r--r--utils/rbutilqt/icons/preferences-desktop-locale.svg (renamed from rbutil/rbutilqt/icons/preferences-desktop-locale.svg)0
-rw-r--r--utils/rbutilqt/icons/preferences-desktop-theme.svg (renamed from rbutil/rbutilqt/icons/preferences-desktop-theme.svg)0
-rw-r--r--utils/rbutilqt/icons/preferences-system.svg (renamed from rbutil/rbutilqt/icons/preferences-system.svg)0
-rw-r--r--utils/rbutilqt/icons/process-stop.svg (renamed from rbutil/rbutilqt/icons/process-stop.svg)0
-rw-r--r--utils/rbutilqt/icons/rbutilqt.icns (renamed from rbutil/rbutilqt/icons/rbutilqt.icns)bin180474 -> 180474 bytes
-rw-r--r--utils/rbutilqt/icons/rockbox.ico (renamed from rbutil/rbutilqt/icons/rockbox.ico)bin100082 -> 100082 bytes
-rw-r--r--utils/rbutilqt/icons/system-installer.svg (renamed from rbutil/rbutilqt/icons/system-installer.svg)0
-rw-r--r--utils/rbutilqt/icons/system-search.svg (renamed from rbutil/rbutilqt/icons/system-search.svg)0
-rw-r--r--utils/rbutilqt/icons/user-trash-full.svg (renamed from rbutil/rbutilqt/icons/user-trash-full.svg)0
-rw-r--r--utils/rbutilqt/icons/view-refresh.svg (renamed from rbutil/rbutilqt/icons/view-refresh.svg)0
-rw-r--r--utils/rbutilqt/icons/wizard.jpg (renamed from rbutil/rbutilqt/icons/wizard.jpg)bin16221 -> 16221 bytes
-rw-r--r--utils/rbutilqt/installtalkfrm.ui (renamed from rbutil/rbutilqt/installtalkfrm.ui)0
-rw-r--r--utils/rbutilqt/installtalkwindow.cpp (renamed from rbutil/rbutilqt/installtalkwindow.cpp)16
-rw-r--r--utils/rbutilqt/installtalkwindow.h (renamed from rbutil/rbutilqt/installtalkwindow.h)0
-rw-r--r--utils/rbutilqt/irivertools/h100sums.h (renamed from rbutil/rbutilqt/irivertools/h100sums.h)0
-rw-r--r--utils/rbutilqt/irivertools/h120sums.h (renamed from rbutil/rbutilqt/irivertools/h120sums.h)0
-rw-r--r--utils/rbutilqt/irivertools/h300sums.h (renamed from rbutil/rbutilqt/irivertools/h300sums.h)0
-rwxr-xr-xutils/rbutilqt/irivertools/mksums.pl (renamed from rbutil/rbutilqt/irivertools/mksums.pl)0
-rw-r--r--utils/rbutilqt/lame/lame.h (renamed from rbutil/rbutilqt/lame/lame.h)0
-rw-r--r--utils/rbutilqt/lang/rbutil_cs.ts (renamed from rbutil/rbutilqt/lang/rbutil_cs.ts)1371
-rw-r--r--utils/rbutilqt/lang/rbutil_de.ts (renamed from rbutil/rbutilqt/lang/rbutil_de.ts)684
-rw-r--r--utils/rbutilqt/lang/rbutil_fi.ts (renamed from rbutil/rbutilqt/lang/rbutil_fi.ts)0
-rw-r--r--utils/rbutilqt/lang/rbutil_fr.ts (renamed from rbutil/rbutilqt/lang/rbutil_fr.ts)1460
-rw-r--r--utils/rbutilqt/lang/rbutil_gr.ts (renamed from rbutil/rbutilqt/lang/rbutil_gr.ts)1469
-rw-r--r--utils/rbutilqt/lang/rbutil_he.ts (renamed from rbutil/rbutilqt/lang/rbutil_he.ts)1468
-rw-r--r--utils/rbutilqt/lang/rbutil_it.ts (renamed from rbutil/rbutilqt/lang/rbutil_it.ts)1463
-rw-r--r--utils/rbutilqt/lang/rbutil_ja.ts (renamed from rbutil/rbutilqt/lang/rbutil_ja.ts)1464
-rw-r--r--utils/rbutilqt/lang/rbutil_nl.ts (renamed from rbutil/rbutilqt/lang/rbutil_nl.ts)1462
-rw-r--r--utils/rbutilqt/lang/rbutil_pl.ts (renamed from rbutil/rbutilqt/lang/rbutil_pl.ts)1460
-rw-r--r--utils/rbutilqt/lang/rbutil_pt.ts (renamed from rbutil/rbutilqt/lang/rbutil_pt.ts)1463
-rw-r--r--utils/rbutilqt/lang/rbutil_pt_BR.ts (renamed from rbutil/rbutilqt/lang/rbutil_pt_BR.ts)438
-rw-r--r--utils/rbutilqt/lang/rbutil_ru.ts (renamed from rbutil/rbutilqt/lang/rbutil_ru.ts)436
-rw-r--r--utils/rbutilqt/lang/rbutil_tr.ts (renamed from rbutil/rbutilqt/lang/rbutil_tr.ts)876
-rw-r--r--utils/rbutilqt/lang/rbutil_zh_CN.ts (renamed from rbutil/rbutilqt/lang/rbutil_zh_CN.ts)0
-rw-r--r--utils/rbutilqt/lang/rbutil_zh_TW.ts (renamed from rbutil/rbutilqt/lang/rbutil_zh_TW.ts)1464
-rw-r--r--utils/rbutilqt/lang/rbutilqt-lang.qrc19
-rwxr-xr-xutils/rbutilqt/langstats.py (renamed from rbutil/rbutilqt/langstats.py)39
-rw-r--r--utils/rbutilqt/logger/LICENSE.LGPL (renamed from rbutil/rbutilqt/logger/LICENSE.LGPL)0
-rw-r--r--utils/rbutilqt/logger/README.ROCKBOX (renamed from rbutil/rbutilqt/logger/README.ROCKBOX)0
-rw-r--r--utils/rbutilqt/logger/include/AbstractAppender.h (renamed from rbutil/rbutilqt/logger/include/AbstractAppender.h)0
-rw-r--r--utils/rbutilqt/logger/include/AbstractStringAppender.h (renamed from rbutil/rbutilqt/logger/include/AbstractStringAppender.h)0
-rw-r--r--utils/rbutilqt/logger/include/ConsoleAppender.h (renamed from rbutil/rbutilqt/logger/include/ConsoleAppender.h)0
-rw-r--r--utils/rbutilqt/logger/include/CuteLogger_global.h (renamed from rbutil/rbutilqt/logger/include/CuteLogger_global.h)0
-rw-r--r--utils/rbutilqt/logger/include/FileAppender.h (renamed from rbutil/rbutilqt/logger/include/FileAppender.h)0
-rw-r--r--utils/rbutilqt/logger/include/Logger.h (renamed from rbutil/rbutilqt/logger/include/Logger.h)0
-rw-r--r--utils/rbutilqt/logger/include/OutputDebugAppender.h (renamed from rbutil/rbutilqt/logger/include/OutputDebugAppender.h)0
-rw-r--r--utils/rbutilqt/logger/logger.pri (renamed from rbutil/rbutilqt/logger/logger.pri)0
-rw-r--r--utils/rbutilqt/logger/src/AbstractAppender.cpp (renamed from rbutil/rbutilqt/logger/src/AbstractAppender.cpp)0
-rw-r--r--utils/rbutilqt/logger/src/AbstractStringAppender.cpp (renamed from rbutil/rbutilqt/logger/src/AbstractStringAppender.cpp)0
-rw-r--r--utils/rbutilqt/logger/src/ConsoleAppender.cpp (renamed from rbutil/rbutilqt/logger/src/ConsoleAppender.cpp)0
-rw-r--r--utils/rbutilqt/logger/src/FileAppender.cpp (renamed from rbutil/rbutilqt/logger/src/FileAppender.cpp)0
-rw-r--r--utils/rbutilqt/logger/src/Logger.cpp (renamed from rbutil/rbutilqt/logger/src/Logger.cpp)6
-rw-r--r--utils/rbutilqt/logger/src/OutputDebugAppender.cpp (renamed from rbutil/rbutilqt/logger/src/OutputDebugAppender.cpp)0
-rw-r--r--utils/rbutilqt/main.cpp (renamed from rbutil/rbutilqt/main.cpp)9
-rw-r--r--utils/rbutilqt/mspack/COPYING.LIB (renamed from rbutil/rbutilqt/mspack/COPYING.LIB)0
-rw-r--r--utils/rbutilqt/mspack/README.ROCKBOX (renamed from rbutil/rbutilqt/mspack/README.ROCKBOX)0
-rw-r--r--utils/rbutilqt/mspack/cab.h (renamed from rbutil/rbutilqt/mspack/cab.h)0
-rw-r--r--utils/rbutilqt/mspack/cabc.c (renamed from rbutil/rbutilqt/mspack/cabc.c)0
-rw-r--r--utils/rbutilqt/mspack/cabd.c (renamed from rbutil/rbutilqt/mspack/cabd.c)0
-rw-r--r--utils/rbutilqt/mspack/chm.h (renamed from rbutil/rbutilqt/mspack/chm.h)0
-rw-r--r--utils/rbutilqt/mspack/chmc.c (renamed from rbutil/rbutilqt/mspack/chmc.c)0
-rw-r--r--utils/rbutilqt/mspack/chmd.c (renamed from rbutil/rbutilqt/mspack/chmd.c)0
-rw-r--r--utils/rbutilqt/mspack/des.h (renamed from rbutil/rbutilqt/mspack/des.h)0
-rw-r--r--utils/rbutilqt/mspack/hlp.h (renamed from rbutil/rbutilqt/mspack/hlp.h)0
-rw-r--r--utils/rbutilqt/mspack/hlpc.c (renamed from rbutil/rbutilqt/mspack/hlpc.c)0
-rw-r--r--utils/rbutilqt/mspack/hlpd.c (renamed from rbutil/rbutilqt/mspack/hlpd.c)0
-rw-r--r--utils/rbutilqt/mspack/kwaj.h (renamed from rbutil/rbutilqt/mspack/kwaj.h)0
-rw-r--r--utils/rbutilqt/mspack/kwajc.c (renamed from rbutil/rbutilqt/mspack/kwajc.c)0
-rw-r--r--utils/rbutilqt/mspack/kwajd.c (renamed from rbutil/rbutilqt/mspack/kwajd.c)0
-rw-r--r--utils/rbutilqt/mspack/lit.h (renamed from rbutil/rbutilqt/mspack/lit.h)0
-rw-r--r--utils/rbutilqt/mspack/litc.c (renamed from rbutil/rbutilqt/mspack/litc.c)0
-rw-r--r--utils/rbutilqt/mspack/litd.c (renamed from rbutil/rbutilqt/mspack/litd.c)0
-rw-r--r--utils/rbutilqt/mspack/lzss.h (renamed from rbutil/rbutilqt/mspack/lzss.h)0
-rw-r--r--utils/rbutilqt/mspack/lzssd.c (renamed from rbutil/rbutilqt/mspack/lzssd.c)0
-rw-r--r--utils/rbutilqt/mspack/lzx.h (renamed from rbutil/rbutilqt/mspack/lzx.h)0
-rw-r--r--utils/rbutilqt/mspack/lzxc.c (renamed from rbutil/rbutilqt/mspack/lzxc.c)0
-rw-r--r--utils/rbutilqt/mspack/lzxd.c (renamed from rbutil/rbutilqt/mspack/lzxd.c)0
-rw-r--r--utils/rbutilqt/mspack/mspack.h (renamed from rbutil/rbutilqt/mspack/mspack.h)0
-rw-r--r--utils/rbutilqt/mspack/mszip.h (renamed from rbutil/rbutilqt/mspack/mszip.h)0
-rw-r--r--utils/rbutilqt/mspack/mszipc.c (renamed from rbutil/rbutilqt/mspack/mszipc.c)0
-rw-r--r--utils/rbutilqt/mspack/mszipd.c (renamed from rbutil/rbutilqt/mspack/mszipd.c)0
-rw-r--r--utils/rbutilqt/mspack/qtm.h (renamed from rbutil/rbutilqt/mspack/qtm.h)0
-rw-r--r--utils/rbutilqt/mspack/qtmd.c (renamed from rbutil/rbutilqt/mspack/qtmd.c)0
-rw-r--r--utils/rbutilqt/mspack/readbits.h (renamed from rbutil/rbutilqt/mspack/readbits.h)0
-rw-r--r--utils/rbutilqt/mspack/readhuff.h (renamed from rbutil/rbutilqt/mspack/readhuff.h)0
-rw-r--r--utils/rbutilqt/mspack/sha.h (renamed from rbutil/rbutilqt/mspack/sha.h)0
-rw-r--r--utils/rbutilqt/mspack/system-mspack.c (renamed from rbutil/rbutilqt/mspack/system-mspack.c)0
-rw-r--r--utils/rbutilqt/mspack/system-mspack.h (renamed from rbutil/rbutilqt/mspack/system-mspack.h)0
-rw-r--r--utils/rbutilqt/mspack/szdd.h (renamed from rbutil/rbutilqt/mspack/szdd.h)0
-rw-r--r--utils/rbutilqt/mspack/szddc.c (renamed from rbutil/rbutilqt/mspack/szddc.c)0
-rw-r--r--utils/rbutilqt/mspack/szddd.c (renamed from rbutil/rbutilqt/mspack/szddd.c)0
-rw-r--r--utils/rbutilqt/msvc/Makefile (renamed from rbutil/rbutilqt/msvc/Makefile)0
-rw-r--r--utils/rbutilqt/msvc/README (renamed from rbutil/rbutilqt/msvc/README)0
-rw-r--r--utils/rbutilqt/msvc/inttypes.h (renamed from rbutil/rbutilqt/msvc/inttypes.h)0
-rw-r--r--utils/rbutilqt/msvc/stdbool.h (renamed from rbutil/rbutilqt/msvc/stdbool.h)0
-rw-r--r--utils/rbutilqt/msvc/stdint.h (renamed from rbutil/rbutilqt/msvc/stdint.h)0
-rw-r--r--utils/rbutilqt/preview.cpp (renamed from rbutil/rbutilqt/preview.cpp)2
-rw-r--r--utils/rbutilqt/preview.h (renamed from rbutil/rbutilqt/preview.h)0
-rw-r--r--utils/rbutilqt/previewfrm.ui (renamed from rbutil/rbutilqt/previewfrm.ui)0
-rw-r--r--utils/rbutilqt/progressloggerfrm.ui (renamed from rbutil/rbutilqt/progressloggerfrm.ui)0
-rw-r--r--utils/rbutilqt/progressloggergui.cpp (renamed from rbutil/rbutilqt/progressloggergui.cpp)16
-rw-r--r--utils/rbutilqt/progressloggergui.h (renamed from rbutil/rbutilqt/progressloggergui.h)24
-rw-r--r--utils/rbutilqt/quazip/LICENSE.LGPL (renamed from rbutil/rbutilqt/quazip/LICENSE.LGPL)0
-rw-r--r--utils/rbutilqt/quazip/README.ROCKBOX (renamed from rbutil/rbutilqt/quazip/README.ROCKBOX)0
-rw-r--r--utils/rbutilqt/quazip/ioapi.h (renamed from rbutil/rbutilqt/quazip/ioapi.h)0
-rw-r--r--utils/rbutilqt/quazip/minizip_crypt.h (renamed from rbutil/rbutilqt/quazip/minizip_crypt.h)0
-rw-r--r--utils/rbutilqt/quazip/qioapi.cpp (renamed from rbutil/rbutilqt/quazip/qioapi.cpp)0
-rw-r--r--utils/rbutilqt/quazip/quazip.cpp (renamed from rbutil/rbutilqt/quazip/quazip.cpp)0
-rw-r--r--utils/rbutilqt/quazip/quazip.h (renamed from rbutil/rbutilqt/quazip/quazip.h)0
-rw-r--r--utils/rbutilqt/quazip/quazip.pri (renamed from rbutil/rbutilqt/quazip/quazip.pri)0
-rw-r--r--utils/rbutilqt/quazip/quazip_global.h (renamed from rbutil/rbutilqt/quazip/quazip_global.h)0
-rw-r--r--utils/rbutilqt/quazip/quazipfile.cpp (renamed from rbutil/rbutilqt/quazip/quazipfile.cpp)0
-rw-r--r--utils/rbutilqt/quazip/quazipfile.h (renamed from rbutil/rbutilqt/quazip/quazipfile.h)0
-rw-r--r--utils/rbutilqt/quazip/quazipfileinfo.cpp (renamed from rbutil/rbutilqt/quazip/quazipfileinfo.cpp)0
-rw-r--r--utils/rbutilqt/quazip/quazipfileinfo.h (renamed from rbutil/rbutilqt/quazip/quazipfileinfo.h)0
-rw-r--r--utils/rbutilqt/quazip/quazipnewinfo.cpp (renamed from rbutil/rbutilqt/quazip/quazipnewinfo.cpp)0
-rw-r--r--utils/rbutilqt/quazip/quazipnewinfo.h (renamed from rbutil/rbutilqt/quazip/quazipnewinfo.h)0
-rw-r--r--utils/rbutilqt/quazip/unzip.c (renamed from rbutil/rbutilqt/quazip/unzip.c)0
-rw-r--r--utils/rbutilqt/quazip/unzip.h (renamed from rbutil/rbutilqt/quazip/unzip.h)0
-rw-r--r--utils/rbutilqt/quazip/zip.c (renamed from rbutil/rbutilqt/quazip/zip.c)0
-rw-r--r--utils/rbutilqt/quazip/zip.h (renamed from rbutil/rbutilqt/quazip/zip.h)0
-rw-r--r--utils/rbutilqt/rbutil.ini (renamed from rbutil/rbutilqt/rbutil.ini)26
-rw-r--r--utils/rbutilqt/rbutilqt-win.qrc (renamed from rbutil/rbutilqt/rbutilqt-win.qrc)0
-rw-r--r--utils/rbutilqt/rbutilqt.cpp (renamed from rbutil/rbutilqt/rbutilqt.cpp)173
-rw-r--r--utils/rbutilqt/rbutilqt.h (renamed from rbutil/rbutilqt/rbutilqt.h)5
-rw-r--r--utils/rbutilqt/rbutilqt.manifest (renamed from rbutil/rbutilqt/rbutilqt.manifest)0
-rw-r--r--utils/rbutilqt/rbutilqt.qrc (renamed from rbutil/rbutilqt/rbutilqt.qrc)0
-rw-r--r--utils/rbutilqt/rbutilqt.rc (renamed from rbutil/rbutilqt/rbutilqt.rc)0
-rw-r--r--utils/rbutilqt/rbutilqtfrm.ui (renamed from rbutil/rbutilqt/rbutilqtfrm.ui)40
-rw-r--r--utils/rbutilqt/sysinfo.cpp (renamed from rbutil/rbutilqt/sysinfo.cpp)6
-rw-r--r--utils/rbutilqt/sysinfo.h (renamed from rbutil/rbutilqt/sysinfo.h)0
-rw-r--r--utils/rbutilqt/sysinfofrm.ui (renamed from rbutil/rbutilqt/sysinfofrm.ui)0
-rw-r--r--utils/rbutilqt/systrace.cpp (renamed from rbutil/rbutilqt/systrace.cpp)0
-rw-r--r--utils/rbutilqt/systrace.h (renamed from rbutil/rbutilqt/systrace.h)0
-rw-r--r--utils/rbutilqt/systracefrm.ui (renamed from rbutil/rbutilqt/systracefrm.ui)0
-rw-r--r--utils/rbutilqt/test/stubs/Logger.h (renamed from rbutil/rbutilqt/test/stubs/Logger.h)0
-rw-r--r--utils/rbutilqt/test/stubs/stubs-compareversion.cpp (renamed from rbutil/rbutilqt/test/stubs/stubs-compareversion.cpp)7
-rw-r--r--utils/rbutilqt/test/stubs/stubs-playerbuildinfo.cpp (renamed from rbutil/rbutilqt/test/stubs/stubs-playerbuildinfo.cpp)0
-rw-r--r--utils/rbutilqt/test/stubs/stubs-talkgenerator.cpp104
-rw-r--r--utils/rbutilqt/test/test-compareversion.cpp148
-rw-r--r--utils/rbutilqt/test/test-httpget.cpp (renamed from rbutil/rbutilqt/test/test-httpget.cpp)69
-rw-r--r--utils/rbutilqt/test/test-playerbuildinfo.cpp (renamed from rbutil/rbutilqt/test/test-playerbuildinfo.cpp)61
-rw-r--r--utils/rbutilqt/test/test-rockboxinfo.cpp (renamed from rbutil/rbutilqt/test/test-rockboxinfo.cpp)17
-rw-r--r--utils/rbutilqt/test/test-talkgenerator.cpp83
-rw-r--r--utils/rbutilqt/test/test-talkgenerator.qrc5
-rw-r--r--utils/rbutilqt/test/tests.pri (renamed from rbutil/rbutilqt/test/tests.pri)0
-rw-r--r--utils/rbutilqt/themesinstallfrm.ui (renamed from rbutil/rbutilqt/themesinstallfrm.ui)0
-rw-r--r--utils/rbutilqt/themesinstallwindow.cpp (renamed from rbutil/rbutilqt/themesinstallwindow.cpp)80
-rw-r--r--utils/rbutilqt/themesinstallwindow.h (renamed from rbutil/rbutilqt/themesinstallwindow.h)14
-rw-r--r--utils/rbutilqt/uninstallfrm.ui (renamed from rbutil/rbutilqt/uninstallfrm.ui)0
-rw-r--r--utils/rbutilqt/uninstallwindow.cpp (renamed from rbutil/rbutilqt/uninstallwindow.cpp)12
-rw-r--r--utils/rbutilqt/uninstallwindow.h (renamed from rbutil/rbutilqt/uninstallwindow.h)0
-rw-r--r--utils/rbutilqt/version.h (renamed from rbutil/rbutilqt/version.h)8
-rw-r--r--utils/rbutilqt/zlib/zconf.h (renamed from rbutil/rbutilqt/zlib/zconf.h)0
-rw-r--r--utils/rbutilqt/zlib/zlib.h (renamed from rbutil/rbutilqt/zlib/zlib.h)0
-rw-r--r--utils/sansapatcher/Makefile (renamed from rbutil/sansapatcher/Makefile)0
-rw-r--r--utils/sansapatcher/README (renamed from rbutil/sansapatcher/README)0
-rw-r--r--utils/sansapatcher/main.c (renamed from rbutil/sansapatcher/main.c)0
-rw-r--r--utils/sansapatcher/parttypes.h (renamed from rbutil/sansapatcher/parttypes.h)0
-rw-r--r--utils/sansapatcher/sansaio-posix.c (renamed from rbutil/sansapatcher/sansaio-posix.c)1
-rw-r--r--utils/sansapatcher/sansaio-win32.c (renamed from rbutil/sansapatcher/sansaio-win32.c)1
-rw-r--r--utils/sansapatcher/sansaio.h (renamed from rbutil/sansapatcher/sansaio.h)0
-rw-r--r--utils/sansapatcher/sansapatcher.c (renamed from rbutil/sansapatcher/sansapatcher.c)0
-rw-r--r--utils/sansapatcher/sansapatcher.h (renamed from rbutil/sansapatcher/sansapatcher.h)0
-rw-r--r--utils/sansapatcher/sansapatcher.manifest (renamed from rbutil/sansapatcher/sansapatcher.manifest)0
-rw-r--r--utils/sansapatcher/sansapatcher.rc (renamed from rbutil/sansapatcher/sansapatcher.rc)0
-rw-r--r--utils/themeeditor/CMakeLists.txt150
-rw-r--r--utils/themeeditor/Info.plist2
-rw-r--r--utils/themeeditor/RockboxThemeEditor.desktop12
-rw-r--r--utils/themeeditor/dmgbuild.cfg17
-rw-r--r--utils/themeeditor/resources/rbthemeeditor.svg71
-rw-r--r--utils/themeeditor/themeeditor.pro221
-rw-r--r--utils/tools/Makefile (renamed from rbutil/tools/Makefile)0
-rw-r--r--utils/tools/bin2c.c (renamed from rbutil/tools/bin2c.c)0
922 files changed, 36887 insertions, 20903 deletions
diff --git a/.gitignore b/.gitignore
index 93253775a8..5db3eaed58 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,45 +60,45 @@ __pycache__
/firmware/test/buflib/test_shrink_startchanged
/firmware/test/buflib/test_shrink_unaligned
-# /rbutil/
-/rbutil/Makefile
-/rbutil/rbutil
-
-# /rbutil/ipodpatcher/
-/rbutil/ipodpatcher/ipodpatcher
-
-# /rbutil/chinachippatcher/
-/rbutil/chinachippatcher/chinachip
-
-# /rbutil/bspatch/
-/rbutil/bspatch/bspatch
-
-# /rbutil/rbutilqt/
-/rbutil/rbutilqt/build
-/rbutil/rbutilqt/RockboxUtility
-/rbutil/rbutilqt/RockboxUtility.*
-/rbutil/rbutilqt/Makefile
-/rbutil/rbutilqt/*.qm
-/rbutil/rbutilqt/release
-/rbutil/rbutilqt/debug
-/rbutil/rbutilqt/*.Debug
-/rbutil/rbutilqt/*.Release
-/rbutil/rbutilqt/tags
-/rbutil/rbutilqt/.qmake.stash
-
-# /rbutil/rbutilqt/lang/
-/rbutil/rbutilqt/lang/*.qm
+# /utils/
+/utils/Makefile
+/utils/rbutil
+
+# /utils/ipodpatcher/
+/utils/ipodpatcher/ipodpatcher
+
+# /utils/chinachippatcher/
+/utils/chinachippatcher/chinachip
+
+# /utils/bspatch/
+/utils/bspatch/bspatch
+
+# /utils/rbutilqt/
+/utils/rbutilqt/build
+/utils/rbutilqt/RockboxUtility
+/utils/rbutilqt/RockboxUtility.*
+/utils/rbutilqt/Makefile
+/utils/rbutilqt/*.qm
+/utils/rbutilqt/release
+/utils/rbutilqt/debug
+/utils/rbutilqt/*.Debug
+/utils/rbutilqt/*.Release
+/utils/rbutilqt/tags
+/utils/rbutilqt/.qmake.stash
+
+# /utils/rbutilqt/lang/
+/utils/rbutilqt/lang/*.qm
# More rbutil
-/rbutil/*/buildposix
-/rbutil/*/uninstall_script.[ch]
-/rbutil/*/install_script.[ch]
-/rbutil/mkimxboot/mkimxboot
-/rbutil/mknwzboot/mknwzboot
-/rbutil/mkzenboot/mkzenboot
-/rbutil/sansapatcher/sansapatcher
-/rbutil/jztool/jztool
-/rbutil/tools/bin2c
+/utils/*/buildposix
+/utils/*/uninstall_script.[ch]
+/utils/*/install_script.[ch]
+/utils/mkimxboot/mkimxboot
+/utils/mknwzboot/mknwzboot
+/utils/mkzenboot/mkzenboot
+/utils/sansapatcher/sansapatcher
+/utils/jztool/jztool
+/utils/tools/bin2c
# /tools/
/tools/bdf2bmp
diff --git a/apps/SOURCES b/apps/SOURCES
index 1628524805..444951bbcb 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -7,6 +7,7 @@ alarm_menu.c
#endif
abrepeat.c
bookmark.c
+core_keymap.c
debug_menu.c
filetypes.c
language.c
@@ -57,7 +58,6 @@ tree.c
tagtree.c
#endif
filetree.c
-scrobbler.c
#ifdef IPOD_ACCESSORY_PROTOCOL
iap/iap-core.c
iap/iap-lingo0.c
diff --git a/apps/action.c b/apps/action.c
index b31c4fa927..9ef10936f2 100644
--- a/apps/action.c
+++ b/apps/action.c
@@ -69,6 +69,10 @@ static action_last_t action_last =
.tick = 0,
.wait_for_release = false,
+#ifndef DISABLE_ACTION_REMAP
+ .core_keymap = NULL,
+#endif
+
#ifdef HAVE_TOUCHSCREEN
.ts_data = 0,
.ts_short_press = false,
@@ -499,7 +503,7 @@ static inline int action_code_worker(action_last_t *last,
int *end )
{
int ret = ACTION_UNKNOWN;
- int i = 0;
+ int i = *end;
unsigned int found = 0;
while (cur->items[i].button_code != BUTTON_NONE)
{
@@ -585,10 +589,8 @@ static inline int get_next_context(const struct button_mapping *items, int i)
*/
static inline void action_code_lookup(action_last_t *last, action_cur_t *cur)
{
- int action = ACTION_NONE;
+ int action, i;
int context = cur->context;
- int i = 0;
-
cur->is_prebutton = false;
#ifdef HAVE_LOCKED_ACTIONS
@@ -598,6 +600,41 @@ static inline void action_code_lookup(action_last_t *last, action_cur_t *cur)
context |= CONTEXT_LOCKED;
#endif
+#ifndef DISABLE_ACTION_REMAP
+ bool check_remap = (last->core_keymap != NULL);
+ /* attempt to look up the button in user supplied remap */
+ if(check_remap && (context & CONTEXT_PLUGIN) == 0)
+ {
+#if 0 /*Disable the REMOTE context for remap for now (BUTTON_REMOTE != 0)*/
+ if ((cur->button & BUTTON_REMOTE) != 0)
+ {
+ context |= CONTEXT_REMOTE;
+ }
+#endif
+ cur->items = last->core_keymap;
+ i = 0;
+ action = ACTION_UNKNOWN;
+ /* check the lut at the beginning for the desired context */
+ while (cur->items[i].button_code != BUTTON_NONE)
+ {
+ if (cur->items[i].action_code == CORE_CONTEXT_REMAP(context))
+ {
+ i = cur->items[i].button_code;
+ action = action_code_worker(last, cur, &i);
+ if (action != ACTION_UNKNOWN)
+ {
+ cur->action = action;
+ return;
+ }
+ }
+ i++;
+ }
+ }
+#endif
+
+ i = 0;
+ action = ACTION_NONE;
+ /* attempt to look up the button in the in-built keymaps */
for(;;)
{
/* logf("context = %x",context); */
@@ -609,9 +646,13 @@ static inline void action_code_lookup(action_last_t *last, action_cur_t *cur)
#endif
if ((context & CONTEXT_PLUGIN) && cur->get_context_map)
+ {
cur->items = cur->get_context_map(context);
+ }
else
+ {
cur->items = get_context_mapping(context);
+ }
if (cur->items != NULL)
{
@@ -1150,6 +1191,70 @@ int get_action(int context, int timeout)
return action;
}
+int action_set_keymap(struct button_mapping* core_keymap, int count)
+{
+
+#ifdef DISABLE_ACTION_REMAP
+ count = -1;
+#else
+ if (count > 0 && core_keymap != NULL) /* saf-tey checks :) */
+ {
+ int i = 0;
+ struct button_mapping* entry = &core_keymap[count - 1];
+ if (entry->action_code != (int) CONTEXT_STOPSEARCHING ||
+ entry->button_code != BUTTON_NONE) /* check for sentinel at end*/
+ {
+ count = -1;
+ }
+
+ while (count > 0 && /* check the lut at the beginning for invalid offsets */
+ (entry = &core_keymap[i])->action_code != (int) CONTEXT_STOPSEARCHING)
+ {
+
+ if ((entry->action_code & CONTEXT_REMAPPED) == CONTEXT_REMAPPED)
+ {
+ int firstbtn = entry->button_code;
+ int endpos = firstbtn + entry->pre_button_code;
+ if (firstbtn > count || firstbtn < i || endpos > count)
+ {
+ /* offset out of bounds */
+ count = -2;
+ break;
+ }
+
+ if (core_keymap[endpos].button_code != BUTTON_NONE)
+ {
+ /* stop sentinel is not at end of action lut*/
+ count = -3;
+ }
+ }
+ else /* something other than a context remap in the lut */
+ {
+ count = -4;
+ break;
+ }
+
+ i++;
+
+ if (i >= count) /* no sentinel in the lut */
+ {
+ count = -5;
+ break;
+ }
+ }
+
+ if (count <= 0)
+ core_keymap = NULL;
+ }
+ else
+#endif
+ {
+ core_keymap = NULL;
+ }
+ action_last.core_keymap = core_keymap;
+ return count;
+}
+
int get_custom_action(int context,int timeout,
const struct button_mapping* (*get_context_map)(int))
{
diff --git a/apps/action.h b/apps/action.h
index f94dd3086c..35f08a3dbd 100644
--- a/apps/action.h
+++ b/apps/action.h
@@ -28,10 +28,13 @@
#define TIMEOUT_NOBLOCK 0
#define CONTEXT_STOPSEARCHING 0xFFFFFFFF
+
#define CONTEXT_REMOTE 0x80000000 /* | this against another context to get remote buttons for that context */
#define CONTEXT_CUSTOM 0x40000000 /* | this against anything to get your context number */
#define CONTEXT_CUSTOM2 0x20000000 /* as above */
#define CONTEXT_PLUGIN 0x10000000 /* for plugins using get_custom_action */
+#define CONTEXT_REMAPPED 0x08000000 /* marker for key remap context table */
+#define CORE_CONTEXT_REMAP(context) (CONTEXT_REMAPPED | context)
#ifdef HAVE_LOCKED_ACTIONS
#define CONTEXT_LOCKED 0x04000000 /* flag to use alternate keymap when screen is locked */
#endif
@@ -245,7 +248,6 @@ enum {
ACTION_SETTINGS_DEC,
ACTION_SETTINGS_DECREPEAT,
ACTION_SETTINGS_DECBIGSTEP,
- ACTION_SETTINGS_RESET,
ACTION_SETTINGS_SET, /* Used by touchscreen targets */
/* bookmark screen */
@@ -416,6 +418,10 @@ typedef struct
bool repeated;
bool wait_for_release;
+#ifndef DISABLE_ACTION_REMAP
+ struct button_mapping* core_keymap;
+#endif
+
#ifdef HAVE_TOUCHSCREEN
bool ts_short_press;
int ts_data;
@@ -442,6 +448,9 @@ bool action_userabort(int timeout);
/* no other code should need this apart from action.c */
const struct button_mapping* get_context_mapping(int context);
+/* load a key map to allow buttons for actions to be remapped see: core_keymap */
+int action_set_keymap(struct button_mapping* core_button_map, int count);
+
/* returns the status code variable from action.c for the button just pressed
If button != NULL it will be set to the actual button code */
#define ACTION_REMOTE 0x1 /* remote was pressed */
diff --git a/apps/alarm_menu.c b/apps/alarm_menu.c
index 62b54a84bb..67f8d1e8dd 100644
--- a/apps/alarm_menu.c
+++ b/apps/alarm_menu.c
@@ -38,161 +38,56 @@
#include "splash.h"
#include "viewport.h"
-static void speak_time(int hours, int minutes, bool speak_hours, bool enqueue)
-{
- if (global_settings.talk_menu){
- if(speak_hours) {
- talk_value(hours, UNIT_HOUR, enqueue);
- talk_value(minutes, UNIT_MIN, true);
- } else {
- talk_value(minutes, UNIT_MIN, enqueue);
- }
- }
-}
-
int alarm_screen(void)
{
- int h, m;
- bool done = false;
- struct tm *tm;
- int togo;
- int button;
- bool update = true;
- bool hour_wrapped = false;
- struct viewport vp[NB_SCREENS];
- struct viewport * last_vp;
-
- rtc_get_alarm(&h, &m);
+ bool usb, update;
+ struct tm *now = get_time();
+ struct tm atm;
+ memcpy(&atm, now, sizeof(struct tm));
+ rtc_get_alarm(&atm.tm_hour, &atm.tm_min);
/* After a battery change the RTC values are out of range */
- if (m > 60 || h > 24) {
- m = 0;
- h = 12;
- } else {
- m = m / 5 * 5; /* 5 min accuracy should be enough */
- }
- FOR_NB_SCREENS(i)
- {
- viewport_set_defaults(&vp[i], i);
- }
+ if (!valid_time(&atm))
+ memcpy(&atm, now, sizeof(struct tm));
+ atm.tm_sec = 0;
- while(!done) {
- if(update)
- {
- FOR_NB_SCREENS(i)
- {
- screens[i].set_viewport(&vp[i]);
- screens[i].clear_viewport();
- screens[i].puts(0, 4, str(LANG_ALARM_MOD_KEYS));
- }
- /* Talk when entering the wakeup screen */
- speak_time(h, m, true, true);
- update = false;
- }
+ usb = set_time_screen(str(LANG_ALARM_MOD_TIME), &atm, false);
+ update = valid_time(&atm); /* set_time returns invalid time if canceled */
- FOR_NB_SCREENS(i)
- {
- last_vp = screens[i].set_viewport(&vp[i]);
- screens[i].putsf(0, 1, str(LANG_ALARM_MOD_TIME));
- screens[i].putsf(0, 2, "%02d:%02d", h, m);
- screens[i].update_viewport();
- screens[i].set_viewport(last_vp);
- }
- button = get_action(CONTEXT_SETTINGS,HZ);
+ if (!usb && update)
+ {
- switch(button) {
- case ACTION_STD_OK:
+ now = get_time();
+ int nmins = now->tm_min + (now->tm_hour * 60);
+ int amins = atm.tm_min + (atm.tm_hour * 60);
+ int mins_togo = (amins - nmins + 1440) % 1440;
/* prevent that an alarm occurs in the shutdown procedure */
/* accept alarms only if they are in 2 minutes or more */
- tm = get_time();
- togo = (m + h * 60 - tm->tm_min - tm->tm_hour * 60 + 1440) % 1440;
-
- if (togo > 1) {
+ if (mins_togo > 1) {
rtc_init();
- rtc_set_alarm(h,m);
+ rtc_set_alarm(atm.tm_hour,atm.tm_min);
rtc_enable_alarm(true);
if (global_settings.talk_menu)
{
talk_id(LANG_ALARM_MOD_TIME_TO_GO, true);
- talk_value(togo / 60, UNIT_HOUR, true);
- talk_value(togo % 60, UNIT_MIN, true);
+ talk_value(mins_togo / 60, UNIT_HOUR, true);
+ talk_value(mins_togo % 60, UNIT_MIN, true);
talk_force_enqueue_next();
}
splashf(HZ*2, str(LANG_ALARM_MOD_TIME_TO_GO),
- togo / 60, togo % 60);
- done = true;
+ mins_togo / 60, mins_togo % 60);
} else {
splash(HZ, ID2P(LANG_ALARM_MOD_ERROR));
- update = true;
- }
- break;
-
- /* inc(m) */
- case ACTION_SETTINGS_INC:
- case ACTION_SETTINGS_INCREPEAT:
- m += 5;
- if (m == 60) {
- h += 1;
- m = 0;
- hour_wrapped = true;
+ update = false;
}
- if (h == 24)
- h = 0;
-
- speak_time(h, m, hour_wrapped, false);
- break;
-
- /* dec(m) */
- case ACTION_SETTINGS_DEC:
- case ACTION_SETTINGS_DECREPEAT:
- m -= 5;
- if (m == -5) {
- h -= 1;
- m = 55;
- hour_wrapped = true;
- }
- if (h == -1)
- h = 23;
-
- speak_time(h, m, hour_wrapped, false);
- break;
-
- /* inc(h) */
- case ACTION_STD_NEXT:
- case ACTION_STD_NEXTREPEAT:
- h = (h+1) % 24;
-
- if (global_settings.talk_menu)
- talk_value(h, UNIT_HOUR, false);
- break;
-
- /* dec(h) */
- case ACTION_STD_PREV:
- case ACTION_STD_PREVREPEAT:
- h = (h+23) % 24;
-
- if (global_settings.talk_menu)
- talk_value(h, UNIT_HOUR, false);
- break;
+ }
- case ACTION_STD_CANCEL:
- rtc_enable_alarm(false);
+ if (usb || !update)
+ {
+ if (!usb)
splash(HZ*2, ID2P(LANG_ALARM_MOD_DISABLE));
- done = true;
- break;
-
- case ACTION_NONE:
- hour_wrapped = false;
- break;
-
- default:
- if(default_event_handler(button) == SYS_USB_CONNECTED)
- {
- rtc_enable_alarm(false);
- return 1;
- }
- break;
- }
+ rtc_enable_alarm(false);
+ return 1;
}
return 0;
}
diff --git a/apps/buffering.c b/apps/buffering.c
index 3adbc4a6b9..8661a42ab8 100644
--- a/apps/buffering.c
+++ b/apps/buffering.c
@@ -71,8 +71,6 @@
/* amount of data to read in one read() call */
#define BUFFERING_DEFAULT_FILECHUNK (1024*32)
-#define BUF_HANDLE_MASK 0x7FFFFFFF
-
enum handle_flags
{
H_CANWRAP = 0x1, /* Handle data may wrap in buffer */
@@ -295,12 +293,11 @@ static int next_handle_id(void)
{
static int cur_handle_id = 0;
- /* Wrap signed int is safe and 0 doesn't happen */
- int next_hid = (cur_handle_id + 1) & BUF_HANDLE_MASK;
- if (next_hid == 0)
- next_hid = 1;
-
- cur_handle_id = next_hid;
+ int next_hid = cur_handle_id + 1;
+ if (next_hid == INT_MAX)
+ cur_handle_id = 0; /* next would overflow; reset the counter */
+ else
+ cur_handle_id = next_hid;
return next_hid;
}
@@ -851,8 +848,9 @@ static bool fill_buffer(void)
Return value is the total size (struct + data). */
static int load_image(int fd, const char *path,
struct bufopen_bitmap_data *data,
- size_t bufidx)
+ size_t bufidx, size_t max_size)
{
+ (void)path;
int rc;
struct bitmap *bmp = ringbuf_ptr(bufidx);
struct dim *dim = data->dim;
@@ -866,25 +864,20 @@ static int load_image(int fd, const char *path,
#if (LCD_DEPTH > 1) || defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
bmp->maskdata = NULL;
#endif
- int free = (int)MIN(buffer_len - bytes_used(), buffer_len - bufidx)
- - sizeof(struct bitmap);
-
+ const int format = FORMAT_NATIVE | FORMAT_DITHER |
+ FORMAT_RESIZE | FORMAT_KEEP_ASPECT;
#ifdef HAVE_JPEG
if (aa != NULL) {
lseek(fd, aa->pos, SEEK_SET);
- rc = clip_jpeg_fd(fd, aa->size, bmp, free, FORMAT_NATIVE|FORMAT_DITHER|
- FORMAT_RESIZE|FORMAT_KEEP_ASPECT, NULL);
+ rc = clip_jpeg_fd(fd, aa->size, bmp, (int)max_size, format, NULL);
}
else if (strcmp(path + strlen(path) - 4, ".bmp"))
- rc = read_jpeg_fd(fd, bmp, free, FORMAT_NATIVE|FORMAT_DITHER|
- FORMAT_RESIZE|FORMAT_KEEP_ASPECT, NULL);
+ rc = read_jpeg_fd(fd, bmp, (int)max_size, format, NULL);
else
#endif
- rc = read_bmp_fd(fd, bmp, free, FORMAT_NATIVE|FORMAT_DITHER|
- FORMAT_RESIZE|FORMAT_KEEP_ASPECT, NULL);
+ rc = read_bmp_fd(fd, bmp, (int)max_size, format, NULL);
return rc + (rc > 0 ? sizeof(struct bitmap) : 0);
- (void)path;
}
#endif /* HAVE_ALBUMART */
@@ -970,11 +963,18 @@ int bufopen(const char *file, off_t offset, enum data_type type,
size_t size = 0;
#ifdef HAVE_ALBUMART
if (type == TYPE_BITMAP) {
- /* If albumart is embedded, the complete file is not buffered,
- * but only the jpeg part; filesize() would be wrong */
+ /* Bitmaps are resized to the requested dimensions when loaded,
+ * so the file size should not be used as it may be too large
+ * or too small */
struct bufopen_bitmap_data *aa = user_data;
- if (aa->embedded_albumart)
- size = aa->embedded_albumart->size;
+ size = BM_SIZE(aa->dim->width, aa->dim->height, FORMAT_NATIVE, false);
+ size += sizeof(struct bitmap);
+
+#ifdef HAVE_JPEG
+ /* JPEG loading requires extra memory
+ * TODO: don't add unncessary overhead for .bmp images! */
+ size += JPEG_DECODE_OVERHEAD;
+#endif
}
#endif
@@ -983,7 +983,10 @@ int bufopen(const char *file, off_t offset, enum data_type type,
unsigned int hflags = 0;
if (type == TYPE_PACKET_AUDIO || type == TYPE_CODEC)
- hflags = H_CANWRAP;
+ hflags |= H_CANWRAP;
+ /* Bitmaps need their space allocated up front */
+ if (type == TYPE_BITMAP)
+ hflags |= H_ALLOCALL;
size_t adjusted_offset = offset;
if (adjusted_offset > size)
@@ -1034,7 +1037,7 @@ int bufopen(const char *file, off_t offset, enum data_type type,
#ifdef HAVE_ALBUMART
if (type == TYPE_BITMAP) {
/* Bitmap file: we load the data instead of the file */
- int rc = load_image(fd, file, user_data, data);
+ int rc = load_image(fd, file, user_data, data, padded_size);
if (rc <= 0) {
handle_id = ERR_FILE_ERROR;
} else {
@@ -1433,62 +1436,6 @@ ssize_t bufgetdata(int handle_id, size_t size, void **data)
return size;
}
-ssize_t bufgettail(int handle_id, size_t size, void **data)
-{
- if (thread_self() != buffering_thread_id)
- return ERR_WRONG_THREAD; /* only from buffering thread */
-
- /* We don't support tail requests of > guardbuf_size, for simplicity */
- if (size > GUARD_BUFSIZE)
- return ERR_INVALID_VALUE;
-
- const struct memory_handle *h = find_handle(handle_id);
- if (!h)
- return ERR_HANDLE_NOT_FOUND;
-
- if (h->end >= h->filesize) {
- size_t tidx = ringbuf_sub_empty(h->widx, size);
-
- if (tidx + size > buffer_len) {
- size_t copy_n = tidx + size - buffer_len;
- memcpy(guard_buffer, ringbuf_ptr(0), copy_n);
- }
-
- *data = ringbuf_ptr(tidx);
- }
- else {
- size = ERR_HANDLE_NOT_DONE;
- }
-
- return size;
-}
-
-ssize_t bufcuttail(int handle_id, size_t size)
-{
- if (thread_self() != buffering_thread_id)
- return ERR_WRONG_THREAD; /* only from buffering thread */
-
- struct memory_handle *h = find_handle(handle_id);
- if (!h)
- return ERR_HANDLE_NOT_FOUND;
-
- if (h->end >= h->filesize) {
- /* Cannot trim to before read position */
- size_t available = h->end - MAX(h->start, h->pos);
- if (available < size)
- size = available;
-
- h->widx = ringbuf_sub_empty(h->widx, size);
- h->filesize -= size;
- h->end -= size;
- } else {
- size = ERR_HANDLE_NOT_DONE;
- }
-
- return size;
-}
-
-
/*
SECONDARY EXPORTED FUNCTIONS
============================
diff --git a/apps/buffering.h b/apps/buffering.h
index 1a75d865ae..bc47d6b1a1 100644
--- a/apps/buffering.h
+++ b/apps/buffering.h
@@ -46,8 +46,7 @@ enum data_type {
#define ERR_FILE_ERROR -4
#define ERR_HANDLE_NOT_DONE -5
#define ERR_UNSUPPORTED_TYPE -6
-#define ERR_WRONG_THREAD -7
-#define ERR_BITMAP_TOO_LARGE -8
+#define ERR_BITMAP_TOO_LARGE -7
/* Initialise the buffering subsystem */
void buffering_init(void) INIT_ATTR;
@@ -68,8 +67,6 @@ bool buffering_reset(char *buf, size_t buflen);
* bufftell : Return the handle's file read position
* bufread : Copy data from a handle to a buffer
* bufgetdata: Obtain a pointer for linear access to a "size" amount of data
- * bufgettail: Out-of-band get the last size bytes of a handle.
- * bufcuttail: Out-of-band remove the trailing 'size' bytes of a handle.
*
* NOTE: bufread and bufgetdata will block the caller until the requested
* amount of data is ready (unless EOF is reached).
@@ -85,8 +82,6 @@ int bufadvance(int handle_id, off_t offset);
off_t bufftell(int handle_id);
ssize_t bufread(int handle_id, size_t size, void *dest);
ssize_t bufgetdata(int handle_id, size_t size, void **data);
-ssize_t bufgettail(int handle_id, size_t size, void **data);
-ssize_t bufcuttail(int handle_id, size_t size);
/***************************************************************************
* SECONDARY FUNCTIONS
diff --git a/apps/core_keymap.c b/apps/core_keymap.c
new file mode 100644
index 0000000000..dbe7ae0072
--- /dev/null
+++ b/apps/core_keymap.c
@@ -0,0 +1,146 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2020 by William Wilgus
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "action.h"
+#include "core_alloc.h"
+#include "core_keymap.h"
+
+/*#define LOGF_ENABLE*/
+#include "logf.h"
+
+#if !defined(__PCTOOL__) || defined(CHECKWPS)
+static int keymap_handle = -1;
+
+static int core_alloc_keymap(size_t bufsz)
+{
+ keymap_handle = core_alloc_ex("key remap", bufsz, &buflib_ops_locked);
+ return keymap_handle;
+}
+
+static void core_free_keymap(void)
+{
+ action_set_keymap(NULL, -1);
+ if (keymap_handle > 0) /* free old buffer */
+ {
+ keymap_handle = core_free(keymap_handle);
+ }
+}
+
+/* Allocates buffer from core and copies keymap into it */
+int core_set_keyremap(struct button_mapping* core_keymap, int count)
+{
+
+ core_free_keymap();
+ if (count > 0)
+ {
+ size_t bufsize = count * sizeof(struct button_mapping);
+ if (core_keymap != NULL && core_alloc_keymap(bufsize) > 0)
+ {
+ char *buf = core_get_data(keymap_handle);
+ memcpy(buf, core_keymap, bufsize);
+ count = action_set_keymap((struct button_mapping *) buf, count);
+ }
+ else
+ count = -1;
+ }
+ return count;
+}
+
+int core_load_key_remap(const char *filename)
+{
+ char *buf;
+ int fd = -1;
+ int count = 0;
+ size_t fsize = 0;
+ core_free_keymap();
+
+ if (filename != NULL)
+ count = open_key_remap(filename, &fd, &fsize);
+ while (count > 0)
+ {
+ if (core_alloc_keymap(fsize) <= 0)
+ {
+ count = -30;
+ logf("core_keymap: %d Failed to allocate buffer", count);
+ break;
+ }
+ buf = core_get_data(keymap_handle);
+ if (read(fd, buf, fsize) == (ssize_t) fsize)
+ {
+ count = action_set_keymap((struct button_mapping *) buf, count);
+ }
+ else
+ {
+ count = -40;
+ logf("core_keymap: %d Failed to read", count);
+ }
+ break;
+ }
+ close(fd);
+ return count;
+}
+
+int open_key_remap(const char *filename, int *fd, size_t *fsize)
+{
+ int count = 0;
+
+ while (filename && fd && fsize)
+ {
+ *fsize = 0;
+ *fd = open(filename, O_RDONLY);
+ if (*fd)
+ {
+ *fsize = filesize(*fd);
+
+ count = *fsize / sizeof(struct button_mapping);
+
+ if (count * sizeof(struct button_mapping) != *fsize)
+ {
+ count = -10;
+ logf("core_keymap: %d Size mismatch", count);
+ break;
+ }
+
+ if (count > 1)
+ {
+ struct button_mapping header = {0};
+ read(*fd, &header, sizeof(struct button_mapping));
+ if (KEYREMAP_VERSION == header.action_code &&
+ KEYREMAP_HEADERID == header.button_code &&
+ header.pre_button_code == count)
+ {
+ count--;
+ *fsize -= sizeof(struct button_mapping);
+ }
+ else /* Header mismatch */
+ {
+ count = -20;
+ logf("core_keymap: %d Header mismatch", count);
+ break;
+ }
+ }
+ }
+ break;
+ }
+ return count;
+}
+
+#endif /* !defined(__PCTOOL__) */
diff --git a/apps/core_keymap.h b/apps/core_keymap.h
new file mode 100644
index 0000000000..dad9875364
--- /dev/null
+++ b/apps/core_keymap.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2020 by William Wilgus
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef CORE_KEYMAP_H
+#define CORE_KEYMAP_H
+
+#include <stdbool.h>
+#include <inttypes.h>
+#include "config.h"
+#include "action.h"
+#define KEYREMAP_VERSION 1
+#define KEYREMAP_HEADERID (LAST_ACTION_PLACEHOLDER | (TARGET_ID << 8))
+
+/* If exists remap file will be loaded at startup */
+#define CORE_KEYREMAP_FILE ROCKBOX_DIR "/keyremap.kmf"
+
+/* Allocates core buffer, copies keymap to allow buttons for actions to be remapped*/
+int core_set_keyremap(struct button_mapping* core_keymap, int count);
+
+/* open_key_remap(filename , *fd (you must close file_descriptor), *fsize)
+ * checks/strips header and returns remaining count
+ * fd is opened and set to first record
+ * filesize contains the size of the remaining records
+*/
+int open_key_remap(const char *filename, int *fd, size_t *filesize);
+
+/* load a remap file to allow buttons for actions to be remapped */
+int core_load_key_remap(const char *filename);
+
+/*
+ * entries consist of 3 int [action, button, prebtn]
+ * the header (VERSION, LAST_DEFINED_ACTION, count) is stripped by open_key_remap
+ *
+ * context look up table is at the beginning
+ * action_code contains (context | CONTEXT_REMAPPED)
+ * button_code contains index of first remapped action for the matched context
+ * prebtn_code contains count of actions in this remapped context
+ * [-1] REMAP_VERSION, REMAP_HEADERID, entry count(9) / DISCARDED AFTER LOAD
+ * [0] CORE_CONTEXT_REMAP(ctx1), offset1=(3), count=(1)
+ * [1] CORE_CONTEXT_REMAP(ctx2, offset2=(5), count=(2)
+ * [2] sentinel, 0, 0
+ * [3] act0, btn, 0
+ * [4] sentinel 0, 0
+ * [5] act1, btn, 0
+ * [6] act2, btn1
+ * [7] sentinel, 0, 0
+ *
+ * Note:
+ * last entry of each group is always the sentinel [CONTEXT_STOPSEARCHING, BUTTON_NONE, BUTTON_NONE]
+ * contexts must match exactly -- re-mapped contexts run before the built in w/ fall through contexts
+ * ie. you can't remap std_context and expect it to match std_context actions from the WPS context.
+ */
+
+#endif /* CORE_KEYMAP_H */
+
diff --git a/apps/cuesheet.c b/apps/cuesheet.c
index be89ef96cf..98040f9992 100644
--- a/apps/cuesheet.c
+++ b/apps/cuesheet.c
@@ -123,6 +123,7 @@ static unsigned long parse_cue_index(const char *line)
/* assumes strncmp(line, "INDEX 01", 8) & NULL terminated string */
/* INDEX 01 MM:SS:FF\0 (00:00:00\0 - 99:99:99\0)*/
const unsigned field_m[3] = {60 * 1000, 1000, 13}; /* MM:SS:~FF*/
+ const unsigned field_max[3] = {30000, 59, 74}; /* MM, SS, FF */
const char f_sep = ':';
int field = -1;
unsigned long offset = 0; /* ms from start of track */
@@ -138,7 +139,7 @@ static unsigned long parse_cue_index(const char *line)
while (isdigit(*line))
{
value = 10 * value + (*line - '0');
- if (value > 99) /* Sanity check bail early */
+ if (value > field_max[field]) /* Sanity check bail early */
return 0;
line++;
}
@@ -165,6 +166,38 @@ static unsigned long parse_cue_index(const char *line)
return offset;
}
+enum eCS_SUPPORTED_TAGS {
+ eCS_TRACK = 0, eCS_INDEX_01, eCS_TITLE,
+ eCS_PERFORMER, eCS_SONGWRITER, eCS_FILE,
+ eCS_COUNT_TAGS_COUNT, eCS_NOTFOUND = -1
+};
+
+static enum eCS_SUPPORTED_TAGS cuesheet_tag_get_option(const char *option)
+{
+ #define CS_OPTN(str) {str, sizeof(str)-1}
+ static const struct cs_option_t {
+ const char *str;
+ const int len;
+ } cs_options[eCS_COUNT_TAGS_COUNT + 1] = {
+ [eCS_TRACK] = CS_OPTN("TRACK"),
+ [eCS_INDEX_01] = CS_OPTN("INDEX 01"),
+ [eCS_TITLE] =CS_OPTN("TITLE"),
+ [eCS_PERFORMER] =CS_OPTN("PERFORMER"),
+ [eCS_SONGWRITER] =CS_OPTN("SONGWRITER"),
+ [eCS_FILE] =CS_OPTN("FILE"),
+ [eCS_COUNT_TAGS_COUNT] = {NULL, 0} /*SENTINEL*/
+ };
+
+ const struct cs_option_t *op;
+ for (int i=0; ((op=&cs_options[i]))->str != NULL; i++)
+ {
+ if (strncmp(option, op->str, op->len) == 0)
+ return i;
+ }
+ return eCS_NOTFOUND;
+#undef CS_OPTN
+}
+
/* parse cuesheet "cue_file" and store the information in "cue" */
bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
{
@@ -190,22 +223,25 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
/* Look for a Unicode BOM */
unsigned char bom_read = 0;
- read(fd, line, BOM_UTF_8_SIZE);
- if(!memcmp(line, BOM_UTF_8, BOM_UTF_8_SIZE))
- {
- char_enc = CHAR_ENC_UTF_8;
- bom_read = BOM_UTF_8_SIZE;
- }
- else if(!memcmp(line, BOM_UTF_16_LE, BOM_UTF_16_SIZE))
- {
- char_enc = CHAR_ENC_UTF_16_LE;
- bom_read = BOM_UTF_16_SIZE;
- }
- else if(!memcmp(line, BOM_UTF_16_BE, BOM_UTF_16_SIZE))
+ if (read(fd, line, BOM_UTF_8_SIZE) > 0)
{
- char_enc = CHAR_ENC_UTF_16_BE;
- bom_read = BOM_UTF_16_SIZE;
+ if(!memcmp(line, BOM_UTF_8, BOM_UTF_8_SIZE))
+ {
+ char_enc = CHAR_ENC_UTF_8;
+ bom_read = BOM_UTF_8_SIZE;
+ }
+ else if(!memcmp(line, BOM_UTF_16_LE, BOM_UTF_16_SIZE))
+ {
+ char_enc = CHAR_ENC_UTF_16_LE;
+ bom_read = BOM_UTF_16_SIZE;
+ }
+ else if(!memcmp(line, BOM_UTF_16_BE, BOM_UTF_16_SIZE))
+ {
+ char_enc = CHAR_ENC_UTF_16_BE;
+ bom_read = BOM_UTF_16_SIZE;
+ }
}
+
if (bom_read < BOM_UTF_8_SIZE)
lseek(fd, cue_file->pos + bom_read, SEEK_SET);
if (is_embedded)
@@ -245,11 +281,16 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
}
s = skip_whitespace(line);
- if (!strncmp(s, "TRACK", 5))
+/* RECOGNIZED TAGS ***********************
+* eCS_TRACK = 0, eCS_INDEX_01, eCS_TITLE,
+* eCS_PERFORMER, eCS_SONGWRITER, eCS_FILE,
+*/
+ enum eCS_SUPPORTED_TAGS option = cuesheet_tag_get_option(s);
+ if (option == eCS_TRACK)
{
cue->track_count++;
}
- else if (!strncmp(s, "INDEX 01", 8))
+ else if (option == eCS_INDEX_01)
{
#if 0
s = strchr(s,' ');
@@ -265,10 +306,7 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
cue->tracks[cue->track_count-1].offset = parse_cue_index(s);
#endif
}
- else if (!strncmp(s, "TITLE", 5)
- || !strncmp(s, "PERFORMER", 9)
- || !strncmp(s, "SONGWRITER", 10)
- || !strncmp(s, "FILE", 4))
+ else if (option != eCS_NOTFOUND)
{
char *dest = NULL;
char *string = get_string(s);
@@ -278,24 +316,24 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
size_t count = MAX_NAME*3 + 1;
size_t count8859 = MAX_NAME;
- switch (*s)
+ switch (option)
{
- case 'T': /* TITLE */
+ case eCS_TITLE: /* TITLE */
dest = (cue->track_count <= 0) ? cue->title :
cue->tracks[cue->track_count-1].title;
break;
- case 'P': /* PERFORMER */
+ case eCS_PERFORMER: /* PERFORMER */
dest = (cue->track_count <= 0) ? cue->performer :
cue->tracks[cue->track_count-1].performer;
break;
- case 'S': /* SONGWRITER */
+ case eCS_SONGWRITER: /* SONGWRITER */
dest = (cue->track_count <= 0) ? cue->songwriter :
cue->tracks[cue->track_count-1].songwriter;
break;
- case 'F': /* FILE */
+ case eCS_FILE: /* FILE */
if (is_embedded || cue->track_count > 0)
break;
@@ -303,6 +341,16 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
count = MAX_PATH;
count8859 = MAX_PATH/3;
break;
+ case eCS_TRACK:
+ /*Fall-Through*/
+ case eCS_INDEX_01:
+ /*Fall-Through*/
+ case eCS_COUNT_TAGS_COUNT:
+ /*Fall-Through*/
+ case eCS_NOTFOUND: /*Shouldn't happen*/
+ logf(HZ * 2, "Bad Tag %d @ %s", (int) option, __func__);
+ dest = NULL;
+ break;
}
if (dest)
@@ -319,6 +367,7 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
}
}
}
+
if (is_embedded)
{
bytes_left -= line_len;
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 23deb6cff2..f510597ad2 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -39,7 +39,6 @@
#include "audio.h"
#include "settings.h"
#include "list.h"
-#include "statusbar.h"
#include "dir.h"
#include "panic.h"
#include "screens.h"
@@ -128,12 +127,18 @@
#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR)
#include "bootdata.h"
+#include "multiboot.h"
+#include "rbpaths.h"
+#include "pathfuncs.h"
+#include "rb-loader.h"
#endif
+#define SCREEN_MAX_CHARS (LCD_WIDTH / SYSFONT_WIDTH)
+
static const char* threads_getname(int selected_item, void *data,
char *buffer, size_t buffer_len)
{
- (void)data;
+ int *x_offset = (int*) data;
#if NUM_CORES > 1
if (selected_item < (int)NUM_CORES)
@@ -153,36 +158,77 @@ static const char* threads_getname(int selected_item, void *data,
struct thread_debug_info threadinfo;
if (thread_get_debug_info(selected_item, &threadinfo) > 0)
{
- fmtstr = "%2d:" IF_COP(" (%d)") " %s" IF_PRIO(" %d %d")
+ fmtstr = "%2d:" IF_COP(" (%d)") " %s%n" IF_PRIO(" %d %d")
IFN_SDL(" %2d%%") " %s";
}
-
- snprintf(buffer, buffer_len, fmtstr,
+ int status_len;
+ size_t len = snprintf(buffer, buffer_len, fmtstr,
selected_item,
IF_COP(threadinfo.core,)
threadinfo.statusstr,
+ &status_len,
IF_PRIO(threadinfo.base_priority, threadinfo.current_priority,)
IFN_SDL(threadinfo.stack_usage,)
threadinfo.name);
- return buffer;
+ int start = 0;
+#if LCD_WIDTH <= 128
+ if (len >= SCREEN_MAX_CHARS)
+ {
+ int ch_offset = (*x_offset)%(len-1);
+ int rem = SCREEN_MAX_CHARS - (len - ch_offset);
+ if (rem > 0)
+ ch_offset -= rem;
+
+ if (ch_offset > 0)
+ {
+ /* don't scroll the # and status */
+ status_len++;
+ if ((unsigned int)ch_offset + status_len < buffer_len)
+ memmove(&buffer[ch_offset], &buffer[0], status_len);
+ start = ch_offset;
+ }
+ }
+#else
+ (void) x_offset;
+ (void) len;
+#endif
+ return &buffer[start];
}
static int dbg_threads_action_callback(int action, struct gui_synclist *lists)
{
- (void)lists;
+
if (action == ACTION_NONE)
+ {
+ return ACTION_REDRAW;
+ }
+#if LCD_WIDTH <= 128
+ int *x_offset = ((int*) lists->data);
+ if (action == ACTION_STD_OK)
+ {
+ *x_offset += 1;
action = ACTION_REDRAW;
+ }
+ else if (action != ACTION_UNKNOWN)
+ {
+ *x_offset = 0;
+ }
+#else
+ (void) lists;
+#endif
return action;
}
/* Test code!!! */
static bool dbg_os(void)
{
struct simplelist_info info;
+ int xoffset = 0;
+
simplelist_info_init(&info, IF_COP("Core and ") "Stack usage:",
- MAXTHREADS IF_COP( + NUM_CORES ), NULL);
+ MAXTHREADS IF_COP( + NUM_CORES ), &xoffset);
info.hide_selection = true;
- info.scroll_all = true;
+ info.scroll_all = false;
info.action_callback = dbg_threads_action_callback;
info.get_name = threads_getname;
return simplelist_show_list(&info);
@@ -330,6 +376,13 @@ static bool dbg_buffering_thread(void)
struct buffering_debug d;
size_t filebuflen = audio_get_filebuflen();
/* This is a size_t, but call it a long so it puts a - when it's bad. */
+#if LCD_WIDTH > 96
+ #define STR_DATAREM "data_rem"
+ const char * const fmt_used = "%s: %6ld/%ld";
+#else /* clipzip, ?*/
+ #define STR_DATAREM "remain"
+ const char * const fmt_used = "%s:%ld/%ld";
+#endif
#ifndef CPU_MULTI_FREQUENCY
boost_ticks = 0;
@@ -366,13 +419,13 @@ static bool dbg_buffering_thread(void)
screens[i].clear_display();
- screens[i].putsf(0, line++, "pcm: %6ld/%ld", (long) bufused, (long) bufsize);
+ screens[i].putsf(0, line++, fmt_used, "pcm", (long) bufused, (long) bufsize);
gui_scrollbar_draw(&screens[i],0, line*8, screens[i].lcdwidth, 6,
bufsize, 0, bufused, HORIZONTAL);
line++;
- screens[i].putsf(0, line++, "alloc: %6ld/%ld", audio_filebufused(),
+ screens[i].putsf(0, line++, fmt_used, "alloc", audio_filebufused(),
(long) filebuflen);
#if LCD_HEIGHT > 80 || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_HEIGHT > 80)
@@ -382,7 +435,7 @@ static bool dbg_buffering_thread(void)
filebuflen, 0, audio_filebufused(), HORIZONTAL);
line++;
- screens[i].putsf(0, line++, "real: %6ld/%ld", (long)d.buffered_data,
+ screens[i].putsf(0, line++, fmt_used, "real", (long)d.buffered_data,
(long)filebuflen);
gui_scrollbar_draw(&screens[i],0, line*8, screens[i].lcdwidth, 6,
@@ -391,7 +444,7 @@ static bool dbg_buffering_thread(void)
}
#endif
- screens[i].putsf(0, line++, "usefl: %6ld/%ld", (long)(d.useful_data),
+ screens[i].putsf(0, line++, fmt_used, "usefl", (long)(d.useful_data),
(long)filebuflen);
#if LCD_HEIGHT > 80 || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_HEIGHT > 80)
@@ -403,7 +456,7 @@ static bool dbg_buffering_thread(void)
}
#endif
- screens[i].putsf(0, line++, "data_rem: %ld", (long)d.data_rem);
+ screens[i].putsf(0, line++, "%s: %ld", STR_DATAREM, (long)d.data_rem);
screens[i].putsf(0, line++, "track count: %2u", audio_track_count());
@@ -442,6 +495,7 @@ static bool dbg_buffering_thread(void)
screens[i].setfont(FONT_UI);
return false;
+#undef STR_DATAREM
}
static const char* bf_getname(int selected_item, void *data,
@@ -816,8 +870,7 @@ static int tsc2100debug_action_callback(int action, struct gui_synclist *lists)
if (action == ACTION_STD_OK)
{
*page = (*page+1)%3;
- snprintf(lists->title, 32,
- "tsc2100 registers - Page %d", *page);
+ snprintf(lists->title, 32, "tsc2100 registers - Page %d", *page);
return ACTION_REDRAW;
}
return action;
@@ -825,7 +878,8 @@ static int tsc2100debug_action_callback(int action, struct gui_synclist *lists)
static bool tsc2100_debug(void)
{
int page = 0;
- char title[32] = "tsc2100 registers - Page 0";
+ char title[32];
+ snprintf(title, 32, "tsc2100 registers - Page %d", page);
struct simplelist_info info;
simplelist_info_init(&info, title, 32, &page);
info.timeout = HZ/100;
@@ -876,7 +930,7 @@ static bool view_battery(void)
else
grid = 5;
- lcd_putsf(0, 0, "battery %d.%03dV", power_history[0] / 1000,
+ lcd_putsf(0, 0, "%s %d.%03dV", "Battery", power_history[0] / 1000,
power_history[0] % 1000);
lcd_putsf(0, 1, "%d.%03d-%d.%03dV (%2dmV)",
minv / 1000, minv % 1000, maxv / 1000, maxv % 1000,
@@ -887,7 +941,7 @@ static bool view_battery(void)
grid = 10;
else
grid = 1;
- lcd_putsf(0, 0, "battery %d%%", power_history[0]);
+ lcd_putsf(0, 0, "%s %d%%", "Battery", power_history[0]);
lcd_putsf(0, 1, "%d%%-%d%% (%d %%)", minv, maxv, grid);
#endif
@@ -942,16 +996,16 @@ static bool view_battery(void)
lcd_putsf(0, 0, "Pwr status: %s",
charging_state() ? "charging" : "discharging");
#else
- lcd_puts(0, 0, "Power status: unknown");
+ lcd_putsf(0, 0, "Pwr status: %s", "unknown");
#endif
battery_read_info(&y, &z);
if (y > 0)
- lcd_putsf(0, 1, "Battery: %d.%03d V (%d %%)", y / 1000, y % 1000, z);
+ lcd_putsf(0, 1, "%s: %d.%03d V (%d %%)", "Battery", y / 1000, y % 1000, z);
else if (z > 0)
- lcd_putsf(0, 1, "Battery: %d %%", z);
+ lcd_putsf(0, 1, "%s: %d %%", "Battery", z);
#ifdef ADC_EXT_POWER
y = (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 1000;
- lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000);
+ lcd_putsf(0, 2, "%s: %d.%03d V", "External", y / 1000, y % 1000);
#endif
#if CONFIG_CHARGING
#if defined IPOD_NANO || defined IPOD_VIDEO
@@ -965,7 +1019,7 @@ static bool view_battery(void)
usb_pwr ? "present" : "absent");
lcd_putsf(0, 4, "EXT pwr: %s",
ext_pwr ? "present" : "absent");
- lcd_putsf(0, 5, "Battery: %s",
+ lcd_putsf(0, 5, "%s: %s", "Battery",
charging ? "charging" : (usb_pwr||ext_pwr) ? "charged" : "discharging");
lcd_putsf(0, 6, "Dock mode: %s",
dock ? "enabled" : "disabled");
@@ -1019,7 +1073,7 @@ static bool view_battery(void)
lcd_putsf(0, line++, "State: %s", chrgstate_strings[y]);
- lcd_putsf(0, line++, "Battery Switch: %s",
+ lcd_putsf(0, line++, "%s Switch: %s", "Battery",
(st & POWER_INPUT_BATTERY) ? "On" : "Off");
y = chrgraw_adc_voltage();
@@ -1042,11 +1096,11 @@ static bool view_battery(void)
y = battery_adc_temp();
if (y != INT_MIN) {
- lcd_putsf(0, line++, "T Battery: %d\u00b0C (%d\u00b0F)", y,
- (9*y + 160) / 5);
+ lcd_putsf(0, line++, "T %s: %d\u00b0C (%d\u00b0F)",
+ "Battery", y, (9*y + 160) / 5);
} else {
/* Conversion disabled */
- lcd_puts(0, line++, "T Battery: ?");
+ lcd_putsf(0, line++, "T %s: ?", "Battery");
}
#elif defined(HAVE_AS3514) && CONFIG_CHARGING
static const char * const chrgstate_strings[] =
@@ -1073,7 +1127,7 @@ static bool view_battery(void)
y = pmu_read_battery_voltage();
lcd_putsf(17, 1, "RAW: %d.%03d V", y / 1000, y % 1000);
y = pmu_read_battery_current();
- lcd_putsf(0, 2, "Battery current: %d mA", y);
+ lcd_putsf(0, 2, "%s current: %d mA", "Battery", y);
lcd_putsf(0, 3, "PWRCON: %08x %08x", PWRCON, PWRCONEXT);
lcd_putsf(0, 4, "CLKCON: %08x %03x %03x", CLKCON, CLKCON2, CLKCON3);
lcd_putsf(0, 5, "PLL: %06x %06x %06x", PLL0PMS, PLL1PMS, PLL2PMS);
@@ -1099,9 +1153,9 @@ static bool view_battery(void)
lcd_putsf(0, 3, "Charger: %s",
charger_inserted() ? "present" : "absent");
x = (avr_hid_hdq_read_short(HDQ_REG_TEMP) / 4) - 273;
- lcd_putsf(0, 4, "Battery temperature: %d C", x);
+ lcd_putsf(0, 4, "%s temperature: %d C", "Battery", x);
x = (avr_hid_hdq_read_short(HDQ_REG_AI) * 357) / 200;
- lcd_putsf(0, 5, "Battery current: %d.%01d mA", x / 10, x % 10);
+ lcd_putsf(0, 5, "%s current: %d.%01d mA", "Battery", x / 10, x % 10);
x = (avr_hid_hdq_read_short(HDQ_REG_AP) * 292) / 20;
lcd_putsf(0, 6, "Discharge power: %d.%01d mW", x / 10, x % 10);
x = (avr_hid_hdq_read_short(HDQ_REG_SAE) * 292) / 2;
@@ -1139,13 +1193,17 @@ static bool view_battery(void)
power_history[0] % 1000);
#endif
- lcd_putsf(0, 6, "battery level: %d%%", battery_level());
+ lcd_putsf(0, 6, "%s level: %d%%", "Battery", battery_level());
int time_left = battery_time();
if (time_left >= 0)
lcd_putsf(0, 7, "Est. remain: %d m", time_left);
else
lcd_puts(0, 7, "Estimation n/a");
+
+#if (CONFIG_BATTERY_MEASURE & CURRENT_MEASURE)
+ lcd_putsf(0, 8, "%s current: %d mA", "Battery", battery_current());
+#endif
break;
}
@@ -2026,12 +2084,12 @@ static int radio_callback(int btn, struct gui_synclist *lists)
tea5767_dbg_info(&nfo);
simplelist_addline("Philips regs:");
simplelist_addline(
- " Read: %02X %02X %02X %02X %02X",
+ " %s: %02X %02X %02X %02X %02X", "Read",
(unsigned)nfo.read_regs[0], (unsigned)nfo.read_regs[1],
(unsigned)nfo.read_regs[2], (unsigned)nfo.read_regs[3],
(unsigned)nfo.read_regs[4]);
simplelist_addline(
- " Write: %02X %02X %02X %02X %02X",
+ " %s: %02X %02X %02X %02X %02X", "Write",
(unsigned)nfo.write_regs[0], (unsigned)nfo.write_regs[1],
(unsigned)nfo.write_regs[2], (unsigned)nfo.write_regs[3],
(unsigned)nfo.write_regs[4]);
@@ -2519,19 +2577,25 @@ static bool dbg_skin_engine(void)
#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR)
static bool dbg_boot_data(void)
{
- unsigned int crc = 0;
+ unsigned int crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff);
struct simplelist_info info;
info.scroll_all = true;
simplelist_info_init(&info, "Boot data", 1, NULL);
simplelist_set_line_count(0);
- crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff);
+
#if defined(HAVE_MULTIBOOT)
+ char rootpath[MAX_PATH / 2] = RB_ROOT_CONTENTS_DIR;
int boot_volume = 0;
if(crc == boot_data.crc)
{
boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */
+ int rtlen = get_redirect_dir(rootpath, sizeof(rootpath), boot_volume, "", "");
+ while (rtlen > 0 && rootpath[--rtlen] == PATH_SEPCH) /* remove extra separators */
+ rootpath[rtlen] = '\0';
}
simplelist_addline("Boot Volume: <%lu>", boot_volume);
+ simplelist_addline("Root:");
+ simplelist_addline("%s", rootpath);
simplelist_addline("");
#endif
simplelist_addline("Bootdata RAW:");
@@ -2691,6 +2755,24 @@ static const char* menu_get_name(int item, void * data,
return menuitems[item].desc;
}
+static int menu_get_talk(int item, void *data)
+{
+ (void)data;
+ if (global_settings.talk_menu && menuitems[item].desc)
+ {
+ talk_number(item + 1, true);
+ talk_id(VOICE_PAUSE, true);
+#if 0 /* no debug items currently have lang ids */
+ long id = P2ID((const unsigned char *)(menuitems[item].desc));
+ if(id>=0)
+ talk_id(id, true);
+ else
+#endif
+ talk_spell(menuitems[item].desc, true);
+ }
+ return 0;
+}
+
int debug_menu(void)
{
struct simplelist_info info;
@@ -2698,6 +2780,7 @@ int debug_menu(void)
simplelist_info_init(&info, "Debug Menu", ARRAYLEN(menuitems), NULL);
info.action_callback = menu_action_callback;
info.get_name = menu_get_name;
+ info.get_talk = menu_get_talk;
return (simplelist_show_list(&info)) ? 1 : 0;
}
diff --git a/apps/features.txt b/apps/features.txt
index ec2113cbc8..45e06e5e64 100644
--- a/apps/features.txt
+++ b/apps/features.txt
@@ -105,6 +105,10 @@ radio_remote
#endif
#endif
+#if defined(HAVE_RDS_CAP)
+rds
+#endif
+
#if defined(HAVE_RECORDING)
recording
#if defined(HAVE_LINE_IN)
diff --git a/apps/filetree.c b/apps/filetree.c
index 75a32a9e42..1944713d13 100644
--- a/apps/filetree.c
+++ b/apps/filetree.c
@@ -330,42 +330,43 @@ int ft_load(struct tree_context* c, const char* tempdir)
}
dptr->attr = info.attribute;
+ int dir_attr = (dptr->attr & ATTR_DIRECTORY);
/* check for known file types */
- if ( !(dptr->attr & ATTR_DIRECTORY) )
+ if ( !(dir_attr) )
dptr->attr |= filetype_get_attr((char *)entry->d_name);
+ int file_attr = (dptr->attr & FILE_ATTR_MASK);
+
/* filter out non-visible files */
- if ((!(dptr->attr & ATTR_DIRECTORY) && (
- (*c->dirfilter == SHOW_PLAYLIST &&
- (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_M3U) ||
- ((*c->dirfilter == SHOW_MUSIC &&
- (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_AUDIO) &&
- (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_M3U) ||
+ if ((!(dir_attr) && ((*c->dirfilter == SHOW_PLAYLIST &&
+ file_attr != FILE_ATTR_M3U) ||
+ ((*c->dirfilter == SHOW_MUSIC && file_attr != FILE_ATTR_AUDIO) &&
+ file_attr != FILE_ATTR_M3U) ||
(*c->dirfilter == SHOW_SUPPORTED && !filetype_supported(dptr->attr)))) ||
- (*c->dirfilter == SHOW_WPS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_WPS) ||
- (*c->dirfilter == SHOW_FONT && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_FONT) ||
- (*c->dirfilter == SHOW_SBS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_SBS) ||
+ (*c->dirfilter == SHOW_WPS && file_attr != FILE_ATTR_WPS) ||
+ (*c->dirfilter == SHOW_FONT && file_attr != FILE_ATTR_FONT) ||
+ (*c->dirfilter == SHOW_SBS && file_attr != FILE_ATTR_SBS) ||
#if CONFIG_TUNER
- (*c->dirfilter == SHOW_FMS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_FMS) ||
+ (*c->dirfilter == SHOW_FMS && file_attr != FILE_ATTR_FMS) ||
#endif
#ifdef HAVE_REMOTE_LCD
- (*c->dirfilter == SHOW_RWPS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_RWPS) ||
- (*c->dirfilter == SHOW_RSBS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_RSBS) ||
+ (*c->dirfilter == SHOW_RWPS && file_attr != FILE_ATTR_RWPS) ||
+ (*c->dirfilter == SHOW_RSBS && file_attr != FILE_ATTR_RSBS) ||
#if CONFIG_TUNER
- (*c->dirfilter == SHOW_RFMS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_RFMS) ||
+ (*c->dirfilter == SHOW_RFMS && file_attr != FILE_ATTR_RFMS) ||
#endif
#endif
#if CONFIG_TUNER
- (*c->dirfilter == SHOW_FMR && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_FMR) ||
+ (*c->dirfilter == SHOW_FMR && file_attr != FILE_ATTR_FMR) ||
#endif
- (*c->dirfilter == SHOW_M3U && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_M3U) ||
- (*c->dirfilter == SHOW_CFG && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_CFG) ||
- (*c->dirfilter == SHOW_LNG && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LNG) ||
- (*c->dirfilter == SHOW_MOD && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_MOD) ||
- (*c->dirfilter == SHOW_PLUGINS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_ROCK &&
- (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LUA &&
- (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_OPX) ||
+ (*c->dirfilter == SHOW_M3U && file_attr != FILE_ATTR_M3U) ||
+ (*c->dirfilter == SHOW_CFG && file_attr != FILE_ATTR_CFG) ||
+ (*c->dirfilter == SHOW_LNG && file_attr != FILE_ATTR_LNG) ||
+ (*c->dirfilter == SHOW_MOD && file_attr != FILE_ATTR_MOD) ||
+ (*c->dirfilter == SHOW_PLUGINS && file_attr != FILE_ATTR_ROCK &&
+ file_attr != FILE_ATTR_LUA &&
+ file_attr != FILE_ATTR_OPX) ||
(callback_show_item && !callback_show_item(entry->d_name, dptr->attr, c)))
{
continue;
@@ -384,7 +385,7 @@ int ft_load(struct tree_context* c, const char* tempdir)
strcpy(dptr->name, (char *)entry->d_name);
name_buffer_used += len + 1;
- if (dptr->attr & ATTR_DIRECTORY) /* count the remaining dirs */
+ if (dir_attr) /* count the remaining dirs */
c->dirsindir++;
}
c->filesindir = files_in_dir;
@@ -432,6 +433,13 @@ static void ft_load_font(char *file)
viewportmanager_theme_changed(THEME_UI_VIEWPORT);
}
+static void ft_apply_skin_file(char *buf, char *file, const int maxlen)
+{
+ splash(0, ID2P(LANG_WAIT));
+ set_file(buf, file, maxlen);
+ settings_apply_skins();
+}
+
int ft_enter(struct tree_context* c)
{
int rc = GO_TO_PREVIOUS;
@@ -539,49 +547,32 @@ int ft_enter(struct tree_context* c)
break;
case FILE_ATTR_FMS:
- splash(0, ID2P(LANG_WAIT));
- set_file(buf, (char *)global_settings.fms_file, MAX_FILENAME);
- settings_apply_skins();
+ ft_apply_skin_file(buf, global_settings.fms_file, MAX_FILENAME);
break;
#ifdef HAVE_REMOTE_LCD
case FILE_ATTR_RFMS:
- splash(0, ID2P(LANG_WAIT));
- set_file(buf, (char *)global_settings.rfms_file, MAX_FILENAME);
- settings_apply_skins();
+ ft_apply_skin_file(buf, global_settings.rfms_file, MAX_FILENAME);
break;
#endif
#endif
-
case FILE_ATTR_SBS:
- splash(0, ID2P(LANG_WAIT));
- set_file(buf, (char *)global_settings.sbs_file, MAX_FILENAME);
- settings_apply_skins();
+ ft_apply_skin_file(buf, global_settings.sbs_file, MAX_FILENAME);
break;
#ifdef HAVE_REMOTE_LCD
case FILE_ATTR_RSBS:
- splash(0, ID2P(LANG_WAIT));
- set_file(buf, (char *)global_settings.rsbs_file, MAX_FILENAME);
- settings_apply_skins();
+ ft_apply_skin_file(buf, global_settings.rsbs_file, MAX_FILENAME);
break;
#endif
/* wps config file */
case FILE_ATTR_WPS:
- splash(0, ID2P(LANG_WAIT));
- set_file(buf, (char *)global_settings.wps_file,
- MAX_FILENAME);
- settings_apply_skins();
+ ft_apply_skin_file(buf, global_settings.wps_file, MAX_FILENAME);
break;
-
#if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1)
/* remote-wps config file */
case FILE_ATTR_RWPS:
- splash(0, ID2P(LANG_WAIT));
- set_file(buf, (char *)global_settings.rwps_file,
- MAX_FILENAME);
- settings_apply_skins();
+ ft_apply_skin_file(buf, global_settings.rwps_file, MAX_FILENAME);
break;
#endif
-
case FILE_ATTR_CFG:
splash(0, ID2P(LANG_WAIT));
if (!settings_load_config(buf,true))
diff --git a/apps/filetypes.c b/apps/filetypes.c
index d68bab3daa..02d2af282e 100644
--- a/apps/filetypes.c
+++ b/apps/filetypes.c
@@ -66,6 +66,7 @@ static const struct filetype inbuilt_filetypes[] = {
{ "m4b", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "mp4", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "mod", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
+ { "mpga", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "shn", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "aif", FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
{ "aiff",FILE_ATTR_AUDIO, Icon_Audio, VOICE_EXT_MPA },
@@ -301,8 +302,8 @@ void read_viewer_theme_file(void)
{
custom_filetype_icons[i] = filetypes[i].icon;
}
-
- snprintf(buffer, MAX_PATH, "%s/%s.icons", ICON_DIR,
+
+ snprintf(buffer, MAX_PATH, "%s/%s.icons", ICON_DIR,
global_settings.viewers_icon_file);
fd = open(buffer, O_RDONLY);
if (fd < 0)
diff --git a/apps/gui/bitmap/list.c b/apps/gui/bitmap/list.c
index 194f4c008b..53874a8dfa 100644
--- a/apps/gui/bitmap/list.c
+++ b/apps/gui/bitmap/list.c
@@ -90,11 +90,57 @@ static int list_icon_width(enum screen_type screen)
return get_icon_width(screen) + ICON_PADDING * 2;
}
-static bool draw_title(struct screen *display, struct gui_synclist *list)
+static void _default_listdraw_fn(struct list_putlineinfo_t *list_info)
+{
+ struct screen *display = list_info->display;
+ int x = list_info->x;
+ int y = list_info->y;
+ int item_indent = list_info->item_indent;
+ int item_offset = list_info->item_offset;
+ int icon = list_info->icon;
+ bool is_selected = list_info->is_selected;
+ bool is_title = list_info->is_title;
+ bool show_cursor = list_info->show_cursor;
+ bool have_icons = list_info->have_icons;
+ struct line_desc *linedes = list_info->linedes;
+ char *dsp_text = list_info->dsp_text;
+
+ if (is_title)
+ {
+ if (have_icons)
+ display->put_line(x, y, linedes, "$"ICON_PADDING_S"I$t",
+ icon, dsp_text);
+ else
+ display->put_line(x, y, linedes, "$t", dsp_text);
+ }
+ else if (show_cursor && have_icons)
+ {
+ /* the list can have both, one of or neither of cursor and item icons,
+ * if both don't apply icon padding twice between the icons */
+ display->put_line(x, y,
+ linedes, "$*s$"ICON_PADDING_S"I$i$"ICON_PADDING_S"s$*t",
+ item_indent, is_selected ? Icon_Cursor : Icon_NOICON,
+ icon, item_offset, dsp_text);
+ }
+ else if (show_cursor || have_icons)
+ {
+ display->put_line(x, y, linedes, "$*s$"ICON_PADDING_S"I$*t", item_indent,
+ show_cursor ? (is_selected ? Icon_Cursor:Icon_NOICON):icon,
+ item_offset, dsp_text);
+ }
+ else
+ {
+ display->put_line(x, y, linedes, "$*s$*t", item_indent, item_offset, dsp_text);
+ }
+}
+
+static bool draw_title(struct screen *display,
+ struct gui_synclist *list,
+ list_draw_item *callback_draw_item)
{
const int screen = display->screen_type;
struct viewport *title_text_vp = &title_text[screen];
- struct line_desc line = LINE_DESC_DEFINIT;
+ struct line_desc linedes = LINE_DESC_DEFINIT;
if (sb_set_title_text(list->title, list->title_icon, screen))
return false; /* the sbs is handling the title */
@@ -102,29 +148,41 @@ static bool draw_title(struct screen *display, struct gui_synclist *list)
if (!list_display_title(list, screen))
return false;
*title_text_vp = *(list->parent[screen]);
- line.height = list->line_height[screen];
- title_text_vp->height = line.height;
+ linedes.height = list->line_height[screen];
+ title_text_vp->height = linedes.height;
#if LCD_DEPTH > 1
/* XXX: Do we want to support the separator on remote displays? */
if (display->screen_type == SCREEN_MAIN && global_settings.list_separator_height != 0)
- line.separator_height = abs(global_settings.list_separator_height)
+ linedes.separator_height = abs(global_settings.list_separator_height)
+ (lcd_get_dpi() > 200 ? 2 : 1);
#endif
#ifdef HAVE_LCD_COLOR
if (list->title_color >= 0)
- line.style |= (STYLE_COLORED|list->title_color);
+ linedes.style |= (STYLE_COLORED|list->title_color);
#endif
- line.scroll = true;
+ linedes.scroll = true;
display->set_viewport(title_text_vp);
+ int icon = list->title_icon;
+ int icon_w = list_icon_width(display->screen_type);
+ bool have_icons = false;
+ if (icon != Icon_NOICON && list->show_icons)
+ {
+ have_icons = true;
+ }
- if (list->title_icon != Icon_NOICON && global_settings.show_icons)
- put_line(display, 0, 0, &line, "$"ICON_PADDING_S"I$t",
- list->title_icon, list->title);
- else
- put_line(display, 0, 0, &line, "$t", list->title);
+ struct list_putlineinfo_t list_info =
+ {
+ .x = 0, .y = 0, .item_indent = 0, .item_offset = 0,
+ .line = -1, .icon = icon, .icon_width = icon_w,
+ .display = display, .vp = title_text_vp, .linedes = &linedes, .list = list,
+ .dsp_text = list->title,
+ .is_selected = false, .is_title = true, .show_cursor = false,
+ .have_icons = have_icons
+ };
+ callback_draw_item(&list_info);
return true;
}
@@ -133,23 +191,33 @@ void list_draw(struct screen *display, struct gui_synclist *list)
{
int start, end, item_offset, i;
const int screen = display->screen_type;
+ list_draw_item *callback_draw_item;
+
const int list_start_item = list->start_item[screen];
- const bool scrollbar_in_left = (global_settings.scrollbar == SCROLLBAR_LEFT);
- const bool scrollbar_in_right = (global_settings.scrollbar == SCROLLBAR_RIGHT);
- const bool show_cursor = !global_settings.cursor_style &&
- list->show_selection_marker;
- const bool have_icons = global_settings.show_icons && list->callback_get_item_icon;
+ const bool scrollbar_in_left = (list->scrollbar == SCROLLBAR_LEFT);
+ const bool scrollbar_in_right = (list->scrollbar == SCROLLBAR_RIGHT);
+
+ const bool show_cursor = list->show_selection_marker &&
+ (list->cursor_style == SYNCLIST_CURSOR_NOSTYLE);
+
+ const bool have_icons = list->callback_get_item_icon && list->show_icons;
+
struct viewport *parent = (list->parent[screen]);
struct line_desc linedes = LINE_DESC_DEFINIT;
bool show_title;
struct viewport *list_text_vp = &list_text[screen];
int indent = 0;
+ if (list->callback_draw_item != NULL)
+ callback_draw_item = list->callback_draw_item;
+ else
+ callback_draw_item = _default_listdraw_fn;
+
struct viewport * last_vp = display->set_viewport(parent);
display->clear_viewport();
display->scroll_stop_viewport(list_text_vp);
*list_text_vp = *parent;
- if ((show_title = draw_title(display, list)))
+ if ((show_title = draw_title(display, list, callback_draw_item)))
{
int title_height = title_text[screen].height;
list_text_vp->y += title_height;
@@ -201,7 +269,7 @@ void list_draw(struct screen *display, struct gui_synclist *list)
#endif
/* draw the scrollbar if its needed */
- if (global_settings.scrollbar != SCROLLBAR_OFF)
+ if (list->scrollbar != SCROLLBAR_OFF)
{
/* if the scrollbar is shown the text viewport needs to shrink */
if (nb_lines < list->nb_items)
@@ -244,6 +312,16 @@ void list_draw(struct screen *display, struct gui_synclist *list)
}
display->set_viewport(list_text_vp);
+ int icon_w = list_icon_width(screen);
+ int character_width = display->getcharwidth();
+
+ struct list_putlineinfo_t list_info =
+ {
+ .x = 0, .y = 0, .vp = list_text_vp, .list = list,
+ .icon_width = icon_w, .is_title = false, .show_cursor = show_cursor,
+ .have_icons = have_icons, .linedes = &linedes, .display = display
+ };
+
for (i=start; i<end && i<list->nb_items; i++)
{
/* do the text */
@@ -251,7 +329,7 @@ void list_draw(struct screen *display, struct gui_synclist *list)
unsigned const char *s;
char entry_buffer[MAX_PATH];
unsigned char *entry_name;
- int text_pos = 0;
+ const int text_pos = 0; /* UNUSED */
int line = i - start;
int line_indent = 0;
int style = STYLE_DEFAULT;
@@ -267,10 +345,10 @@ void list_draw(struct screen *display, struct gui_synclist *list)
}
if (line_indent)
{
- if (global_settings.show_icons)
- line_indent *= list_icon_width(screen);
+ if (list->show_icons)
+ line_indent *= icon_w;
else
- line_indent *= display->getcharwidth();
+ line_indent *= character_width;
}
line_indent += indent;
@@ -301,12 +379,12 @@ void list_draw(struct screen *display, struct gui_synclist *list)
}
else
#endif
- if (global_settings.cursor_style == 1
+ if (list->cursor_style == SYNCLIST_CURSOR_INVERT
#ifdef HAVE_REMOTE_LCD
/* the global_settings.cursor_style check is here to make
* sure if they want the cursor instead of bar it will work
*/
- || (display->depth < 16 && global_settings.cursor_style)
+ || (display->depth < 16 && list->cursor_style)
#endif
)
{
@@ -314,14 +392,14 @@ void list_draw(struct screen *display, struct gui_synclist *list)
style = STYLE_INVERT;
}
#ifdef HAVE_LCD_COLOR
- else if (global_settings.cursor_style == 2)
+ else if (list->cursor_style == SYNCLIST_CURSOR_COLOR)
{
/* Display colour line selector */
style = STYLE_COLORBAR;
linedes.text_color = global_settings.lst_color;
linedes.line_color = global_settings.lss_color;
}
- else if (global_settings.cursor_style == 3)
+ else if (list->cursor_style == SYNCLIST_CURSOR_GRADIENT)
{
/* Display gradient line selector */
style = STYLE_GRADIENT;
@@ -345,27 +423,22 @@ void list_draw(struct screen *display, struct gui_synclist *list)
}
}
#endif
-
linedes.style = style;
linedes.scroll = is_selected ? true : list->scroll_all;
linedes.line = i % list->selected_size;
icon = list->callback_get_item_icon ?
list->callback_get_item_icon(i, list->data) : Icon_NOICON;
- /* the list can have both, one of or neither of cursor and item icons,
- * if both don't apply icon padding twice between the icons */
- if (show_cursor && have_icons)
- put_line(display, 0, line * linedes.height + draw_offset,
- &linedes, "$*s$"ICON_PADDING_S"I$i$"ICON_PADDING_S"s$*t",
- line_indent, is_selected ? Icon_Cursor : Icon_NOICON,
- icon, item_offset, entry_name);
- else if (show_cursor || have_icons)
- put_line(display, 0, line * linedes.height + draw_offset,
- &linedes, "$*s$"ICON_PADDING_S"I$*t", line_indent,
- show_cursor ? (is_selected ? Icon_Cursor:Icon_NOICON):icon,
- item_offset, entry_name);
- else
- put_line(display, 0, line * linedes.height + draw_offset,
- &linedes, "$*s$*t", line_indent, item_offset, entry_name);
+
+
+ list_info.y = line * linedes.height + draw_offset;
+ list_info.is_selected = is_selected;
+ list_info.item_indent = line_indent;
+ list_info.line = i;
+ list_info.icon = icon;
+ list_info.dsp_text = entry_name;
+ list_info.item_offset = item_offset;
+
+ callback_draw_item(&list_info);
}
display->set_viewport(parent);
display->update_viewport();
@@ -685,7 +758,7 @@ static int get_click_location(struct gui_synclist *list, int x, int y)
if (viewport_point_within_vp(title, x, y))
retval = TITLE_TEXT;
/* check the icon too */
- if (list->title_icon != Icon_NOICON && global_settings.show_icons)
+ if (list->title_icon != Icon_NOICON && list->show_icons)
{
int width = list_icon_width(screen);
struct viewport vp = *title;
@@ -703,14 +776,19 @@ static int get_click_location(struct gui_synclist *list, int x, int y)
{
bool on_scrollbar_clicked;
int adj_x = x - parent->x;
- switch (global_settings.scrollbar)
+ switch (list->scrollbar)
{
+ case SCROLLBAR_OFF:
+ /*fall-through*/
+ default:
+ on_scrollbar_clicked = false;
+ break;
case SCROLLBAR_LEFT:
- on_scrollbar_clicked = adj_x <= SCROLLBAR_WIDTH; break;
+ on_scrollbar_clicked = adj_x <= SCROLLBAR_WIDTH;
+ break;
case SCROLLBAR_RIGHT:
- on_scrollbar_clicked = adj_x > (title->x + title->width - SCROLLBAR_WIDTH); break;
- default:
- on_scrollbar_clicked = false; break;
+ on_scrollbar_clicked = adj_x > (title->x + title->width - SCROLLBAR_WIDTH);
+ break;
}
if (on_scrollbar_clicked)
retval = SCROLLBAR;
diff --git a/apps/gui/folder_select.c b/apps/gui/folder_select.c
index e324e8649a..cef95e179e 100644
--- a/apps/gui/folder_select.c
+++ b/apps/gui/folder_select.c
@@ -516,7 +516,7 @@ static int select_paths(struct folder* root, const char* filenames)
sstr = lastfnp;
lastfnp = fnp;
- if (len <= 0 || len > buflen)
+ if (len <= 0 || len + 1 >= buflen)
continue;
strlcpy(buf, sstr, len + 1);
struct child *item = find_from_filename(buf, root);
diff --git a/apps/gui/list.c b/apps/gui/list.c
index 8ff075da7e..29c80574c2 100644
--- a/apps/gui/list.c
+++ b/apps/gui/list.c
@@ -129,6 +129,18 @@ void list_init_item_height(struct gui_synclist *list, enum screen_type screen)
#endif
}
+void gui_synclist_init_display_settings(struct gui_synclist * list)
+{
+ struct user_settings *gs = &global_settings;
+ list->scrollbar = gs->scrollbar;
+ list->show_icons = gs->show_icons;
+ list->scroll_paginated = gs->scroll_paginated;
+ list->keyclick = gs->keyclick;
+ list->talk_menu = gs->talk_menu;
+ list->wraparound = gs->list_wraparound;
+ list->cursor_style = gs->cursor_style;
+}
+
/*
* Initializes a scrolling list
* - gui_list : the list structure to initialize
@@ -150,8 +162,11 @@ void gui_synclist_init(struct gui_synclist * gui_list,
gui_list->callback_get_item_icon = NULL;
gui_list->callback_get_item_name = callback_get_item_name;
gui_list->callback_speak_item = NULL;
+ gui_list->callback_draw_item = NULL;
gui_list->nb_items = 0;
gui_list->selected_item = 0;
+ gui_synclist_init_display_settings(gui_list);
+
#ifdef HAVE_TOUCHSCREEN
gui_list->y_pos = 0;
#endif
@@ -262,7 +277,7 @@ static void gui_list_put_selection_on_screen(struct gui_synclist * gui_list,
{
new_start_item = gui_list->selected_item;
}
- else if (global_settings.scroll_paginated)
+ else if (gui_list->scroll_paginated)
{
nb_lines -= nb_lines%gui_list->selected_size;
if (difference < 0 || difference >= nb_lines)
@@ -292,7 +307,7 @@ static void gui_list_put_selection_on_screen(struct gui_synclist * gui_list,
static void edge_beep(struct gui_synclist * gui_list, bool wrap)
{
- if (global_settings.keyclick)
+ if (gui_list->keyclick)
{
list_speak_item *cb = gui_list->callback_speak_item;
if (!wrap) /* a bounce */
@@ -355,7 +370,7 @@ static void _gui_synclist_speak_item(struct gui_synclist *lists)
void gui_synclist_speak_item(struct gui_synclist *lists)
{
- if (global_settings.talk_menu)
+ if (lists->talk_menu)
{
if (lists->nb_items == 0)
talk_id(VOICE_EMPTY_LIST, true);
@@ -682,11 +697,10 @@ bool gui_synclist_do_button(struct gui_synclist * lists,
/* Disable the skin redraw callback */
current_lists = NULL;
-
switch (wrap)
{
case LIST_WRAP_ON:
- gui_synclist_limit_scroll(lists, !global_settings.list_wraparound);
+ gui_synclist_limit_scroll(lists, !(lists->wraparound));
break;
case LIST_WRAP_OFF:
gui_synclist_limit_scroll(lists, true);
@@ -697,7 +711,7 @@ bool gui_synclist_do_button(struct gui_synclist * lists,
action == ACTION_LISTTREE_PGUP ||
action == ACTION_LISTTREE_PGDOWN)
gui_synclist_limit_scroll(lists, true);
- else gui_synclist_limit_scroll(lists, !global_settings.list_wraparound);
+ else gui_synclist_limit_scroll(lists, !(lists->wraparound));
break;
};
diff --git a/apps/gui/list.h b/apps/gui/list.h
index 64ff3e3fdd..4dc83a1b27 100644
--- a/apps/gui/list.h
+++ b/apps/gui/list.h
@@ -36,6 +36,14 @@ enum list_wrap {
LIST_WRAP_UNLESS_HELD,
};
+enum synclist_cursor
+{
+ SYNCLIST_CURSOR_NOSTYLE = 0,
+ SYNCLIST_CURSOR_INVERT,
+ SYNCLIST_CURSOR_COLOR,
+ SYNCLIST_CURSOR_GRADIENT,
+};
+
/*
* The gui_list is based on callback functions, if you want the list
* to display something you have to provide it a function that
@@ -69,6 +77,35 @@ typedef enum themable_icons list_get_icon(int selected_item, void * data);
typedef const char * list_get_name(int selected_item, void * data,
char * buffer, size_t buffer_len);
/*
+ * Draw callback
+ * - display : functions supplied depends on the screen call originated from (typ: MAIN)
+ * - list_info : a pointer to an internal struct containing item display information
+ */
+/* owner drawn lists need to know this info */
+struct list_putlineinfo_t {
+ int x;
+ int y;
+ int item_indent;
+ int item_offset;
+ int line;
+
+ int icon;
+ int icon_width;
+
+ struct screen *display;
+ struct viewport *vp;
+ struct line_desc *linedes;
+ struct gui_synclist * list;
+ char *dsp_text;
+
+ bool is_selected;
+ bool is_title;
+ bool show_cursor;
+ bool have_icons;
+};
+
+typedef void list_draw_item(struct list_putlineinfo_t *list_info);
+/*
* Voice callback
* - selected_item : an integer that tells the number of the item to speak
* - data : a void pointer to the data you gave to the list when you
@@ -110,14 +147,24 @@ struct list_selection_color
struct gui_synclist
{
+ /*flags to hold settings show: icons, scrollbar etc..*/
+ int scrollbar;
+ int cursor_style;
+ bool show_icons;
+ bool keyclick;
+ bool talk_menu;
+ bool wraparound;
+ bool scroll_paginated;
/* defines wether the list should stop when reaching the top/bottom
* or should continue (by going to bottom/top) */
bool limit_scroll;
- /* wether the text of the whole items of the list have to be
+ /* whether the text of the whole items of the list have to be
* scrolled or only for the selected item */
bool scroll_all;
+ bool show_selection_marker; /* set to true by default */
int nb_items;
int selected_item;
+
#ifdef HAVE_TOUCHSCREEN
/* absolute Y coordinate, used for smooth scrolling */
int y_pos;
@@ -133,6 +180,7 @@ struct gui_synclist
list_get_icon *callback_get_item_icon;
list_get_name *callback_get_item_name;
list_speak_item *callback_speak_item;
+ list_draw_item *callback_draw_item;
/* The data that will be passed to the callback function YOU implement */
void * data;
@@ -140,7 +188,6 @@ struct gui_synclist
char * title;
/* Optional title icon */
enum themable_icons title_icon;
- bool show_selection_marker; /* set to true by default */
#ifdef HAVE_LCD_COLOR
int title_color;
@@ -157,7 +204,7 @@ extern void gui_list_screen_scroll_step(int ofs);
/* parse global setting to static bool */
extern void gui_list_screen_scroll_out_of_view(bool enable);
-
+extern void gui_synclist_init_display_settings(struct gui_synclist * list);
extern void gui_synclist_init(
struct gui_synclist * lists,
list_get_name callback_get_item_name,
diff --git a/apps/gui/option_select.c b/apps/gui/option_select.c
index 9f1f0a64e3..7068fee510 100644
--- a/apps/gui/option_select.c
+++ b/apps/gui/option_select.c
@@ -334,29 +334,35 @@ static int selection_to_val(const struct settings_list *setting, int selection)
else if ((setting->flags & F_T_SOUND) == F_T_SOUND)
{
int setting_id = setting->sound_setting->setting;
-#ifndef ASCENDING_INT_SETTINGS
- step = sound_steps(setting_id);
- max = (setting_id == SOUND_VOLUME) ?
- global_settings.volume_limit : sound_max(setting_id);
- /* min = sound_min(setting_id); */
-#else
- step = -sound_steps(setting_id);
- /* min = sound_max(setting_id); */
- max = sound_min(setting_id);
-#endif
+ if(global_settings.list_order == LIST_ORDER_DESCENDING)
+ {
+ step = sound_steps(setting_id);
+ max = (setting_id == SOUND_VOLUME) ?
+ global_settings.volume_limit : sound_max(setting_id);
+ /* min = sound_min(setting_id); */
+ }
+ else
+ {
+ step = -sound_steps(setting_id);
+ /* min = sound_max(setting_id); */
+ max = sound_min(setting_id);
+ }
}
else if ((setting->flags & F_INT_SETTING) == F_INT_SETTING)
{
const struct int_setting *info = setting->int_setting;
-#ifndef ASCENDING_INT_SETTINGS
- /* min = info->min; */
- max = info->max;
- step = info->step;
-#else
- max = info->min;
- /* min = info->max; */
- step = -info->step;
-#endif
+ if(global_settings.list_order == LIST_ORDER_DESCENDING)
+ {
+ /* min = info->min; */
+ max = info->max;
+ step = info->step;
+ }
+ else
+ {
+ max = info->min;
+ /* min = info->max; */
+ step = -info->step;
+ }
}
return max- (selection * step);
}
@@ -424,11 +430,10 @@ static void val_to_selection(const struct settings_list *setting, int oldvalue,
int max = (setting_id == SOUND_VOLUME) ?
global_settings.volume_limit : sound_max(setting_id);
*nb_items = (max-min)/steps + 1;
-#ifndef ASCENDING_INT_SETTINGS
- *selected = (max - oldvalue) / steps;
-#else
- *selected = (oldvalue - min) / steps;
-#endif
+ if (global_settings.list_order == LIST_ORDER_DESCENDING)
+ *selected = (max - oldvalue) / steps;
+ else
+ *selected = (oldvalue - min) / steps;
*function = sound_get_fn(setting_id);
}
else
@@ -439,11 +444,10 @@ static void val_to_selection(const struct settings_list *setting, int oldvalue,
min = info->min;
step = info->step;
*nb_items = (max-min)/step + 1;
-#ifndef ASCENDING_INT_SETTINGS
- *selected = (max - oldvalue) / step;
-#else
- *selected = (oldvalue - min) / step;
-#endif
+ if(global_settings.list_order == LIST_ORDER_DESCENDING)
+ *selected = (max - oldvalue) / step;
+ else
+ *selected = (oldvalue - min) / step;
*function = info->option_callback;
}
}
diff --git a/apps/gui/option_select.h b/apps/gui/option_select.h
index 476e7b81bd..104e86f64d 100644
--- a/apps/gui/option_select.h
+++ b/apps/gui/option_select.h
@@ -25,11 +25,10 @@
#include "screen_access.h"
#include "settings.h"
-#if defined (HAVE_SCROLLWHEEL) && !defined(FIIO_M3K)
-/* Define this if your target makes sense to have
- smaller values at the top of the list increasing down the list */
-#define ASCENDING_INT_SETTINGS
-#endif
+enum {
+ LIST_ORDER_DESCENDING = 0,
+ LIST_ORDER_ASCENDING = 1,
+};
bool option_screen(const struct settings_list *setting,
struct viewport parent[NB_SCREENS],
diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c
index b2f5050ab3..e403e13e6c 100644
--- a/apps/gui/quickscreen.c
+++ b/apps/gui/quickscreen.c
@@ -39,6 +39,9 @@
#include "option_select.h"
#include "debug.h"
#include "shortcuts.h"
+#ifdef HAVE_ALBUMART
+#include "playback.h"
+#endif
/* 1 top, 1 bottom, 2 on either side, 1 for the icons
* if enough space, top and bottom have 2 lines */
@@ -285,14 +288,22 @@ static bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button)
static int quickscreen_touchscreen_button(void)
{
short x,y;
- /* only hitting the text counts, everything else is exit */
if (action_get_touchscreen_press(&x, &y) != BUTTON_REL)
return ACTION_NONE;
enum { left=1, right=2, top=4, bottom=8 };
- int bits = (x < LCD_WIDTH/3 ? left : (x > 2*LCD_WIDTH/3 ? 2 : right)) |
- (y < LCD_WIDTH/3 ? top : (y > 2*LCD_WIDTH/3 ? 8 : bottom));
+ int bits = 0;
+
+ if(x < LCD_WIDTH/3)
+ bits |= left;
+ else if(x > 2*LCD_WIDTH/3)
+ bits |= right;
+
+ if(y < LCD_HEIGHT/3)
+ bits |= top;
+ else if(y > 2*LCD_HEIGHT/3)
+ bits |= bottom;
switch(bits) {
case top:
@@ -411,6 +422,9 @@ int quick_screen_quick(int button_enter)
struct gui_quickscreen qs;
bool oldshuffle = global_settings.playlist_shuffle;
int oldrepeat = global_settings.repeat_mode;
+#ifdef HAVE_ALBUMART
+ int old_album_art = global_settings.album_art;
+#endif
bool usb = false;
if (global_settings.shortcuts_replaces_qs)
@@ -446,6 +460,10 @@ int quick_screen_quick(int button_enter)
else
playlist_sort(NULL, true);
}
+#ifdef HAVE_ALBUMART
+ if (old_album_art != global_settings.album_art)
+ set_albumart_mode(global_settings.album_art);
+#endif
}
return (usb ? 1:0);
}
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
index 41de1e1f76..146dccb18a 100644
--- a/apps/gui/skin_engine/skin_backdrops.c
+++ b/apps/gui/skin_engine/skin_backdrops.c
@@ -81,8 +81,9 @@ static int buflib_move_callback(int handle, void* current, void* new)
}
static struct buflib_callbacks buflib_ops = {buflib_move_callback, NULL, NULL};
static bool first_go = true;
-void skin_backdrop_init(void)
+bool skin_backdrop_init(void)
{
+ bool go_status = first_go;
if (first_go)
{
for (int i=0; i<NB_BDROPS; i++)
@@ -98,6 +99,7 @@ void skin_backdrop_init(void)
handle_being_loaded = -1;
first_go = false;
}
+ return go_status;
}
int skin_backdrop_assign(char* backdrop, char *bmpdir,
@@ -331,8 +333,20 @@ void skin_backdrop_unload(int backdrop_id)
(void)backdrop_id;
}
#else
+static bool first_go = true;
+bool skin_backdrop_init(void)
+{
+ bool go_status = first_go;
+ first_go = false;
+ return go_status;
+}
+
+void skin_backdrop_load_setting(void)
+{
+}
-void skin_backdrop_init(void)
+void skin_backdrop_show(int backdrop_id)
{
+ (void) backdrop_id;
}
#endif
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c
index b3626b681d..8ba76e5739 100644
--- a/apps/gui/skin_engine/skin_engine.c
+++ b/apps/gui/skin_engine/skin_engine.c
@@ -149,16 +149,28 @@ void skin_unload_all(void)
gui_sync_skin_init();
}
+static void skin_reset_buffers(int item, int screen)
+{
+ skin_data_free_buflib_allocs(&skins[item][screen].data);
+#ifdef HAVE_ALBUMART
+ if (skins[item][screen].data.playback_aa_slot >= 0)
+ playback_release_aa_slot(skins[item][screen].data.playback_aa_slot);
+#endif
+#ifdef HAVE_BACKDROP_IMAGE
+ if (skins[item][screen].data.backdrop_id >= 0)
+ skin_backdrop_unload(skins[item][screen].data.backdrop_id);
+#endif
+}
+
void settings_apply_skins(void)
{
int i;
char filename[MAX_PATH];
- static bool first_run = true;
if (audio_status() & AUDIO_STATUS_PLAY)
audio_stop();
- skin_backdrop_init();
+ bool first_run = skin_backdrop_init();
skins_initialised = true;
/* Make sure each skin is loaded */
@@ -170,15 +182,7 @@ void settings_apply_skins(void)
if (!first_run)
{
- skin_data_free_buflib_allocs(&skins[i][j].data);
-#ifdef HAVE_ALBUMART
- if (skins[i][j].data.playback_aa_slot >= 0)
- playback_release_aa_slot(skins[i][j].data.playback_aa_slot);
-#endif
-#ifdef HAVE_BACKDROP_IMAGE
- if (skins[i][j].data.backdrop_id >= 0)
- skin_backdrop_unload(skins[i][j].data.backdrop_id);
-#endif
+ skin_reset_buffers(i, j);
}
gui_skin_reset(&skins[i][j]);
skins[i][j].gui_wps.display = &screens[j];
@@ -186,17 +190,14 @@ void settings_apply_skins(void)
skin_get_gwps(i, j);
}
}
- first_run = false;
-#ifdef HAVE_BACKDROP_IMAGE
+
/* any backdrop that was loaded with "-" has to be reloaded because
* the setting may have changed */
skin_backdrop_load_setting();
-#endif
viewportmanager_theme_changed(THEME_STATUSBAR);
-#ifdef HAVE_BACKDROP_IMAGE
+
FOR_NB_SCREENS(i)
skin_backdrop_show(sb_get_backdrop(i));
-#endif
}
void skin_load(enum skinnable_screens skin, enum screen_type screen,
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
index 3b757a5f8b..e26ec34d1f 100644
--- a/apps/gui/skin_engine/skin_engine.h
+++ b/apps/gui/skin_engine/skin_engine.h
@@ -62,7 +62,7 @@ bool skin_has_sbs(enum screen_type screen, struct wps_data *data);
/* load a backdrop into the skin buffer.
* reuse buffers if the file is already loaded */
char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen);
-void skin_backdrop_init(void);
+bool skin_backdrop_init(void);
int skin_backdrop_assign(char* backdrop, char *bmpdir,
enum screen_type screen);
bool skin_backdrops_preload(void);
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index b3840f689f..d89ca8b534 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -343,11 +343,12 @@ static int parse_image_display(struct skin_element *element,
if (element->params_count > 1)
{
- if (get_param(element, 1)->type == CODE)
+ struct skin_tag_parameter *param1 = get_param(element, 1);
+ if (param1->type == CODE)
id->token = get_param_code(element, 1)->data;
/* specify a number. 1 being the first subimage (i.e top) NOT 0 */
- else if (get_param(element, 1)->type == INTEGER)
- id->subimage = get_param(element, 1)->data.number - 1;
+ else if (param1->type == INTEGER)
+ id->subimage = param1->data.number - 1;
if (element->params_count > 2)
id->offset = get_param(element, 2)->data.number;
}
@@ -391,14 +392,16 @@ static int parse_image_load(struct skin_element *element,
subimages = get_param(element, 2)->data.number;
else if (element->params_count > 3)
{
- if (get_param(element, 2)->type == PERCENT)
- x = get_param(element, 2)->data.number * curr_vp->vp.width / 1000;
+ struct skin_tag_parameter *param2 = get_param(element, 2);
+ struct skin_tag_parameter *param3 = get_param(element, 3);
+ if (param2->type == PERCENT)
+ x = param2->data.number * curr_vp->vp.width / 1000;
else
- x = get_param(element, 2)->data.number;
- if (get_param(element, 3)->type == PERCENT)
- y = get_param(element, 3)->data.number * curr_vp->vp.height / 1000;
+ x = param2->data.number;
+ if (param3->type == PERCENT)
+ y = param3->data.number * curr_vp->vp.height / 1000;
else
- y = get_param(element, 3)->data.number;
+ y = param3->data.number;
if (element->params_count == 5)
subimages = get_param(element, 4)->data.number;
@@ -561,6 +564,7 @@ static int parse_listitemviewport(struct skin_element *element,
struct wps_data *wps_data)
{
#ifndef __PCTOOL__
+ struct skin_tag_parameter *param;
struct listitem_viewport_cfg *cfg = skin_buffer_alloc(sizeof(*cfg));
if (!cfg)
return -1;
@@ -569,10 +573,15 @@ static int parse_listitemviewport(struct skin_element *element,
cfg->label = PTRTOSKINOFFSET(skin_buffer, get_param_text(element, 0));
cfg->width = -1;
cfg->height = -1;
- if (!isdefault(get_param(element, 1)))
- cfg->width = get_param(element, 1)->data.number;
- if (!isdefault(get_param(element, 2)))
- cfg->height = get_param(element, 2)->data.number;
+
+ param = get_param(element, 1);
+ if (!isdefault(param))
+ cfg->width = param->data.number;
+
+ param = get_param(element, 2);
+ if (!isdefault(param))
+ cfg->height = param->data.number;
+
if (element->params_count > 3 &&
!strcmp(get_param_text(element, 3), "tile"))
cfg->tile = true;
@@ -592,11 +601,16 @@ static int parse_viewporttextstyle(struct skin_element *element,
*line = (struct line_desc)LINE_DESC_DEFINIT;
unsigned colour;
- if (!strcmp(mode, "invert"))
+ static const char * const vp_options[] = { "invert", "color", "colour",
+ "clear", "gradient", NULL};
+
+ int vp_op = string_option(mode, vp_options, false);
+
+ if (vp_op == 0) /*invert*/
{
line->style = STYLE_INVERT;
}
- else if (!strcmp(mode, "colour") || !strcmp(mode, "color"))
+ else if (vp_op == 1 || vp_op == 2) /*color/colour*/
{
if (element->params_count < 2 ||
!parse_color(curr_screen, get_param_text(element, 1), &colour))
@@ -605,7 +619,7 @@ static int parse_viewporttextstyle(struct skin_element *element,
line->text_color = colour;
}
#ifdef HAVE_LCD_COLOR
- else if (!strcmp(mode, "gradient"))
+ else if (vp_op == 4) /*gradient*/
{
int num_lines;
if (element->params_count < 2)
@@ -618,7 +632,7 @@ static int parse_viewporttextstyle(struct skin_element *element,
line->nlines = num_lines;
}
#endif
- else if (!strcmp(mode, "clear"))
+ else if (vp_op == 3) /*clear*/
{
line->style = STYLE_DEFAULT;
}
@@ -634,34 +648,39 @@ static int parse_drawrectangle( struct skin_element *element,
struct wps_data *wps_data)
{
(void)wps_data;
+ struct skin_tag_parameter *param;
struct draw_rectangle *rect = skin_buffer_alloc(sizeof(*rect));
if (!rect)
return -1;
- if (get_param(element, 0)->type == PERCENT)
- rect->x = get_param(element, 0)->data.number * curr_vp->vp.width / 1000;
+ param = get_param(element, 0);
+ if (param->type == PERCENT)
+ rect->x = param->data.number * curr_vp->vp.width / 1000;
else
- rect->x = get_param(element, 0)->data.number;
+ rect->x = param->data.number;
- if (get_param(element, 1)->type == PERCENT)
- rect->y = get_param(element, 1)->data.number * curr_vp->vp.height / 1000;
+ param = get_param(element, 1);
+ if (param->type == PERCENT)
+ rect->y = param->data.number * curr_vp->vp.height / 1000;
else
- rect->y = get_param(element, 1)->data.number;
+ rect->y = param->data.number;
- if (isdefault(get_param(element, 2)))
+ param = get_param(element, 2);
+ if (isdefault(param))
rect->width = curr_vp->vp.width - rect->x;
- else if (get_param(element, 2)->type == PERCENT)
- rect->width = get_param(element, 2)->data.number * curr_vp->vp.width / 1000;
+ else if (param->type == PERCENT)
+ rect->width = param->data.number * curr_vp->vp.width / 1000;
else
- rect->width = get_param(element, 2)->data.number;
+ rect->width = param->data.number;
- if (isdefault(get_param(element, 3)))
+ param = get_param(element, 3);
+ if (isdefault(param))
rect->height = curr_vp->vp.height - rect->y;
- else if (get_param(element, 3)->type == PERCENT)
- rect->height = get_param(element, 3)->data.number * curr_vp->vp.height / 1000;
+ else if (param->type == PERCENT)
+ rect->height = param->data.number * curr_vp->vp.height / 1000;
else
- rect->height = get_param(element, 3)->data.number;
+ rect->height = param->data.number;
rect->start_colour = curr_vp->vp.fg_pattern;
rect->end_colour = curr_vp->vp.fg_pattern;
@@ -811,19 +830,38 @@ static int parse_logical_if(struct skin_element *element,
token->value.data = PTRTOSKINOFFSET(skin_buffer, lif);
lif->token = get_param_code(element, 0)->data;
- if (!strncmp(op, "=", 1))
- lif->op = IF_EQUALS;
- else if (!strncmp(op, "!=", 2))
- lif->op = IF_NOTEQUALS;
- else if (!strncmp(op, ">=", 2))
- lif->op = IF_GREATERTHAN_EQ;
- else if (!strncmp(op, "<=", 2))
- lif->op = IF_LESSTHAN_EQ;
- else if (!strncmp(op, ">", 2))
- lif->op = IF_GREATERTHAN;
- else if (!strncmp(op, "<", 1))
- lif->op = IF_LESSTHAN;
-
+ /* one or two operator conditionals */
+ #define OPS2VAL(op1, op2) ((int)op1 << 8 | (int)op2)
+ #define CLAUSE(op1, op2, symbol) {OPS2VAL(op1, op2), symbol }
+
+ struct clause_symbol {int value;int symbol;};
+ static const struct clause_symbol get_clause_match[] =
+ {
+ CLAUSE('=', '=', IF_EQUALS),
+ CLAUSE('!', '=', IF_NOTEQUALS),
+ CLAUSE('>', '=', IF_GREATERTHAN_EQ),
+ CLAUSE('<', '=', IF_LESSTHAN_EQ),
+ /*All Single value items @ end */
+ CLAUSE('>', 0, IF_GREATERTHAN),
+ CLAUSE('<', 0, IF_LESSTHAN),
+ CLAUSE('=', 0, IF_EQUALS),
+ };
+
+ int val1 = OPS2VAL(op[0], 0);
+ int val2;
+ if (val1 != 0) /* Empty string ?*/
+ {
+ val2 = OPS2VAL(op[0], op[1]);
+ for (unsigned int i = 0; i < ARRAYLEN(get_clause_match); i++)
+ {
+ const struct clause_symbol *sym = &get_clause_match[i];
+ if(sym->value == val1 || sym->value == val2)
+ {
+ lif->op = sym->symbol;
+ break;
+ }
+ }
+ }
memcpy(&lif->operand, get_param(element, 2), sizeof(lif->operand));
if (element->params_count > 3)
lif->num_options = get_param(element, 3)->data.number;
@@ -1009,20 +1047,37 @@ static int parse_progressbar_tag(struct skin_element* element,
}
pb->horizontal = pb->width > pb->height;
+
+ enum
+ {
+ eINVERT = 0, eNOFILL, eNOBORDER, eNOBAR, eSLIDER, eIMAGE,
+ eBACKDROP, eVERTICAL, eHORIZONTAL, eNOTOUCH, eSETTING,
+ e_PB_TAG_COUNT
+ };
+
+ static const char *pb_options[e_PB_TAG_COUNT + 1] = {[eINVERT] = "invert",
+ [eNOFILL] = "nofill", [eNOBORDER] = "noborder", [eNOBAR] = "nobar",
+ [eSLIDER] = "slider", [eIMAGE] = "image", [eBACKDROP] = "backdrop",
+ [eVERTICAL] = "vertical", [eHORIZONTAL] = "horizontal",
+ [eNOTOUCH] = "notouch", [eSETTING] = "setting", [e_PB_TAG_COUNT] = NULL};
+ int pb_op;
+
while (curr_param < element->params_count)
{
char* text;
param++;
text = SKINOFFSETTOPTR(skin_buffer, param->data.text);
- if (!strcmp(text, "invert"))
+
+ pb_op = string_option(text, pb_options, false);
+ if (pb_op == eINVERT)
pb->invert_fill_direction = true;
- else if (!strcmp(text, "nofill"))
+ else if (pb_op == eNOFILL)
pb->nofill = true;
- else if (!strcmp(text, "noborder"))
+ else if (pb_op == eNOBORDER)
pb->noborder = true;
- else if (!strcmp(text, "nobar"))
+ else if (pb_op == eNOBAR)
pb->nobar = true;
- else if (!strcmp(text, "slider"))
+ else if (pb_op == eSLIDER)
{
if (curr_param+1 < element->params_count)
{
@@ -1035,7 +1090,7 @@ static int parse_progressbar_tag(struct skin_element* element,
else /* option needs the next param */
return -1;
}
- else if (!strcmp(text, "image"))
+ else if (pb_op == eIMAGE)
{
if (curr_param+1 < element->params_count)
{
@@ -1046,7 +1101,7 @@ static int parse_progressbar_tag(struct skin_element* element,
else /* option needs the next param */
return -1;
}
- else if (!strcmp(text, "backdrop"))
+ else if (pb_op == eBACKDROP)
{
if (curr_param+1 < element->params_count)
{
@@ -1060,31 +1115,31 @@ static int parse_progressbar_tag(struct skin_element* element,
else /* option needs the next param */
return -1;
}
- else if (!strcmp(text, "vertical"))
+ else if (pb_op == eVERTICAL)
{
pb->horizontal = false;
if (isdefault(get_param(element, 3)))
pb->height = vp->height - pb->y;
}
- else if (!strcmp(text, "horizontal"))
+ else if (pb_op == eHORIZONTAL)
pb->horizontal = true;
#ifdef HAVE_TOUCHSCREEN
- else if (!strcmp(text, "notouch"))
+ else if (pb_op == eNOTOUCH)
suppress_touchregion = true;
#endif
- else if (token->type == SKIN_TOKEN_SETTING && !strcmp(text, "setting"))
- {
+ else if (token->type == SKIN_TOKEN_SETTING && pb_op == eSETTING)
+ {
if (curr_param+1 < element->params_count)
{
curr_param++;
param++;
text = SKINOFFSETTOPTR(skin_buffer, param->data.text);
#ifndef __PCTOOL__
- if (find_setting_by_cfgname(text, &pb->setting_id) == NULL)
- return WPS_ERROR_INVALID_PARAM;
+ if (find_setting_by_cfgname(text, &pb->setting_id) == NULL)
+ return WPS_ERROR_INVALID_PARAM;
#endif
- }
- }
+ }
+ }
else if (curr_param == 4)
image_filename = text;
@@ -1219,22 +1274,27 @@ static int parse_albumart_load(struct skin_element* element,
aa->xalign = WPS_ALBUMART_ALIGN_CENTER; /* default */
aa->yalign = WPS_ALBUMART_ALIGN_CENTER; /* default */
- aa->x = get_param(element, 0)->data.number;
- aa->y = get_param(element, 1)->data.number;
- aa->width = get_param(element, 2)->data.number;
- aa->height = get_param(element, 3)->data.number;
+ struct skin_tag_parameter *param0 = get_param(element, 0);
+ struct skin_tag_parameter *param1 = get_param(element, 1);
+ struct skin_tag_parameter *param2 = get_param(element, 2);
+ struct skin_tag_parameter *param3 = get_param(element, 3);
- if (!isdefault(get_param(element, 0)) && get_param(element, 0)->type == PERCENT)
- aa->x = get_param(element, 0)->data.number * curr_vp->vp.width / 1000;
+ aa->x = param0->data.number;
+ aa->y = param1->data.number;
+ aa->width = param2->data.number;
+ aa->height = param3->data.number;
- if (!isdefault(get_param(element, 1)) && get_param(element, 1)->type == PERCENT)
- aa->y = get_param(element, 1)->data.number * curr_vp->vp.height / 1000;
+ if (!isdefault(param0) && param0->type == PERCENT)
+ aa->x = param0->data.number * curr_vp->vp.width / 1000;
- if (!isdefault(get_param(element, 2)) && get_param(element, 2)->type == PERCENT)
- aa->width = get_param(element, 2)->data.number * curr_vp->vp.width / 1000;
+ if (!isdefault(param1) && param1->type == PERCENT)
+ aa->y = param1->data.number * curr_vp->vp.height / 1000;
- if (!isdefault(get_param(element, 3)) && get_param(element, 3)->type == PERCENT)
- aa->height = get_param(element, 3)->data.number * curr_vp->vp.height / 1000;
+ if (!isdefault(param2) && param2->type == PERCENT)
+ aa->width = param2->data.number * curr_vp->vp.width / 1000;
+
+ if (!isdefault(param3) && param3->type == PERCENT)
+ aa->height = param3->data.number * curr_vp->vp.height / 1000;
aa->vp = PTRTOSKINOFFSET(skin_buffer, &curr_vp->vp);
aa->draw_handle = -1;
@@ -1341,27 +1401,32 @@ static int parse_skinvar( struct skin_element *element,
return 0;
case SKIN_TOKEN_VAR_SET:
{
+ static const char * const sv_options[] = {"touch", "set", "inc", "dec", NULL};
+
struct skin_var_changer *data = skin_buffer_alloc(sizeof(*data));
if (!data)
return WPS_ERROR_INVALID_PARAM;
data->var = PTRTOSKINOFFSET(skin_buffer, var);
+ char *text_param1 = get_param_text(element, 1);
+ int sv_op = string_option(text_param1, sv_options, false);
+
if (!isdefault(get_param(element, 2)))
data->newval = get_param(element, 2)->data.number;
- else if (strcmp(get_param_text(element, 1), "touch"))
+ else if (sv_op != 0) /*!touch*/
return WPS_ERROR_INVALID_PARAM;
data->max = 0;
- if (!strcmp(get_param_text(element, 1), "set"))
+ if (sv_op == 1) /*set*/
data->direct = true;
- else if (!strcmp(get_param_text(element, 1), "inc"))
+ else if (sv_op == 2) /*inc*/
{
data->direct = false;
}
- else if (!strcmp(get_param_text(element, 1), "dec"))
+ else if (sv_op == 3) /*dec*/
{
data->direct = false;
data->newval *= -1;
}
- else if (!strcmp(get_param_text(element, 1), "touch"))
+ else if (sv_op == 0) /*touch*/
{
data->direct = false;
data->newval = 0;
@@ -1403,12 +1468,12 @@ static int parse_lasttouch(struct skin_element *element,
for (i=0; i<element->params_count; i++)
{
- if (get_param(element, i)->type == STRING)
+ struct skin_tag_parameter *param = get_param(element, i);
+ if (param->type == STRING)
region = skin_find_item(get_param_text(element, i),
SKIN_FIND_TOUCHREGION, wps_data);
- else if (get_param(element, i)->type == INTEGER ||
- get_param(element, i)->type == DECIMAL)
- data->timeout = get_param(element, i)->data.number;
+ else if (param->type == INTEGER || param->type == DECIMAL)
+ data->timeout = param->data.number;
}
data->region = PTRTOSKINOFFSET(skin_buffer, region);
@@ -1640,16 +1705,21 @@ static int parse_touchregion(struct skin_element *element,
if (region->action == ACTION_NONE)
return WPS_ERROR_INVALID_PARAM;
}
+ static const char * const pm_options[] = {"allow_while_locked", "reverse_bar",
+ "repeat_press", "long_press", NULL};
+ int pm_op;
+
while (p < element->params_count)
{
char* param = get_param_text(element, p++);
- if (!strcmp(param, "allow_while_locked"))
+ pm_op = string_option(param, pm_options, false);
+ if (pm_op == 0)
region->allow_while_locked = true;
- else if (!strcmp(param, "reverse_bar"))
+ else if (pm_op == 1)
region->reverse_bar = true;
- else if (!strcmp(param, "repeat_press"))
+ else if (pm_op == 2)
region->press_length = REPEAT;
- else if (!strcmp(param, "long_press"))
+ else if (pm_op == 3)
region->press_length = LONG_PRESS;
}
struct skin_token_list *item = new_skin_token_list_item(NULL, region);
@@ -2468,8 +2538,9 @@ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data,
skin_buffer = wps_buffer;
wps_buffer = (char*)buf;
}
- skin_buffer = ALIGN_UP(skin_buffer, 4); /* align on 4-byte boundary */
- buffersize -= 3;
+
+ /* align to long */
+ ALIGN_BUFFER(skin_buffer, buffersize, sizeof(long));
#ifdef HAVE_BACKDROP_IMAGE
backdrop_filename = "-";
wps_data->backdrop_id = -1;
diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c
index 63f3197faa..fd695bf6b6 100644
--- a/apps/gui/statusbar-skinned.c
+++ b/apps/gui/statusbar-skinned.c
@@ -156,7 +156,12 @@ int sb_get_backdrop(enum screen_type screen)
else
return -1;
}
-
+#else
+int sb_get_backdrop(enum screen_type screen)
+{
+ (void) screen;
+ return -1;
+}
#endif
static bool force_waiting = false;
void sb_skin_update(enum screen_type screen, bool force)
diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h
index ad102bef47..3ed36f1a84 100644
--- a/apps/gui/statusbar-skinned.h
+++ b/apps/gui/statusbar-skinned.h
@@ -49,9 +49,7 @@ void sb_bypass_touchregions(bool enable);
int sb_touch_to_button(int context);
#endif
-#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1)
int sb_get_backdrop(enum screen_type screen);
-#endif
int sb_preproccess(enum screen_type screen, struct wps_data *data);
int sb_postproccess(enum screen_type screen, struct wps_data *data);
diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c
index a961d191b2..74da14bd3f 100644
--- a/apps/gui/statusbar.c
+++ b/apps/gui/statusbar.c
@@ -725,18 +725,6 @@ void gui_syncstatusbar_init(struct gui_syncstatusbar * bars)
}
}
-void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars,
- bool force_redraw)
-{
- if(!global_settings.statusbar)
- return;
- struct viewport viewport;
- FOR_NB_SCREENS(i) {
- GET_RECT(viewport,statusbar_position(i),&screens[i]);
- gui_statusbar_draw( &(bars->statusbars[i]), force_redraw, &viewport );
- }
-}
-
#ifdef HAVE_REMOTE_LCD
enum statusbar_values statusbar_position(int screen)
diff --git a/apps/gui/statusbar.h b/apps/gui/statusbar.h
index a676c7b143..c62434155d 100644
--- a/apps/gui/statusbar.h
+++ b/apps/gui/statusbar.h
@@ -99,8 +99,7 @@ struct gui_syncstatusbar
};
extern void gui_syncstatusbar_init(struct gui_syncstatusbar * bars) INIT_ATTR;
-extern void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars,
- bool force_redraw);
+
#if !defined(HAVE_REMOTE_LCD) || defined(__PCTOOL__)
#include "settings.h"
#define statusbar_position(a) ((enum statusbar_values)global_settings.statusbar)
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c
index 3dd8bca979..9f9cb186f5 100644
--- a/apps/gui/viewport.c
+++ b/apps/gui/viewport.c
@@ -332,7 +332,7 @@ void viewport_set_defaults(struct viewport *vp,
const enum screen_type screen)
{
vp->buffer = NULL; /* use default frame_buffer */
-
+ vp->flags = VP_DEFAULT_FLAGS;
#if !defined(__PCTOOL__)
struct viewport *sbs_area = NULL;
if (!is_theme_enabled(screen))
diff --git a/apps/gui/wps.c b/apps/gui/wps.c
index cdb34ab447..7554892451 100644
--- a/apps/gui/wps.c
+++ b/apps/gui/wps.c
@@ -903,7 +903,9 @@ long gui_wps_show(void)
case ACTION_WPS_ID3SCREEN:
{
gwps_leave_wps();
- if (browse_id3())
+ if (browse_id3(audio_current_track(),
+ playlist_get_display_index(),
+ playlist_amount()))
return GO_TO_ROOT;
restore = true;
}
diff --git a/apps/iap/iap-core.c b/apps/iap/iap-core.c
index 885ba2c188..ae05806ae9 100644
--- a/apps/iap/iap-core.c
+++ b/apps/iap/iap-core.c
@@ -364,6 +364,7 @@ static void iap_thread(void)
/* Handle poweroff message */
case SYS_POWEROFF:
+ case SYS_REBOOT:
{
iap_shutdown = true;
break;
diff --git a/apps/keymaps/keymap-agptekrocker.c b/apps/keymaps/keymap-agptekrocker.c
index 4d7139ffd5..1fb8465b0a 100644
--- a/apps/keymaps/keymap-agptekrocker.c
+++ b/apps/keymaps/keymap-agptekrocker.c
@@ -96,7 +96,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_DEC, BUTTON_VOLDOWN, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
/* ACTION_SETTINGS_DECBIGSTEP */
- { ACTION_SETTINGS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
/* ACTION_SETTINGS_SET, Used by touchscreen targets */
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-c200.c b/apps/keymaps/keymap-c200.c
index 2e26f424cc..6ca1702e5f 100644
--- a/apps/keymaps/keymap-c200.c
+++ b/apps/keymaps/keymap-c200.c
@@ -88,7 +88,6 @@ static const struct button_mapping button_context_wps[] = {
static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT,BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-clip.c b/apps/keymaps/keymap-clip.c
index 7c8fb69471..3c92f03a07 100644
--- a/apps/keymaps/keymap-clip.c
+++ b/apps/keymaps/keymap-clip.c
@@ -98,7 +98,6 @@ static const struct button_mapping button_context_wps[] = {
static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_OK, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
{ ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT,BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-creativezv.c b/apps/keymaps/keymap-creativezv.c
index f2bcfd80f7..3242e8924f 100644
--- a/apps/keymaps/keymap-creativezv.c
+++ b/apps/keymaps/keymap-creativezv.c
@@ -134,7 +134,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -147,7 +146,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-creativezvm.c b/apps/keymaps/keymap-creativezvm.c
index 7a0cb5965a..47b24bf8b3 100644
--- a/apps/keymaps/keymap-creativezvm.c
+++ b/apps/keymaps/keymap-creativezvm.c
@@ -133,7 +133,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -146,7 +145,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-e200.c b/apps/keymaps/keymap-e200.c
index 538cd7cb8a..20cc16f2dc 100644
--- a/apps/keymaps/keymap-e200.c
+++ b/apps/keymaps/keymap-e200.c
@@ -100,7 +100,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-erosq.c b/apps/keymaps/keymap-erosq.c
index 59b70d24ca..d486423a53 100644
--- a/apps/keymaps/keymap-erosq.c
+++ b/apps/keymaps/keymap-erosq.c
@@ -87,7 +87,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INCBIGSTEP, BUTTON_VOL_UP, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
{ ACTION_SETTINGS_DECBIGSTEP, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
}; /* button_context_settings */
@@ -212,7 +211,8 @@ const struct button_mapping* get_context_mapping(int context)
return button_context_list;
case CONTEXT_SETTINGS:
- case CONTEXT_SETTINGS_EQ:
+ case CONTEXT_SETTINGS_EQ:
+ case CONTEXT_SETTINGS_COLOURCHOOSER:
return button_context_settings;
case CONTEXT_SETTINGS_TIME:
diff --git a/apps/keymaps/keymap-fiiom3k.c b/apps/keymaps/keymap-fiiom3k.c
index 749f25a35d..d0fbbb2e98 100644
--- a/apps/keymaps/keymap-fiiom3k.c
+++ b/apps/keymaps/keymap-fiiom3k.c
@@ -131,7 +131,6 @@ static const struct button_mapping button_context_settings[] = {
{ACTION_SETTINGS_DEC, BUTTON_SCROLL_FWD, BUTTON_NONE},
{ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE},
{ACTION_SETTINGS_DECBIGSTEP, BUTTON_VOL_DOWN, BUTTON_NONE},
- {ACTION_SETTINGS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT},
{ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE},
{ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
{ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE},
@@ -139,6 +138,16 @@ static const struct button_mapping button_context_settings[] = {
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
+static const struct button_mapping button_context_settings_rectrigger[] = {
+ {ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE},
+ {ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_SETTINGS_INCBIGSTEP, BUTTON_VOL_UP, BUTTON_NONE},
+ {ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE},
+ {ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_SETTINGS_DECBIGSTEP, BUTTON_VOL_DOWN, BUTTON_NONE},
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_settings_rectrigger */
+
static const struct button_mapping button_context_settings_eq[] = {
{ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE},
{ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
@@ -194,7 +203,7 @@ static const struct button_mapping button_context_pitchscreen[] = {
static const struct button_mapping button_context_yesnoscreen[] = {
{ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE},
- {ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE},
+ {ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE},
{ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE},
{ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE},
{ACTION_STD_CANCEL, BUTTON_RIGHT, BUTTON_NONE},
@@ -204,6 +213,33 @@ static const struct button_mapping button_context_yesnoscreen[] = {
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_yesnoscreen */
+static const struct button_mapping button_context_recscreen[] = {
+ {ACTION_REC_PAUSE, BUTTON_SELECT, BUTTON_NONE},
+ {ACTION_REC_PAUSE, BUTTON_PLAY, BUTTON_NONE},
+ {ACTION_REC_NEWFILE, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT},
+ {ACTION_REC_NEWFILE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY},
+ {ACTION_STD_MENU, BUTTON_MENU, BUTTON_NONE},
+ {ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE},
+ {ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE},
+ {ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE},
+ {ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE},
+ {ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_STD_PREV, BUTTON_SCROLL_BACK, BUTTON_NONE},
+ {ACTION_STD_PREVREPEAT, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_STD_NEXT, BUTTON_SCROLL_FWD, BUTTON_NONE},
+ {ACTION_STD_NEXTREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE},
+ {ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE},
+ {ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE},
+ {ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
+ {ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE},
+ {ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
+ LAST_ITEM_IN_LIST
+}; /* button_context_recscreen */
+
static const struct button_mapping button_context_keyboard[] = {
{ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE},
{ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE},
@@ -316,8 +352,9 @@ const struct button_mapping* get_context_mapping(int context)
return button_context_list;
case CONTEXT_SETTINGS:
case CONTEXT_SETTINGS_TIME:
- case CONTEXT_SETTINGS_RECTRIGGER:
return button_context_settings;
+ case CONTEXT_SETTINGS_RECTRIGGER:
+ return button_context_settings_rectrigger;
case CONTEXT_SETTINGS_EQ:
case CONTEXT_SETTINGS_COLOURCHOOSER:
return button_context_settings_eq;
@@ -327,6 +364,8 @@ const struct button_mapping* get_context_mapping(int context)
return button_context_pitchscreen;
case CONTEXT_YESNOSCREEN:
return button_context_yesnoscreen;
+ case CONTEXT_RECSCREEN:
+ return button_context_recscreen;
case CONTEXT_KEYBOARD:
return button_context_keyboard;
case CONTEXT_USB_HID:
diff --git a/apps/keymaps/keymap-fiiom3klinux.c b/apps/keymaps/keymap-fiiom3klinux.c
index 7769e2da04..e404d8bfb0 100644
--- a/apps/keymaps/keymap-fiiom3klinux.c
+++ b/apps/keymaps/keymap-fiiom3klinux.c
@@ -150,7 +150,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
{ ACTION_STD_PREV, BUTTON_PREV, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-fuze.c b/apps/keymaps/keymap-fuze.c
index c5538a6c49..ef0bed1099 100644
--- a/apps/keymaps/keymap-fuze.c
+++ b/apps/keymaps/keymap-fuze.c
@@ -99,7 +99,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-fuzeplus.c b/apps/keymaps/keymap-fuzeplus.c
index 0933916b4a..6601316469 100644
--- a/apps/keymaps/keymap-fuzeplus.c
+++ b/apps/keymaps/keymap-fuzeplus.c
@@ -225,7 +225,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_DECBIGSTEP, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-gigabeat-s.c b/apps/keymaps/keymap-gigabeat-s.c
index 4cd76184ff..35cecb7476 100644
--- a/apps/keymaps/keymap-gigabeat-s.c
+++ b/apps/keymaps/keymap-gigabeat-s.c
@@ -167,7 +167,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -181,7 +180,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-gigabeat.c b/apps/keymaps/keymap-gigabeat.c
index 31fd0eaf0d..913763af18 100644
--- a/apps/keymaps/keymap-gigabeat.c
+++ b/apps/keymaps/keymap-gigabeat.c
@@ -160,7 +160,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_A, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -174,7 +173,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_A, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-h10.c b/apps/keymaps/keymap-h10.c
index 825590e6f4..7df2b61d05 100644
--- a/apps/keymaps/keymap-h10.c
+++ b/apps/keymaps/keymap-h10.c
@@ -124,7 +124,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_FF|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_REW, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-h1x0_h3x0.c b/apps/keymaps/keymap-h1x0_h3x0.c
index d4f098ce1e..422af7502c 100644
--- a/apps/keymaps/keymap-h1x0_h3x0.c
+++ b/apps/keymaps/keymap-h1x0_h3x0.c
@@ -145,7 +145,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_ON, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -159,7 +158,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_ON, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-hdd1630.c b/apps/keymaps/keymap-hdd1630.c
index ca55f7fc26..7afcaeec6d 100644
--- a/apps/keymaps/keymap-hdd1630.c
+++ b/apps/keymaps/keymap-hdd1630.c
@@ -160,7 +160,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_VIEW, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -174,7 +173,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_VIEW, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-hdd6330.c b/apps/keymaps/keymap-hdd6330.c
index ed197af41c..18ef2b7c8f 100644
--- a/apps/keymaps/keymap-hdd6330.c
+++ b/apps/keymaps/keymap-hdd6330.c
@@ -142,7 +142,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_VIEW, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -156,7 +155,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_VIEW, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-hm60x.c b/apps/keymaps/keymap-hm60x.c
index 2e1f3dd516..fa8783de6d 100644
--- a/apps/keymaps/keymap-hm60x.c
+++ b/apps/keymaps/keymap-hm60x.c
@@ -128,7 +128,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-hm801.c b/apps/keymaps/keymap-hm801.c
index 1f0a49c90c..210f521178 100644
--- a/apps/keymaps/keymap-hm801.c
+++ b/apps/keymaps/keymap-hm801.c
@@ -154,7 +154,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-ihifi.c b/apps/keymaps/keymap-ihifi.c
index 147c2f5f62..0c28f812f1 100644
--- a/apps/keymaps/keymap-ihifi.c
+++ b/apps/keymaps/keymap-ihifi.c
@@ -127,7 +127,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_BWD, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_BWD|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_FWD, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-ihifi770.c b/apps/keymaps/keymap-ihifi770.c
index c5671bd650..a5f37cdb7d 100644
--- a/apps/keymaps/keymap-ihifi770.c
+++ b/apps/keymaps/keymap-ihifi770.c
@@ -139,7 +139,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-ihifi800.c b/apps/keymaps/keymap-ihifi800.c
index b56bd018eb..4dfceff965 100644
--- a/apps/keymaps/keymap-ihifi800.c
+++ b/apps/keymaps/keymap-ihifi800.c
@@ -143,7 +143,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
{ ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-m200.c b/apps/keymaps/keymap-m200.c
index f055d648ef..be202d21e6 100644
--- a/apps/keymaps/keymap-m200.c
+++ b/apps/keymaps/keymap-m200.c
@@ -89,7 +89,6 @@ static const struct button_mapping button_context_wps[] = {
static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT,BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-ma.c b/apps/keymaps/keymap-ma.c
index 28220d9f50..aaf7df0c01 100644
--- a/apps/keymaps/keymap-ma.c
+++ b/apps/keymaps/keymap-ma.c
@@ -135,7 +135,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-meizu-m6sl.c b/apps/keymaps/keymap-meizu-m6sl.c
index 35e44da905..31dbc88432 100644
--- a/apps/keymaps/keymap-meizu-m6sl.c
+++ b/apps/keymaps/keymap-meizu-m6sl.c
@@ -147,7 +147,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -161,7 +160,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-mini2440.c b/apps/keymaps/keymap-mini2440.c
index 70f63aef72..3fe0698fa0 100644
--- a/apps/keymaps/keymap-mini2440.c
+++ b/apps/keymaps/keymap-mini2440.c
@@ -162,7 +162,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_A, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -176,7 +175,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_A, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-mr100.c b/apps/keymaps/keymap-mr100.c
index d551d434be..0a677efc00 100644
--- a/apps/keymaps/keymap-mr100.c
+++ b/apps/keymaps/keymap-mr100.c
@@ -153,7 +153,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_DISPLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -167,7 +166,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_DISPLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-mr500.c b/apps/keymaps/keymap-mr500.c
index b35c9c1dfc..41e6d21827 100644
--- a/apps/keymaps/keymap-mr500.c
+++ b/apps/keymaps/keymap-mr500.c
@@ -118,7 +118,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_RC_MODE, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
@@ -132,7 +131,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_STD_PREVREPEAT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_RC_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RC_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_RC_MODE, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
diff --git a/apps/keymaps/keymap-nwz.c b/apps/keymaps/keymap-nwz.c
index 66bdd1b0db..028fbf1bfd 100644
--- a/apps/keymaps/keymap-nwz.c
+++ b/apps/keymaps/keymap-nwz.c
@@ -199,7 +199,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-nwza860.c b/apps/keymaps/keymap-nwza860.c
index f1a3bb6f85..d455e23b62 100644
--- a/apps/keymaps/keymap-nwza860.c
+++ b/apps/keymaps/keymap-nwza860.c
@@ -125,8 +125,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
-
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-sa9200.c b/apps/keymaps/keymap-sa9200.c
index d29557e222..2dcf301f0f 100644
--- a/apps/keymaps/keymap-sa9200.c
+++ b/apps/keymaps/keymap-sa9200.c
@@ -155,7 +155,6 @@ static const struct button_mapping button_context_listtree_scroll_without_combo[
static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT,BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-touchscreen.c b/apps/keymaps/keymap-touchscreen.c
index c70aea2651..555cf42f79 100644
--- a/apps/keymaps/keymap-touchscreen.c
+++ b/apps/keymaps/keymap-touchscreen.c
@@ -146,7 +146,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INCREPEAT, BUTTON_TOPMIDDLE|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_BOTTOMMIDDLE, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_BOTTOMMIDDLE|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_CENTER, BUTTON_NONE },
{ ACTION_STD_PREV, BUTTON_MIDLEFT, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_MIDLEFT|BUTTON_REPEAT, BUTTON_NONE },
@@ -164,7 +163,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_SETTINGS_INCREPEAT, BUTTON_MIDRIGHT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_MIDLEFT, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_MIDLEFT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_CENTER, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_TOPLEFT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-xduoox20.c b/apps/keymaps/keymap-xduoox20.c
index c49410cd03..b08db90cfd 100644
--- a/apps/keymaps/keymap-xduoox20.c
+++ b/apps/keymaps/keymap-xduoox20.c
@@ -145,7 +145,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
{ ACTION_STD_PREV, BUTTON_NEXT, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_PREV, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-xduoox3.c b/apps/keymaps/keymap-xduoox3.c
index 124ca06c9d..bbe4c88772 100644
--- a/apps/keymaps/keymap-xduoox3.c
+++ b/apps/keymaps/keymap-xduoox3.c
@@ -172,7 +172,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
{ ACTION_STD_PREV, BUTTON_PREV, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-xduoox3ii.c b/apps/keymaps/keymap-xduoox3ii.c
index c8be8ce13e..d99c8240a1 100644
--- a/apps/keymaps/keymap-xduoox3ii.c
+++ b/apps/keymaps/keymap-xduoox3ii.c
@@ -145,7 +145,6 @@ static const struct button_mapping button_context_quickscreen[] = {
/** Settings - General Mappings **/
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
{ ACTION_STD_PREV, BUTTON_NEXT, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_PREV, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-yh8xx_yh9xx.c b/apps/keymaps/keymap-yh8xx_yh9xx.c
index 32623e1a72..9332c9fe98 100644
--- a/apps/keymaps/keymap-yh8xx_yh9xx.c
+++ b/apps/keymaps/keymap-yh8xx_yh9xx.c
@@ -201,7 +201,6 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
{ ACTION_SETTINGS_INCREPEAT,BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT,BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_RESET, BUTTON_REW|BUTTON_REL, BUTTON_REW },
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-zen.c b/apps/keymaps/keymap-zen.c
index ab0f32edb4..b0f24af459 100644
--- a/apps/keymaps/keymap-zen.c
+++ b/apps/keymaps/keymap-zen.c
@@ -235,7 +235,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
- { ACTION_SETTINGS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
diff --git a/apps/keymaps/keymap-zenxfi3.c b/apps/keymaps/keymap-zenxfi3.c
index 191b36a1ca..d19a407b78 100644
--- a/apps/keymaps/keymap-zenxfi3.c
+++ b/apps/keymaps/keymap-zenxfi3.c
@@ -163,7 +163,6 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
- { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
diff --git a/apps/lang/arabic.lang b/apps/lang/arabic.lang
index ecf8f8fb1f..c9b295956b 100644
--- a/apps/lang/arabic.lang
+++ b/apps/lang/arabic.lang
@@ -14,6 +14,8 @@
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
+# LANGUAGE_IS_RTL
+#
# Arabic language file, translated by:
# - Mohamed Tarek
# - Raafat Akkad
@@ -764,20 +766,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_FORMAT
- desc: audio format item in recording menu
+ id: LANG_FORMAT
+ desc: audio format
user: core
<source>
- *: none
- recording: "Format"
+ *: "Format"
</source>
<dest>
- *: none
- recording: "الصيغة"
+ *: "الصيغة"
</dest>
<voice>
- *: none
- recording: "Format"
+ *: "Format"
</voice>
</phrase>
<phrase>
@@ -4043,15 +4042,15 @@
user: core
<source>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</source>
<dest>
*: none
- gigabeatfx,sansafuzeplus: "حساسية اللمس"
+ fiiom3k,gigabeatfx,sansafuzeplus: "حساسية اللمس"
</dest>
<voice>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</voice>
</phrase>
<phrase>
diff --git a/apps/lang/basque.lang b/apps/lang/basque.lang
index 59ab84b04e..05fae692e8 100644
--- a/apps/lang/basque.lang
+++ b/apps/lang/basque.lang
@@ -5263,20 +5263,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_FORMAT
- desc: audio format item in recording menu
+ id: LANG_FORMAT
+ desc: audio format
user: core
<source>
- *: none
- recording: "Format"
+ *: "Format"
</source>
<dest>
- *: none
- recording: "Formatua"
+ *: "Formatua"
</dest>
<voice>
- *: none
- recording: "Formatua"
+ *: "Formatua"
</voice>
</phrase>
<phrase>
@@ -10311,15 +10308,15 @@
user: core
<source>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</source>
<dest>
*: none
- gigabeatfx,sansafuzeplus: "Taktilaren Sentikortasuna"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Taktilaren Sentikortasuna"
</dest>
<voice>
*: none
- gigabeatfx,sansafuzeplus: "Taktilaren Sentikortasuna"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Taktilaren Sentikortasuna"
</voice>
</phrase>
<phrase>
diff --git a/apps/lang/bulgarian.lang b/apps/lang/bulgarian.lang
index a66df1ba51..77f2d58361 100644
--- a/apps/lang/bulgarian.lang
+++ b/apps/lang/bulgarian.lang
@@ -252,7 +252,7 @@
*: "PLAY = Yes"
archosplayer: "(PLAY/STOP)"
cowond2*: "MENU, or top-right = Yes"
- creativezen*: "Select = Yes"
+ creativezen*: "SELECT = Yes"
gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes"
iriverh100,iriverh120,iriverh300: "NAVI = Yes"
mrobe500: "PLAY, POWER, or top-right = Yes"
@@ -262,7 +262,7 @@
*: "PLAY = Да"
archosplayer: "(PLAY/STOP)"
cowond2*: "MENU или горе ляво = Да"
- creativezen*: "Select = Да"
+ creativezen*: "SELECT = Да"
gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Да"
iriverh100,iriverh120,iriverh300: "NAVI = Да"
mrobe500: "PLAY, POWER или горе дясно = Да"
@@ -5268,20 +5268,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_FORMAT
- desc: audio format item in recording menu
+ id: LANG_FORMAT
+ desc: audio format
user: core
<source>
- *: none
- recording: "Format"
+ *: "Format"
</source>
<dest>
- *: none
- recording: "Формат"
+ *: "Формат"
</dest>
<voice>
- *: none
- recording: "Формат"
+ *: "Формат"
</voice>
</phrase>
<phrase>
@@ -10316,15 +10313,15 @@
user: core
<source>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</source>
<dest>
*: none
- gigabeatfx,sansafuzeplus: "Чувствителност на тъчпада"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Чувствителност на тъчпада"
</dest>
<voice>
*: none
- gigabeatfx,sansafuzeplus: "Чувствителност на тъчпада"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Чувствителност на тъчпада"
</voice>
</phrase>
<phrase>
diff --git a/apps/lang/catala.lang b/apps/lang/catala.lang
index 9c29513ca5..38fd6d0644 100644
--- a/apps/lang/catala.lang
+++ b/apps/lang/catala.lang
@@ -5257,20 +5257,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_FORMAT
- desc: audio format item in recording menu
+ id: LANG_FORMAT
+ desc: audio format
user: core
<source>
- *: none
- recording: "Format"
+ *: "Format"
</source>
<dest>
- *: none
- recording: "Format"
+ *: "Format"
</dest>
<voice>
- *: none
- recording: "Format"
+ *: "Format"
</voice>
</phrase>
<phrase>
@@ -10305,15 +10302,15 @@
user: core
<source>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</source>
<dest>
*: none
- gigabeatfx,sansafuzeplus: "Sensibilitat del touchpad"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Sensibilitat del touchpad"
</dest>
<voice>
*: none
- gigabeatfx,sansafuzeplus: "Sensibilitat del Touchpad"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Sensibilitat del Touchpad"
</voice>
</phrase>
<phrase>
diff --git a/apps/lang/chinese-simp.lang b/apps/lang/chinese-simp.lang
index c1829298be..3d1d0ecaa3 100644
--- a/apps/lang/chinese-simp.lang
+++ b/apps/lang/chinese-simp.lang
@@ -19,6 +19,35 @@
# - Harry Tu
# - Jun Gu
# - Purling Nayuki
+#------
+<phrase>
+ id: LANG_LIST_SEPARATOR
+ desc: line between lines in lists
+ user: core
+ <source>
+ *: "Line Separator"
+ </source>
+ <dest>
+ *: "行分隔线"
+ </dest>
+ <voice>
+ *: "行分隔线"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_LIST_SEPARATOR_COLOR
+ desc: line between lines in lists
+ user: core
+ <source>
+ *: "Line Separator Colour"
+ </source>
+ <dest>
+ *: "行分隔线颜色"
+ </dest>
+ <voice>
+ *: "Color of Line Separator"
+ </voice>
+</phrase>
<phrase>
id: LANG_SET_BOOL_YES
desc: bool true representation
@@ -27,7 +56,7 @@
*: "Yes"
</source>
<dest>
- *: "√"
+ *: "是"
</dest>
<voice>
*: "是"
@@ -41,7 +70,7 @@
*: "No"
</source>
<dest>
- *: "×"
+ *: "否"
</dest>
<voice>
*: "否"
@@ -104,23 +133,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_CONFIRM_SHUTDOWN
- desc: in shutdown screen
- user: core
- <source>
- *: none
- soft_shutdown: "Press OFF to shut down"
- </source>
- <dest>
- *: none
- soft_shutdown: "按下OFF关机"
- </dest>
- <voice>
- *: none
- soft_shutdown: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_SHUTTINGDOWN
desc: in main menu
user: core
@@ -128,27 +140,10 @@
*: "Shutting down..."
</source>
<dest>
- *: "关机中..."
- </dest>
- <voice>
- *: "关机中"
- </voice>
-</phrase>
-<phrase>
- id: LANG_REMOVE_MMC
- desc: before acknowledging usb in case an MMC is inserted (Ondio)
- user: core
- <source>
- *: none
- archosondio*: "Please remove inserted MMC"
- </source>
- <dest>
- *: none
- archosondio*: "请取出MMC卡"
+ *: "关闭中..."
</dest>
<voice>
- *: none
- archosondio*: "请取出MMC卡"
+ *: "关闭中"
</voice>
</phrase>
<phrase>
@@ -201,7 +196,7 @@
*: "General Settings"
</source>
<dest>
- *: "一般设置"
+ *: "常规设置"
</dest>
<voice>
*: "一般设置"
@@ -262,11 +257,11 @@
</source>
<dest>
*: none
- recording: "录音界面"
+ recording: "录音"
</dest>
<voice>
*: none
- recording: "录音界面"
+ recording: "录音"
</voice>
</phrase>
<phrase>
@@ -284,23 +279,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SHUTDOWN
- desc: in main menu
- user: core
- <source>
- *: none
- soft_shutdown: "Shut down"
- </source>
- <dest>
- *: none
- soft_shutdown: "关机"
- </dest>
- <voice>
- *: none
- soft_shutdown: "关机"
- </voice>
-</phrase>
-<phrase>
id: LANG_VOLUME
desc: in sound_settings
user: core
@@ -455,159 +433,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_LOUDNESS
- desc: in sound_settings
- user: core
- <source>
- *: none
- masf: "Loudness"
- </source>
- <dest>
- *: none
- masf: "响度"
- </dest>
- <voice>
- *: none
- masf: "响度"
- </voice>
-</phrase>
-<phrase>
- id: LANG_AUTOVOL
- desc: in sound_settings
- user: core
- <source>
- *: none
- masf: "Auto Volume"
- </source>
- <dest>
- *: none
- masf: "自动音量调整"
- </dest>
- <voice>
- *: none
- masf: "自动音量调整"
- </voice>
-</phrase>
-<phrase>
- id: LANG_DECAY
- desc: in sound_settings
- user: core
- <source>
- *: none
- masf: "AV Decay Time"
- </source>
- <dest>
- *: none
- masf: "自动音量调整衰減时间"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_SUPERBASS
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "Super Bass"
- </source>
- <dest>
- *: none
- masf: "超低音"
- </dest>
- <voice>
- *: none
- masf: "超低音"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_ENABLE
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Enable"
- </source>
- <dest>
- *: none
- masf: "启用MDB"
- </dest>
- <voice>
- *: none
- masf: "启用MDB"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_STRENGTH
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Strength"
- </source>
- <dest>
- *: none
- masf: "MDB强度"
- </dest>
- <voice>
- *: none
- masf: "MDB的强度"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_HARMONICS
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Harmonics"
- </source>
- <dest>
- *: none
- masf: "MDB泛音"
- </dest>
- <voice>
- *: none
- masf: "MDB的泛音"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_CENTER
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Centre Frequency"
- </source>
- <dest>
- *: none
- masf: "MDB中心频率"
- </dest>
- <voice>
- *: none
- masf: "MDB的中心频率"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_SHAPE
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Shape"
- </source>
- <dest>
- *: none
- masf: "MDB形状"
- </dest>
- <voice>
- *: none
- masf: "MDB的形状"
- </voice>
-</phrase>
-<phrase>
id: LANG_CROSSFEED
desc: in sound settings
user: core
@@ -929,7 +754,7 @@
*: "%dHz频段增益"
</dest>
<voice>
- *: "赫兹频段增益"
+ *: "%d赫兹频段增益"
</voice>
</phrase>
<phrase>
@@ -957,7 +782,7 @@
*: "带通滤波器%d"
</dest>
<voice>
- *: "带通滤波器"
+ *: "带通滤波器%d"
</voice>
</phrase>
<phrase>
@@ -1726,15 +1551,12 @@
user: core
<source>
*: "Peak Meter"
- masd: none
</source>
<dest>
*: "峰值电平表"
- masd: none
</dest>
<voice>
*: "峰值电平表"
- masd: none
</voice>
</phrase>
<phrase>
@@ -2142,20 +1964,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
- desc: Save only on bookmark for each playlist in recent bookmarks
- user: core
- <source>
- *: "Unique only"
- </source>
- <dest>
- *: "只保存唯一一份"
- </dest>
- <voice>
- *: "只保存唯一一份"
- </voice>
-</phrase>
-<phrase>
id: LANG_VOICE_MENU
desc: item of voice menu, enable/disable the voice UI
user: core
@@ -2240,23 +2048,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_QUALITY
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording_hwcodec: "Quality"
- </source>
- <dest>
- *: none
- recording_hwcodec: "品质"
- </dest>
- <voice>
- *: none
- recording_hwcodec: "品质"
- </voice>
-</phrase>
-<phrase>
id: LANG_FREQUENCY
desc: in recording and playback settings
user: core
@@ -2328,23 +2119,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_EDITABLE
- desc: Editable recordings setting
- user: core
- <source>
- *: none
- recording_hwcodec: "Independent Frames"
- </source>
- <dest>
- *: none
- recording_hwcodec: "独立框架"
- </dest>
- <voice>
- *: none
- recording_hwcodec: "独立框架"
- </voice>
-</phrase>
-<phrase>
id: LANG_RECORD_TIMESPLIT
desc: Record split menu
user: core
@@ -3182,23 +2956,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_BUTTON_BAR
- desc: in settings menu
- user: core
- <source>
- *: none
- recorder_pad: "Button Bar"
- </source>
- <dest>
- *: none
- recorder_pad: "按键条"
- </dest>
- <voice>
- *: none
- recorder_pad: "按键条"
- </voice>
-</phrase>
-<phrase>
id: LANG_VOLUME_DISPLAY
desc: Volume type title
user: core
@@ -3260,15 +3017,12 @@
user: core
<source>
*: "Peak Release"
- masd: none
</source>
<dest>
*: "峰值释放速度"
- masd: none
</dest>
<voice>
*: "峰值释放速度"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3277,15 +3031,12 @@
user: core
<source>
*: "Peak Hold Time"
- masd: none
</source>
<dest>
*: "峰值保持时长"
- masd: none
</dest>
<voice>
*: "峰值保持时长"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3294,15 +3045,12 @@
user: core
<source>
*: "Clip Hold Time"
- masd: none
</source>
<dest>
*: "削波保持时长"
- masd: none
</dest>
<voice>
*: "削波保持时长"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3311,15 +3059,12 @@
user: core
<source>
*: "Eternal"
- masd: none
</source>
<dest>
*: "外部"
- masd: none
</dest>
<voice>
*: "外部"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3328,15 +3073,12 @@
user: core
<source>
*: "Scale"
- masd: none
</source>
<dest>
*: "标尺类型"
- masd: none
</dest>
<voice>
*: "标尺类型"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3345,15 +3087,12 @@
user: core
<source>
*: "Logarithmic (dB)"
- masd: none
</source>
<dest>
*: "对数(dB)坐标"
- masd: none
</dest>
<voice>
*: "对数坐标"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3362,15 +3101,12 @@
user: core
<source>
*: "Linear (%)"
- masd: none
</source>
<dest>
*: "线性(%)坐标"
- masd: none
</dest>
<voice>
*: "线性坐标"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3379,15 +3115,12 @@
user: core
<source>
*: "Minimum Of Range"
- masd: none
</source>
<dest>
*: "量程最小值"
- masd: none
</dest>
<voice>
*: "量程最小值"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3396,15 +3129,12 @@
user: core
<source>
*: "Maximum Of Range"
- masd: none
</source>
<dest>
*: "量程最大值"
- masd: none
</dest>
<voice>
*: "量程最大值"
- masd: none
</voice>
</phrase>
<phrase>
@@ -3999,7 +3729,7 @@
*: "搜索中...已找到%d个(%s)"
</dest>
<voice>
- *: ""
+ *: "搜索中...已找到%d个(%s)"
</voice>
</phrase>
<phrase>
@@ -4062,23 +3792,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_BATTERY_TOPOFF_CHARGE
- desc: in info display, shows that top off charge is running Only for V1 archosrecorder
- user: core
- <source>
- *: none
- archosrecorder: "Battery: Top-Off Chg"
- </source>
- <dest>
- *: none
- archosrecorder: "电池:恒流快速充电"
- </dest>
- <voice>
- *: none
- archosrecorder: "电池 恒流快速充电"
- </voice>
-</phrase>
-<phrase>
id: LANG_BATTERY_TRICKLE_CHARGE
desc: in info display, shows that trickle charge is running
user: core
@@ -4102,12 +3815,10 @@
<source>
*: "Battery: %d%% %dh %dm"
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
- iriverifp7xx: "%d%% %dh %dm"
</source>
<dest>
*: "剩余电量:%d%% %dh %dm"
ipodmini1g,ipodmini2g,iriverh10: "电量:%d%% %dh %dm"
- iriverifp7xx: "%d%% %dh %dm"
</dest>
<voice>
*: "剩余电量"
@@ -4147,38 +3858,38 @@
user: core
<source>
*: "Int:"
+ hibylinux: "mSD:"
xduoox3: "mSD1:"
</source>
<dest>
*: "内部:"
+ hibylinux: "mSD:"
xduoox3: "mSD1:"
</dest>
<voice>
*: "内部大小为"
+ hibylinux: "micro S D"
xduoox3: "mSD卡1"
</voice>
</phrase>
<phrase>
id: LANG_DISK_NAME_MMC
- desc: in info menu; name for external disk with multivolume (Ondio; keep short!)
+ desc: in info menu; name for external disk with multivolume (keep short!)
user: core
<source>
*: none
- archosondio*: "MMC:"
multivolume: "HD1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:"
xduoox3: "mSD2:"
</source>
<dest>
*: none
- archosondio*: "MMC:"
multivolume: "磁盘1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:"
xduoox3: "mSD2:"
</dest>
<voice>
*: none
- archosondio*: "MMC卡"
multivolume: "磁盘1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD卡"
xduoox3: "mSD卡2"
@@ -4339,7 +4050,8 @@
vibe500: "CANCEL:取消"
</dest>
<voice>
- *: none
+ *: ""
+ gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,samsungyh*,sansac200*,sansae200*: ""
</voice>
</phrase>
<phrase>
@@ -4398,6 +4110,7 @@
</dest>
<voice>
*: none
+ iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,samsungyh*,sansac200*,sansae200*,vibe500: ""
</voice>
</phrase>
<phrase>
@@ -4516,7 +4229,7 @@
</dest>
<voice>
*: none
- alarm: "离闹钟响起还有"
+ alarm: "离闹钟响起还有%d:%02d"
</voice>
</phrase>
<phrase>
@@ -4579,7 +4292,7 @@
</dest>
<voice>
*: none
- alarm,gigabeats,ipod*,iriverh10,iriverh10_5gb: ""
+ alarm,ipod*: ""
</voice>
</phrase>
<phrase>
@@ -4787,7 +4500,7 @@
*: "(VBR)"
</dest>
<voice>
- *: "VBR"
+ *: "(VBR)"
</voice>
</phrase>
<phrase>
@@ -4857,7 +4570,7 @@
*: "<无信息>"
</dest>
<voice>
- *: "无信息"
+ *: "<无信息>"
</voice>
</phrase>
<phrase>
@@ -5834,48 +5547,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_KILOBYTE
- desc: a unit postfix, also voiced
- user: core
- <source>
- *: "KB"
- </source>
- <dest>
- *: "KB"
- </dest>
- <voice>
- *: "B"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MEGABYTE
- desc: a unit postfix, also voiced
- user: core
- <source>
- *: "MB"
- </source>
- <dest>
- *: "MB"
- </dest>
- <voice>
- *: "MB"
- </voice>
-</phrase>
-<phrase>
- id: LANG_GIGABYTE
- desc: a unit postfix, also voiced
- user: core
- <source>
- *: "GB"
- </source>
- <dest>
- *: "GB"
- </dest>
- <voice>
- *: "GB"
- </voice>
-</phrase>
-<phrase>
id: LANG_POINT
desc: decimal separator for composing numbers
user: core
@@ -6477,7 +6148,7 @@
*: "插入了%d首曲目(%s)"
</dest>
<voice>
- *: "首曲目 插入了"
+ *: "插入了%d首曲目%s"
</voice>
</phrase>
<phrase>
@@ -6491,7 +6162,7 @@
*: "列入了%d首曲目(%s)"
</dest>
<voice>
- *: "首曲目 列入了"
+ *: "列入了%d首曲目%s"
</voice>
</phrase>
<phrase>
@@ -6505,7 +6176,7 @@
*: "保存了%d首曲目(%s)"
</dest>
<voice>
- *: "首曲目 保存了"
+ *: "保存了%d首曲目%s"
</voice>
</phrase>
<phrase>
@@ -6723,91 +6394,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_BUTTONBAR_MENU
- desc: in button bar
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Menu"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "选单"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_EXIT
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Exit"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "退出"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_ACTION
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Action"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "动作"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_ADD
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Add"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "增加"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_RECORD
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Record"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "录音"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_FM_MONO_MODE
desc: in radio screen
user: core
@@ -7012,7 +6598,7 @@
</phrase>
<phrase>
id: LANG_OFF_ABORT
- desc: Used on archosrecorder models
+ desc: Used on many models
user: core
<source>
*: "OFF to abort"
@@ -7031,6 +6617,7 @@
ipod*: "按PLAY/PAUSE键取消"
iriverh10,iriverh10_5gb,sansac200*,sansae200*,vibe500: "按PREV键取消"
iriverh100,iriverh120,iriverh300: "按STOP键取消"
+ sansafuzeplus: "按BACK键取消"
</dest>
<voice>
*: ""
@@ -7178,7 +6765,7 @@
</phrase>
<phrase>
id: LANG_PLUGIN_WRONG_MODEL
- desc: The plugin is not compatible with the archos model trying to run it
+ desc: The plugin is not compatible with the player model trying to run it
user: core
<source>
*: "Incompatible model"
@@ -7187,7 +6774,7 @@
*: "不兼容型号的插件"
</dest>
<voice>
- *: ""
+ *: "不兼容型号的插件"
</voice>
</phrase>
<phrase>
@@ -7201,7 +6788,7 @@
*: "不兼容版本的插件"
</dest>
<voice>
- *: ""
+ *: "不兼容版本的插件"
</voice>
</phrase>
<phrase>
@@ -7215,7 +6802,7 @@
*: "插件返回错误"
</dest>
<voice>
- *: ""
+ *: "插件返回错误"
</voice>
</phrase>
<phrase>
@@ -7475,159 +7062,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SYSFONT_CHANNEL_STEREO
- desc: in sound_settings
- user: core
- <source>
- *: none
- recording: "Stereo"
- </source>
- <dest>
- *: none
- recording: "Stereo"
- </dest>
- <voice>
- *: none
- recording: "Stereo"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_CHANNEL_MONO
- desc: in sound_settings
- user: core
- <source>
- *: none
- recording: "Mono"
- </source>
- <dest>
- *: none
- recording: "Mono"
- </dest>
- <voice>
- *: none
- recording: "Mono"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_SOURCE
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Source"
- </source>
- <dest>
- *: none
- recording: "来源"
- </dest>
- <voice>
- *: none
- recording: "来源"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_SRC_MIC
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Int. Mic"
- </source>
- <dest>
- *: none
- recording: "内部麦克风"
- </dest>
- <voice>
- *: none
- recording: "内部麦克风"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_SRC_DIGITAL
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Digital"
- </source>
- <dest>
- *: none
- recording: "数码"
- </dest>
- <voice>
- *: none
- recording: "数码"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORD_TRIGGER
- desc: in recording settings_menu
- user: core
- <source>
- *: none
- recording: "Trigger"
- </source>
- <dest>
- *: none
- recording: "触发"
- </dest>
- <voice>
- *: none
- recording: "触发"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_DIRBROWSE_F1
- desc: in dir browser, F1 button bar text
- user: core
- <source>
- *: none
- recorder_pad: "Menu"
- </source>
- <dest>
- *: none
- recorder_pad: "选单"
- </dest>
- <voice>
- *: none
- recorder_pad: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_DIRBROWSE_F2
- desc: in dir browser, F2 button bar text
- user: core
- <source>
- *: none
- recorder_pad: "Option"
- </source>
- <dest>
- *: none
- recorder_pad: "选项"
- </dest>
- <voice>
- *: none
- recorder_pad: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_DIRBROWSE_F3
- desc: in dir browser, F3 button bar text
- user: core
- <source>
- *: none
- recorder_pad: "LCD"
- </source>
- <dest>
- *: none
- recorder_pad: "屏幕"
- </dest>
- <voice>
- *: none
- recorder_pad: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_AFMT_PCM_WAV
desc: audio format description
user: core
@@ -7641,7 +7075,7 @@
</dest>
<voice>
*: none
- recording: "PCM Wave"
+ recording: "PCM Wave(.wav)"
</voice>
</phrase>
<phrase>
@@ -7677,33 +7111,13 @@
desc: in lcd settings
user: core
<source>
- *: none
- lcd_sleep: "Never"
+ *: "Never"
</source>
<dest>
- *: none
- lcd_sleep: "从不"
+ *: "从不"
</dest>
<voice>
- *: none
- lcd_sleep: "从不"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_LINE_IN
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Line In"
- </source>
- <dest>
- *: none
- recording: "线路输入"
- </dest>
- <voice>
- *: none
- recording: "线路输入"
+ *: "从不"
</voice>
</phrase>
<phrase>
@@ -7712,7 +7126,6 @@
user: core
<source>
*: "Building database... %d found (OFF to return)"
- archosplayer: "Building DB %d found"
gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)"
gogearsa9200: "Building database... %d found (REW to return)"
ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
@@ -7720,7 +7133,6 @@
</source>
<dest>
*: "数据库更新中...已找到%d个(按OFF键返回)"
- archosplayer: "数据库更新中...已找到%d个"
gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "数据库更新中...已找到%d个(按LEFT键返回)"
gogearsa9200: "数据库更新中...已找到%d个(按REW键返回)"
ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "数据库更新中...已找到%d个(按PREV键返回)"
@@ -8075,20 +7487,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_FORMAT
- desc: audio format item in recording menu
+ id: LANG_FORMAT
+ desc: audio format
user: core
<source>
- *: none
- recording: "Format"
+ *: "Format"
</source>
<dest>
- *: none
- recording: "格式"
+ *: "格式"
</dest>
<voice>
- *: none
- recording: "格式"
+ *: "格式"
</voice>
</phrase>
<phrase>
@@ -8142,11 +7551,9 @@
user: core
<source>
*: "Buffer:"
- archosplayer: "Buf:"
</source>
<dest>
*: "缓冲区:"
- archosplayer: "Buf:"
</dest>
<voice>
*: "缓冲区大小为"
@@ -8206,8 +7613,8 @@
user: core
<source>
*: "PLAY = Yes"
- archosplayer: "(PLAY/STOP)"
cowond2*: "MENU, or top-right = Yes"
+ creativezen*: "SELECT = Yes"
gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes"
iriverh100,iriverh120,iriverh300: "NAVI = Yes"
mrobe500: "PLAY, POWER, or top-right = Yes"
@@ -8215,9 +7622,8 @@
</source>
<dest>
*: "PLAY:是"
- archosplayer: "(PLAY/STOP)"
cowond2*: "MENU或TOP-RIGHT:是"
- gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT:是"
+ creativezen*,gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT:是"
iriverh100,iriverh120,iriverh300: "NAVI=是"
mrobe500: "PLAY,POWER或TOP-RIGHT:是"
vibe500: "OK:是"
@@ -8252,6 +7658,7 @@
</dest>
<voice>
*: none
+ gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,samsungyh*,sansac200*,sansae200*: ""
</voice>
</phrase>
<phrase>
@@ -8260,11 +7667,9 @@
user: core
<source>
*: "Any Other = No"
- archosplayer: none
</source>
<dest>
*: "Any Other=否"
- archosplayer: none
</dest>
<voice>
*: ""
@@ -8427,7 +7832,7 @@
*: "Main Menu"
</source>
<dest>
- *: "主选单"
+ *: "主菜单"
</dest>
<voice>
*: "主选单"
@@ -8453,15 +7858,12 @@
user: core
<source>
*: "End of Song List"
- archosplayer: "End of List"
</source>
<dest>
*: "曲目列表结束"
- archosplayer: "列表结束"
</dest>
<voice>
*: "曲目列表结束"
- archosplayer: "列表结束"
</voice>
</phrase>
<phrase>
@@ -8561,20 +7963,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SYSFONT_MODE
- desc: in wps F2 pressed
- user: core
- <source>
- *: "Mode:"
- </source>
- <dest>
- *: "模式:"
- </dest>
- <voice>
- *: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_AGC_VOICE
desc: AGC preset
user: core
@@ -8785,16 +8173,16 @@
</phrase>
<phrase>
id: LANG_REPLACE
- desc: in onplay menu. Replace the current playlist with a new one.
+ desc: deprecated
user: core
<source>
- *: "Play Next"
+ *: ""
</source>
<dest>
- *: "播放下一个"
+ *: ""
</dest>
<voice>
- *: "播放下一个"
+ *: ""
</voice>
</phrase>
<phrase>
@@ -9036,7 +8424,7 @@
*: "Context Menu"
</source>
<dest>
- *: "相关选单"
+ *: "相关菜单"
</dest>
<voice>
*: "相关选单"
@@ -9123,10 +8511,10 @@
*: "Show Filename Extensions"
</source>
<dest>
- *: "显示文件名后缀"
+ *: "显示后缀名"
</dest>
<voice>
- *: "显示文件名后缀"
+ *: "显示后缀名"
</voice>
</phrase>
<phrase>
@@ -9140,7 +8528,7 @@
*: "读取中...已读取%d%%(%s)"
</dest>
<voice>
- *: ""
+ *: "读取中...已读取%d%%(%s)"
</voice>
</phrase>
<phrase>
@@ -9266,7 +8654,7 @@
</phrase>
<phrase>
id: LANG_DITHERING
- desc: in the sound settings menu
+ desc: in the sound settings and some other menus
user: core
<source>
*: "Dithering"
@@ -9473,23 +8861,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SYSFONT_CHANNELS
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Channels"
- </source>
- <dest>
- *: none
- recording: "声道"
- </dest>
- <voice>
- *: none
- recording: "声道"
- </voice>
-</phrase>
-<phrase>
id: LANG_PLAYLISTS
desc: in the file view setting
user: core
@@ -9657,7 +9028,7 @@
*: "%s不存在"
</dest>
<voice>
- *: "不存在"
+ *: "%s不存在"
</voice>
</phrase>
<phrase>
@@ -10146,11 +9517,11 @@
</source>
<dest>
*: none
- accessory_supply: "给附件供电"
+ accessory_supply: "为附件供电"
</dest>
<voice>
*: none
- accessory_supply: "给附件供电"
+ accessory_supply: "为附件供电"
</voice>
</phrase>
<phrase>
@@ -10161,10 +9532,10 @@
*: "Unknown"
</source>
<dest>
- *: "不知道"
+ *: "未知"
</dest>
<voice>
- *: "不知道"
+ *: "未知"
</voice>
</phrase>
<phrase>
@@ -10207,15 +9578,15 @@
user: core
<source>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</source>
<dest>
*: none
- gigabeatfx,sansafuzeplus: "触摸板灵敏度"
+ fiiom3k,gigabeatfx,sansafuzeplus: "触摸板灵敏度"
</dest>
<voice>
*: none
- gigabeatfx,sansafuzeplus: "触摸板灵敏度"
+ fiiom3k,gigabeatfx,sansafuzeplus: "触摸板灵敏度"
</voice>
</phrase>
<phrase>
@@ -10914,10 +10285,10 @@
*: "Threshold"
</source>
<dest>
- *: "阀值"
+ *: "阈值"
</dest>
<voice>
- *: "阀值"
+ *: "阈值"
</voice>
</phrase>
<phrase>
@@ -11004,10 +10375,10 @@
*: "Knee"
</source>
<dest>
- *: "柔和度"
+ *: "拐点"
</dest>
<voice>
- *: "柔和度"
+ *: "拐点"
</voice>
</phrase>
<phrase>
@@ -11046,10 +10417,10 @@
*: "Soft Knee"
</source>
<dest>
- *: "柔和"
+ *: "软拐点"
</dest>
<voice>
- *: "柔和"
+ *: "软拐点"
</voice>
</phrase>
<phrase>
@@ -11105,10 +10476,10 @@
*: "Hard Knee"
</source>
<dest>
- *: "锐利"
+ *: "硬拐点"
</dest>
<voice>
- *: "锐利"
+ *: "硬拐点"
</voice>
</phrase>
<phrase>
@@ -11125,7 +10496,7 @@
</dest>
<voice>
*: none
- quickscreen: "Set as Top Quickscreen Item"
+ quickscreen: "设为快屏上键"
</voice>
</phrase>
<phrase>
@@ -11483,10 +10854,10 @@
*: "Timestretch"
</source>
<dest>
- *: "音调/音速"
+ *: "时间伸缩"
</dest>
<voice>
- *: "音调/音速"
+ *: "时间伸缩"
</voice>
</phrase>
<phrase>
@@ -11726,15 +11097,15 @@
user: core
<source>
*: none
- gigabeats: "Band %d Gain"
+ gigabeats,samsungypr1: "Band %d Gain"
</source>
<dest>
*: none
- gigabeats: "频段 %d 增益"
+ gigabeats,samsungypr1: "频段 %d 增益"
</dest>
<voice>
*: none
- gigabeats: "频段 增益"
+ gigabeats,samsungypr1: "频段 %d 增益"
</voice>
</phrase>
<phrase>
@@ -11870,15 +11241,15 @@
user: core
<source>
*: none
- creativezenxfi2,creativezenxfi3,gigabeats,mpiohd200,mpiohd300,sansafuzeplus: "3-D Enhancement"
+ depth_3d: "3-D Enhancement"
</source>
<dest>
*: none
- creativezenxfi2,creativezenxfi3,gigabeats,mpiohd200,mpiohd300,sansafuzeplus: "3-D增强"
+ depth_3d: "3-D增强"
</dest>
<voice>
*: none
- creativezenxfi2,creativezenxfi3,gigabeats,mpiohd200,mpiohd300,sansafuzeplus: "三维增强"
+ depth_3d: "三维增强"
</voice>
</phrase>
<phrase>
@@ -11918,15 +11289,15 @@
user: core
<source>
*: none
- gigabeats: "Band %d Frequency"
+ gigabeats,samsungypr1: "Band %d Frequency"
</source>
<dest>
*: none
- gigabeats: "频段 %d 频率"
+ gigabeats,samsungypr1: "频段 %d 频率"
</dest>
<voice>
*: none
- gigabeats: "频段 的频率"
+ gigabeats,samsungypr1: "频段 %d 的频率"
</voice>
</phrase>
<phrase>
@@ -11935,15 +11306,15 @@
user: core
<source>
*: none
- gigabeats: "Band %d Width"
+ gigabeats,samsungypr1: "Band %d Width"
</source>
<dest>
*: none
- gigabeats: "频段 %d 宽度"
+ gigabeats,samsungypr1: "频段 %d 宽度"
</dest>
<voice>
*: none
- gigabeats: "频段 的宽度"
+ gigabeats,samsungypr1: "频段 %d 的宽度"
</voice>
</phrase>
<phrase>
@@ -12031,15 +11402,15 @@
user: core
<source>
*: none
- gigabeats: "Wide"
+ gigabeats,samsungypr1: "Wide"
</source>
<dest>
*: none
- gigabeats: "宽度"
+ gigabeats,samsungypr1: "宽度"
</dest>
<voice>
*: none
- gigabeats: "宽度"
+ gigabeats,samsungypr1: "宽度"
</voice>
</phrase>
<phrase>
@@ -12076,15 +11447,15 @@
user: core
<source>
*: none
- gigabeats: "Narrow"
+ gigabeats,samsungypr1: "Narrow"
</source>
<dest>
*: none
- gigabeats: "窄"
+ gigabeats,samsungypr1: "窄"
</dest>
<voice>
*: none
- gigabeats: "窄"
+ gigabeats,samsungypr1: "窄"
</voice>
</phrase>
<phrase>
@@ -12093,15 +11464,15 @@
user: core
<source>
*: none
- gigabeats: "Advanced Tone Control Settings"
+ gigabeats,samsungypr1: "Advanced Tone Control Settings"
</source>
<dest>
*: none
- gigabeats: "高级音调控制设置"
+ gigabeats,samsungypr1: "高级硬件均衡器"
</dest>
<voice>
*: none
- gigabeats: "高级音调控制设置"
+ gigabeats,samsungypr1: "高级硬件均衡器"
</voice>
</phrase>
<phrase>
@@ -12155,15 +11526,15 @@
user: core
<source>
*: none
- gigabeats: "Tone Controls"
+ gigabeats,samsungypr1: "Tone Controls"
</source>
<dest>
*: none
- gigabeats: "音调控制"
+ gigabeats,samsungypr1: "硬件均衡器"
</dest>
<voice>
*: none
- gigabeats: "音调控制"
+ gigabeats,samsungypr1: "硬件均衡器"
</voice>
</phrase>
<phrase>
@@ -12549,6 +11920,20 @@
</voice>
</phrase>
<phrase>
+ id: LANG_SELECT_FOLDER
+ desc: in settings_menu
+ user: core
+ <source>
+ *: "Select one or more directories"
+ </source>
+ <dest>
+ *: "请选择一个或多个文件夹:"
+ </dest>
+ <voice>
+ *: "请选择一个或多个文件夹:"
+ </voice>
+</phrase>
+<phrase>
id: LANG_SELECT_DATABASE_DIRS
desc: in settings_menu
user: core
@@ -12559,7 +11944,7 @@
*: "仅扫描指定文件夹"
</dest>
<voice>
- *: "扫描媒体时扫描指定文件夹"
+ *: "仅扫描指定文件夹"
</voice>
</phrase>
<phrase>
@@ -12577,6 +11962,20 @@
</voice>
</phrase>
<phrase>
+ id: LANG_SURROUND
+ desc: in the sound settings menu
+ user: core
+ <source>
+ *: "Haas Surround"
+ </source>
+ <dest>
+ *: "哈斯环绕"
+ </dest>
+ <voice>
+ *: "哈斯环绕音效"
+ </voice>
+</phrase>
+<phrase>
id: LANG_FILTER_ROLL_OFF
desc: in sound settings
user: core
@@ -12656,20 +12055,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SURROUND
- desc: in the sound settings menu
- user: core
- <source>
- *: "Haas Surround"
- </source>
- <dest>
- *: "哈斯环绕"
- </dest>
- <voice>
- *: "哈斯环绕音效"
- </voice>
-</phrase>
-<phrase>
id: LANG_SURROUND_FX1
desc: in sound settings
user: core
diff --git a/apps/lang/chinese-trad.lang b/apps/lang/chinese-trad.lang
index 5af129590b..02e14645e0 100644
--- a/apps/lang/chinese-trad.lang
+++ b/apps/lang/chinese-trad.lang
@@ -18,6 +18,7 @@
# - Xinlu Huang
# - Harry Tu
# - Tse-Hsien Chiang
+# - papaloco
<phrase>
id: LANG_SET_BOOL_YES
desc: bool true representation
@@ -57,7 +58,7 @@
*: "開啟"
</dest>
<voice>
- *: "On"
+ *: "開啟"
</voice>
</phrase>
<phrase>
@@ -71,7 +72,7 @@
*: "關閉"
</dest>
<voice>
- *: "Off"
+ *: "關閉"
</voice>
</phrase>
<phrase>
@@ -85,7 +86,7 @@
*: "永遠"
</dest>
<voice>
- *: "Always"
+ *: "永遠"
</voice>
</phrase>
<phrase>
@@ -99,24 +100,7 @@
*: "讀取中..."
</dest>
<voice>
- *: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_CONFIRM_SHUTDOWN
- desc: in shutdown screen
- user: core
- <source>
- *: none
- soft_shutdown: "Press OFF to shut down"
- </source>
- <dest>
- *: none
- soft_shutdown: "按下 OFF 關機"
- </dest>
- <voice>
- *: none
- soft_shutdown: ""
+ *: "讀取中..."
</voice>
</phrase>
<phrase>
@@ -130,24 +114,7 @@
*: "關機中..."
</dest>
<voice>
- *: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_REMOVE_MMC
- desc: before acknowledging usb in case an MMC is inserted (Ondio)
- user: core
- <source>
- *: none
- archosondio*: "Please remove inserted MMC"
- </source>
- <dest>
- *: none
- archosondio*: "請移除插入的 MMC 卡"
- </dest>
- <voice>
- *: "Please remove multimedia card"
- archosondio*: "Please remove multimedia card"
+ *: "關機中..."
</voice>
</phrase>
<phrase>
@@ -161,7 +128,7 @@
*: "失敗"
</dest>
<voice>
- *: ""
+ *: "失敗"
</voice>
</phrase>
<phrase>
@@ -175,7 +142,7 @@
*: "最近的書籤"
</dest>
<voice>
- *: "Recent Bookmarks"
+ *: "最近的書籤"
</voice>
</phrase>
<phrase>
@@ -203,7 +170,7 @@
*: "一般設定"
</dest>
<voice>
- *: "General Settings"
+ *: "一般設定"
</voice>
</phrase>
<phrase>
@@ -217,7 +184,7 @@
*: "管理設定"
</dest>
<voice>
- *: "Manage Settings"
+ *: "管理設定"
</voice>
</phrase>
<phrase>
@@ -248,7 +215,7 @@
</dest>
<voice>
*: none
- radio: "FM Radio"
+ radio: "收聽 FM 廣播"
</voice>
</phrase>
<phrase>
@@ -265,7 +232,7 @@
</dest>
<voice>
*: none
- recording: "Recording"
+ recording: "錄音"
</voice>
</phrase>
<phrase>
@@ -279,24 +246,7 @@
*: "插件"
</dest>
<voice>
- *: "Plugins"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SHUTDOWN
- desc: in main menu
- user: core
- <source>
- *: none
- soft_shutdown: "Shut down"
- </source>
- <dest>
- *: none
- soft_shutdown: "關機"
- </dest>
- <voice>
- *: none
- soft_shutdown: "Shut down"
+ *: "插件"
</voice>
</phrase>
<phrase>
@@ -310,7 +260,7 @@
*: "音量"
</dest>
<voice>
- *: "Volume"
+ *: "音量"
</voice>
</phrase>
<phrase>
@@ -324,7 +274,7 @@
*: "低頻音量"
</dest>
<voice>
- *: "Bass"
+ *: "低頻音量"
</voice>
</phrase>
<phrase>
@@ -338,7 +288,7 @@
*: "高頻音量"
</dest>
<voice>
- *: "Treble"
+ *: "高頻音量"
</voice>
</phrase>
<phrase>
@@ -352,7 +302,7 @@
*: "平衡"
</dest>
<voice>
- *: "Balance"
+ *: "平衡"
</voice>
</phrase>
<phrase>
@@ -366,7 +316,7 @@
*: "立體聲"
</dest>
<voice>
- *: "Stereo"
+ *: "立體聲"
</voice>
</phrase>
<phrase>
@@ -380,7 +330,7 @@
*: "單聲道"
</dest>
<voice>
- *: "Mono"
+ *: "單聲道"
</voice>
</phrase>
<phrase>
@@ -394,7 +344,7 @@
*: "自訂"
</dest>
<voice>
- *: "Custom"
+ *: "自訂"
</voice>
</phrase>
<phrase>
@@ -408,7 +358,7 @@
*: "單聲道 (左)"
</dest>
<voice>
- *: "Mono Left"
+ *: "單聲道 (左)"
</voice>
</phrase>
<phrase>
@@ -422,7 +372,7 @@
*: "單聲道 (右)"
</dest>
<voice>
- *: "Mono Right"
+ *: "單聲道 (右)"
</voice>
</phrase>
<phrase>
@@ -436,7 +386,7 @@
*: "卡啦 OK"
</dest>
<voice>
- *: "Karaoke"
+ *: "卡啦 OK"
</voice>
</phrase>
<phrase>
@@ -450,160 +400,7 @@
*: "立體聲寬度"
</dest>
<voice>
- *: "Stereo Width"
- </voice>
-</phrase>
-<phrase>
- id: LANG_LOUDNESS
- desc: in sound_settings
- user: core
- <source>
- *: none
- masf: "Loudness"
- </source>
- <dest>
- *: none
- masf: "響度"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_AUTOVOL
- desc: in sound_settings
- user: core
- <source>
- *: none
- masf: "Auto Volume"
- </source>
- <dest>
- *: none
- masf: "自動音量調整"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_DECAY
- desc: in sound_settings
- user: core
- <source>
- *: none
- masf: "AV Decay Time"
- </source>
- <dest>
- *: none
- masf: "自動音量調整衰減時間"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_SUPERBASS
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "Super Bass"
- </source>
- <dest>
- *: none
- masf: "超低音"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_ENABLE
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Enable"
- </source>
- <dest>
- *: none
- masf: "MDB 有效"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_STRENGTH
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Strength"
- </source>
- <dest>
- *: none
- masf: "MDB 強度"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_HARMONICS
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Harmonics"
- </source>
- <dest>
- *: none
- masf: "MDB 泛音"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_CENTER
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Centre Frequency"
- </source>
- <dest>
- *: none
- masf: "MDB 中心頻率"
- </dest>
- <voice>
- *: none
- masf: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_MDB_SHAPE
- desc: in sound settings
- user: core
- <source>
- *: none
- masf: "MDB Shape"
- </source>
- <dest>
- *: none
- masf: "MDB 形狀"
- </dest>
- <voice>
- *: none
- masf: ""
+ *: "立體聲寬度"
</voice>
</phrase>
<phrase>
@@ -617,7 +414,7 @@
*: "交叉供音"
</dest>
<voice>
- *: ""
+ *: "交叉供音"
</voice>
</phrase>
<phrase>
@@ -631,7 +428,7 @@
*: "等化器"
</dest>
<voice>
- *: ""
+ *: "等化器"
</voice>
</phrase>
<phrase>
@@ -659,7 +456,7 @@
*: "檔案檢視設定"
</dest>
<voice>
- *: "File View"
+ *: "檔案檢視設定"
</voice>
</phrase>
<phrase>
@@ -673,7 +470,7 @@
*: "顯示設定"
</dest>
<voice>
- *: "Display"
+ *: "顯示設定"
</voice>
</phrase>
<phrase>
@@ -687,7 +484,7 @@
*: "系統設定"
</dest>
<voice>
- *: "System"
+ *: "系統設定"
</voice>
</phrase>
<phrase>
@@ -701,7 +498,7 @@
*: "書籤設定"
</dest>
<voice>
- *: "Bookmarking"
+ *: "書籤設定"
</voice>
</phrase>
<phrase>
@@ -715,7 +512,7 @@
*: "語言設定"
</dest>
<voice>
- *: "Language"
+ *: "語言設定"
</voice>
</phrase>
<phrase>
@@ -729,7 +526,7 @@
*: "語音"
</dest>
<voice>
- *: "Voice"
+ *: "語音"
</voice>
</phrase>
<phrase>
@@ -743,7 +540,7 @@
*: "瀏覽 .cfg 檔案"
</dest>
<voice>
- *: "Browse configuration files"
+ *: "瀏覽 .cfg 檔案"
</voice>
</phrase>
<phrase>
@@ -757,7 +554,7 @@
*: "重新設定"
</dest>
<voice>
- *: "Reset Settings"
+ *: "重新設定"
</voice>
</phrase>
<phrase>
@@ -771,7 +568,7 @@
*: "已清除"
</dest>
<voice>
- *: ""
+ *: "已清除"
</voice>
</phrase>
<phrase>
@@ -802,7 +599,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "錄音設定"
</voice>
</phrase>
<phrase>
@@ -816,7 +613,7 @@
*: "開啟等化器"
</dest>
<voice>
- *: ""
+ *: "開啟等化器"
</voice>
</phrase>
<phrase>
@@ -830,7 +627,7 @@
*: "圖解等化器"
</dest>
<voice>
- *: ""
+ *: "圖解等化器"
</voice>
</phrase>
<phrase>
@@ -844,7 +641,7 @@
*: "預切"
</dest>
<voice>
- *: ""
+ *: "預切"
</voice>
</phrase>
<phrase>
@@ -858,7 +655,7 @@
*: "簡易等化器設定"
</dest>
<voice>
- *: ""
+ *: "簡易等化器設定"
</voice>
</phrase>
<phrase>
@@ -872,7 +669,7 @@
*: "進階等化器設定"
</dest>
<voice>
- *: ""
+ *: "進階等化器設定"
</voice>
</phrase>
<phrase>
@@ -886,7 +683,7 @@
*: "儲存等化器設定"
</dest>
<voice>
- *: ""
+ *: "儲存等化器設定"
</voice>
</phrase>
<phrase>
@@ -900,7 +697,7 @@
*: "瀏覽等化器設定"
</dest>
<voice>
- *: ""
+ *: "瀏覽等化器設定"
</voice>
</phrase>
<phrase>
@@ -928,7 +725,7 @@
*: "%d Hz 頻帶增益"
</dest>
<voice>
- *: ""
+ *: "%d Hz 頻帶增益"
</voice>
</phrase>
<phrase>
@@ -942,7 +739,7 @@
*: "低峰值過濾"
</dest>
<voice>
- *: ""
+ *: "低峰值過濾"
</voice>
</phrase>
<phrase>
@@ -956,7 +753,7 @@
*: "峰值過濾 %d"
</dest>
<voice>
- *: ""
+ *: "峰值過濾 %d"
</voice>
</phrase>
<phrase>
@@ -970,7 +767,7 @@
*: "高峰值過濾"
</dest>
<voice>
- *: ""
+ *: "高峰值過濾"
</voice>
</phrase>
<phrase>
@@ -984,7 +781,7 @@
*: "截斷頻率"
</dest>
<voice>
- *: ""
+ *: "截斷頻率"
</voice>
</phrase>
<phrase>
@@ -998,7 +795,7 @@
*: "中心頻率"
</dest>
<voice>
- *: ""
+ *: "中心頻率"
</voice>
</phrase>
<phrase>
@@ -1026,7 +823,7 @@
*: "建立播放清單"
</dest>
<voice>
- *: "Create Playlist"
+ *: "建立播放清單"
</voice>
</phrase>
<phrase>
@@ -1040,7 +837,7 @@
*: "檢視現在的播放清單"
</dest>
<voice>
- *: "View Current Playlist"
+ *: "檢視現在的播放清單"
</voice>
</phrase>
<phrase>
@@ -1054,7 +851,7 @@
*: "儲存現在的播放清單"
</dest>
<voice>
- *: "Save Current Playlist"
+ *: "儲存現在的播放清單"
</voice>
</phrase>
<phrase>
@@ -1068,7 +865,7 @@
*: "遞迴插入目錄"
</dest>
<voice>
- *: "Recursively Insert Directories"
+ *: "遞迴插入目錄"
</voice>
</phrase>
<phrase>
@@ -1082,7 +879,7 @@
*: "消除動態播放清單時警示"
</dest>
<voice>
- *: ""
+ *: "消除動態播放清單時警示"
</voice>
</phrase>
<phrase>
@@ -1110,7 +907,7 @@
*: "除錯 (請勿進入!)"
</dest>
<voice>
- *: "Debug, keep out!"
+ *: "除錯 (請勿進入!)"
</voice>
</phrase>
<phrase>
@@ -1124,7 +921,7 @@
*: "亂序播放"
</dest>
<voice>
- *: "Shuffle"
+ *: "亂序播放"
</voice>
</phrase>
<phrase>
@@ -1138,7 +935,7 @@
*: "重覆"
</dest>
<voice>
- *: "Repeat"
+ *: "重覆"
</voice>
</phrase>
<phrase>
@@ -1152,7 +949,7 @@
*: "一首"
</dest>
<voice>
- *: "One"
+ *: "一首"
</voice>
</phrase>
<phrase>
@@ -1180,7 +977,7 @@
*: "先播放選擇的檔案"
</dest>
<voice>
- *: "Play Selected File First"
+ *: "先播放選擇的檔案"
</voice>
</phrase>
<phrase>
@@ -1194,7 +991,7 @@
*: "快轉/倒轉"
</dest>
<voice>
- *: "Fast forward and Rewind"
+ *: "快轉/倒轉"
</voice>
</phrase>
<phrase>
@@ -1210,7 +1007,7 @@
flash_storage: none
</dest>
<voice>
- *: "Anti-Skip Buffer"
+ *: "防止中斷緩衝區"
flash_storage: none
</voice>
</phrase>
@@ -1225,7 +1022,7 @@
*: "停止/暫停時淡出"
</dest>
<voice>
- *: "Fade On Stop and Pause"
+ *: "停止/暫停時淡出"
</voice>
</phrase>
<phrase>
@@ -1239,7 +1036,7 @@
*: "派對模式"
</dest>
<voice>
- *: "Party Mode"
+ *: "派對模式"
</voice>
</phrase>
<phrase>
@@ -1256,7 +1053,7 @@
</dest>
<voice>
*: none
- crossfade: "Crossfade"
+ crossfade: "交叉淡變"
</voice>
</phrase>
<phrase>
@@ -1267,10 +1064,10 @@
*: "Replaygain"
</source>
<dest>
- *: "Replaygain"
+ *: "播放增益"
</dest>
<voice>
- *: "Replaygain"
+ *: "播放增益"
</voice>
</phrase>
<phrase>
@@ -1298,7 +1095,7 @@
*: "弱"
</dest>
<voice>
- *: ""
+ *: "弱"
</voice>
</phrase>
<phrase>
@@ -1312,7 +1109,7 @@
*: "中"
</dest>
<voice>
- *: ""
+ *: "中"
</voice>
</phrase>
<phrase>
@@ -1326,7 +1123,7 @@
*: "強"
</dest>
<voice>
- *: ""
+ *: "強"
</voice>
</phrase>
<phrase>
@@ -1343,7 +1140,7 @@
</dest>
<voice>
*: none
- spdif_power: ""
+ spdif_power: "光纖輸出"
</voice>
</phrase>
<phrase>
@@ -1357,7 +1154,7 @@
*: "自動替換目錄"
</dest>
<voice>
- *: "Auto-Change Directory"
+ *: "自動替換目錄"
</voice>
</phrase>
<phrase>
@@ -1371,7 +1168,7 @@
*: "資料庫"
</dest>
<voice>
- *: ""
+ *: "資料庫"
</voice>
</phrase>
<phrase>
@@ -1388,7 +1185,7 @@
</dest>
<voice>
*: none
- tc_ramcache: ""
+ tc_ramcache: "載入到記憶體"
</voice>
</phrase>
<phrase>
@@ -1402,7 +1199,7 @@
*: "即刻初始化"
</dest>
<voice>
- *: "Initialize Now"
+ *: "即刻初始化"
</voice>
</phrase>
<phrase>
@@ -1416,7 +1213,7 @@
*: "在背景更新中"
</dest>
<voice>
- *: ""
+ *: "在背景更新中"
</voice>
</phrase>
<phrase>
@@ -1430,7 +1227,7 @@
*: "處理資料庫"
</dest>
<voice>
- *: ""
+ *: "處理資料庫"
</voice>
</phrase>
<phrase>
@@ -1444,7 +1241,7 @@
*: "收集運行時資料"
</dest>
<voice>
- *: "Gather Runtime Data"
+ *: "收集運行時資料"
</voice>
</phrase>
<phrase>
@@ -1458,7 +1255,7 @@
*: "排序時區別大小寫"
</dest>
<voice>
- *: "Sort Case Sensitive"
+ *: "排序時區別大小寫"
</voice>
</phrase>
<phrase>
@@ -1472,7 +1269,7 @@
*: "排序目錄"
</dest>
<voice>
- *: "sort directories"
+ *: "排序目錄"
</voice>
</phrase>
<phrase>
@@ -1486,7 +1283,7 @@
*: "排序檔案"
</dest>
<voice>
- *: "sort files"
+ *: "排序檔案"
</voice>
</phrase>
<phrase>
@@ -1500,7 +1297,7 @@
*: "字母順序"
</dest>
<voice>
- *: "Alphabetical"
+ *: "字母順序"
</voice>
</phrase>
<phrase>
@@ -1514,7 +1311,7 @@
*: "依日期"
</dest>
<voice>
- *: "By Date"
+ *: "依日期"
</voice>
</phrase>
<phrase>
@@ -1528,7 +1325,7 @@
*: "依最新日期"
</dest>
<voice>
- *: "By Newest Date"
+ *: "依最新日期"
</voice>
</phrase>
<phrase>
@@ -1542,7 +1339,7 @@
*: "依類型"
</dest>
<voice>
- *: "By Type"
+ *: "依類型"
</voice>
</phrase>
<phrase>
@@ -1556,7 +1353,7 @@
*: "顯示檔案"
</dest>
<voice>
- *: "Show Files"
+ *: "顯示檔案"
</voice>
</phrase>
<phrase>
@@ -1570,7 +1367,7 @@
*: "支援的"
</dest>
<voice>
- *: "Supported"
+ *: "支援的"
</voice>
</phrase>
<phrase>
@@ -1584,7 +1381,7 @@
*: "音樂"
</dest>
<voice>
- *: "Music"
+ *: "音樂"
</voice>
</phrase>
<phrase>
@@ -1598,7 +1395,7 @@
*: "跟隨播放清單"
</dest>
<voice>
- *: "Follow Playlist"
+ *: "跟隨播放清單"
</voice>
</phrase>
<phrase>
@@ -1612,7 +1409,7 @@
*: "顯示圖示"
</dest>
<voice>
- *: "Show Icons"
+ *: "顯示圖示"
</voice>
</phrase>
<phrase>
@@ -1626,7 +1423,7 @@
*: "瀏覽字形"
</dest>
<voice>
- *: "字形"
+ *: "瀏覽字形"
</voice>
</phrase>
<phrase>
@@ -1657,7 +1454,7 @@
</dest>
<voice>
*: none
- remote: ""
+ remote: "瀏覽 .rwps 檔案"
</voice>
</phrase>
<phrase>
@@ -1671,7 +1468,7 @@
*: "液晶顯示設定"
</dest>
<voice>
- *: "LCD Settings"
+ *: "液晶顯示設定"
</voice>
</phrase>
<phrase>
@@ -1688,7 +1485,7 @@
</dest>
<voice>
*: none
- remote: ""
+ remote: "線控液晶顯示設定"
</voice>
</phrase>
<phrase>
@@ -1702,7 +1499,7 @@
*: "捲動設定"
</dest>
<voice>
- *: "Scrolling"
+ *: "捲動設定"
</voice>
</phrase>
<phrase>
@@ -1716,7 +1513,7 @@
*: "狀態列/捲動軸"
</dest>
<voice>
- *: ""
+ *: "狀態列/捲動軸"
</voice>
</phrase>
<phrase>
@@ -1725,15 +1522,12 @@
user: core
<source>
*: "Peak Meter"
- masd: none
</source>
<dest>
*: "高峰顯示表"
- masd: none
</dest>
<voice>
- *: ""
- masd: none
+ *: "高峰顯示表"
</voice>
</phrase>
<phrase>
@@ -1747,7 +1541,7 @@
*: "預設編碼"
</dest>
<voice>
- *: "Default codepage"
+ *: "預設編碼"
</voice>
</phrase>
<phrase>
@@ -1873,7 +1667,7 @@
*: "日文(SJIS)"
</dest>
<voice>
- *: "Japanese"
+ *: "日文(SJIS)"
</voice>
</phrase>
<phrase>
@@ -1887,7 +1681,7 @@
*: "簡體中文 (GB2312)"
</dest>
<voice>
- *: ""
+ *: "簡體中文 (GB2312)"
</voice>
</phrase>
<phrase>
@@ -1901,7 +1695,7 @@
*: "韓文 (KSX1001)"
</dest>
<voice>
- *: ""
+ *: "韓文 (KSX1001)"
</voice>
</phrase>
<phrase>
@@ -1915,7 +1709,7 @@
*: "正體中文 (BIG5)"
</dest>
<voice>
- *: ""
+ *: "正體中文 (BIG5)"
</voice>
</phrase>
<phrase>
@@ -1929,7 +1723,7 @@
*: "萬國碼 (UTF-8)"
</dest>
<voice>
- *: "Unicode"
+ *: "萬國碼 (UTF-8)"
</voice>
</phrase>
<phrase>
@@ -1943,7 +1737,7 @@
*: "電池"
</dest>
<voice>
- *: "Battery"
+ *: "電池"
</voice>
</phrase>
<phrase>
@@ -1957,7 +1751,7 @@
*: "硬碟"
</dest>
<voice>
- *: "Disk"
+ *: "硬碟"
</voice>
</phrase>
<phrase>
@@ -1974,7 +1768,7 @@
</dest>
<voice>
*: none
- rtc: ""
+ rtc: "時間與日期"
</voice>
</phrase>
<phrase>
@@ -1988,7 +1782,7 @@
*: "閒置關閉電源"
</dest>
<voice>
- *: "Idle Poweroff"
+ *: "閒置關閉電源"
</voice>
</phrase>
<phrase>
@@ -2002,7 +1796,7 @@
*: "睡眠定時"
</dest>
<voice>
- *: "Sleep Timer"
+ *: "睡眠定時"
</voice>
</phrase>
<phrase>
@@ -2019,7 +1813,7 @@
</dest>
<voice>
*: none
- alarm: ""
+ alarm: "鬧鈴"
</voice>
</phrase>
<phrase>
@@ -2033,7 +1827,7 @@
*: "限制"
</dest>
<voice>
- *: "Limits"
+ *: "限制"
</voice>
</phrase>
<phrase>
@@ -2050,7 +1844,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "聲音輸入"
</voice>
</phrase>
<phrase>
@@ -2067,7 +1861,7 @@
</dest>
<voice>
*: none
- charging: ""
+ charging: "車用變壓器模式"
</voice>
</phrase>
<phrase>
@@ -2081,7 +1875,7 @@
*: "停止時建立書籤"
</dest>
<voice>
- *: "Bookmark on Stop"
+ *: "停止時建立書籤"
</voice>
</phrase>
<phrase>
@@ -2095,7 +1889,7 @@
*: "是 - 只存在最近書籤"
</dest>
<voice>
- *: "Yes - Recent only"
+ *: "是 - 只存在最近書籤"
</voice>
</phrase>
<phrase>
@@ -2109,7 +1903,7 @@
*: "詢問 - 只存在最近書籤"
</dest>
<voice>
- *: "Ask - Recent only"
+ *: "詢問 - 只存在最近書籤"
</voice>
</phrase>
<phrase>
@@ -2123,7 +1917,7 @@
*: "載入最近書籤"
</dest>
<voice>
- *: "Load Last Bookmark"
+ *: "載入最近書籤"
</voice>
</phrase>
<phrase>
@@ -2137,21 +1931,7 @@
*: "維護最近書籤清單?"
</dest>
<voice>
- *: "Maintain a List of Recent Bookmarks?"
- </voice>
-</phrase>
-<phrase>
- id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY
- desc: Save only on bookmark for each playlist in recent bookmarks
- user: core
- <source>
- *: "Unique only"
- </source>
- <dest>
- *: "只有唯一的"
- </dest>
- <voice>
- *: "Unique only"
+ *: "維護最近書籤清單?"
</voice>
</phrase>
<phrase>
@@ -2165,7 +1945,7 @@
*: "語音選單"
</dest>
<voice>
- *: "Voice Menus"
+ *: "語音選單"
</voice>
</phrase>
<phrase>
@@ -2179,7 +1959,7 @@
*: "語音目錄"
</dest>
<voice>
- *: "Voice Directories"
+ *: "語音目錄"
</voice>
</phrase>
<phrase>
@@ -2193,7 +1973,7 @@
*: "語音檔案名稱"
</dest>
<voice>
- *: "Voice Filenames"
+ *: "語音檔案名稱"
</voice>
</phrase>
<phrase>
@@ -2207,7 +1987,7 @@
*: "數字"
</dest>
<voice>
- *: "Numbers"
+ *: "數字"
</voice>
</phrase>
<phrase>
@@ -2221,7 +2001,7 @@
*: "拼字"
</dest>
<voice>
- *: "Spell"
+ *: "拼字"
</voice>
</phrase>
<phrase>
@@ -2239,23 +2019,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_QUALITY
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording_hwcodec: "Quality"
- </source>
- <dest>
- *: none
- recording_hwcodec: "品質"
- </dest>
- <voice>
- *: none
- recording_hwcodec: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_FREQUENCY
desc: in recording and playback settings
user: core
@@ -2269,7 +2032,7 @@
</dest>
<voice>
*: none
- play_frequency,recording: ""
+ play_frequency,recording: "頻率"
</voice>
</phrase>
<phrase>
@@ -2286,7 +2049,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "來源"
</voice>
</phrase>
<phrase>
@@ -2305,7 +2068,8 @@
</dest>
<voice>
*: none
- iriverh100,iriverh120,iriverh300,recording: ""
+ iriverh100,iriverh120,iriverh300: "內置麥克風"
+ recording: "麥克風"
</voice>
</phrase>
<phrase>
@@ -2322,24 +2086,7 @@
</dest>
<voice>
*: none
- recording: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_RECORDING_EDITABLE
- desc: Editable recordings setting
- user: core
- <source>
- *: none
- recording_hwcodec: "Independent Frames"
- </source>
- <dest>
- *: none
- recording_hwcodec: "獨立框架"
- </dest>
- <voice>
- *: none
- recording_hwcodec: ""
+ recording: "數位"
</voice>
</phrase>
<phrase>
@@ -2356,7 +2103,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "檔案分割選項"
</voice>
</phrase>
<phrase>
@@ -2373,7 +2120,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "預錄時間"
</voice>
</phrase>
<phrase>
@@ -2390,7 +2137,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "目錄"
</voice>
</phrase>
<phrase>
@@ -2407,7 +2154,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "觸發"
</voice>
</phrase>
<phrase>
@@ -2424,7 +2171,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "削波背光"
</voice>
</phrase>
<phrase>
@@ -2441,7 +2188,7 @@
</dest>
<voice>
*: none
- remote: ""
+ remote: "只有主機"
</voice>
</phrase>
<phrase>
@@ -2458,7 +2205,7 @@
</dest>
<voice>
*: none
- remote: ""
+ remote: "只有線控"
</voice>
</phrase>
<phrase>
@@ -2475,7 +2222,7 @@
</dest>
<voice>
*: none
- remote: ""
+ remote: "主機與線控"
</voice>
</phrase>
<phrase>
@@ -2489,7 +2236,7 @@
*: "快轉/倒轉最小間隔"
</dest>
<voice>
- *: "Minimum Step"
+ *: "快轉/倒轉最小間隔"
</voice>
</phrase>
<phrase>
@@ -2503,7 +2250,7 @@
*: "快轉/倒轉加速"
</dest>
<voice>
- *: "Acceleration"
+ *: "快轉/倒轉加速"
</voice>
</phrase>
<phrase>
@@ -2520,7 +2267,7 @@
</dest>
<voice>
*: none
- crossfade: ""
+ crossfade: "開啟Crossfade"
</voice>
</phrase>
<phrase>
@@ -2537,7 +2284,7 @@
</dest>
<voice>
*: none
- crossfade: "Manual Track Skip Only"
+ crossfade: "只在跳到另一首時"
</voice>
</phrase>
<phrase>
@@ -2554,7 +2301,7 @@
</dest>
<voice>
*: none
- crossfade: "Fade-In Delay"
+ crossfade: "淡入延遲"
</voice>
</phrase>
<phrase>
@@ -2571,7 +2318,7 @@
</dest>
<voice>
*: none
- crossfade: "Fade-In Duration"
+ crossfade: "淡入期間"
</voice>
</phrase>
<phrase>
@@ -2588,7 +2335,7 @@
</dest>
<voice>
*: none
- crossfade: "Fade-Out Delay"
+ crossfade: "淡出延遲"
</voice>
</phrase>
<phrase>
@@ -2605,7 +2352,7 @@
</dest>
<voice>
*: none
- crossfade: "Fade-Out Duration"
+ crossfade: "淡出期間"
</voice>
</phrase>
<phrase>
@@ -2622,7 +2369,7 @@
</dest>
<voice>
*: none
- crossfade: "Fade-Out Mode"
+ crossfade: "淡出模式"
</voice>
</phrase>
<phrase>
@@ -2639,7 +2386,7 @@
</dest>
<voice>
*: none
- crossfade: "Mix"
+ crossfade: "混合"
</voice>
</phrase>
<phrase>
@@ -2653,7 +2400,7 @@
*: "防止削波"
</dest>
<voice>
- *: "Prevent Clipping"
+ *: "防止削波"
</voice>
</phrase>
<phrase>
@@ -2664,10 +2411,10 @@
*: "Replaygain Type"
</source>
<dest>
- *: "Replaygain 種類"
+ *: "播放增益種類"
</dest>
<voice>
- *: "Replaygain Type"
+ *: "播放增益種類"
</voice>
</phrase>
<phrase>
@@ -2678,10 +2425,10 @@
*: "Album Gain"
</source>
<dest>
- *: "Album Gain"
+ *: "專輯增益"
</dest>
<voice>
- *: "Album Gain"
+ *: "專輯增益"
</voice>
</phrase>
<phrase>
@@ -2692,10 +2439,10 @@
*: "Track Gain"
</source>
<dest>
- *: "Track Gain"
+ *: "單曲增益"
</dest>
<voice>
- *: "Track Gain"
+ *: "單曲增益"
</voice>
</phrase>
<phrase>
@@ -2706,10 +2453,10 @@
*: "Track Gain if Shuffling"
</source>
<dest>
- *: "亂序播放時使用 Track Gain"
+ *: "亂序播放時使用單曲增益"
</dest>
<voice>
- *: "Track Gain if Shuffling"
+ *: "亂序播放時使用單曲增益"
</voice>
</phrase>
<phrase>
@@ -2720,10 +2467,10 @@
*: "Pre-amp"
</source>
<dest>
- *: "前置放大"
+ *: "前級放大器"
</dest>
<voice>
- *: "Preamp"
+ *: "前級放大器"
</voice>
</phrase>
<phrase>
@@ -2737,7 +2484,7 @@
*: "背光"
</dest>
<voice>
- *: "Backlight"
+ *: "背光"
</voice>
</phrase>
<phrase>
@@ -2754,7 +2501,7 @@
</dest>
<voice>
*: none
- charging: "Backlight (While Plugged In)"
+ charging: "背光 (使用外部電源時)"
</voice>
</phrase>
<phrase>
@@ -2768,7 +2515,7 @@
*: "標題背光"
</dest>
<voice>
- *: "Caption Backlight"
+ *: "標題背光"
</voice>
</phrase>
<phrase>
@@ -2785,7 +2532,7 @@
</dest>
<voice>
*: none
- backlight_fade*: "Backlight Fade In"
+ backlight_fade*: "背光淡入"
</voice>
</phrase>
<phrase>
@@ -2802,7 +2549,7 @@
</dest>
<voice>
*: none
- backlight_fade*: "Backlight Fade Out"
+ backlight_fade*: "背光淡出"
</voice>
</phrase>
<phrase>
@@ -2819,7 +2566,7 @@
</dest>
<voice>
*: none
- backlight_brightness: "Brightness"
+ backlight_brightness: "亮度"
</voice>
</phrase>
<phrase>
@@ -2833,7 +2580,7 @@
*: "對比"
</dest>
<voice>
- *: "Contrast"
+ *: "對比"
</voice>
</phrase>
<phrase>
@@ -2864,7 +2611,7 @@
</dest>
<voice>
*: none
- lcd_invert,remote_lcd_invert: "LCD Mode"
+ lcd_invert,remote_lcd_invert: "液晶顯示模式"
</voice>
</phrase>
<phrase>
@@ -2881,7 +2628,7 @@
</dest>
<voice>
*: none
- lcd_invert,remote_lcd_invert: "Inverse"
+ lcd_invert,remote_lcd_invert: "反轉"
</voice>
</phrase>
<phrase>
@@ -2895,7 +2642,7 @@
*: "上下反轉"
</dest>
<voice>
- *: "Upside Down"
+ *: "上下反轉"
</voice>
</phrase>
<phrase>
@@ -2923,7 +2670,7 @@
*: "指示器"
</dest>
<voice>
- *: "Pointer"
+ *: "指示器"
</voice>
</phrase>
<phrase>
@@ -2937,7 +2684,7 @@
*: "整行反白"
</dest>
<voice>
- *: "Inverse Bar"
+ *: "整行反白"
</voice>
</phrase>
<phrase>
@@ -2954,7 +2701,7 @@
</dest>
<voice>
*: none
- lcd_non-mono: "Clear Backdrop"
+ lcd_non-mono: "清除背景"
</voice>
</phrase>
<phrase>
@@ -2971,7 +2718,7 @@
</dest>
<voice>
*: none
- lcd_color: "Background Colour"
+ lcd_color: "背景顏色"
</voice>
</phrase>
<phrase>
@@ -2988,7 +2735,7 @@
</dest>
<voice>
*: none
- lcd_color: "Foreground Colour"
+ lcd_color: "前景顏色"
</voice>
</phrase>
<phrase>
@@ -3005,7 +2752,7 @@
</dest>
<voice>
*: none
- lcd_color: "Reset Colours"
+ lcd_color: "重設顏色"
</voice>
</phrase>
<phrase>
@@ -3022,7 +2769,7 @@
</dest>
<voice>
*: none
- remote_ticking: "Reduce Ticking"
+ remote_ticking: "減少滴答聲"
</voice>
</phrase>
<phrase>
@@ -3036,7 +2783,7 @@
*: "捲動速度"
</dest>
<voice>
- *: "Scroll Speed"
+ *: "捲動速度"
</voice>
</phrase>
<phrase>
@@ -3064,7 +2811,7 @@
*: "捲動開始延遲"
</dest>
<voice>
- *: "Scroll Start Delay"
+ *: "捲動開始延遲"
</voice>
</phrase>
<phrase>
@@ -3078,7 +2825,7 @@
*: "捲動間隔"
</dest>
<voice>
- *: "Scroll Step Size"
+ *: "捲動間隔"
</voice>
</phrase>
<phrase>
@@ -3106,7 +2853,7 @@
*: "雙向捲動限制"
</dest>
<voice>
- *: "Bidirectional Scroll Limit"
+ *: "雙向捲動限制"
</voice>
</phrase>
<phrase>
@@ -3120,7 +2867,7 @@
*: "畫面範圍外捲動"
</dest>
<voice>
- *: "Screen Scrolls Out Of View"
+ *: "畫面範圍外捲動"
</voice>
</phrase>
<phrase>
@@ -3134,7 +2881,7 @@
*: "畫面捲動間隔"
</dest>
<voice>
- *: "Screen Scroll Step Size"
+ *: "畫面捲動間隔"
</voice>
</phrase>
<phrase>
@@ -3148,7 +2895,7 @@
*: "頁捲動"
</dest>
<voice>
- *: "Paged scrolling"
+ *: "頁捲動"
</voice>
</phrase>
<phrase>
@@ -3162,7 +2909,7 @@
*: "捲動軸"
</dest>
<voice>
- *: "Scroll Bar"
+ *: "捲動軸"
</voice>
</phrase>
<phrase>
@@ -3176,24 +2923,7 @@
*: "狀態列"
</dest>
<voice>
- *: "Status Bar"
- </voice>
-</phrase>
-<phrase>
- id: LANG_BUTTON_BAR
- desc: in settings menu
- user: core
- <source>
- *: none
- recorder_pad: "Button Bar"
- </source>
- <dest>
- *: none
- recorder_pad: "按鈕列"
- </dest>
- <voice>
- *: none
- recorder_pad: "Button Bar"
+ *: "狀態列"
</voice>
</phrase>
<phrase>
@@ -3207,7 +2937,7 @@
*: "音量顯示"
</dest>
<voice>
- *: "Volume Display"
+ *: "音量顯示"
</voice>
</phrase>
<phrase>
@@ -3221,7 +2951,7 @@
*: "電池顯示"
</dest>
<voice>
- *: "Battery Display"
+ *: "電池顯示"
</voice>
</phrase>
<phrase>
@@ -3235,7 +2965,7 @@
*: "圖形"
</dest>
<voice>
- *: "Graphic"
+ *: "圖形"
</voice>
</phrase>
<phrase>
@@ -3249,7 +2979,7 @@
*: "數值"
</dest>
<voice>
- *: "Numeric"
+ *: "數值"
</voice>
</phrase>
<phrase>
@@ -3258,15 +2988,12 @@
user: core
<source>
*: "Peak Release"
- masd: none
</source>
<dest>
- *: "Peak Release"
- masd: none
+ *: "峰值釋放速度"
</dest>
<voice>
- *: "Peak Release"
- masd: none
+ *: "峰值釋放速度"
</voice>
</phrase>
<phrase>
@@ -3275,15 +3002,12 @@
user: core
<source>
*: "Peak Hold Time"
- masd: none
</source>
<dest>
*: "高峰記號停留時間"
- masd: none
</dest>
<voice>
- *: "Peak Hold Time"
- masd: none
+ *: "高峰記號停留時間"
</voice>
</phrase>
<phrase>
@@ -3292,15 +3016,12 @@
user: core
<source>
*: "Clip Hold Time"
- masd: none
</source>
<dest>
*: "削波記號停留時間"
- masd: none
</dest>
<voice>
- *: "Clip Hold Time"
- masd: none
+ *: "削波記號停留時間"
</voice>
</phrase>
<phrase>
@@ -3309,15 +3030,12 @@
user: core
<source>
*: "Eternal"
- masd: none
</source>
<dest>
*: "永久"
- masd: none
</dest>
<voice>
- *: "Eternal"
- masd: none
+ *: "永久"
</voice>
</phrase>
<phrase>
@@ -3326,15 +3044,12 @@
user: core
<source>
*: "Scale"
- masd: none
</source>
<dest>
*: "比例"
- masd: none
</dest>
<voice>
- *: "Scale"
- masd: none
+ *: "比例"
</voice>
</phrase>
<phrase>
@@ -3343,15 +3058,12 @@
user: core
<source>
*: "Logarithmic (dB)"
- masd: none
</source>
<dest>
*: "對數 (dB)"
- masd: none
</dest>
<voice>
- *: "Logarithmic decibel"
- masd: none
+ *: "對數 (dB)"
</voice>
</phrase>
<phrase>
@@ -3360,15 +3072,12 @@
user: core
<source>
*: "Linear (%)"
- masd: none
</source>
<dest>
*: "線性 (%)"
- masd: none
</dest>
<voice>
- *: "Linear percent"
- masd: none
+ *: "線性 (%)"
</voice>
</phrase>
<phrase>
@@ -3377,15 +3086,12 @@
user: core
<source>
*: "Minimum Of Range"
- masd: none
</source>
<dest>
*: "最小範圍"
- masd: none
</dest>
<voice>
- *: "Minimum Of Range"
- masd: none
+ *: "最小範圍"
</voice>
</phrase>
<phrase>
@@ -3394,15 +3100,12 @@
user: core
<source>
*: "Maximum Of Range"
- masd: none
</source>
<dest>
*: "最大範圍"
- masd: none
</dest>
<voice>
- *: "Maximum Of Range"
- masd: none
+ *: "最大範圍"
</voice>
</phrase>
<phrase>
@@ -3416,7 +3119,7 @@
*: "電池容量"
</dest>
<voice>
- *: "Battery Capacity"
+ *: "電池容量"
</voice>
</phrase>
<phrase>
@@ -3433,41 +3136,7 @@
</dest>
<voice>
*: none
- battery_types: "Battery type"
- </voice>
-</phrase>
-<phrase>
- id: LANG_BATTERY_TYPE_1
- desc: in battery settings
- user: core
- <source>
- *: none
- battery_types: "Alkaline"
- </source>
- <dest>
- *: none
- battery_types: "鹼性"
- </dest>
- <voice>
- *: none
- battery_types: "Alkaline"
- </voice>
-</phrase>
-<phrase>
- id: LANG_BATTERY_TYPE_2
- desc: in battery settings
- user: core
- <source>
- *: none
- battery_types: "NiMH"
- </source>
- <dest>
- *: none
- battery_types: "鎳氫"
- </dest>
- <voice>
- *: none
- battery_types: "Nickel metal hydride"
+ battery_types: "電池類型"
</voice>
</phrase>
<phrase>
@@ -3483,7 +3152,7 @@
flash_storage: none
</dest>
<voice>
- *: "Disk Spindown"
+ *: "硬碟迴轉停止"
flash_storage: none
</voice>
</phrase>
@@ -3501,7 +3170,7 @@
</dest>
<voice>
*: none
- dircache: "Directory Cache"
+ dircache: "目錄快取"
</voice>
</phrase>
<phrase>
@@ -3529,7 +3198,7 @@
*: "時間格式"
</dest>
<voice>
- *: "Time Format"
+ *: "時間格式"
</voice>
</phrase>
<phrase>
@@ -3543,7 +3212,7 @@
*: "12 小時制"
</dest>
<voice>
- *: "12 Hour Clock"
+ *: "12 小時制"
</voice>
</phrase>
<phrase>
@@ -3557,7 +3226,7 @@
*: "24 小時制"
</dest>
<voice>
- *: "24 Hour Clock"
+ *: "24 小時制"
</voice>
</phrase>
<phrase>
@@ -3585,7 +3254,7 @@
*: "最大播放清單歌曲數"
</dest>
<voice>
- *: "Maximum playlist size"
+ *: "最大播放清單歌曲數"
</voice>
</phrase>
<phrase>
@@ -3599,7 +3268,7 @@
*: "播放清單"
</dest>
<voice>
- *: "Playlist"
+ *: "播放清單"
</voice>
</phrase>
<phrase>
@@ -3613,7 +3282,7 @@
*: "書籤"
</dest>
<voice>
- *: "Bookmarks"
+ *: "書籤"
</voice>
</phrase>
<phrase>
@@ -3641,7 +3310,7 @@
*: "設定歌曲評分"
</dest>
<voice>
- *: "Set Song Rating"
+ *: "設定歌曲評分"
</voice>
</phrase>
<phrase>
@@ -3655,7 +3324,7 @@
*: "更名"
</dest>
<voice>
- *: "Rename"
+ *: "更名"
</voice>
</phrase>
<phrase>
@@ -3669,7 +3338,7 @@
*: "剪下"
</dest>
<voice>
- *: "Cut"
+ *: "剪下"
</voice>
</phrase>
<phrase>
@@ -3683,7 +3352,7 @@
*: "複製"
</dest>
<voice>
- *: "Copy"
+ *: "複製"
</voice>
</phrase>
<phrase>
@@ -3697,7 +3366,7 @@
*: "貼上"
</dest>
<voice>
- *: "Paste"
+ *: "貼上"
</voice>
</phrase>
<phrase>
@@ -3711,7 +3380,7 @@
*: "檔案/目錄已存在. 覆寫?"
</dest>
<voice>
- *: ""
+ *: "檔案/目錄已存在. 覆寫?"
</voice>
</phrase>
<phrase>
@@ -3725,7 +3394,7 @@
*: "刪除"
</dest>
<voice>
- *: "Delete"
+ *: "刪除"
</voice>
</phrase>
<phrase>
@@ -3742,7 +3411,7 @@
</dest>
<voice>
*: none
- lcd_non-mono: "Set As Backdrop"
+ lcd_non-mono: "設定為背景"
</voice>
</phrase>
<phrase>
@@ -3756,7 +3425,7 @@
*: "刪除目錄"
</dest>
<voice>
- *: "delete directory"
+ *: "刪除目錄"
</voice>
</phrase>
<phrase>
@@ -3770,7 +3439,7 @@
*: "刪除?"
</dest>
<voice>
- *: ""
+ *: "刪除?"
</voice>
</phrase>
<phrase>
@@ -3784,7 +3453,7 @@
*: "已刪除"
</dest>
<voice>
- *: ""
+ *: "已刪除"
</voice>
</phrase>
<phrase>
@@ -3798,7 +3467,7 @@
*: "開啟檔案..."
</dest>
<voice>
- *: "open with"
+ *: "開啟檔案..."
</voice>
</phrase>
<phrase>
@@ -3812,7 +3481,7 @@
*: "建立目錄"
</dest>
<voice>
- *: "Create Directory"
+ *: "建立目錄"
</voice>
</phrase>
<phrase>
@@ -3829,7 +3498,7 @@
</dest>
<voice>
*: none
- pitchscreen: "Pitch"
+ pitchscreen: "音調"
</voice>
</phrase>
<phrase>
@@ -3843,7 +3512,7 @@
*: "檢視"
</dest>
<voice>
- *: "View"
+ *: "檢視"
</voice>
</phrase>
<phrase>
@@ -3857,7 +3526,7 @@
*: "重新亂序"
</dest>
<voice>
- *: "Reshuffle"
+ *: "重新亂序"
</voice>
</phrase>
<phrase>
@@ -3871,7 +3540,7 @@
*: "插入"
</dest>
<voice>
- *: "Insert"
+ *: "插入"
</voice>
</phrase>
<phrase>
@@ -3885,7 +3554,7 @@
*: "插入下一個"
</dest>
<voice>
- *: "Insert Next"
+ *: "插入下一個"
</voice>
</phrase>
<phrase>
@@ -3899,7 +3568,7 @@
*: "插入到最後"
</dest>
<voice>
- *: "Insert Last"
+ *: "插入到最後"
</voice>
</phrase>
<phrase>
@@ -3913,7 +3582,7 @@
*: "亂序插入"
</dest>
<voice>
- *: "Insert Shuffled"
+ *: "亂序插入"
</voice>
</phrase>
<phrase>
@@ -3927,7 +3596,7 @@
*: "隊列"
</dest>
<voice>
- *: "Queue"
+ *: "隊列"
</voice>
</phrase>
<phrase>
@@ -3941,7 +3610,7 @@
*: "隊列中下一個"
</dest>
<voice>
- *: "Queue Next"
+ *: "隊列中下一個"
</voice>
</phrase>
<phrase>
@@ -3955,7 +3624,7 @@
*: "隊列最後"
</dest>
<voice>
- *: "Queue Last"
+ *: "隊列最後"
</voice>
</phrase>
<phrase>
@@ -3969,7 +3638,7 @@
*: "隨機隊列"
</dest>
<voice>
- *: "Queue Shuffled"
+ *: "隨機隊列"
</voice>
</phrase>
<phrase>
@@ -3983,7 +3652,7 @@
*: "在播放清單內搜尋"
</dest>
<voice>
- *: "Search In Playlist"
+ *: "在播放清單內搜尋"
</voice>
</phrase>
<phrase>
@@ -3997,7 +3666,7 @@
*: "搜尋中... 找到 %d 件 (%s)"
</dest>
<voice>
- *: ""
+ *: "搜尋中... 找到 %d 件 (%s)"
</voice>
</phrase>
<phrase>
@@ -4011,7 +3680,7 @@
*: "建立書籤"
</dest>
<voice>
- *: "Create Bookmark"
+ *: "建立書籤"
</voice>
</phrase>
<phrase>
@@ -4025,7 +3694,7 @@
*: "列舉書籤"
</dest>
<voice>
- *: "List Bookmarks"
+ *: "列舉書籤"
</voice>
</phrase>
<phrase>
@@ -4039,7 +3708,7 @@
*: "Rockbox 資訊"
</dest>
<voice>
- *: ""
+ *: "Rockbox 資訊"
</voice>
</phrase>
<phrase>
@@ -4056,24 +3725,7 @@
</dest>
<voice>
*: none
- charging: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_BATTERY_TOPOFF_CHARGE
- desc: in info display, shows that top off charge is running Only for V1 archosrecorder
- user: core
- <source>
- *: none
- archosrecorder: "Battery: Top-Off Chg"
- </source>
- <dest>
- *: none
- archosrecorder: "電池: 完成充電"
- </dest>
- <voice>
- *: none
- archosrecorder: ""
+ charging: "電池: 充電中"
</voice>
</phrase>
<phrase>
@@ -4090,7 +3742,7 @@
</dest>
<voice>
*: none
- charging: ""
+ charging: "電池: 涓流充電"
</voice>
</phrase>
<phrase>
@@ -4100,16 +3752,13 @@
<source>
*: "Battery: %d%% %dh %dm"
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
- iriverifp7xx: "%d%% %dh %dm"
</source>
<dest>
*: "電池: %d%% %d小時 %d分"
- archosondiofm,iriverifp7xx: "%d%% %dh %dm"
ipodmini1g,ipodmini2g,iriverh10: "電池: %d%% %dh %dm"
</dest>
<voice>
- *: "Battery level"
- ipodmini1g,ipodmini2g,iriverh10,iriverifp7xx: ""
+ *: "電池: %d%% %d小時 %d分"
</voice>
</phrase>
<phrase>
@@ -4123,7 +3772,7 @@
*: "硬碟:"
</dest>
<voice>
- *: ""
+ *: "硬碟:"
</voice>
</phrase>
<phrase>
@@ -4137,7 +3786,7 @@
*: "剩餘容量:"
</dest>
<voice>
- *: "Free diskspace:"
+ *: "剩餘容量:"
</voice>
</phrase>
<phrase>
@@ -4146,41 +3795,41 @@
user: core
<source>
*: "Int:"
+ hibylinux: "mSD:"
xduoox3: "mSD1:"
</source>
<dest>
- *: "內建:"
- xduoox3: "Multimedia 卡1:"
+ *: "Int:"
+ hibylinux: "mSD:"
+ xduoox3: "mSD1:"
</dest>
<voice>
*: "Internal"
- xduoox3: "Multimedia 卡1"
+ hibylinux: "micro S D"
+ xduoox3: "micro S D 1"
</voice>
</phrase>
<phrase>
id: LANG_DISK_NAME_MMC
- desc: in info menu; name for external disk with multivolume (Ondio; keep short!)
+ desc: in info menu; name for external disk with multivolume (keep short!)
user: core
<source>
*: none
- archosondio*: "MMC:"
multivolume: "HD1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:"
xduoox3: "mSD2:"
</source>
<dest>
*: none
- archosondio*: "MMC 卡:"
multivolume: "磁盤1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "Multimedia 卡:"
- xduoox3: "Multimedia 卡2:"
+ xduoox3: "mSD2:"
</dest>
<voice>
*: none
- archosondio*: "MMC 卡"
multivolume: "磁盤1"
sansac200*,sansaclipplus,sansae200*,sansafuze*: "Multimedia 卡"
- xduoox3: "Multimedia 卡2"
+ xduoox3: "micro S D 2"
</voice>
</phrase>
<phrase>
@@ -4193,7 +3842,7 @@
</source>
<dest>
*: none
- rtc: none
+ rtc: ""
</dest>
<voice>
*: none
@@ -4245,7 +3894,7 @@
*: "暫停"
</dest>
<voice>
- *: ""
+ *: "暫停"
</voice>
</phrase>
<phrase>
@@ -4259,7 +3908,7 @@
*: "建立書籤?"
</dest>
<voice>
- *: ""
+ *: "建立書籤?"
</voice>
</phrase>
<phrase>
@@ -4273,7 +3922,7 @@
*: "已建立書籤"
</dest>
<voice>
- *: ""
+ *: "已建立書籤"
</voice>
</phrase>
<phrase>
@@ -4287,7 +3936,7 @@
*: "建立書籤失敗!"
</dest>
<voice>
- *: ""
+ *: "建立書籤失敗!"
</voice>
</phrase>
<phrase>
@@ -4301,7 +3950,7 @@
*: "書籤為空"
</dest>
<voice>
- *: ""
+ *: "書籤為空"
</voice>
</phrase>
<phrase>
@@ -4326,19 +3975,19 @@
*: none
gigabeatfx: "POWER = 返回"
gigabeats,sansafuzeplus: "BACK = 返回"
- gogearsa9200: "LEFT = 返回"
+ gogearsa9200,ipod*,mpiohd300,sansac200*: "MENU = 返回"
iaudiom5,iaudiox5: "RECORD = 回去"
- ipod*,mpiohd300,sansac200*: "MENU = 回去"
iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "PREV = 返回"
iriverh100,iriverh120,iriverh300: "STOP = 返回"
mrobe100: "DISPLAY = 返回"
- mrobe500: "POWER = 回去"
+ mrobe500: "POWER = Revert"
rtc: "OFF = 返回"
samsungyh*: "REW = 返回"
vibe500: "CANCEL = 返回"
</dest>
<voice>
- *: none
+ *: ""
+ gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,samsungyh*,sansac200*,sansae200*: ""
</voice>
</phrase>
<phrase>
@@ -4397,7 +4046,7 @@
</dest>
<voice>
*: none
- iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,sansac200*,sansae200*: ""
+ iaudiom5,iaudiox5,iriverh100,iriverh120,iriverh300,recording,samsungyh*,sansac200*,sansae200*,vibe500: ""
</voice>
</phrase>
<phrase>
@@ -4414,7 +4063,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "一次"
</voice>
</phrase>
<phrase>
@@ -4431,7 +4080,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "在之上開始"
</voice>
</phrase>
<phrase>
@@ -4448,7 +4097,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "在之下停止"
</voice>
</phrase>
<phrase>
@@ -4465,7 +4114,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "先設分割的間隔"
</voice>
</phrase>
<phrase>
@@ -4482,7 +4131,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "minus infinity"
</voice>
</phrase>
<phrase>
@@ -4516,7 +4165,7 @@
</dest>
<voice>
*: none
- alarm: ""
+ alarm: "在 %d:%02d 內關閉鬧鈴"
</voice>
</phrase>
<phrase>
@@ -4533,7 +4182,7 @@
</dest>
<voice>
*: none
- alarm: ""
+ alarm: "已設定鬧鈴"
</voice>
</phrase>
<phrase>
@@ -4550,7 +4199,7 @@
</dest>
<voice>
*: none
- alarm: ""
+ alarm: "鬧鈴設定時間不正確!"
</voice>
</phrase>
<phrase>
@@ -4579,7 +4228,7 @@
</dest>
<voice>
*: none
- alarm,gigabeats,ipod*,iriverh10,iriverh10_5gb: ""
+ alarm,ipod*: ""
</voice>
</phrase>
<phrase>
@@ -4596,7 +4245,7 @@
</dest>
<voice>
*: none
- alarm: ""
+ alarm: "鬧鈴關閉"
</voice>
</phrase>
<phrase>
@@ -4787,7 +4436,7 @@
*: " (變動位元率)"
</dest>
<voice>
- *: "變動位元率"
+ *: " (變動位元率)"
</voice>
</phrase>
<phrase>
@@ -4815,7 +4464,7 @@
*: "Track Gain"
</dest>
<voice>
- *: "Track Gain"
+ *: "Track gain"
</voice>
</phrase>
<phrase>
@@ -4829,7 +4478,7 @@
*: "Album Gain"
</dest>
<voice>
- *: "Album Gain"
+ *: "Album gain"
</voice>
</phrase>
<phrase>
@@ -4857,7 +4506,7 @@
*: "<無資訊>"
</dest>
<voice>
- *: "無資訊"
+ *: "<無資訊>"
</voice>
</phrase>
<phrase>
@@ -4990,7 +4639,7 @@
*: "1月"
</dest>
<voice>
- *: "January"
+ *: "1月"
</voice>
</phrase>
<phrase>
@@ -5004,7 +4653,7 @@
*: "2月"
</dest>
<voice>
- *: "February"
+ *: "2月"
</voice>
</phrase>
<phrase>
@@ -5018,7 +4667,7 @@
*: "3月"
</dest>
<voice>
- *: "March"
+ *: "3月"
</voice>
</phrase>
<phrase>
@@ -5032,7 +4681,7 @@
*: "4月"
</dest>
<voice>
- *: "April"
+ *: "4月"
</voice>
</phrase>
<phrase>
@@ -5046,7 +4695,7 @@
*: "5月"
</dest>
<voice>
- *: "May"
+ *: "5月"
</voice>
</phrase>
<phrase>
@@ -5060,7 +4709,7 @@
*: "6月"
</dest>
<voice>
- *: "June"
+ *: "6月"
</voice>
</phrase>
<phrase>
@@ -5074,7 +4723,7 @@
*: "7月"
</dest>
<voice>
- *: "July"
+ *: "7月"
</voice>
</phrase>
<phrase>
@@ -5088,7 +4737,7 @@
*: "8月"
</dest>
<voice>
- *: "August"
+ *: "8月"
</voice>
</phrase>
<phrase>
@@ -5102,7 +4751,7 @@
*: "9月"
</dest>
<voice>
- *: "September"
+ *: "9月"
</voice>
</phrase>
<phrase>
@@ -5116,7 +4765,7 @@
*: "10月"
</dest>
<voice>
- *: "October"
+ *: "10月"
</voice>
</phrase>
<phrase>
@@ -5130,7 +4779,7 @@
*: "11月"
</dest>
<voice>
- *: "November"
+ *: "11月"
</voice>
</phrase>
<phrase>
@@ -5144,7 +4793,7 @@
*: "12月"
</dest>
<voice>
- *: "December"
+ *: "12月"
</voice>
</phrase>
<phrase>
@@ -5834,48 +5483,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_KILOBYTE
- desc: a unit postfix, also voiced
- user: core
- <source>
- *: "KB"
- </source>
- <dest>
- *: "KB"
- </dest>
- <voice>
- *: "kilobyte"
- </voice>
-</phrase>
-<phrase>
- id: LANG_MEGABYTE
- desc: a unit postfix, also voiced
- user: core
- <source>
- *: "MB"
- </source>
- <dest>
- *: "MB"
- </dest>
- <voice>
- *: "megabyte"
- </voice>
-</phrase>
-<phrase>
- id: LANG_GIGABYTE
- desc: a unit postfix, also voiced
- user: core
- <source>
- *: "GB"
- </source>
- <dest>
- *: "GB"
- </dest>
- <voice>
- *: "gigabyte"
- </voice>
-</phrase>
-<phrase>
id: LANG_POINT
desc: decimal separator for composing numbers
user: core
@@ -6417,7 +6024,7 @@
</source>
<dest>
*: none
- remote: none
+ remote: ""
</dest>
<voice>
*: none
@@ -6449,7 +6056,7 @@
*: "播放清單緩衝區已滿"
</dest>
<voice>
- *: ""
+ *: "播放清單緩衝區已滿"
</voice>
</phrase>
<phrase>
@@ -6477,7 +6084,7 @@
*: "插入 %d 首歌曲 (%s)"
</dest>
<voice>
- *: ""
+ *: "插入 %d 首歌曲 (%s)"
</voice>
</phrase>
<phrase>
@@ -6491,7 +6098,7 @@
*: "列入了 %d 首歌曲 (%s)"
</dest>
<voice>
- *: ""
+ *: "列入了 %d 首歌曲 (%s)"
</voice>
</phrase>
<phrase>
@@ -6505,7 +6112,7 @@
*: "儲存 %d 首歌曲 (%s)"
</dest>
<voice>
- *: ""
+ *: "儲存 %d 首歌曲 (%s)"
</voice>
</phrase>
<phrase>
@@ -6519,7 +6126,7 @@
*: "遞迴子目錄?"
</dest>
<voice>
- *: ""
+ *: "遞迴子目錄?"
</voice>
</phrase>
<phrase>
@@ -6533,7 +6140,7 @@
*: "消除動態播放清單?"
</dest>
<voice>
- *: ""
+ *: "消除動態播放清單?"
</voice>
</phrase>
<phrase>
@@ -6547,7 +6154,7 @@
*: "無法繼續上次播放"
</dest>
<voice>
- *: ""
+ *: "無法繼續上次播放"
</voice>
</phrase>
<phrase>
@@ -6561,7 +6168,7 @@
*: "更新播放清單控制檔案錯誤"
</dest>
<voice>
- *: ""
+ *: "更新播放清單控制檔案錯誤"
</voice>
</phrase>
<phrase>
@@ -6575,7 +6182,7 @@
*: "存取播放清單檔案錯誤"
</dest>
<voice>
- *: ""
+ *: "存取播放清單檔案錯誤"
</voice>
</phrase>
<phrase>
@@ -6589,7 +6196,7 @@
*: "存取播放清單控制檔案錯誤"
</dest>
<voice>
- *: ""
+ *: "存取播放清單控制檔案錯誤"
</voice>
</phrase>
<phrase>
@@ -6603,7 +6210,7 @@
*: "存取目錄錯誤"
</dest>
<voice>
- *: ""
+ *: "存取目錄錯誤"
</voice>
</phrase>
<phrase>
@@ -6617,7 +6224,7 @@
*: "無效的播放清單控制檔"
</dest>
<voice>
- *: ""
+ *: "無效的播放清單控制檔"
</voice>
</phrase>
<phrase>
@@ -6634,7 +6241,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "沒有預設"
</voice>
</phrase>
<phrase>
@@ -6651,7 +6258,7 @@
</dest>
<voice>
*: none
- radio: "Add Preset"
+ radio: "增加預設"
</voice>
</phrase>
<phrase>
@@ -6668,7 +6275,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "編輯預設"
</voice>
</phrase>
<phrase>
@@ -6685,7 +6292,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "移除預設"
</voice>
</phrase>
<phrase>
@@ -6702,7 +6309,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "儲存預設失敗"
</voice>
</phrase>
<phrase>
@@ -6719,92 +6326,7 @@
</dest>
<voice>
*: none
- radio: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_BUTTONBAR_MENU
- desc: in button bar
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Menu"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "選單"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_EXIT
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Exit"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "離開"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_ACTION
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Action"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "動作"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_ADD
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Add"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "增加"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_BUTTONBAR_RECORD
- desc: in radio screen
- user: core
- <source>
- *: none
- radio_screen_button_bar: "Record"
- </source>
- <dest>
- *: none
- radio_screen_button_bar: "錄音"
- </dest>
- <voice>
- *: none
- radio_screen_button_bar: ""
+ radio: "預設清單已滿"
</voice>
</phrase>
<phrase>
@@ -6821,7 +6343,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "強迫使用單聲道"
</voice>
</phrase>
<phrase>
@@ -6855,7 +6377,7 @@
</dest>
<voice>
*: none
- radio: "Auto scan presets"
+ radio: "自動掃描預設"
</voice>
</phrase>
<phrase>
@@ -6872,7 +6394,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "清除現在預設?"
</voice>
</phrase>
<phrase>
@@ -6923,7 +6445,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "掃描"
</voice>
</phrase>
<phrase>
@@ -6937,7 +6459,7 @@
*: "目錄緩衝區已滿!"
</dest>
<voice>
- *: ""
+ *: "目錄緩衝區已滿!"
</voice>
</phrase>
<phrase>
@@ -6951,7 +6473,7 @@
*: "新語言"
</dest>
<voice>
- *: ""
+ *: "新語言"
</voice>
</phrase>
<phrase>
@@ -6965,7 +6487,7 @@
*: "設定已載入"
</dest>
<voice>
- *: ""
+ *: "設定已載入"
</voice>
</phrase>
<phrase>
@@ -6979,7 +6501,7 @@
*: "設定已儲存"
</dest>
<voice>
- *: ""
+ *: "設定已儲存"
</voice>
</phrase>
<phrase>
@@ -6993,7 +6515,7 @@
*: "開機檔已改變"
</dest>
<voice>
- *: ""
+ *: "開機檔已改變"
</voice>
</phrase>
<phrase>
@@ -7007,12 +6529,12 @@
*: "現在要重新開機?"
</dest>
<voice>
- *: ""
+ *: "現在要重新開機?"
</voice>
</phrase>
<phrase>
id: LANG_OFF_ABORT
- desc: Used on archosrecorder models
+ desc: Used on many models
user: core
<source>
*: "OFF to abort"
@@ -7047,7 +6569,7 @@
*: "沒有檔案"
</dest>
<voice>
- *: ""
+ *: "沒有檔案"
</voice>
</phrase>
<phrase>
@@ -7061,7 +6583,7 @@
*: "新鍵盤"
</dest>
<voice>
- *: ""
+ *: "新鍵盤"
</voice>
</phrase>
<phrase>
@@ -7075,7 +6597,7 @@
*: "移動"
</dest>
<voice>
- *: "Move"
+ *: "移動"
</voice>
</phrase>
<phrase>
@@ -7089,7 +6611,7 @@
*: "顯示索引"
</dest>
<voice>
- *: "Show Indices"
+ *: "顯示索引"
</voice>
</phrase>
<phrase>
@@ -7103,7 +6625,7 @@
*: "曲目顯示"
</dest>
<voice>
- *: "Track Display"
+ *: "曲目顯示"
</voice>
</phrase>
<phrase>
@@ -7117,7 +6639,7 @@
*: "只顯示曲名"
</dest>
<voice>
- *: "Track Name Only"
+ *: "只顯示曲名"
</voice>
</phrase>
<phrase>
@@ -7131,7 +6653,7 @@
*: "完整路徑"
</dest>
<voice>
- *: "Full Path"
+ *: "完整路徑"
</voice>
</phrase>
<phrase>
@@ -7145,7 +6667,7 @@
*: "移除"
</dest>
<voice>
- *: "Remove"
+ *: "移除"
</voice>
</phrase>
<phrase>
@@ -7178,7 +6700,7 @@
</phrase>
<phrase>
id: LANG_PLUGIN_WRONG_MODEL
- desc: The plugin is not compatible with the archos model trying to run it
+ desc: The plugin is not compatible with the player model trying to run it
user: core
<source>
*: "Incompatible model"
@@ -7187,7 +6709,7 @@
*: "不相容機型"
</dest>
<voice>
- *: ""
+ *: "不相容機型"
</voice>
</phrase>
<phrase>
@@ -7201,7 +6723,7 @@
*: "不相容版本"
</dest>
<voice>
- *: ""
+ *: "不相容版本"
</voice>
</phrase>
<phrase>
@@ -7215,7 +6737,7 @@
*: "插件回傳錯誤"
</dest>
<voice>
- *: ""
+ *: "插件回傳錯誤"
</voice>
</phrase>
<phrase>
@@ -7229,7 +6751,7 @@
*: "檔案類型陣列已滿"
</dest>
<voice>
- *: ""
+ *: "檔案類型陣列已滿"
</voice>
</phrase>
<phrase>
@@ -7246,7 +6768,7 @@
</dest>
<voice>
*: none
- radio: "Load Preset List"
+ radio: "載入預設清單"
</voice>
</phrase>
<phrase>
@@ -7263,7 +6785,7 @@
</dest>
<voice>
*: none
- radio: "Save Preset List"
+ radio: "儲存預設清單"
</voice>
</phrase>
<phrase>
@@ -7280,7 +6802,7 @@
</dest>
<voice>
*: none
- radio: "Clear Preset List"
+ radio: "清除預設清單"
</voice>
</phrase>
<phrase>
@@ -7297,7 +6819,7 @@
</dest>
<voice>
*: none
- radio: "Preset List"
+ radio: "預設清單"
</voice>
</phrase>
<phrase>
@@ -7314,7 +6836,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "找不到設定, 自動掃描?"
</voice>
</phrase>
<phrase>
@@ -7328,7 +6850,7 @@
*: "直接增加"
</dest>
<voice>
- *: "Direct gain"
+ *: "直接增加"
</voice>
</phrase>
<phrase>
@@ -7342,7 +6864,7 @@
*: "交叉增加"
</dest>
<voice>
- *: "Cross gain"
+ *: "交叉增加"
</voice>
</phrase>
<phrase>
@@ -7356,7 +6878,7 @@
*: "高頻衰減"
</dest>
<voice>
- *: "High-frequency attenuation"
+ *: "高頻衰減"
</voice>
</phrase>
<phrase>
@@ -7370,7 +6892,7 @@
*: "高頻截斷"
</dest>
<voice>
- *: "High-frequency cutoff"
+ *: "高頻截斷"
</voice>
</phrase>
<phrase>
@@ -7398,7 +6920,7 @@
*: "<所有曲目>"
</dest>
<voice>
- *: "All tracks"
+ *: "<所有曲目>"
</voice>
</phrase>
<phrase>
@@ -7412,7 +6934,7 @@
*: "無效的檔名!"
</dest>
<voice>
- *: "Invalid Filename"
+ *: "無效的檔名!"
</voice>
</phrase>
<phrase>
@@ -7429,7 +6951,7 @@
</dest>
<voice>
*: none
- remote: "Remote Scrolling Options"
+ remote: "線控捲動設定"
</voice>
</phrase>
<phrase>
@@ -7475,193 +6997,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SYSFONT_CHANNEL_STEREO
- desc: in sound_settings
- user: core
- <source>
- *: none
- recording: "Stereo"
- </source>
- <dest>
- *: none
- recording: "Stereo"
- </dest>
- <voice>
- *: none
- recording: "Stereo"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_CHANNEL_MONO
- desc: in sound_settings
- user: core
- <source>
- *: none
- recording: "Mono"
- </source>
- <dest>
- *: none
- recording: "Mono"
- </dest>
- <voice>
- *: none
- recording: "Mono"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_QUALITY
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording_hwcodec: "Quality"
- </source>
- <dest>
- *: none
- recording_hwcodec: "Quality"
- </dest>
- <voice>
- *: none
- recording_hwcodec: "Quality"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_FREQUENCY
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Frequency"
- </source>
- <dest>
- *: none
- recording: "Frequency"
- </dest>
- <voice>
- *: none
- recording: "Frequency"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_SOURCE
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Source"
- </source>
- <dest>
- *: none
- recording: "Source"
- </dest>
- <voice>
- *: none
- recording: "Source"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_SRC_MIC
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Int. Mic"
- </source>
- <dest>
- *: none
- recording: "Mic"
- </dest>
- <voice>
- *: none
- recording: "Microphone"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORDING_SRC_DIGITAL
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Digital"
- </source>
- <dest>
- *: none
- recording: "Digital"
- </dest>
- <voice>
- *: none
- recording: "Digital"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_RECORD_TRIGGER
- desc: in recording settings_menu
- user: core
- <source>
- *: none
- recording: "Trigger"
- </source>
- <dest>
- *: none
- recording: "Trigger"
- </dest>
- <voice>
- *: none
- recording: "Trigger"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_DIRBROWSE_F1
- desc: in dir browser, F1 button bar text
- user: core
- <source>
- *: none
- recorder_pad: "Menu"
- </source>
- <dest>
- *: none
- recorder_pad: "Menu"
- </dest>
- <voice>
- *: none
- recorder_pad: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_DIRBROWSE_F2
- desc: in dir browser, F2 button bar text
- user: core
- <source>
- *: none
- recorder_pad: "Option"
- </source>
- <dest>
- *: none
- recorder_pad: "Option"
- </dest>
- <voice>
- *: none
- recorder_pad: ""
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_DIRBROWSE_F3
- desc: in dir browser, F3 button bar text
- user: core
- <source>
- *: none
- recorder_pad: "LCD"
- </source>
- <dest>
- *: none
- recorder_pad: "LCD"
- </dest>
- <voice>
- *: none
- recorder_pad: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_AFMT_PCM_WAV
desc: audio format description
user: core
@@ -7711,33 +7046,13 @@
desc: in lcd settings
user: core
<source>
- *: none
- lcd_sleep: "Never"
- </source>
- <dest>
- *: none
- lcd_sleep: "永不"
- </dest>
- <voice>
- *: none
- lcd_sleep: "Never"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_LINE_IN
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Line In"
+ *: "Never"
</source>
<dest>
- *: none
- recording: "Line In"
+ *: "Never"
</dest>
<voice>
- *: none
- recording: "Line In"
+ *: "Never"
</voice>
</phrase>
<phrase>
@@ -7746,7 +7061,6 @@
user: core
<source>
*: "Building database... %d found (OFF to return)"
- archosplayer: "Building DB %d found"
gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)"
gogearsa9200: "Building database... %d found (REW to return)"
ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
@@ -7754,14 +7068,13 @@
</source>
<dest>
*: "建立資料庫... 找到 %d 項 (OFF: 回上一畫面)"
- archosplayer: "建立資料庫... 找到 %d"
gigabeat*,iaudiom5,iaudiox5,mrobe100,samsungyh*: "建立資料庫... 找到 %d 項 (LEFT: 回上一畫面)"
- gogearsa9200: "建立資料庫... 找到 %d 項 (REW: 回上一畫面)"
- ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,sansafuze*,vibe500: "建立資料庫... 找到 %d 項 (PREV: 回上一畫面)"
+ gogearsa9200,ipod*,iriverh10,iriverh10_5gb,sansac200*,sansae200*,vibe500: "建立資料庫... 找到 %d 項 (PREV: 回上一畫面)"
iriverh100,iriverh120,iriverh300: "建立資料庫... 找到 %d 項 (STOP: 回上一畫面)"
+ sansafuze*: "Building database... %d found (PREV to return)"
</dest>
<voice>
- *: "entries found for database"
+ *: "建立資料庫... 找到 %d 項 (OFF: 回上一畫面)"
</voice>
</phrase>
<phrase>
@@ -7775,7 +7088,7 @@
*: "掃描文件..."
</dest>
<voice>
- *: "Scanning disk"
+ *: "掃描文件..."
</voice>
</phrase>
<phrase>
@@ -7789,7 +7102,7 @@
*: "檔案"
</dest>
<voice>
- *: "Files"
+ *: "檔案"
</voice>
</phrase>
<phrase>
@@ -7820,7 +7133,7 @@
</dest>
<voice>
*: none
- agc: "DJ set (slow)"
+ agc: "DJ 設定 (慢)"
</voice>
</phrase>
<phrase>
@@ -7834,7 +7147,7 @@
*: "匯入更動"
</dest>
<voice>
- *: "Import Modifications"
+ *: "匯入更動"
</voice>
</phrase>
<phrase>
@@ -7868,7 +7181,7 @@
</dest>
<voice>
*: none
- lcd_sleep: "Sleep after backlight off"
+ lcd_sleep: "睡眠 (在背光關閉後)"
</voice>
</phrase>
<phrase>
@@ -7882,7 +7195,7 @@
*: "添加"
</dest>
<voice>
- *: "Gain"
+ *: "添加"
</voice>
</phrase>
<phrase>
@@ -7896,7 +7209,7 @@
*: "刪除中..."
</dest>
<voice>
- *: "Deleting"
+ *: "刪除中..."
</voice>
</phrase>
<phrase>
@@ -7913,7 +7226,7 @@
</dest>
<voice>
*: none
- usb_charging_enable: "Charge During U S B Connection"
+ usb_charging_enable: "在 USB 連線時充電"
</voice>
</phrase>
<phrase>
@@ -7930,7 +7243,7 @@
</dest>
<voice>
*: none
- remote: "Remote Display OFF"
+ remote: "線控顯示關閉"
</voice>
</phrase>
<phrase>
@@ -7947,7 +7260,7 @@
</dest>
<voice>
*: none
- recording: "Same As Source"
+ recording: "(與來源相同)"
</voice>
</phrase>
<phrase>
@@ -7964,7 +7277,7 @@
</dest>
<voice>
*: none
- headphone_detection: "Disable resume on startup if phones unplugged"
+ headphone_detection: "如沒耳機插入開機時不播放"
</voice>
</phrase>
<phrase>
@@ -7978,7 +7291,7 @@
*: "恢復播發"
</dest>
<voice>
- *: "Resume"
+ *: "恢復播發"
</voice>
</phrase>
<phrase>
@@ -7995,7 +7308,7 @@
</dest>
<voice>
*: none
- radio: "Europe"
+ radio: "歐洲"
</voice>
</phrase>
<phrase>
@@ -8009,7 +7322,7 @@
*: "警告! 電池電量低!"
</dest>
<voice>
- *: "WARNING! Low Battery!"
+ *: "警告! 電池電量低!"
</voice>
</phrase>
<phrase>
@@ -8026,7 +7339,7 @@
</dest>
<voice>
*: none
- recording: "Encoder Settings"
+ recording: "編碼設定"
</voice>
</phrase>
<phrase>
@@ -8040,7 +7353,7 @@
*: "播放清單設置"
</dest>
<voice>
- *: "Playlist Viewer Settings"
+ *: "播放清單設置"
</voice>
</phrase>
<phrase>
@@ -8057,7 +7370,7 @@
</dest>
<voice>
*: none
- rtc: "Set Time and Date"
+ rtc: "設置時間/日期"
</voice>
</phrase>
<phrase>
@@ -8071,7 +7384,7 @@
*: "正在播放"
</dest>
<voice>
- *: "Now Playing"
+ *: "正在播放"
</voice>
</phrase>
<phrase>
@@ -8088,7 +7401,7 @@
</dest>
<voice>
*: none
- recording: "Stop recording"
+ recording: "停止錄音"
</voice>
</phrase>
<phrase>
@@ -8104,25 +7417,22 @@
wheel_acceleration: none
</dest>
<voice>
- *: "List Acceleration Speed"
+ *: "列表加速速度"
wheel_acceleration: none
</voice>
</phrase>
<phrase>
- id: LANG_RECORDING_FORMAT
- desc: audio format item in recording menu
+ id: LANG_FORMAT
+ desc: audio format
user: core
<source>
- *: none
- recording: "Format"
+ *: "Format"
</source>
<dest>
- *: none
- recording: "格式"
+ *: "格式"
</dest>
<voice>
- *: none
- recording: "Format"
+ *: "格式"
</voice>
</phrase>
<phrase>
@@ -8136,7 +7446,7 @@
*: "書簽動作"
</dest>
<voice>
- *: "Bookmark Actions"
+ *: "書簽動作"
</voice>
</phrase>
<phrase>
@@ -8153,7 +7463,7 @@
</dest>
<voice>
*: none
- crossfade: "Shuffle or Manual Track Skip"
+ crossfade: "亂序播放與跳過曲目"
</voice>
</phrase>
<phrase>
@@ -8167,7 +7477,7 @@
*: "正常"
</dest>
<voice>
- *: "Normal"
+ *: "正常"
</voice>
</phrase>
<phrase>
@@ -8176,15 +7486,12 @@
user: core
<source>
*: "Buffer:"
- archosplayer: "Buf:"
</source>
<dest>
*: "緩衝:"
- archosplayer: "Buf:"
</dest>
<voice>
- *: ""
- archosplayer: ""
+ *: "緩衝:"
</voice>
</phrase>
<phrase>
@@ -8201,7 +7508,7 @@
</dest>
<voice>
*: none
- headphone_detection: "Pause and Resume"
+ headphone_detection: "暫停和恢復播放"
</voice>
</phrase>
<phrase>
@@ -8218,7 +7525,7 @@
</dest>
<voice>
*: none
- recording: "Can't write to recording directory"
+ recording: "不能寫入錄音目錄"
</voice>
</phrase>
<phrase>
@@ -8229,10 +7536,10 @@
*: "Channel Configuration"
</source>
<dest>
- *: "聲道設置"
+ *: "聲道"
</dest>
<voice>
- *: "Channel Configuration"
+ *: "聲道"
</voice>
</phrase>
<phrase>
@@ -8241,9 +7548,8 @@
user: core
<source>
*: "PLAY = Yes"
- archosplayer: "(PLAY/STOP)"
cowond2*: "MENU, or top-right = Yes"
- creativezen*: "Select = Yes"
+ creativezen*: "SELECT = Yes"
gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = Yes"
iriverh100,iriverh120,iriverh300: "NAVI = Yes"
mrobe500: "PLAY, POWER, or top-right = Yes"
@@ -8251,12 +7557,12 @@
</source>
<dest>
*: "PLAY = 是"
- archosplayer: "(PLAY/STOP)"
- cowond2*: "MENU, or top-right = 是"
- creativezen*: "Select = 是"
- gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = 是"
+ cowond2*: "MENU, or top-right = Yes"
+ creativezen*: "SELECT = Yes"
+ gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansae200*: "SELECT = 是"
iriverh100,iriverh120,iriverh300: "NAVI = 是"
- mrobe500: "PLAY, POWER, or top-right = 是"
+ mrobe500: "PLAY, POWER, or top-right = Yes"
+ sansaclip*,sansaconnect,sansafuze*: "SELECT = Yes"
vibe500: "OK = 是"
</dest>
<voice>
@@ -8279,16 +7585,18 @@
</source>
<dest>
*: none
- gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansaclip*,sansaconnect,sansae200*,sansafuze*: "SELECT = 設定"
+ gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansae200*: "SELECT = 設定"
gogearsa9200,samsungyh*: "PLAY = 設定"
iriverh100,iriverh120,iriverh300: "NAVI = 設定"
mpiohd300: "ENTER = 設定"
- mrobe500: "HEART = 設定"
+ mrobe500: "HEART = Set"
rtc: "ON = 設定"
+ sansaclip*,sansaconnect,sansafuze*: "SELECT = Set"
vibe500: "OK = 設定"
</dest>
<voice>
- *: none
+ *: ""
+ gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,samsungyh*,sansac200*,sansae200*: ""
</voice>
</phrase>
<phrase>
@@ -8297,15 +7605,12 @@
user: core
<source>
*: "Any Other = No"
- archosplayer: none
</source>
<dest>
*: "Any Other = 否"
- archosplayer: none
</dest>
<voice>
*: ""
- archosplayer: none
</voice>
</phrase>
<phrase>
@@ -8319,7 +7624,7 @@
*: "瀏覽 Cuesheet"
</dest>
<voice>
- *: "Browse Cuesheet"
+ *: "瀏覽 Cuesheet"
</voice>
</phrase>
<phrase>
@@ -8333,7 +7638,7 @@
*: "樣品程序"
</dest>
<voice>
- *: "Demos"
+ *: "樣品程序"
</voice>
</phrase>
<phrase>
@@ -8350,7 +7655,7 @@
</dest>
<voice>
*: none
- recording: "Bitrate"
+ recording: "位元率"
</voice>
</phrase>
<phrase>
@@ -8364,7 +7669,7 @@
*: "最高時間"
</dest>
<voice>
- *: "Top Time"
+ *: "最高時間"
</voice>
</phrase>
<phrase>
@@ -8378,7 +7683,7 @@
*: "使用 .talk 文件"
</dest>
<voice>
- *: "Use File .talk Clips"
+ *: "使用 .talk 文件"
</voice>
</phrase>
<phrase>
@@ -8392,7 +7697,7 @@
*: "亂數"
</dest>
<voice>
- *: "Random"
+ *: "亂數"
</voice>
</phrase>
<phrase>
@@ -8406,7 +7711,7 @@
*: "全部"
</dest>
<voice>
- *: "All"
+ *: "全部"
</voice>
</phrase>
<phrase>
@@ -8423,7 +7728,7 @@
</dest>
<voice>
*: none
- recording: "New file"
+ recording: "新檔案"
</voice>
</phrase>
<phrase>
@@ -8434,10 +7739,10 @@
*: "Add to Shortcuts"
</source>
<dest>
- *: "添加到快捷"
+ *: "添加到捷徑中"
</dest>
<voice>
- *: "Add to Shortcuts"
+ *: "添加到捷徑中"
</voice>
</phrase>
<phrase>
@@ -8454,7 +7759,7 @@
</dest>
<voice>
*: none
- radio: ""
+ radio: "預設"
</voice>
</phrase>
<phrase>
@@ -8468,7 +7773,7 @@
*: "主選單"
</dest>
<voice>
- *: "Main Menu"
+ *: "主選單"
</voice>
</phrase>
<phrase>
@@ -8482,7 +7787,7 @@
*: "遊戲"
</dest>
<voice>
- *: "Games"
+ *: "遊戲"
</voice>
</phrase>
<phrase>
@@ -8491,15 +7796,12 @@
user: core
<source>
*: "End of Song List"
- archosplayer: "End of List"
</source>
<dest>
*: "列表結束"
- archosplayer: "列表結束"
</dest>
<voice>
- *: "End of Song List"
- archosplayer: "End of List"
+ *: "列表結束"
</voice>
</phrase>
<phrase>
@@ -8516,7 +7818,7 @@
</dest>
<voice>
*: none
- alarm: "Alarm Wake up Screen"
+ alarm: "鬧鈴啟動畫面"
</voice>
</phrase>
<phrase>
@@ -8533,7 +7835,7 @@
</dest>
<voice>
*: none
- recording: "Clear Recording Directory"
+ recording: "清除錄音目錄"
</voice>
</phrase>
<phrase>
@@ -8564,7 +7866,7 @@
</dest>
<voice>
*: none
- agc: "Live (slow)"
+ agc: "現場 (慢)"
</voice>
</phrase>
<phrase>
@@ -8578,7 +7880,7 @@
*: "儲存佈景主題設定"
</dest>
<voice>
- *: "Save Theme Settings"
+ *: "儲存佈景主題設定"
</voice>
</phrase>
<phrase>
@@ -8599,20 +7901,6 @@
</voice>
</phrase>
<phrase>
- id: LANG_SYSFONT_MODE
- desc: in wps F2 pressed
- user: core
- <source>
- *: "Mode:"
- </source>
- <dest>
- *: "Mode:"
- </dest>
- <voice>
- *: ""
- </voice>
-</phrase>
-<phrase>
id: LANG_AGC_VOICE
desc: AGC preset
user: core
@@ -8626,7 +7914,7 @@
</dest>
<voice>
*: none
- agc: "Voice (fast)"
+ agc: "語音 (快)"
</voice>
</phrase>
<phrase>
@@ -8643,7 +7931,7 @@
</dest>
<voice>
*: none
- recording: "No settings available"
+ recording: "(無設定)"
</voice>
</phrase>
<phrase>
@@ -8660,7 +7948,7 @@
</dest>
<voice>
*: none
- recording: ""
+ recording: "最少"
</voice>
</phrase>
<phrase>
@@ -8677,7 +7965,7 @@
</dest>
<voice>
*: none
- recording: "Split Filesize"
+ recording: "分割檔案大小"
</voice>
</phrase>
<phrase>
@@ -8691,7 +7979,7 @@
*: "聲道"
</dest>
<voice>
- *: "Channels"
+ *: "聲道"
</voice>
</phrase>
<phrase>
@@ -8708,7 +7996,7 @@
</dest>
<voice>
*: none
- remote: "(Vol- : Re-enable)"
+ remote: "(Vol- : 重新開啟)"
</voice>
</phrase>
<phrase>
@@ -8722,7 +8010,7 @@
*: "每次提問"
</dest>
<voice>
- *: "Ask"
+ *: "每次提問"
</voice>
</phrase>
<phrase>
@@ -8753,7 +8041,7 @@
</dest>
<voice>
*: none
- agc: "Medium"
+ agc: "中等"
</voice>
</phrase>
<phrase>
@@ -8787,7 +8075,7 @@
</dest>
<voice>
*: none
- agc: "Safety (clip)"
+ agc: "安全 (clip)"
</voice>
</phrase>
<phrase>
@@ -8801,7 +8089,7 @@
*: "繼續播放"
</dest>
<voice>
- *: "Resume Playback"
+ *: "繼續播放"
</voice>
</phrase>
<phrase>
@@ -8818,21 +8106,21 @@
</dest>
<voice>
*: none
- headphone_detection: "Pause on Headphone Unplug"
+ headphone_detection: "耳機拔出後暫停"
</voice>
</phrase>
<phrase>
id: LANG_REPLACE
- desc: in onplay menu. Replace the current playlist with a new one.
+ desc: deprecated
user: core
<source>
- *: "Play Next"
+ *: ""
</source>
<dest>
- *: "播放下一首"
+ *: ""
</dest>
<voice>
- *: "Play Next"
+ *: ""
</voice>
</phrase>
<phrase>
@@ -8863,7 +8151,7 @@
</dest>
<voice>
*: none
- recording: "Split Measure"
+ recording: "分割依據"
</voice>
</phrase>
<phrase>
@@ -8891,7 +8179,7 @@
*: "電池已空! 充電!"
</dest>
<voice>
- *: "Battery empty! RECHARGE!"
+ *: "電池已空! 充電!"
</voice>
</phrase>
<phrase>
@@ -8908,7 +8196,7 @@
</dest>
<voice>
*: none
- radio: "Korea"
+ radio: "韓國"
</voice>
</phrase>
<phrase>
@@ -8922,7 +8210,7 @@
*: "運作時間"
</dest>
<voice>
- *: "Running Time"
+ *: "運作時間"
</voice>
</phrase>
<phrase>
@@ -8939,7 +8227,7 @@
</dest>
<voice>
*: none
- radio: "US and Canada"
+ radio: "美國 / 加拿大"
</voice>
</phrase>
<phrase>
@@ -8956,7 +8244,7 @@
</dest>
<voice>
*: none
- radio: "Region"
+ radio: "區域"
</voice>
</phrase>
<phrase>
@@ -9001,7 +8289,7 @@
*: "增加到新的播放清單"
</dest>
<voice>
- *: "Add to New Playlist"
+ *: "增加到新的播放清單"
</voice>
</phrase>
<phrase>
@@ -9018,7 +8306,7 @@
</dest>
<voice>
*: none
- recording: "Stop"
+ recording: "停止"
</voice>
</phrase>
<phrase>
@@ -9049,7 +8337,7 @@
</dest>
<voice>
*: none
- recording: "Split Time"
+ recording: "分割時間"
</voice>
</phrase>
<phrase>
@@ -9063,7 +8351,7 @@
*: "請重開機以啟用"
</dest>
<voice>
- *: "Please reboot to enable"
+ *: "請重開機以啟用"
</voice>
</phrase>
<phrase>
@@ -9077,7 +8365,7 @@
*: "有關選單"
</dest>
<voice>
- *: "Context Menu"
+ *: "有關選單"
</voice>
</phrase>
<phrase>
@@ -9091,7 +8379,7 @@
*: "先前畫面"
</dest>
<voice>
- *: "Previous Screen"
+ *: "先前畫面"
</voice>
</phrase>
<phrase>
@@ -9105,7 +8393,7 @@
*: "增加到播放清單"
</dest>
<voice>
- *: "Add to Playlist"
+ *: "增加到播放清單"
</voice>
</phrase>
<phrase>
@@ -9122,7 +8410,7 @@
</dest>
<voice>
*: none
- buttonlight_brightness: "Button Light Brightness"
+ buttonlight_brightness: "按鈕光度"
</voice>
</phrase>
<phrase>
@@ -9136,7 +8424,7 @@
*: "Cuesheet 支援"
</dest>
<voice>
- *: "Cuesheet Support"
+ *: "Cuesheet 支援"
</voice>
</phrase>
<phrase>
@@ -9178,7 +8466,7 @@
*: "載入中... %d%% 完成 (%s)"
</dest>
<voice>
- *: ""
+ *: "載入中... %d%% 完成 (%s)"
</voice>
</phrase>
<phrase>
@@ -9195,7 +8483,7 @@
</dest>
<voice>
*: none
- recording: "Start new file"
+ recording: "開新檔案"
</voice>
</phrase>
<phrase>
@@ -9212,7 +8500,7 @@
</dest>
<voice>
*: none
- recording: "What to do when Splitting"
+ recording: "分割時行為"
</voice>
</phrase>
<phrase>
@@ -9226,7 +8514,7 @@
*: "開機畫面"
</dest>
<voice>
- *: "Start Screen"
+ *: "開機畫面"
</voice>
</phrase>
<phrase>
@@ -9240,7 +8528,7 @@
*: "<不要恢復書簽>"
</dest>
<voice>
- *: "Do not resume"
+ *: "<不要恢復書簽>"
</voice>
</phrase>
<phrase>
@@ -9254,7 +8542,7 @@
*: "刪除"
</dest>
<voice>
- *: "Delete"
+ *: "刪除"
</voice>
</phrase>
<phrase>
@@ -9271,7 +8559,7 @@
</dest>
<voice>
*: none
- radio: "Japan"
+ radio: "日本"
</voice>
</phrase>
<phrase>
@@ -9285,7 +8573,7 @@
*: "顯示路徑"
</dest>
<voice>
- *: "Show Path"
+ *: "顯示路徑"
</voice>
</phrase>
<phrase>
@@ -9299,12 +8587,12 @@
*: "選擇書簽"
</dest>
<voice>
- *: "Select Bookmark"
+ *: "選擇書簽"
</voice>
</phrase>
<phrase>
id: LANG_DITHERING
- desc: in the sound settings menu
+ desc: in the sound settings and some other menus
user: core
<source>
*: "Dithering"
@@ -9313,7 +8601,7 @@
*: "添加抖動"
</dest>
<voice>
- *: "Dithering"
+ *: "添加抖動"
</voice>
</phrase>
<phrase>
@@ -9327,7 +8615,7 @@
*: "應用程序"
</dest>
<voice>
- *: "Applications"
+ *: "應用程序"
</voice>
</phrase>
<phrase>
@@ -9343,7 +8631,7 @@
wheel_acceleration: none
</dest>
<voice>
- *: "List Acceleration Start Delay"
+ *: "列表加速緩衝"
wheel_acceleration: none
</voice>
</phrase>
@@ -9358,7 +8646,7 @@
*: "正在移動..."
</dest>
<voice>
- *: "Moving"
+ *: "正在移動..."
</voice>
</phrase>
<phrase>
@@ -9372,7 +8660,7 @@
*: "使用 .talk 文件夾"
</dest>
<voice>
- *: "Use Directory .talk Clips"
+ *: "使用 .talk 文件夾"
</voice>
</phrase>
<phrase>
@@ -9386,7 +8674,7 @@
*: "屬性"
</dest>
<voice>
- *: "Properties"
+ *: "屬性"
</voice>
</phrase>
<phrase>
@@ -9442,7 +8730,7 @@
*: "<無效書簽>"
</dest>
<voice>
- *: "Invalid Bookmark"
+ *: "<無效書簽>"
</voice>
</phrase>
<phrase>
@@ -9462,7 +8750,7 @@
<voice>
*: none
button_light: "Button Light Timeout"
- sansae200*,sansafuze*: "Wheel Light Timeout"
+ sansae200*,sansafuze*: "轉盤燈自動關時間"
</voice>
</phrase>
<phrase>
@@ -9507,24 +8795,7 @@
*: "只有目前目錄"
</dest>
<voice>
- *: "Current Directory Only"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_CHANNELS
- desc: in the recording settings
- user: core
- <source>
- *: none
- recording: "Channels"
- </source>
- <dest>
- *: none
- recording: "聲道"
- </dest>
- <voice>
- *: none
- recording: "Channels"
+ *: "只有目前目錄"
</voice>
</phrase>
<phrase>
@@ -9538,7 +8809,7 @@
*: "播放清單"
</dest>
<voice>
- *: "Playlists"
+ *: "播放清單"
</voice>
</phrase>
<phrase>
@@ -9594,7 +8865,7 @@
*: "清除時間?"
</dest>
<voice>
- *: "Clear Time?"
+ *: "清除時間?"
</voice>
</phrase>
<phrase>
@@ -9608,7 +8879,7 @@
*: "Last.fm 紀錄"
</dest>
<voice>
- *: "Last.fm Log"
+ *: "Last.fm 紀錄"
</voice>
</phrase>
<phrase>
@@ -9625,7 +8896,7 @@
</dest>
<voice>
*: none
- hold_button: "Backlight on hold"
+ hold_button: "背光 (Hold 時)"
</voice>
</phrase>
<phrase>
@@ -9639,7 +8910,7 @@
*: "設置"
</dest>
<voice>
- *: "Settings"
+ *: "設置"
</voice>
</phrase>
<phrase>
@@ -9653,7 +8924,7 @@
*: "已取消"
</dest>
<voice>
- *: "Cancelled"
+ *: "已取消"
</voice>
</phrase>
<phrase>
@@ -9681,7 +8952,7 @@
*: "你肯定嗎?"
</dest>
<voice>
- *: "Are You Sure?"
+ *: "你肯定嗎?"
</voice>
</phrase>
<phrase>
@@ -9695,7 +8966,7 @@
*: "%s 不存在"
</dest>
<voice>
- *: ""
+ *: "%s 不存在"
</voice>
</phrase>
<phrase>
@@ -9709,7 +8980,7 @@
*: "沒有播放清單"
</dest>
<voice>
- *: ""
+ *: "沒有播放清單"
</voice>
</phrase>
<phrase>
@@ -9723,7 +8994,7 @@
*: "複製中..."
</dest>
<voice>
- *: "Copying"
+ *: "複製中..."
</voice>
</phrase>
<phrase>
@@ -9757,7 +9028,7 @@
</dest>
<voice>
*: none
- recording: "Set As Recording Directory"
+ recording: "設為錄音目錄"
</voice>
</phrase>
<phrase>
@@ -9774,7 +9045,7 @@
</dest>
<voice>
*: none
- radio: "FM Radio Menu"
+ radio: "FM 收音選單"
</voice>
</phrase>
<phrase>
@@ -9791,7 +9062,7 @@
</dest>
<voice>
*: none
- recording: "Clip Counter"
+ recording: "削波屢計"
</voice>
</phrase>
<phrase>
@@ -9861,7 +9132,7 @@
*: "讀出文件格式"
</dest>
<voice>
- *: "Say File Type"
+ *: "讀出文件格式"
</voice>
</phrase>
<phrase>
@@ -9878,7 +9149,7 @@
</dest>
<voice>
*: none
- multivolume: "Not present"
+ multivolume: "不存在"
</voice>
</phrase>
<phrase>
@@ -9895,7 +9166,7 @@
</dest>
<voice>
*: none
- gigabeatfx,ipod6g,ipodvideo,mpiohd200,mpiohd300,mrobe100: "Bass Cutoff"
+ gigabeatfx,ipod6g,ipodvideo,mpiohd200,mpiohd300,mrobe100: "低音截斷"
</voice>
</phrase>
<phrase>
@@ -9912,7 +9183,7 @@
</dest>
<voice>
*: none
- lcd_color: "Primary Colour"
+ lcd_color: "項目選擇條主要顏色"
</voice>
</phrase>
<phrase>
@@ -9940,7 +9211,7 @@
*: "讀出電池剩餘容量"
</dest>
<voice>
- *: "Announce Battery Level"
+ *: "讀出電池剩餘容量"
</voice>
</phrase>
<phrase>
@@ -9957,7 +9228,7 @@
</dest>
<voice>
*: none
- lcd_color: "Line Selector Colours"
+ lcd_color: "項目選擇條顏色"
</voice>
</phrase>
<phrase>
@@ -9988,7 +9259,7 @@
</dest>
<voice>
*: none
- lcd_color: "Text Colour"
+ lcd_color: "字體顏色"
</voice>
</phrase>
<phrase>
@@ -10002,7 +9273,7 @@
*: "主題設定"
</dest>
<voice>
- *: "Theme Settings"
+ *: "主題設定"
</voice>
</phrase>
<phrase>
@@ -10033,7 +9304,7 @@
</dest>
<voice>
*: none
- lcd_color: "Bar (Gradient Colour)"
+ lcd_color: "漸變顏色條"
</voice>
</phrase>
<phrase>
@@ -10050,7 +9321,7 @@
</dest>
<voice>
*: none
- lcd_color: "Bar (Solid Colour)"
+ lcd_color: "實色條"
</voice>
</phrase>
<phrase>
@@ -10067,7 +9338,7 @@
</dest>
<voice>
*: none
- lcd_color: "Colours"
+ lcd_color: "顏色"
</voice>
</phrase>
<phrase>
@@ -10084,7 +9355,7 @@
</dest>
<voice>
*: none
- lcd_color: "Secondary Colour"
+ lcd_color: "項目選擇條次要顏色"
</voice>
</phrase>
<phrase>
@@ -10097,11 +9368,11 @@
</source>
<dest>
*: none
- gigabeatfx,ipod6g,ipodvideo,mpiohd200,mpiohd300,mrobe100: "高聲截斷"
+ gigabeatfx,ipod6g,ipodvideo,mpiohd200,mpiohd300,mrobe100: "高音截斷"
</dest>
<voice>
*: none
- gigabeatfx,ipod6g,ipodvideo,mpiohd200,mpiohd300,mrobe100: "Treble Cutoff"
+ gigabeatfx,ipod6g,ipodvideo,mpiohd200,mpiohd300,mrobe100: "高音截斷"
</voice>
</phrase>
<phrase>
@@ -10115,7 +9386,7 @@
*: "歐洲中部 (CP1250)"
</dest>
<voice>
- *: "Central European"
+ *: "歐洲中部 (CP1250)"
</voice>
</phrase>
<phrase>
@@ -10262,15 +9533,15 @@
user: core
<source>
*: none
- gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
+ fiiom3k,gigabeatfx,sansafuzeplus: "Touchpad Sensitivity"
</source>
<dest>
*: none
- gigabeatfx,sansafuzeplus: "觸摸板靈敏度"
+ fiiom3k, fiiom3k,gigabeatfx,sansafuzeplus: "觸摸板靈敏度"
</dest>
<voice>
*: none
- gigabeatfx,sansafuzeplus: "觸摸板靈敏度"
+ fiiom3k, fiiom3k,gigabeatfx,sansafuzeplus: "觸摸板靈敏度"
</voice>
</phrase>
<phrase>
@@ -10847,11 +10118,11 @@
</source>
<dest>
*: none
- touchscreen: "那個地方"
+ touchscreen: "具體位置"
</dest>
<voice>
*: none
- touchscreen: "那個地方"
+ touchscreen: "具體位置"
</voice>
</phrase>
<phrase>
@@ -10881,11 +10152,62 @@
</source>
<dest>
*: none
- touchscreen: "觸控模式"
+ touchscreen: "觸控面板操作模式"
+ </dest>
+ <voice>
+ *: none
+ touchscreen: "觸控面板操作模式"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_TOUCHSCREEN_CALIBRATE
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+ <source>
+ *: none
+ touchscreen: "Calibrate"
+ </source>
+ <dest>
+ *: none
+ touchscreen: "觸控面板校正"
+ </dest>
+ <voice>
+ *: none
+ touchscreen: "觸控面板校正"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_TOUCHSCREEN_RESET_CALIBRATION
+ desc: in Settings -> General -> Display -> Touchscreen Settings
+ user: core
+ <source>
+ *: none
+ touchscreen: "Reset Calibration"
+ </source>
+ <dest>
+ *: none
+ touchscreen: "重新校正觸控"
</dest>
<voice>
*: none
- touchscreen: "Touchscreen 選擇"
+ touchscreen: "重新校正觸控"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_USE_SHORTCUTS_INSTEAD_OF_QS
+ desc: in settings_menu.
+ user: core
+ <source>
+ *: none
+ quickscreen: "Use Shortcuts Menu Instead of Quick Screen"
+ </source>
+ <dest>
+ *: none
+ quickscreen: "使用快捷選單替代快捷熒幕"
+ </dest>
+ <voice>
+ *: none
+ quickscreen: "使用快捷選單替代快捷熒幕"
</voice>
</phrase>
<phrase>
@@ -10903,17 +10225,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_VOLUME_LIMIT
- desc: in sound_settings
+ id: LANG_GLYPHS
+ desc: in settings_menu
user: core
<source>
- *: "Maximum Volume Limit"
+ *: "Glyphs To Cache"
</source>
<dest>
- *: "音量限制"
+ *: "快取字型容納數量"
</dest>
<voice>
- *: "音量限制"
+ *: "快取字型容納數量"
</voice>
</phrase>
<phrase>
@@ -10941,35 +10263,35 @@
*: "啓動睡眠計時器"
</dest>
<voice>
- *: "Start Sleep Timer"
+ *: "啓動睡眠計時器"
</voice>
</phrase>
<phrase>
- id: LANG_SLEEP_TIMER_CANCEL_CURRENT
- desc: shown instead of sleep timer when it's running
+ id: LANG_SLEEP_TIMER_DURATION
+ desc: default sleep timer duration in minutes
user: core
<source>
- *: "Cancel Sleep Timer"
+ *: "Default Sleep Timer Duration"
</source>
<dest>
- *: "停止睡眠計時器"
+ *: "睡眠倒計時長度"
</dest>
<voice>
- *: "停止睡眠計時器"
+ *: "睡眠倒計時長度"
</voice>
</phrase>
<phrase>
- id: LANG_SLEEP_TIMER_DURATION
- desc: default sleep timer duration in minutes
+ id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
+ desc: whether to restart running sleep timer on keypress
user: core
<source>
- *: "Default Sleep Timer Duration"
+ *: "Restart Sleep Timer On Keypress"
</source>
<dest>
- *: "睡眠倒計時長度"
+ *: "偵測到按鍵時重置睡眠計時器"
</dest>
<voice>
- *: "睡眠倒計時長度"
+ *: "偵測到按鍵時重置睡眠計時器"
</voice>
</phrase>
<phrase>
@@ -10987,17 +10309,17 @@
</voice>
</phrase>
<phrase>
- id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
- desc: whether to restart running sleep timer on keypress
+ id: LANG_SHORTCUTS
+ desc: Title in the shortcuts menu
user: core
<source>
- *: "Restart Sleep Timer On Keypress"
+ *: "Shortcuts"
</source>
<dest>
- *: "偵測到按鍵時重置睡眠計時器"
+ *: "捷徑"
</dest>
<voice>
- *: "偵測到按鍵時重置睡眠計時器"
+ *: "捷徑"
</voice>
</phrase>
<phrase>
@@ -11043,478 +10365,244 @@
</voice>
</phrase>
<phrase>
- id: LANG_SET_AS_START_DIR
- desc: used in the onplay menu to set a starting browser dir
- user: core
- <source>
- *: "Start File Browser Here"
- </source>
- <dest>
- *: "設爲起始檔案瀏覽位置"
- </dest>
- <voice>
- *: "設爲起始檔案瀏覽位置"
- </voice>
-</phrase>
-<phrase>
- id: LANG_RESET_START_DIR
- desc: reset the browser start directory
- user: core
- <source>
- *: "Start File Browser at /"
- </source>
- <dest>
- *: "復原檔案瀏覽起始位置"
- </dest>
- <voice>
- *: "復原檔案瀏覽起始位置"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SELECT_DATABASE_DIRS
- desc: in settings_menu
- user: core
- <source>
- *: "Select directories to scan"
- </source>
- <dest>
- *: "自定要掃描的資料夾"
- </dest>
- <voice>
- *: "自定資料庫要進行媒體掃描的資料夾"
- </voice>
-</phrase>
-<phrase>
- id: LANG_USE_SHORTCUTS_INSTEAD_OF_QS
- desc: in settings_menu.
- user: core
- <source>
- *: none
- quickscreen: "Use Shortcuts Menu Instead of Quick Screen"
- </source>
- <dest>
- *: none
- quickscreen: "使用快捷選單替代快捷熒幕"
- </dest>
- <voice>
- *: none
- quickscreen: "使用快捷選單替代快捷熒幕"
- </voice>
-</phrase>
-<phrase>
- id: LANG_RADIOSCREEN
- desc: in the theme menu
- user: core
- <source>
- *: none
- radio: "Radio Screen"
- </source>
- <dest>
- *: none
- radio: "收音機接口主題"
- </dest>
- <voice>
- *: none
- radio: "收音機接口主題"
- </voice>
-</phrase>
-<phrase>
- id: LANG_BASE_SKIN
- desc: browse for the base skin in theme settings
- user: core
- <source>
- *: "Base Skin"
- </source>
- <dest>
- *: "狀態列佈景主題"
- </dest>
- <voice>
- *: "狀態列佈景主題"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SCROLLBAR_WIDTH
- desc: in Settings -> General -> Display -> Status-/Scrollbar
- user: core
- <source>
- *: "Scroll Bar Width"
- </source>
- <dest>
- *: "捲動軸寬度"
- </dest>
- <voice>
- *: "捲動軸寬度"
- </voice>
-</phrase>
-<phrase>
- id: LANG_PAUSE_REWIND
- desc: Seconds to rewind when rewind on pause is enabled.
- user: core
- <source>
- *: "Rewind on Pause"
- </source>
- <dest>
- *: "暫停時自動倒退"
- </dest>
- <voice>
- *: "暫停時自動倒退"
- </voice>
-</phrase>
-<phrase>
- id: LANG_RESUME_REWIND
- desc: in playback settings menu
- user: core
- <source>
- *: "Rewind Before Resume"
- </source>
- <dest>
- *: "暫停時自動倒退長度"
- </dest>
- <voice>
- *: "暫停時自動倒退長度"
- </voice>
-</phrase>
-<phrase>
- id: LANG_FILTER_ROLL_OFF
+ id: LANG_COMPRESSOR
desc: in sound settings
user: core
<source>
- *: none
- filter_roll_off: "DAC's filter roll-off"
+ *: "Compressor"
</source>
<dest>
- *: none
- filter_roll_off: "DAC濾波器滾降"
+ *: "壓縮器"
</dest>
<voice>
- *: none
- filter_roll_off: "DAC濾波器滾降"
+ *: "壓縮器"
</voice>
</phrase>
<phrase>
- id: LANG_FILTER_SHARP
+ id: LANG_COMPRESSOR_RATIO
desc: in sound settings
user: core
<source>
- *: none
- filter_roll_off: "Sharp"
+ *: "Ratio"
</source>
<dest>
- *: none
- filter_roll_off: "快速"
+ *: "壓縮比例"
</dest>
<voice>
- *: none
- filter_roll_off: "快速滾降"
+ *: "壓縮比例"
</voice>
</phrase>
<phrase>
- id: LANG_FILTER_SLOW
+ id: LANG_COMPRESSOR_RELEASE
desc: in sound settings
user: core
<source>
- *: none
- filter_roll_off: "Slow"
+ *: "Release Time"
</source>
<dest>
- *: none
- filter_roll_off: "平緩"
+ *: "壓縮釋放時間"
</dest>
<voice>
- *: none
- filter_roll_off: "平緩滾降"
+ *: "壓縮釋放時間"
</voice>
</phrase>
<phrase>
- id: LANG_PBE
+ id: LANG_COMPRESSOR_THRESHOLD
desc: in sound settings
user: core
<source>
- *: "Perceptual Bass Enhancement"
+ *: "Threshold"
</source>
<dest>
- *: "感知性低音增強"
+ *: "閥值"
</dest>
<voice>
- *: "感知性低音增強音效"
+ *: "閥值"
</voice>
</phrase>
<phrase>
- id: LANG_AFR
+ id: LANG_COMPRESSOR_GAIN
desc: in sound settings
user: core
<source>
- *: "Auditory Fatigue Reduction"
- </source>
- <dest>
- *: "聲學抗疲勞"
- </dest>
- <voice>
- *: "聲學抗疲勞音效"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SURROUND
- desc: in the sound settings menu
- user: core
- <source>
- *: "Haas Surround"
+ *: "Makeup Gain"
</source>
<dest>
- *: "哈斯環繞"
+ *: "增益"
</dest>
<voice>
- *: "哈斯環繞音效"
+ *: "增益"
</voice>
</phrase>
<phrase>
- id: LANG_SURROUND_FX1
+ id: LANG_COMPRESSOR_KNEE
desc: in sound settings
user: core
<source>
- *: "f(x1)"
+ *: "Knee"
</source>
<dest>
- *: "f(x1)"
+ *: "拐點"
</dest>
<voice>
- *: "f(x1)"
+ *: "拐點"
</voice>
</phrase>
<phrase>
- id: LANG_SURROUND_FX2
+ id: LANG_COMPRESSOR_SOFT_KNEE
desc: in sound settings
user: core
<source>
- *: "f(x2)"
+ *: "Soft Knee"
</source>
<dest>
- *: "f(x2)"
+ *: "軟拐點"
</dest>
<voice>
- *: "f(x2)"
+ *: "軟拐點"
</voice>
</phrase>
<phrase>
- id: LANG_SURROUND_METHOD2
+ id: LANG_COMPRESSOR_HARD_KNEE
desc: in sound settings
user: core
<source>
- *: "SIDE ONLY"
+ *: "Hard Knee"
</source>
<dest>
- *: "SIDE ONLY"
+ *: "硬拐點"
</dest>
<voice>
- *: "SIDE ONLY"
+ *: "硬拐點"
</voice>
</phrase>
<phrase>
- id: LANG_SURROUND_MIX
+ id: LANG_AUTO
desc: in sound settings
user: core
<source>
- *: "Dry / Wet Mix"
- </source>
- <dest>
- *: "乾濕混合度"
- </dest>
- <voice>
- *: "乾濕混合度"
- </voice>
-</phrase>
-<phrase>
- id: LANG_IBASSO_FREQ_SCALING_GOVERNOR
- desc: in Settings -> General -> System -> Freq Scaling Governor
- user: core
- <source>
- *: none
- ibassodx50,ibassodx90: "Freq Scaling Governor"
- </source>
- <dest>
- *: none
- ibassodx50,ibassodx90: "CPU頻率管理器"
- </dest>
- <voice>
- *: none
- ibassodx50,ibassodx90: "CPU頻率管理器"
- </voice>
-</phrase>
-<phrase>
- id: LANG_USB_MODE
- desc: in Settings -> General -> System -> USB Mode
- user: core
- <source>
- *: "USB Mode"
- </source>
- <dest>
- *: "USB模式"
- </dest>
- <voice>
- *: "USB模式"
- </voice>
-</phrase>
-<phrase>
- id: LANG_USB_MODE_MASS_STORAGE
- desc: in Settings -> General -> System -> USB Mode: Mass Storage
- user: core
- <source>
- *: "Mass Storage"
- </source>
- <dest>
- *: "大容量存儲"
- </dest>
- <voice>
- *: "大容量存儲"
- </voice>
-</phrase>
-<phrase>
- id: LANG_USB_MODE_CHARGE
- desc: in Settings -> General -> System -> USB Mode: Charge Only
- user: core
- <source>
- *: "Charge Only"
- </source>
- <dest>
- *: "僅充電"
- </dest>
- <voice>
- *: "僅充電"
- </voice>
-</phrase>
-<phrase>
- id: LANG_USB_MODE_ADB
- desc: in Settings -> General -> System -> USB Mode: Android Debug Bridge
- user: core
- <source>
- *: "Android Debug Bridge"
+ *: "Auto"
</source>
<dest>
- *: "ADB偵錯"
+ *: "自動"
</dest>
<voice>
- *: "ADB偵錯"
+ *: "自動"
</voice>
</phrase>
<phrase>
- id: LANG_STATUSBAR_BOTTOM
- desc: in Settings -> General -> Display -> statusbar
+ id: LANG_TIMESTRETCH
+ desc: timestretch enable
user: core
<source>
- *: "Bottom"
+ *: "Timestretch"
</source>
<dest>
- *: "底部"
+ *: "時間伸縮"
</dest>
<voice>
- *: "Bottom"
+ *: "時間伸縮"
</voice>
</phrase>
<phrase>
- id: LANG_LEFT
- desc: Generic use of 'left'
+ id: LANG_RESUME_REWIND
+ desc: in playback settings menu
user: core
<source>
- *: "Left"
+ *: "Rewind Before Resume"
</source>
<dest>
- *: "Left"
+ *: "暫停時自動倒退長度"
</dest>
<voice>
- *: "Left"
+ *: "暫停時自動倒退長度"
</voice>
</phrase>
<phrase>
- id: LANG_LIST_SEPARATOR
- desc: line between lines in lists
+ id: LANG_PAUSE_REWIND
+ desc: Seconds to rewind when rewind on pause is enabled.
user: core
<source>
- *: "Line Separator"
+ *: "Rewind on Pause"
</source>
<dest>
- *: "分隔行"
+ *: "暫停時自動倒退"
</dest>
<voice>
- *: "Line Separator"
+ *: "暫停時自動倒退"
</voice>
</phrase>
<phrase>
- id: LANG_SKIP_OUTRO
- desc: skipping to the 5 seconds before the end of a track
+ id: LANG_REPLAYGAIN
+ desc: in replaygain
user: core
<source>
- *: "Skip to Outro"
+ *: "Replaygain"
</source>
<dest>
- *: "快轉"
+ *: "播放增益"
</dest>
<voice>
- *: "Skip to Outro"
+ *: "播放增益"
</voice>
</phrase>
<phrase>
- id: LANG_COMPRESSOR_THRESHOLD
- desc: in sound settings
+ id: LANG_RESET_START_DIR
+ desc: reset the browser start directory
user: core
<source>
- *: "Threshold"
+ *: "Start File Browser at /"
</source>
<dest>
- *: "閾"
+ *: "復原檔案瀏覽起始位置"
</dest>
<voice>
- *: "Threshold"
+ *: "復原檔案瀏覽起始位置"
</voice>
</phrase>
<phrase>
- id: LANG_FM_STATION_HEADER
- desc: in radio screen
+ id: LANG_SELECT_DATABASE_DIRS
+ desc: in settings_menu
user: core
<source>
- *: none
- radio: "Station:"
+ *: "Select directories to scan"
</source>
<dest>
- *: none
- radio: "Station:"
+ *: "自定要掃描的資料夾"
</dest>
<voice>
- *: none
- radio: ""
+ *: "自定資料庫要進行媒體掃描的資料夾"
</voice>
</phrase>
<phrase>
- id: LANG_HW_EQ_WIDTH_WIDE
- desc: in sound_menu, hardware equalizer tone controls wide bandwidth setting
+ id: LANG_PM_RELEASE
+ desc: in the peak meter menu
user: core
<source>
- *: none
- gigabeats,samsungypr1: "Wide"
+ *: "Peak Release"
</source>
<dest>
- *: none
- gigabeats,samsungypr1: "寬"
+ *: "峰值釋放速度"
</dest>
<voice>
- *: none
- gigabeats,samsungypr1: "Wide"
+ *: "峰值釋放速度"
</voice>
</phrase>
<phrase>
- id: LANG_TOP_QS_ITEM
- desc: used for the submenu name for the quickscreen items
+ id: LANG_TOUCHSCREEN_SETTINGS
+ desc: in Settings -> General -> Display menu
user: core
<source>
*: none
- quickscreen: "Set as Top Quickscreen Item"
+ touchscreen: "Touchscreen Settings"
</source>
<dest>
*: none
- quickscreen: "Set as Top Quickscreen Item"
+ touchscreen: "觸控面板設定"
</dest>
<voice>
*: none
- quickscreen: "Set as Top Quickscreen Item"
+ touchscreen: "觸控面板設定"
</voice>
</phrase>
<phrase>
@@ -11527,546 +10615,132 @@
</source>
<dest>
*: none
- touchscreen: "Line Padding in Lists"
- </dest>
- <voice>
- *: none
- touchscreen: "Line Padding in Lists"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SEMITONE
- desc:
- user: core
- <source>
- *: none
- pitchscreen: "Semitone"
- </source>
- <dest>
- *: none
- pitchscreen: "半音"
- </dest>
- <voice>
- *: none
- pitchscreen: "Semitone"
- </voice>
-</phrase>
-<phrase>
- id: LANG_QUEUE_LAST_SHUFFLED
- desc: in onplay menu. queue a playlist randomly at end of dynamic playlist
- user: core
- <source>
- *: "Queue Last Shuffled"
- </source>
- <dest>
- *: "Queue Last Shuffled"
- </dest>
- <voice>
- *: "Queue Last Shuffled"
- </voice>
-</phrase>
-<phrase>
- id: LANG_AUTOMATIC
- desc: generic automatic
- user: core
- <source>
- *: "Automatic"
- </source>
- <dest>
- *: "自動"
- </dest>
- <voice>
- *: "Automatic"
- </voice>
-</phrase>
-<phrase>
- id: LANG_REMOTE_BASE_SKIN
- desc: browse for the base skin in theme settings
- user: core
- <source>
- *: "Remote Base Skin"
- </source>
- <dest>
- *: "Remote Base Skin"
- </dest>
- <voice>
- *: "Remote Base Skin"
- </voice>
-</phrase>
-<phrase>
- id: LANG_KBD_OK
- desc: in keyboard
- user: core
- <source>
- *: none
- touchscreen: "OK"
- </source>
- <dest>
- *: none
- touchscreen: "OK"
+ touchscreen: "列表行間填充"
</dest>
<voice>
*: none
- touchscreen: "OK"
- </voice>
-</phrase>
-<phrase>
- id: LANG_NEXT_TRACK
- desc: Shown in WPS
- user: core
- <source>
- *: "Next Track:"
- </source>
- <dest>
- *: "下一首:"
- </dest>
- <voice>
- *: "Next Track:"
+ touchscreen: "列表行間填充"
</voice>
</phrase>
<phrase>
- id: LANG_REMOTE_SCREEN
- desc: in the main menu
- user: core
- <source>
- *: none
- remote: "Remote Screen"
- </source>
- <dest>
- *: none
- remote: "Remote Screen"
- </dest>
- <voice>
- *: none
- remote: "Remote Screen"
- </voice>
-</phrase>
-<phrase>
- id: LANG_DEADZONE
- desc: touchpad deadzone setting
- user: core
- <source>
- *: none
- sansafuzeplus: "Touchpad Dead Zone"
- </source>
- <dest>
- *: none
- sansafuzeplus: "觸控板盲區"
- </dest>
- <voice>
- *: none
- sansafuzeplus: "Touchpad Dead Zone"
- </voice>
-</phrase>
-<phrase>
- id: LANG_INSERT_LAST_SHUFFLED
- desc: in onplay menu. insert a playlist randomly at end of dynamic playlist
- user: core
- <source>
- *: "Insert Last Shuffled"
- </source>
- <dest>
- *: "Insert Last Shuffled"
- </dest>
- <voice>
- *: "Insert Last Shuffled"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR_RATIO_LIMIT
- desc: in sound settings
- user: core
- <source>
- *: "Limit"
- </source>
- <dest>
- *: "Limit"
- </dest>
- <voice>
- *: "Limit"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SYSFONT_EQUALIZER_BAND_Q
- desc: in the equalizer settings menu
- user: core
- <source>
- *: "Q"
- </source>
- <dest>
- *: "品質因數"
- </dest>
- <voice>
- *: "Q"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR
- desc: in sound settings
- user: core
- <source>
- *: "Compressor"
- </source>
- <dest>
- *: "壓縮"
- </dest>
- <voice>
- *: "Compressor"
- </voice>
-</phrase>
-<phrase>
- id: LANG_CROSSFEED_MEIER
- desc: in sound settings
- user: core
- <source>
- *: "Simple (Meier)"
- </source>
- <dest>
- *: "Simple (Meier)"
- </dest>
- <voice>
- *: "Simple"
- </voice>
-</phrase>
-<phrase>
- id: LANG_HW_EQ_FREQUENCY
- desc: in sound_menu, hardware equalizer tone controls shelf filter cutoff frequency
- user: core
- <source>
- *: none
- gigabeats,samsungypr1: "Band %d Frequency"
- </source>
- <dest>
- *: none
- gigabeats,samsungypr1: "Band %d 頻率"
- </dest>
- <voice>
- *: none
- gigabeats,samsungypr1: "Band Frequency"
- </voice>
-</phrase>
-<phrase>
- id: VOICE_EXT_RFMS
- desc: spoken only, for file extension
- user: core
- <source>
- *: none
- radio_remote: ""
- </source>
- <dest>
- *: none
- radio_remote: ""
- </dest>
- <voice>
- *: none
- radio_remote: "remote radio screen skin"
- </voice>
-</phrase>
-<phrase>
- id: VOICE_EXT_RSBS
- desc: spoken only, for file extension
+ id: LANG_LIST_SEPARATOR
+ desc: line between lines in lists
user: core
<source>
- *: none
- remote: ""
+ *: "Line Separator"
</source>
<dest>
- *: none
- remote: ""
+ *: "行分隔線"
</dest>
<voice>
- *: none
- remote: "remote statusbar skin"
+ *: "行分隔線"
</voice>
</phrase>
<phrase>
- id: LANG_COMPRESSOR_RATIO_10
- desc: in sound settings
+ id: LANG_LIST_SEPARATOR_COLOR
+ desc: line between lines in lists
user: core
<source>
- *: "10:1"
+ *: "Line Separator Colour"
</source>
<dest>
- *: "10:1"
+ *: "行分隔線顏色"
</dest>
<voice>
- *: "10 to 1"
+ *: "Color of Line Separator"
</voice>
</phrase>
<phrase>
- id: LANG_SCROLLBAR_POSITION
+ id: LANG_SCROLLBAR_WIDTH
desc: in Settings -> General -> Display -> Status-/Scrollbar
user: core
<source>
- *: "Scroll Bar Position"
- </source>
- <dest>
- *: "滾動條位置"
- </dest>
- <voice>
- *: "Scroll bar position"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR_KNEE
- desc: in sound settings
- user: core
- <source>
- *: "Knee"
- </source>
- <dest>
- *: "Knee"
- </dest>
- <voice>
- *: "Knee"
- </voice>
-</phrase>
-<phrase>
- id: LANG_STATUSBAR_TOP
- desc: in Settings -> General -> Display -> statusbar
- user: core
- <source>
- *: "Top"
- </source>
- <dest>
- *: "頂部"
- </dest>
- <voice>
- *: "Top"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR_RATIO_4
- desc: in sound settings
- user: core
- <source>
- *: "4:1"
- </source>
- <dest>
- *: "4:1"
- </dest>
- <voice>
- *: "4 to 1"
- </voice>
-</phrase>
-<phrase>
- id: LANG_KBD_DELETE
- desc: in keyboard
- user: core
- <source>
- *: none
- touchscreen: "Del"
- </source>
- <dest>
- *: none
- touchscreen: "刪除"
- </dest>
- <voice>
- *: none
- touchscreen: "Del"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR_SOFT_KNEE
- desc: in sound settings
- user: core
- <source>
- *: "Soft Knee"
- </source>
- <dest>
- *: "軟拐點"
- </dest>
- <voice>
- *: "Soft Knee"
- </voice>
-</phrase>
-<phrase>
- id: LANG_FM_OTHER
- desc: Catch-all FM region. Select if none of the others work
- user: core
- <source>
- *: none
- radio: "Other"
- </source>
- <dest>
- *: none
- radio: "其他"
- </dest>
- <voice>
- *: none
- radio: "Other"
- </voice>
-</phrase>
-<phrase>
- id: LANG_HW_EQ_TONE_CONTROLS_ADVANCED
- desc: in sound_menu, advanced settings for hardware equalizer tone controls
- user: core
- <source>
- *: none
- gigabeats,samsungypr1: "Advanced Tone Control Settings"
- </source>
- <dest>
- *: none
- gigabeats,samsungypr1: "進階音調控制設置"
- </dest>
- <voice>
- *: none
- gigabeats,samsungypr1: "Advanced Tone Control Settings"
- </voice>
-</phrase>
-<phrase>
- id: LANG_CODEPAGE_WESTERN_EUROPEAN
- desc: in codepage setting menu
- user: core
- <source>
- *: "Western European (CP1252)"
- </source>
- <dest>
- *: "西歐 (CP1252)"
- </dest>
- <voice>
- *: "Western European"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR_GAIN
- desc: in sound settings
- user: core
- <source>
- *: "Makeup Gain"
- </source>
- <dest>
- *: "Makeup Gain"
- </dest>
- <voice>
- *: "Makeup Gain"
- </voice>
-</phrase>
-<phrase>
- id: LANG_HW_EQ_WIDTH_NARROW
- desc: in sound_menu, hardware equalizer tone controls narrow bandwith setting
- user: core
- <source>
- *: none
- gigabeats,samsungypr1: "Narrow"
- </source>
- <dest>
- *: none
- gigabeats,samsungypr1: "Narrow"
- </dest>
- <voice>
- *: none
- gigabeats,samsungypr1: "Narrow"
- </voice>
-</phrase>
-<phrase>
- id: LANG_SAVE_CHANGES
- desc: When you try to exit screens to confirm save
- user: core
- <source>
- *: "Save Changes?"
+ *: "Scroll Bar Width"
</source>
<dest>
- *: "儲存變更?"
+ *: "捲動軸寬度"
</dest>
<voice>
- *: "Save Changes?"
+ *: "捲動軸寬度"
</voice>
</phrase>
<phrase>
- id: LANG_MAIN_SCREEN
- desc: in the main menu
+ id: LANG_CONSTRAIN_NEXT_FOLDER
+ desc: in settings_menu. Whether LANG_NEXT_FOLDER should be constrained to directories within LANG_SET_AS_START_DIR
user: core
<source>
- *: none
- remote: "Main Screen"
+ *: "Constrain Auto-Change"
</source>
<dest>
- *: none
- remote: "主畫面"
+ *: "限制自動跳轉"
</dest>
<voice>
- *: none
- remote: "Main Screen"
+ *: "限制自動跳轉"
</voice>
</phrase>
<phrase>
- id: LANG_HISTOGRAM_INTERVAL
- desc: in record settings menu
+ id: LANG_HOTKEY
+ desc: hotkey menu
user: core
<source>
*: none
- histogram: "Histogram interval"
+ hotkey: "Hotkey"
</source>
<dest>
*: none
- histogram: "Histogram interval"
+ hotkey: "熱鍵"
</dest>
<voice>
*: none
- histogram: "Histogram interval"
+ hotkey: "熱鍵"
</voice>
</phrase>
<phrase>
- id: LANG_STATUSBAR_CUSTOM
- desc: if this translation is compatible with LANG_CHANNEL_CUSTOM, then please use the same translation. it can be combined later then
- user: core
- <source>
- *: "Custom"
- </source>
- <dest>
- *: "自訂"
- </dest>
- <voice>
- *: "Custom"
- </voice>
-</phrase>
-<phrase>
- id: LANG_KBD_CANCEL
- desc: in keyboard
+ id: LANG_HOTKEY_FILE_BROWSER
+ desc: hotkey menu
user: core
<source>
*: none
- touchscreen: "Cancel"
+ hotkey: "File Browser Hotkey"
</source>
<dest>
*: none
- touchscreen: "取消"
+ hotkey: "檔案瀏覽器的熱鍵"
</dest>
<voice>
*: none
- touchscreen: "Cancel"
+ hotkey: "檔案瀏覽器的熱鍵"
</voice>
</phrase>
<phrase>
- id: VOICE_EXT_FMS
- desc: spoken only, for file extension
+ id: LANG_HOTKEY_WPS
+ desc: hotkey menu
user: core
<source>
*: none
- radio: ""
+ hotkey: "WPS Hotkey"
</source>
<dest>
*: none
- radio: ""
+ hotkey: "音樂播放介面熱鍵"
</dest>
<voice>
*: none
- radio: "radio screen skin"
+ hotkey: "音樂播放介面熱鍵"
</voice>
</phrase>
<phrase>
- id: LANG_COMPRESSOR_RATIO_2
- desc: in sound settings
+ id: LANG_SET_AS_START_DIR
+ desc: used in the onplay menu to set a starting browser dir
user: core
<source>
- *: "2:1"
+ *: "Start File Browser Here"
</source>
<dest>
- *: "2:1"
+ *: "設爲起始檔案瀏覽位置"
</dest>
<voice>
- *: "2 to 1"
+ *: "設爲起始檔案瀏覽位置"
</voice>
</phrase>
<phrase>
@@ -12077,877 +10751,489 @@
*: "Current Playlist"
</source>
<dest>
- *: "當前播放列表"
+ *: "當前播放清單"
</dest>
<voice>
- *: "Current Playlist"
+ *: "當前播放清單"
</voice>
</phrase>
<phrase>
- id: LANG_TAGNAVI_UNTAGGED
- desc: "<untagged>" entry in tag browser
- user: core
- <source>
- *: "<Untagged>"
- </source>
- <dest>
- *: "<Untagged>"
- </dest>
- <voice>
- *: "Untagged"
- </voice>
-</phrase>
-<phrase>
- id: LANG_BROWSER_MODE
- desc: in settings_menu
- user: core
- <source>
- *: none
- usb_hid: "Browser"
- </source>
- <dest>
- *: none
- usb_hid: "瀏覽"
- </dest>
- <voice>
- *: none
- usb_hid: "Browser"
- </voice>
-</phrase>
-<phrase>
- id: LANG_COMPRESSOR_HARD_KNEE
- desc: in sound settings
- user: core
- <source>
- *: "Hard Knee"
- </source>
- <dest>
- *: "硬拐點"
- </dest>
- <voice>
- *: "Hard Knee"
- </voice>
-</phrase>
-<phrase>
- id: LANG_REMOTE_RADIOSCREEN
- desc: in the theme menu
- user: core
- <source>
- *: none
- radio_remote: "Remote Radio Screen"
- </source>
- <dest>
- *: none
- radio_remote: "Remote Radio Screen"
- </dest>
- <voice>
- *: none
- radio_remote: "Remote Radio Screen"
- </voice>
-</phrase>
-<phrase>
- id: VOICE_EXT_SBS
- desc: spoken only, for file extension
+ id: LANG_INSERT_LAST_SHUFFLED
+ desc: in onplay menu. insert a playlist randomly at end of dynamic playlist
user: core
<source>
- *: ""
+ *: "Insert Last Shuffled"
</source>
<dest>
- *: ""
+ *: "隨機插入到播放清單最後位置"
</dest>
<voice>
- *: "statusbar skin"
+ *: "隨機插入到播放清單最後位置"
</voice>
</phrase>
<phrase>
- id: LANG_USB_HID
- desc: in settings_menu
+ id: LANG_QUEUE_LAST_SHUFFLED
+ desc: in onplay menu. queue a playlist randomly at end of dynamic playlist
user: core
<source>
- *: none
- usb_hid: "USB HID"
+ *: "Queue Last Shuffled"
</source>
<dest>
- *: none
- usb_hid: "USB人性化介面"
+ *: "清單播放完畢後重新隨機隊列"
</dest>
<voice>
- *: none
- usb_hid: "USB Human Interface Device"
+ *: "清單播放完畢後重新隨機隊列"
</voice>
</phrase>
<phrase>
- id: LANG_TOUCHSCREEN_CALIBRATE
- desc: in Settings -> General -> Display -> Touchscreen Settings
+ id: LANG_SET_AS_PLAYLISTCAT_DIR
+ desc: used in the onplay menu to set a playlist catalogue dir
user: core
<source>
- *: none
- touchscreen: "Calibrate"
+ *: "Set As Playlist Catalogue Directory"
</source>
<dest>
- *: none
- touchscreen: "校準"
+ *: "設定為播放清單目錄位置"
</dest>
<voice>
- *: none
- touchscreen: "Calibrate"
+ *: "設定為播放清單目錄位置"
</voice>
</phrase>
<phrase>
- id: LANG_PLAYBACK_RATE
- desc: "rate" in pitch screen
+ id: LANG_VOLUME_LIMIT
+ desc: in sound_settings
user: core
<source>
- *: none
- pitchscreen: "Rate"
+ *: "Maximum Volume Limit"
</source>
<dest>
- *: none
- pitchscreen: "速率"
+ *: "音量限制"
</dest>
<voice>
- *: none
- pitchscreen: "Rate"
+ *: "音量限制"
</voice>
</phrase>
<phrase>
- id: LANG_MOUSE_MODE
- desc: in settings_menu
+ id: LANG_STARTUP_SHUTDOWN
+ desc: in the general settings menu
user: core
<source>
- *: none
- usb_hid: "Mouse"
+ *: "Startup/Shutdown"
</source>
<dest>
- *: none
- usb_hid: "滑鼠"
+ *: "開機/關機"
</dest>
<voice>
- *: none
- usb_hid: "Mouse"
+ *: "開機和關機"
</voice>
</phrase>
<phrase>
- id: LANG_COMPRESSOR_ATTACK
- desc: in sound settings
+ id: LANG_SLEEP_TIMER_START_CURRENT
+ desc: shown when a sleep timer isn't running
user: core
<source>
- *: "Attack Time"
+ *: "Start Sleep Timer"
</source>
<dest>
- *: "Attack Time"
+ *: "啓動睡眠計時器"
</dest>
<voice>
- *: "Attack Time"
+ *: "啓動睡眠計時器"
</voice>
</phrase>
<phrase>
- id: LANG_MORSE_INPUT
- desc: in Settings -> System
+ id: LANG_SLEEP_TIMER_CANCEL_CURRENT
+ desc: shown instead of sleep timer when it's running
user: core
<source>
- *: none
- morse_input: "Use Morse Code Input"
+ *: "Cancel Sleep Timer"
</source>
<dest>
- *: none
- morse_input: "Use Morse Code Input"
+ *: "停止睡眠計時器"
</dest>
<voice>
- *: none
- morse_input: "Use Morse Code Input"
+ *: "停止睡眠計時器"
</voice>
</phrase>
<phrase>
- id: LANG_FM_RSSI
- desc: Signal strength of a received FM station
+ id: LANG_SLEEP_TIMER_DURATION
+ desc: default sleep timer duration in minutes
user: core
<source>
- *: none
- radio: "Signal strength:"
+ *: "Default Sleep Timer Duration"
</source>
<dest>
- *: none
- radio: "信號強度:"
+ *: "睡眠倒計時長度"
</dest>
<voice>
- *: none
- radio: "Signal strength:"
+ *: "睡眠倒計時長度"
</voice>
</phrase>
<phrase>
- id: LANG_COMPRESSOR_RELEASE
- desc: in sound settings
+ id: LANG_SLEEP_TIMER_ON_POWER_UP
+ desc: whether sleep timer starts on power up
user: core
<source>
- *: "Release Time"
+ *: "Start Sleep Timer On Boot"
</source>
<dest>
- *: "釋放時間"
+ *: "開機即啓動睡眠計時"
</dest>
<voice>
- *: "Release Time"
+ *: "開機後立即啓動睡眠計時"
</voice>
</phrase>
<phrase>
- id: LANG_FM_ITALY
- desc: fm region Italy
+ id: LANG_KEYPRESS_RESTARTS_SLEEP_TIMER
+ desc: whether to restart running sleep timer on keypress
user: core
<source>
- *: none
- radio: "Italy"
+ *: "Restart Sleep Timer On Keypress"
</source>
<dest>
- *: none
- radio: "義大利"
+ *: "偵測到按鍵時重置睡眠計時器"
</dest>
<voice>
- *: none
- radio: "Italy"
+ *: "偵測到按鍵時重置睡眠計時器"
</voice>
</phrase>
<phrase>
- id: LANG_FORCE
- desc: alternative to yes/no for tristate settings
+ id: LANG_AUTORESUME
+ desc: resume settings menu
user: core
<source>
- *: "Force"
+ *: "Automatic resume"
</source>
<dest>
- *: "Force"
+ *: "單檔案斷點續撥"
</dest>
<voice>
- *: "Force"
+ *: "爲每個檔案保存斷點續撥"
</voice>
</phrase>
<phrase>
- id: LANG_HW_EQ_TONE_CONTROLS
- desc: in sound_menu, hardware equalizer tone controls
+ id: LANG_AUTORESUME_AUTOMATIC
+ desc: resume on automatic track change
user: core
<source>
- *: none
- gigabeats,samsungypr1: "Tone Controls"
+ *: "Resume on automatic track change"
</source>
<dest>
- *: none
- gigabeats,samsungypr1: "音調控制"
+ *: "曲目自動跳轉時斷點續撥"
</dest>
<voice>
- *: none
- gigabeats,samsungypr1: "Tone Controls"
+ *: "曲目自動跳轉時斷點續撥"
</voice>
</phrase>
<phrase>
- id: LANG_AUTOTRACKSKIP
- desc: in crossfade settings
+ id: LANG_AUTORESUME_CUSTOM
+ desc: enable customization of resume on automatic track change
user: core
<source>
- *: none
- crossfade: "Automatic Track Change Only"
+ *: "In custom directories only"
</source>
<dest>
- *: none
- crossfade: "Automatic Track Change Only"
+ *: "僅針對自定資料夾中的檔案"
</dest>
<voice>
- *: none
- crossfade: "Automatic Track Change Only"
+ *: "僅針對自定資料夾中的檔案"
</voice>
</phrase>
<phrase>
- id: LANG_USB_KEYPAD_MODE
- desc: in settings_menu
+ id: LANG_SET_AS_START_DIR
+ desc: used in the onplay menu to set a starting browser dir
user: core
<source>
- *: none
- usb_hid: "USB Keypad Mode"
+ *: "Start File Browser Here"
</source>
<dest>
- *: none
- usb_hid: "USB Keypad Mode"
+ *: "設爲起始檔案瀏覽位置"
</dest>
<voice>
- *: none
- usb_hid: "USB Keypad Mode"
+ *: "設爲起始檔案瀏覽位置"
</voice>
</phrase>
<phrase>
- id: LANG_SELECT_FOLDER
- desc: in settings_menu
+ id: LANG_RESET_START_DIR
+ desc: reset the browser start directory
user: core
<source>
- *: "Select one or more directories"
+ *: "Start File Browser at /"
</source>
<dest>
- *: "選擇一個或多個目錄"
+ *: "復原檔案瀏覽起始位置"
</dest>
<voice>
- *: "Select one or more directories"
+ *: "復原檔案瀏覽起始位置"
</voice>
</phrase>
<phrase>
- id: LANG_USB_SKIP_FIRST_DRIVE
+ id: LANG_SELECT_DATABASE_DIRS
desc: in settings_menu
user: core
<source>
- *: none
- multidrive_usb: "USB Hide Internal Drive"
- </source>
- <dest>
- *: none
- multidrive_usb: "USB Hide Internal Drive"
- </dest>
- <voice>
- *: none
- multidrive_usb: "USB Hide Internal Drive"
- </voice>
-</phrase>
-<phrase>
- id: LANG_HW_EQ_WIDTH
- desc: in sound_menu, hardware equalizer tone controls peak bandwith setting
- user: core
- <source>
- *: none
- gigabeats,samsungypr1: "Band %d Width"
- </source>
- <dest>
- *: none
- gigabeats,samsungypr1: "Band %d 寬"
- </dest>
- <voice>
- *: none
- gigabeats,samsungypr1: "Band Width"
- </voice>
-</phrase>
-<phrase>
- id: LANG_CONSTRAIN_NEXT_FOLDER
- desc: in settings_menu. Whether LANG_NEXT_FOLDER should be constrained to directories within LANG_SET_AS_START_DIR
- user: core
- <source>
- *: "Constrain Auto-Change"
- </source>
- <dest>
- *: "Constrain Auto-Change"
- </dest>
- <voice>
- *: "Constrain Auto-Change"
- </voice>
-</phrase>
-<phrase>
- id: LANG_HW_EQ_GAIN
- desc: in sound_menu, hardware equalizer tone controls filter gain
- user: core
- <source>
- *: none
- gigabeats,samsungypr1: "Band %d Gain"
- </source>
- <