From c0bd4173aa3b8f49153964d5a3ff311fc7d59651 Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Thu, 17 Jun 2010 16:59:51 +0000 Subject: Make sure files which aren't windows-specific use \n line endings only git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26893 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libatrac/atrac3_arm.S | 452 +- apps/codecs/libspeex/lsp.h | 128 +- apps/lang/ukrainian.lang | 22794 +++++++++---------- docs/profontdoc.txt | 348 +- docs/sample.colours | 14 +- firmware/target/arm/tms320dm320/dsp-target.h | 54 +- firmware/target/arm/tms320dm320/dsp/aic23.c | 112 +- firmware/target/arm/tms320dm320/dsp/audio.h | 48 +- firmware/target/arm/tms320dm320/dsp/dma.c | 466 +- firmware/target/arm/tms320dm320/dsp/dma.h | 46 +- firmware/target/arm/tms320dm320/dsp/tsc2100.c | 76 +- .../target/arm/tms320dm320/dsp_image_helloworld.h | 62 +- firmware/target/arm/tms320dm320/uart-target.h | 64 +- manual/frontpage/rockboxlogo.svg | 52 +- rbutil/rbutil.pro | 2 +- rbutil/tools/Makefile | 50 +- utils/MTP/beastpatcher/mtp_win32.c | 464 +- utils/MTP/sendfirm_win.c | 174 +- utils/disassembler/arm/disasm_arm.c | 846 +- utils/disassembler/arm/main.c | 264 +- utils/jz4740_tools/HXFmerge.c | 642 +- utils/jz4740_tools/HXFreplace.c | 484 +- utils/jz4740_tools/HXFsplit.c | 642 +- 23 files changed, 14142 insertions(+), 14142 deletions(-) diff --git a/apps/codecs/libatrac/atrac3_arm.S b/apps/codecs/libatrac/atrac3_arm.S index 80eaa7954d..0dacff0b7c 100644 --- a/apps/codecs/libatrac/atrac3_arm.S +++ b/apps/codecs/libatrac/atrac3_arm.S @@ -1,226 +1,226 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id: - * - * Copyright (C) 2009 by Andree Buschmann - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 "config.h" - - .section .text, "ax", %progbits - -/**************************************************************************** - * void atrac3_iqmf_matrixing(int32_t *dest, - * int32_t *inlo, - * int32_t *inhi, - * unsigned int count); - * - * Matrixing step within iqmf of atrac3 synthesis. Reference implementation: - * - * for(i=0; i>31 || hi<<1 */ - mov r12, r12, lsr #31 - orr r8, r12, r8, lsl #1 /* s2 = low>>31 || hi<<1 */ - - stmia r0!, {r8, r9} /* store result out[0]=s2, out[1]=s1 */ - sub r1, r1, #184 /* roll back 64 entries = 184 bytes */ - sub r2, r2, #192 /* roll back 48 entries = 192 bytes = win[0] */ - - subs r3, r3, #1 /* outer loop -= 1 */ - bgt .iqmf_dewindow_outer_loop - - ldmpc regs=r4-r9 /* restore registers */ - -.atrac3_iqmf_dewindowing_end: - .size atrac3_iqmf_dewindowing,.atrac3_iqmf_dewindowing_end-atrac3_iqmf_dewindowing +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: + * + * Copyright (C) 2009 by Andree Buschmann + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 "config.h" + + .section .text, "ax", %progbits + +/**************************************************************************** + * void atrac3_iqmf_matrixing(int32_t *dest, + * int32_t *inlo, + * int32_t *inhi, + * unsigned int count); + * + * Matrixing step within iqmf of atrac3 synthesis. Reference implementation: + * + * for(i=0; i>31 || hi<<1 */ + mov r12, r12, lsr #31 + orr r8, r12, r8, lsl #1 /* s2 = low>>31 || hi<<1 */ + + stmia r0!, {r8, r9} /* store result out[0]=s2, out[1]=s1 */ + sub r1, r1, #184 /* roll back 64 entries = 184 bytes */ + sub r2, r2, #192 /* roll back 48 entries = 192 bytes = win[0] */ + + subs r3, r3, #1 /* outer loop -= 1 */ + bgt .iqmf_dewindow_outer_loop + + ldmpc regs=r4-r9 /* restore registers */ + +.atrac3_iqmf_dewindowing_end: + .size atrac3_iqmf_dewindowing,.atrac3_iqmf_dewindowing_end-atrac3_iqmf_dewindowing diff --git a/apps/codecs/libspeex/lsp.h b/apps/codecs/libspeex/lsp.h index 2841e4b747..c53e7769d3 100644 --- a/apps/codecs/libspeex/lsp.h +++ b/apps/codecs/libspeex/lsp.h @@ -1,64 +1,64 @@ -/*---------------------------------------------------------------------------*\ -Original Copyright - FILE........: AK2LSPD.H - TYPE........: Turbo C header file - COMPANY.....: Voicetronix - AUTHOR......: James Whitehall - DATE CREATED: 21/11/95 - -Modified by Jean-Marc Valin - - This file contains functions for converting Linear Prediction - Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the - LSP coefficients are not in radians format but in the x domain of the - unit circle. - -\*---------------------------------------------------------------------------*/ -/** - @file lsp.h - @brief Line Spectral Pair (LSP) functions. -*/ -/* Speex License: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef __AK2LSPD__ -#define __AK2LSPD__ - -#include "arch.h" - -int lpc_to_lsp (spx_coef_t *a, int lpcrdr, spx_lsp_t *freq, int nb, spx_word16_t delta, char *stack); -void lsp_to_lpc(spx_lsp_t *freq, spx_coef_t *ak, int lpcrdr, char *stack); - -/*Added by JMV*/ -void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin); - -void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes); - -#endif /* __AK2LSPD__ */ +/*---------------------------------------------------------------------------*\ +Original Copyright + FILE........: AK2LSPD.H + TYPE........: Turbo C header file + COMPANY.....: Voicetronix + AUTHOR......: James Whitehall + DATE CREATED: 21/11/95 + +Modified by Jean-Marc Valin + + This file contains functions for converting Linear Prediction + Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the + LSP coefficients are not in radians format but in the x domain of the + unit circle. + +\*---------------------------------------------------------------------------*/ +/** + @file lsp.h + @brief Line Spectral Pair (LSP) functions. +*/ +/* Speex License: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Xiph.org Foundation nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef __AK2LSPD__ +#define __AK2LSPD__ + +#include "arch.h" + +int lpc_to_lsp (spx_coef_t *a, int lpcrdr, spx_lsp_t *freq, int nb, spx_word16_t delta, char *stack); +void lsp_to_lpc(spx_lsp_t *freq, spx_coef_t *ak, int lpcrdr, char *stack); + +/*Added by JMV*/ +void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin); + +void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes); + +#endif /* __AK2LSPD__ */ diff --git a/apps/lang/ukrainian.lang b/apps/lang/ukrainian.lang index 1604103586..9c857f0eeb 100644 --- a/apps/lang/ukrainian.lang +++ b/apps/lang/ukrainian.lang @@ -1,11397 +1,11397 @@ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id: ukrainian.lang 21788 2009-07-16 07:00:00Z amiconn $ -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU 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. -# -# Ukrainian language file, translated by: -# - Mykhailo Radzievskyi - - - id: LANG_SET_BOOL_YES - desc: bool true representation - user: core - - *: "Yes" - - - *: "Так" - - - *: "Так" - - - - id: LANG_SET_BOOL_NO - desc: bool false representation - user: core - - *: "No" - - - *: "Нi" - - - *: "Нi" - - - - id: LANG_ON - desc: Used in a lot of places - user: core - - *: "On" - - - *: "Вкл" - - - *: "Ввiмкнути" - - - - id: LANG_OFF - desc: Used in a lot of places - user: core - - *: "Off" - - - *: "Вимк" - - - *: "Вимкнути" - - - - id: LANG_ASK - desc: in settings_menu - user: core - - *: "Ask" - - - *: "Запитати" - - - *: "Запитати" - - - - id: LANG_ALWAYS - desc: used in various places - user: core - - *: "Always" - - - *: "Завжди" - - - *: "Завжди" - - - - id: LANG_NORMAL - desc: in settings_menu - user: core - - *: "Normal" - - - *: "Нормальний" - - - *: "Нормальний" - - - - id: LANG_GAIN - desc: Generic string for gain used in EQ menu and recording screen - user: core - - *: "Gain" - - - *: "Пiдсилення" - - - *: "Пiдсилення" - - - - id: LANG_WAIT - desc: general please wait splash - user: core - - *: "Loading..." - - - *: "Завантаження..." - - - *: "Завантаження" - - - - id: LANG_LOADING_PERCENT - desc: splash number of percents loaded - user: core - - *: "Loading... %d%% done (%s)" - - - *: "Завантаження... %d%% завершено (%s)" - - - *: "" - - - - id: LANG_SCANNING_DISK - desc: when booting up and rebuilding the cache and calculating free space - user: core - - *: "Scanning disk..." - - - *: "Сканування диску..." - - - *: "Сканування диску" - - - - id: LANG_SHUTTINGDOWN - desc: in main menu - user: core - - *: "Shutting down..." - - - *: "Вимкнення..." - - - *: "Вимкнення" - - - - id: LANG_CANCEL - desc: Visual confirmation of canceling a changed setting - user: core - - *: "Cancelled" - - - *: "Вiдмiнено" - - - *: "Вiдмiнено" - - - - id: LANG_FAILED - desc: Something failed. To be appended after actions - user: core - - *: "Failed" - - - *: "Помилка" - - - *: "Помилка" - - - - id: LANG_CHANNELS - desc: in sound_settings - user: core - - *: "Channels" - - - *: "Канали" - - - *: "Канали" - - - - id: LANG_RESET_ASK - desc: confirm to reset settings - user: core - - *: "Are You Sure?" - - - *: "Ви Впевненi?" - - - *: "Ви Впевненi?" - - - - id: LANG_CONFIRM_WITH_BUTTON - desc: Generic string to use to confirm - user: core - - *: "PLAY = Yes" - iriverh100,iriverh120,iriverh300: "NAVI = Yes" - samsungyh*,ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*: "SELECT = Yes" - archosplayer: "(PLAY/STOP)" - vibe500: "OK = Yes" - - - *: "ВIДТВОР. = Так" - iriverh100,iriverh120,iriverh300: "НАВIГ. = Так" - samsungyh*,ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*: "ВИБIР = Так" - archosplayer: "(ВIДТВОР./СТОП)" - vibe500: "OK = Так" - - - *: "" - - - - id: LANG_CANCEL_WITH_ANY - desc: Generic string to use to cancel - user: core - - *: "Any Other = No" - archosplayer: none - - - *: "Будь-яка Iнша Кнопка = Нi" - archosplayer: none - - - *: "" - archosplayer: none - - - - id: LANG_ROCKBOX_TITLE - desc: main menu title - user: core - - *: "Rockbox" - - - *: "Рокбокс" - - - *: "Рокбокс" - - - - id: LANG_BOOKMARK_MENU_RECENT_BOOKMARKS - desc: in the main menu - user: core - - *: "Recent Bookmarks" - - - *: "Останнi Закладки" - - - *: "Останнi Закладки" - - - - id: LANG_DIR_BROWSER - desc: main menu title - user: core - - *: "Files" - - - *: "Файли" - - - *: "Файли" - - - - id: LANG_TAGCACHE - desc: in the main menu and the settings menu - user: core - - *: "Database" - - - *: "База Даних" - - - *: "База Даних" - - - - id: LANG_NOW_PLAYING - desc: in the main menu - user: core - - *: "Now Playing" - - - *: "Вiдтворення" - - - *: "Вiдтворення" - - - - id: LANG_RESUME_PLAYBACK - desc: in the main menu - user: core - - *: "Resume Playback" - - - *: "Продовжити Вiдтворення" - - - *: "Продовжити Вiдтворення" - - - - id: LANG_SETTINGS - desc: in main menu and visual confirmation after settings reset - user: core - - *: "Settings" - - - *: "Налаштування" - - - *: "Налаштування" - - - - id: LANG_RECORDING - desc: in the main menu - user: core - - *: none - recording: "Recording" - - - *: none - recording: "Запис" - - - *: none - recording: "Запис" - - - - id: LANG_FM_RADIO - desc: in the main menu - user: core - - *: none - radio: "FM Radio" - - - *: none - radio: "ФМ Радiо" - - - *: none - radio: "ФМ Радiо" - - - - id: LANG_PLAYLISTS - desc: in the main menu and file view setting - user: core - - *: "Playlists" - - - *: "Списки Вiдтворення" - - - *: "Списки Вiдтворення" - - - - id: LANG_PLUGINS - desc: in the main menu - user: core - - *: "Plugins" - - - *: "Плагiни" - - - *: "Плагiни" - - - - id: LANG_SYSTEM - desc: in the main menu and settings menu - user: core - - *: "System" - - - *: "Система" - - - *: "Система" - - - - id: LANG_BOOKMARK_SELECT_BOOKMARK - desc: bookmark selection list title - user: core - - *: "Select Bookmark" - - - *: "Обрати Закладку" - - - *: "Обрати Закладку" - - - - id: LANG_BOOKMARK_DONT_RESUME - desc: top item in the list when asking user about bookmark auto load - user: core - - *: "" - - - *: "<Не Продовжувати>" - - - *: "Не Продовжувати" - - - - id: LANG_BOOKMARK_SHUFFLE - desc: bookmark selection list, bookmark enables shuffle - user: core - - *: ", Shuffle" - - - *: ", Перемiшування" - - - *: "" - - - - id: LANG_BOOKMARK_INVALID - desc: bookmark selection list, bookmark couldn't be parsed - user: core - - *: "" - - - *: "<Помилкова Закладка>" - - - *: "Помилкова Закладка" - - - - id: LANG_BOOKMARK_CONTEXT_MENU - desc: bookmark selection list context menu - user: core - - *: "Bookmark Actions" - - - *: "Дiя над Закладками" - - - *: "Дiя над Закладками" - - - - id: LANG_BOOKMARK_CONTEXT_RESUME - desc: bookmark context menu, resume this bookmark - user: core - - *: "Resume" - - - *: "Продовжити" - - - *: "Продовжити" - - - - id: LANG_BOOKMARK_CONTEXT_DELETE - desc: bookmark context menu, delete this bookmark - user: core - - *: "Delete" - - - *: "Видалити" - - - *: "Видалити" - - - - id: LANG_AUTO_BOOKMARK_QUERY - desc: prompt for user to decide to create an bookmark - user: core - - *: "Create a Bookmark?" - - - *: "Створити Закладку?" - - - *: "Створити Закладку?" - - - - id: LANG_BOOKMARK_CREATE_SUCCESS - desc: Indicates bookmark was successfully created - user: core - - *: "Bookmark Created" - - - *: "Закладку Створено" - - - *: "Закладку Створено" - - - - id: LANG_BOOKMARK_CREATE_FAILURE - desc: Indicates bookmark was not created - user: core - - *: "Bookmark Failed!" - - - *: "Помилка Закладки!" - - - *: "Помилка закладки!" - - - - id: LANG_BOOKMARK_LOAD_EMPTY - desc: Indicates bookmark was empty - user: core - - *: "Bookmark Empty" - - - *: "Закладка Порожня" - - - *: "Закладка Порожня" - - - - id: LANG_SOUND_SETTINGS - desc: in the main menu - user: core - - *: "Sound Settings" - - - *: "Налаштування Звуку" - - - *: "Налаштування Звуку" - - - - id: LANG_VOLUME - desc: in sound_settings - user: core - - *: "Volume" - - - *: "Гучнiсть" - - - *: "Гучнiсть" - - - - id: LANG_BASS - desc: in sound_settings - user: core - - *: "Bass" - - - *: "Бас" - - - *: "Бас" - - - - id: LANG_TREBLE - desc: in sound_settings - user: core - - *: "Treble" - - - *: "Високi" - - - *: "Високi" - - - - id: LANG_BALANCE - desc: in sound_settings - user: core - - *: "Balance" - - - *: "Баланс" - - - *: "Баланс" - - - - id: LANG_CHANNEL_CONFIGURATION - desc: in sound_settings - user: core - - *: "Channel Configuration" - - - *: "Конфiгурацiя Каналiв" - - - *: "Конфiгурацiя Каналiв" - - - - id: LANG_CHANNEL_STEREO - desc: in sound_settings - user: core - - *: "Stereo" - - - *: "Стерео" - - - *: "Стерео" - - - - id: LANG_CHANNEL_MONO - desc: in sound_settings - user: core - - *: "Mono" - - - *: "Моно" - - - *: "Моно" - - - - id: LANG_CHANNEL_CUSTOM - desc: in sound_settings - user: core - - *: "Custom" - - - *: "Детальне Налаштування" - - - *: "Детальне Налаштування" - - - - id: LANG_CHANNEL_LEFT - desc: in sound_settings - user: core - - *: "Mono Left" - - - *: "Лiве Моно" - - - *: "Лiве Моно" - - - - id: LANG_CHANNEL_RIGHT - desc: in sound_settings - user: core - - *: "Mono Right" - - - *: "Праве Моно" - - - *: "Праве Моно" - - - - id: LANG_CHANNEL_LEFTRIGHT - desc: in sound_settings - user: core - - *: none - recording_swcodec: "Mono Left + Right" - - - *: none - recording_swcodec: "Моно Лiве+Праве" - - - *: none - recording_swcodec: "Моно Лiве плюс Праве" - - - - id: LANG_CHANNEL_KARAOKE - desc: in sound_settings - user: core - - *: "Karaoke" - - - *: "Караоке" - - - *: "Караоке" - - - - id: LANG_STEREO_WIDTH - desc: in sound_settings - user: core - - *: "Stereo Width" - - - *: "Ширина Стерео" - - - *: "Ширина Стерео" - - - - id: LANG_CROSSFEED - desc: in sound settings - user: core - - *: none - swcodec: "Crossfeed" - - - *: none - swcodec: "Зменшення Стерео" - - - *: none - swcodec: "Зменшення Стерео" - - - - id: LANG_CROSSFEED_DIRECT_GAIN - desc: in crossfeed settings - user: core - - *: none - swcodec: "Direct Gain" - - - *: none - swcodec: "Пряме Пiдсилення" - - - *: none - swcodec: "Пряме Пiдсилення" - - - - id: LANG_CROSSFEED_CROSS_GAIN - desc: in crossfeed settings - user: core - - *: none - swcodec: "Cross Gain" - - - *: none - swcodec: "Накладання" - - - *: none - swcodec: "Накладання" - - - - id: LANG_CROSSFEED_HF_ATTENUATION - desc: in crossfeed settings - user: core - - *: none - swcodec: "High-Frequency Attenuation" - - - *: none - swcodec: "Зменшення Високих Частот" - - - *: none - swcodec: "Зменшення Високих Частот" - - - - id: LANG_CROSSFEED_HF_CUTOFF - desc: in crossfeed settings - user: core - - *: none - swcodec: "High-Frequency Cutoff" - - - *: none - swcodec: "Зрiз Високих Частот" - - - *: none - swcodec: "Зрiз Високих Частот" - - - - id: LANG_EQUALIZER - desc: in the sound settings menu - user: core - - *: none - swcodec: "Equalizer" - - - *: none - swcodec: "Еквалайзер" - - - *: none - swcodec: "Еквалайзер" - - - - id: LANG_EQUALIZER_ENABLED - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Enable EQ" - - - *: none - swcodec: "Ввiмкнути Еквалайзер" - - - *: none - swcodec: "Ввiмкнути Еквалайзер" - - - - id: LANG_EQUALIZER_GRAPHICAL - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Graphical EQ" - - - *: none - swcodec: "Графiчний Еквалайзер" - - - *: none - swcodec: "Графiчний Еквалайзер" - - - - id: LANG_EQUALIZER_PRECUT - desc: in eq settings - user: core - - *: none - swcodec: "Precut" - - - *: none - swcodec: "Поперед. Обрiзання" - - - *: none - swcodec: "Поперед. Обрiзання" - - - - id: LANG_EQUALIZER_GAIN - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Simple EQ Settings" - - - *: none - swcodec: "Простi Налаштування Еквалайзеру" - - - *: none - swcodec: "Простi Налаштування Еквалайзеру" - - - - id: LANG_EQUALIZER_ADVANCED - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Advanced EQ Settings" - - - *: none - swcodec: "Розширеннi Налаштування Еквалайзеру" - - - *: none - swcodec: "Розширеннi Налаштування Еквалайзеру" - - - - id: LANG_EQUALIZER_SAVE - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Save EQ Preset" - - - *: none - swcodec: "Зберегти Налаштування" - - - *: none - swcodec: "Зберегти Налаштування Еквалайзеру" - - - - id: LANG_EQUALIZER_BROWSE - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Browse EQ Presets" - - - *: none - swcodec: "Завантажити Налаштування" - - - *: none - swcodec: "Завантажити Налаштування Еквалайзеру" - - - - id: LANG_EQUALIZER_EDIT_MODE - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Edit mode: %s" - - - *: none - swcodec: "Режим редагування: %s" - - - *: none - swcodec: "" - - - - id: LANG_EQUALIZER_GAIN_ITEM - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "%d Hz Band Gain" - - - *: none - swcodec: "%d Гц" - - - *: none - swcodec: "Герц" - - - - id: LANG_EQUALIZER_BAND_LOW_SHELF - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Low Shelf Filter" - - - *: none - swcodec: "Фiльтр Низьких Частот" - - - *: none - swcodec: "Фiльтр Низьких Частот" - - - - id: LANG_EQUALIZER_BAND_PEAK - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Peak Filter %d" - - - *: none - swcodec: "Пiковий Фiльтр %d" - - - *: none - swcodec: "Пiковий Фiльтр" - - - - id: LANG_EQUALIZER_BAND_HIGH_SHELF - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "High Shelf Filter" - - - *: none - swcodec: "Фiльтр Високих Частот" - - - *: none - swcodec: "Фiльтр Високих Частот" - - - - id: LANG_EQUALIZER_BAND_CUTOFF - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Cutoff Frequency" - - - *: none - swcodec: "Частота Зрiзу" - - - *: none - swcodec: "Частота Зрiзу" - - - - id: LANG_EQUALIZER_BAND_CENTER - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Centre Frequency" - - - *: none - swcodec: "Центральна Частота" - - - *: none - swcodec: "Центральна Частота" - - - - id: LANG_EQUALIZER_BAND_Q - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Q" - - - *: none - swcodec: "Q" - - - *: none - swcodec: "Q" - - - - id: LANG_DITHERING - desc: in the sound settings menu - user: core - - *: none - swcodec: "Dithering" - - - *: none - swcodec: "Зглажування" - - - *: none - swcodec: "Зглажування" - - - - id: LANG_LOUDNESS - desc: in sound_settings - user: core - - *: none - masf: "Loudness" - - - *: none - masf: "Середнi Частоти" - - - *: none - masf: "Середнi Частоти" - - - - id: LANG_AUTOVOL - desc: in sound_settings - user: core - - *: none - masf: "Auto Volume" - - - *: none - masf: "Автогучнiсть" - - - *: none - masf: "Автогучнiсть" - - - - id: LANG_DECAY - desc: in sound_settings - user: core - - *: none - masf: "AV Decay Time" - - - *: none - masf: "Час затухання автогучностi" - - - *: none - masf: "" - - - - id: LANG_SUPERBASS - desc: in sound settings - user: core - - *: none - masf: "Super Bass" - - - *: none - masf: "Супер Бас" - - - *: none - masf: "Супер Бас" - - - - id: LANG_MDB_ENABLE - desc: in sound settings - user: core - - *: none - masf: "MDB Enable" - - - *: none - masf: "Ввiмкнути MDB" - - - *: none - masf: "Ввiмкнути MDB" - - - - id: LANG_MDB_STRENGTH - desc: in sound settings - user: core - - *: none - masf: "MDB Strength" - - - *: none - masf: "Сила MDB" - - - *: none - masf: "Сила MDB" - - - - id: LANG_MDB_HARMONICS - desc: in sound settings - user: core - - *: none - masf: "MDB Harmonics" - - - *: none - masf: "Гармонiки MDB" - - - *: none - masf: "Гармонiки MDB" - - - - id: LANG_MDB_CENTER - desc: in sound settings - user: core - - *: none - masf: "MDB Centre Frequency" - - - *: none - masf: "Центральна частота MDB" - - - *: none - masf: "Центральна частота MDB" - - - - id: LANG_MDB_SHAPE - desc: in sound settings - user: core - - *: none - masf: "MDB Shape" - - - *: none - masf: "Фома сигналу MDB" - - - *: none - masf: "Фома сигналу MDB" - - - - id: LANG_GENERAL_SETTINGS - desc: in the main menu - user: core - - *: "General Settings" - - - *: "Головнi Налаштування" - - - *: "Головнi Налаштування" - - - - id: LANG_PLAYBACK - desc: in settings_menu() - user: core - - *: "Playback Settings" - - - *: "Налаштування Вiдтворення" - - - *: "Налаштування Вiдтворення" - - - - id: LANG_SHUFFLE - desc: in settings_menu - user: core - - *: "Shuffle" - - - *: "Перемiшувати" - - - *: "Перемiшувати" - - - - id: LANG_REPEAT - desc: in settings_menu - user: core - - *: "Repeat" - - - *: "Повторювати" - - - *: "Повторювати" - - - - id: LANG_ALL - desc: generic string used both in dir file filter and repeat mode selection - user: core - - *: "All" - - - *: "Всi" - - - *: "Всi" - - - - id: LANG_REPEAT_ONE - desc: repeat one song - user: core - - *: "One" - - - *: "Один" - - - *: "Один" - - - - id: LANG_REPEAT_AB - desc: repeat range from point A to B - user: core - - *: "A-B" - - - *: "A-B" - - - *: "A-B" - - - - id: LANG_PLAY_SELECTED - desc: in settings_menu - user: core - - *: "Play Selected First" - - - *: "Вiдтворювати починаючи з обраного файлу" - - - *: "Вiдтворювати починаючи з обраного файлу" - - - - id: LANG_WIND_MENU - desc: in the playback sub menu - user: core - - *: "Fast-Forward/Rewind" - - - *: "Швидкiсть перемотки" - - - *: "Швидкiсть перемотки" - - - - id: LANG_FFRW_STEP - desc: in settings_menu - user: core - - *: "FF/RW Min Step" - - - *: "Мiнiмальний Крок Перемотки" - - - *: "Мiнiмальний Крок Перемотки" - - - - id: LANG_FFRW_ACCEL - desc: in settings_menu - user: core - - *: "FF/RW Accel" - - - *: "Прискорена Перемотка" - - - *: "Прискорена Перемота" - - - - id: LANG_MP3BUFFER_MARGIN - desc: MP3 buffer margin time - user: core - - *: "Anti-Skip Buffer" - flash_storage: none - - - *: "Буфер Антишоку" - flash_storage: none - - - *: "Буфер Антишоку" - flash_storage: none - - - - id: LANG_FADE_ON_STOP - desc: options menu to set fade on stop or pause - user: core - - *: "Fade on Stop/Pause" - - - *: "Затухання при Зупинцi/Паузi" - - - *: "Затухання при Зупинцi i Паузi" - - - - id: LANG_PARTY_MODE - desc: party mode - user: core - - *: "Party Mode" - - - *: "Режим Вечiрки" - - - *: "Режим Вечiрки" - - - - id: LANG_CROSSFADE - desc: in playback settings - user: core - - *: none - crossfade: "Crossfade" - - - *: none - crossfade: "Накладання" - - - *: none - crossfade: "Накладання" - - - - id: LANG_CROSSFADE_ENABLE - desc: in crossfade settings menu - user: core - - *: none - crossfade: "Enable Crossfade" - - - *: none - crossfade: "Задiяти Накладання" - - - *: none - crossfade: "Задiяти Накладання" - - - - id: LANG_MANTRACKSKIP - desc: in crossfade settings - user: core - - *: none - crossfade: "Manual Track Skip Only" - - - *: none - crossfade: "Тiльки пропуск треку" - - - *: none - crossfade: "Тiльки пропуск треку" - - - - id: LANG_SHUFFLE_TRACKSKIP - desc: in settings_menu - user: core - - *: none - crossfade: "Shuffle or Manual Track Skip" - - - *: none - crossfade: "Змiшування i пропуск треку" - - - *: none - crossfade: "Змiшування i пропуск треку" - - - - id: LANG_CROSSFADE_FADE_IN_DELAY - desc: in crossfade settings menu - user: core - - *: none - crossfade: "Fade-In Delay" - - - *: none - crossfade: "Затримка Зростання" - - - *: none - crossfade: "Затримка Зростання" - - - - id: LANG_CROSSFADE_FADE_IN_DURATION - desc: in crossfade settings menu - user: core - - *: none - crossfade: "Fade-In Duration" - - - *: none - crossfade: "Тривалiсть Зростання" - - - *: none - crossfade: "Тривалiсть Зростання" - - - - id: LANG_CROSSFADE_FADE_OUT_DELAY - desc: in crossfade settings menu - user: core - - *: none - crossfade: "Fade-Out Delay" - - - *: none - crossfade: "Затримка Затухання" - - - *: none - crossfade: "Затримка Затухання" - - - - id: LANG_CROSSFADE_FADE_OUT_DURATION - desc: in crossfade settings menu - user: core - - *: none - crossfade: "Fade-Out Duration" - - - *: none - crossfade: "Тривалiсть Затухання" - - - *: none - crossfade: "Тривалiсть Затухання" - - - - id: LANG_CROSSFADE_FADE_OUT_MODE - desc: in crossfade settings menu - user: core - - *: none - crossfade: "Fade-Out Mode" - - - *: none - crossfade: "Режим Затухання" - - - *: none - crossfade: "Режим Затухання" - - - - id: LANG_MIX - desc: in playback settings, crossfade option - user: core - - *: none - crossfade: "Mix" - - - *: none - crossfade: "Змiшування" - - - *: none - crossfade: "Змiшування" - - - - id: LANG_REPLAYGAIN - desc: in replaygain - user: core - - *: "Replaygain" - - - *: "Пiдсилення" - - - *: "Пiдсилення" - - - - id: LANG_REPLAYGAIN_NOCLIP - desc: in replaygain - user: core - - *: none - swcodec: "Prevent Clipping" - - - *: none - swcodec: "Запобiгати Перевантаженню" - - - *: none - swcodec: "Запобiгати Перевантаженню" - - - - id: LANG_REPLAYGAIN_MODE - desc: in replaygain - user: core - - *: "Replaygain Type" - - - *: "Тип Пiдсилення" - - - *: "Тип Пiдсилення" - - - - id: LANG_ALBUM_GAIN - desc: in replaygain - user: core - - *: "Album Gain" - - - *: "Пiдсилення Альбому" - - - *: "Пiдсилення Альбому" - - - - id: LANG_TRACK_GAIN - desc: in replaygain - user: core - - *: "Track Gain" - - - *: "Пiдсилення Треку" - - - *: "Пiдсилення Треку" - - - - id: LANG_SHUFFLE_GAIN - desc: use track gain if shuffle mode is on, album gain otherwise - user: core - - *: "Track Gain if Shuffling" - - - *: "Пiдсилення Треку при Випадковому Вiдтвореннi" - - - *: "Пiдсилення Треку при Випадковому Вiдтвореннi" - - - - id: LANG_REPLAYGAIN_PREAMP - desc: in replaygain settings - user: core - - *: "Pre-amp" - - - *: "Поперед. Пiдсилення" - - - *: "Поперед. Пiдсилення" - - - - id: LANG_BEEP - desc: in playback settings - user: core - - *: none - swcodec: "Track Skip Beep" - - - *: none - swcodec: "Сигнал Пропуску Треку" - - - *: none - swcodec: "Сигнал Пропуску Треку" - - - - id: LANG_WEAK - desc: in beep volume in playback settings - user: core - - *: none - swcodec: "Weak" - - - *: none - swcodec: "Слабкий" - - - *: none - swcodec: "Слабкий" - - - - id: LANG_MODERATE - desc: in beep volume in playback settings - user: core - - *: none - swcodec: "Moderate" - - - *: none - swcodec: "Помiрний" - - - *: none - swcodec: "Помiрний" - - - - id: LANG_STRONG - desc: in beep volume in playback settings - user: core - - *: none - swcodec: "Strong" - - - *: none - swcodec: "Сильний" - - - *: none - swcodec: "Сильний" - - - - id: LANG_SPDIF_ENABLE - desc: in playback settings menu. enable/disable the optical out - user: core - - *: none - spdif_power: "Optical Output" - - - *: none - spdif_power: "Оптичний Вихiд" - - - *: none - spdif_power: "Оптичний Вихiд" - - - - id: LANG_NEXT_FOLDER - desc: in settings_menu. Should we allow move to next/prev folder from last/first track of current one - user: core - - *: "Auto-Change Directory" - - - *: "Автозмiна Папки" - - - *: "Автозмiна Папки" - - - - id: LANG_RANDOM - desc: random folder - user: core - - *: "Random" - - - *: "Випадково" - - - *: "Випадково" - - - - id: LANG_AUDIOSCROBBLER - desc: "Last.fm Log" in the playback menu - user: core - - *: "Last.fm Log" - - - *: "Звiт по Last.fm" - - - *: "Звiт по Last.fm" - - - - id: LANG_CUESHEET_ENABLE - desc: cuesheet support option - user: core - - *: "Cuesheet Support" - - - *: "Пiдтримка Cuesheet" - - - *: "Пiдтримка Cuesheet" - - - - id: LANG_HEADPHONE_UNPLUG - desc: in settings_menu. - user: core - - *: none - headphone_detection: "Pause on Headphone Unplug" - - - *: none - headphone_detection: "Пауза при Вiдключеннi Навушникiв" - - - *: none - headphone_detection: "Пауза при Вiдключеннi Навушникiв" - - - - id: LANG_HEADPHONE_UNPLUG_RESUME - desc: in pause_phones_menu. - user: core - - *: none - headphone_detection: "Pause and Resume" - - - *: none - headphone_detection: "Пауза i Продовження" - - - *: none - headphone_detection: "Пауза i Продовження" - - - - id: LANG_HEADPHONE_UNPLUG_RW - desc: in pause_phones_menu. - user: core - - *: none - headphone_detection: "Duration to Rewind" - - - *: none - headphone_detection: "Тривалiсть Перемотки" - - - *: none - headphone_detection: "Тривалiсть Перемотки" - - - - id: LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME - desc: in pause_phones_menu. - user: core - - *: none - headphone_detection: "Disable resume on startup if phones unplugged" - - - *: none - headphone_detection: "Вiдключити вiдтворення при запуску, якщо навушники вiдключено" - - - *: none - headphone_detection: "Вiдключити вiдтворення при запуску, якщо навушники вiдключено" - - - - id: LANG_FILE - desc: in settings_menu() - user: core - - *: "File View" - - - *: "Перегляд Файлiв" - - - *: "Перегляд Файлiв" - - - - id: LANG_SORT_CASE - desc: in settings_menu - user: core - - *: "Sort Case Sensitive" - - - *: "Сортувати з Врахуванням Регiстру" - - - *: "Сортувати з Врахуванням Регiстру"" - - - - id: LANG_SORT_DIR - desc: browser sorting setting - user: core - - *: "Sort Directories" - - - *: "Сортувати Папки" - - - *: "Сортувати Папки" - - - - id: LANG_SORT_FILE - desc: browser sorting setting - user: core - - *: "Sort Files" - - - *: "Сортувати Файли" - - - *: "Сортувати Файли" - - - - id: LANG_SORT_ALPHA - desc: browser sorting setting - user: core - - *: "Alphabetical" - - - *: "За Алфавiтом" - - - *: "За Алфавiтом" - - - - id: LANG_SORT_DATE - desc: browser sorting setting - user: core - - *: "By Date" - - - *: "За Датою" - - - *: "За Датою" - - - - id: LANG_SORT_DATE_REVERSE - desc: browser sorting setting - user: core - - *: "By Newest Date" - - - *: "За Останньою Датою" - - - *: "За Останньою Датою" - - - - id: LANG_SORT_TYPE - desc: browser sorting setting - user: core - - *: "By Type" - - - *: "За Типом" - - - *: "За Типом" - - - - id: LANG_FILTER - desc: setting name for dir filter - user: core - - *: "Show Files" - - - *: "Показати Файли" - - - *: "Показати Файли" - - - - id: LANG_FILTER_SUPPORTED - desc: show all file types supported by Rockbox - user: core - - *: "Supported" - - - *: "Що Пiдтримуються" - - - *: "Що Пiдтримуються" - - - - id: LANG_FILTER_MUSIC - desc: show only music-related files - user: core - - *: "Music" - - - *: "Музичнi" - - - *: "Музичнi" - - - - id: LANG_FOLLOW - desc: in settings_menu - user: core - - *: "Follow Playlist" - - - *: "Йти за Списком Вiдтворення" - - - *: "Йти за Списком Вiдтворення" - - - - id: LANG_SHOW_PATH - desc: in settings_menu - user: core - - *: "Show Path" - - - *: "Показати Шлях" - - - *: "Показати Шлях" - - - - id: LANG_SHOW_PATH_CURRENT - desc: in show path menu - user: core - - *: "Current Directory Only" - - - *: "Тiльки ця Папка" - - - *: "Тiльки ця Папка" - - - - id: LANG_DISPLAY_FULL_PATH - desc: track display options - user: core - - *: "Full Path" - - - *: "Повний Шлях" - - - *: "Повний Шлях" - - - - id: LANG_BUILDING_DATABASE - desc: splash database building progress - user: core - - *: "Building database... %d found (OFF to return)" - iriverh100,iriverh120,iriverh300: "Building database... %d found (STOP to return)" - ipod*: "Building database... %d found (PREV to return)" - iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)" - iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" - gogearsa9200: "Building database... %d found (REW to return)" - - - *: "Створення Бази Даних ... %d знайдено (ВИМК. для вiдмiни)" - iriverh100,iriverh120,iriverh300: "Створення Бази Даних... %d знайдено (СТОП для вiдмiни)" - ipod*: "Створення Бази Даних... %d знайдено (ПОПЕРЕД. для вiдмiни)" - iaudiox5,iaudiom5,gigabeat*,mrobe100: "Створення Бази Даних... %d знайдено (ЛIВО для вiдмiни)" - iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Створення Бази Даних... %d знайдено (ПОПЕРЕД. для вiдмiни)" - gogearsa9200: "Створення Бази Даних... %d знайденр (ПЕРЕМ. для вiдмiни)" - - - *: "Знайдено записiв в базi даних" - - - - id: LANG_TAGCACHE_RAM - desc: in tag cache settings - user: core - - *: none - tc_ramcache: "Load to RAM" - - - *: none - tc_ramcache: "Завантажити до ОЗП" - - - *: none - tc_ramcache: "Завантажити до ОЗП" - - - - id: LANG_TAGCACHE_AUTOUPDATE - desc: in tag cache settings - user: core - - *: "Auto Update" - - - *: "Автооновлення" - - - *: "Автооновлення" - - - - id: LANG_TAGCACHE_FORCE_UPDATE - desc: in tag cache settings - user: core - - *: "Initialize Now" - - - *: "Створити Зараз" - - - *: "Створити Зараз" - - - - id: LANG_TAGCACHE_UPDATE - desc: in tag cache settings - user: core - - *: "Update Now" - - - *: "Оновити Зараз" - - - *: "Оновити Зараз" - - - - id: LANG_RUNTIMEDB_ACTIVE - desc: in settings_menu. - user: core - - *: "Gather Runtime Data" - - - *: "Збирати Данi про Треки" - - - *: "Збирати Данi про Треки" - - - - id: LANG_TAGCACHE_EXPORT - desc: in tag cache settings - user: core - - *: "Export Modifications" - - - *: "Експорт Змiн" - - - *: "Експорт Змiн" - - - - id: LANG_TAGCACHE_IMPORT - desc: in tag cache settings - user: core - - *: "Import Modifications" - - - *: "Iмпорт Змiн" - - - *: "Iмпорт Змiн" - - - - id: LANG_TAGCACHE_FORCE_UPDATE_SPLASH - desc: in tag cache settings - user: core - - *: "Updating in background" - - - *: "Оновлення у Фонi" - - - *: "Оновлення у Фонi" - - - - id: LANG_TAGCACHE_INIT - desc: while initializing tagcache on boot - user: core - - *: "Committing database" - - - *: "Запис Бази Даних" - - - *: "Запис Бази Даних" - - - - id: LANG_TAGCACHE_BUSY - desc: when trying to shutdown and tagcache is committing - user: core - - *: "Database is not ready" - - - *: "База Даних не Готова" - - - *: "База Даних не Готова" - - - - id: LANG_TAGNAVI_ALL_TRACKS - desc: "" entry in tag browser - user: core - - *: "" - - - *: "<Всi треки>" - - - *: "Всi треки" - - - - id: LANG_DISPLAY - desc: in settings_menu() - user: core - - *: "Display" - - - *: "Дисплей" - - - *: "Дисплей" - - - - id: LANG_CUSTOM_FONT - desc: in setting_menu() - user: core - - *: none - lcd_bitmap: "Font" - - - *: none - lcd_bitmap: "Шрифт" - - - *: none - lcd_bitmap: "Шрифт" - - - - id: LANG_WHILE_PLAYING - desc: in settings_menu() - user: core - - *: "While Playing Screen" - - - *: "Екран пiд час вiдтворення" - - - *: "Екран пiд час вiдтворення" - - - - id: LANG_REMOTE_WHILE_PLAYING - desc: in settings_menu() - user: core - - *: none - remote: "Remote While Playing Screen" - - - *: none - remote: "Екран пульту пiд час вiдтворення" - - - *: none - remote: "Екран пульту пiд час вiдтворення" - - - - id: LANG_LCD_MENU - desc: in the display sub menu - user: core - - *: "LCD Settings" - - - *: "Налаштування Екрану" - - - *: "Налаштування Екрану" - - - - id: LANG_BACKLIGHT - desc: in settings_menu - user: core - - *: "Backlight" - - - *: "Пiдсвiтка" - - - *: "Пiдсвiтка" - - - - id: LANG_BACKLIGHT_ON_WHEN_CHARGING - desc: in display_settings_menu, backlight timeout with charger connected - user: core - - *: none - charging: "Backlight (While Plugged In)" - - - *: none - charging: "Пiдсвiтка при зовнiшньому живленнi" - - - *: none - charging: "Пiдсвiтка при зовнiшньому живленнi" - - - - id: LANG_BACKLIGHT_ON_BUTTON_HOLD - desc: in lcd settings - user: core - - *: none - hold_button: "Backlight on Hold" - - - *: none - hold_button: "Пiдсвiтка при Блокуваннi" - - - *: none - hold_button: "Пiдсвiтка при Блокуваннi" - - - - id: LANG_CAPTION_BACKLIGHT - desc: in settings_menu - user: core - - *: "Caption Backlight" - - - *: "Пiдсвiтка при Змiнi Назви" - - - *: "Пiдсвiтка при Змiнi Назви" - - - - id: LANG_BACKLIGHT_FADE_IN - desc: in settings_menu - user: core - - *: none - backlight_fade*: "Backlight Fade In" - - - *: none - backlight_fade*: "Зростання пiдсвiтки" - - - *: none - backlight_fade*: "Зростання пiдсвiтки" - - - - id: LANG_BACKLIGHT_FADE_OUT - desc: in settings_menu - user: core - - *: none - backlight_fade*: "Backlight Fade Out" - - - *: none - backlight_fade*: "Затухання пiдсвiтки" - - - *: none - backlight_fade*: "Затухання пiдсвiтки" - - - - id: LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS - desc: Backlight behaviour setting - user: core - - *: "First Buttonpress Enables Backlight Only" - - - *: "Перше натискання кнопки тiльки вмик. пiдсвiтку" - - - *: "Перше натискання кнопки тiльки вмика пiдсвiтку" - - - - id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF - desc: In display settings, time to switch LCD chip into power saving state - user: core - - *: none - lcd_sleep: "Sleep (After Backlight Off)" - - - *: none - lcd_sleep: "Режим Сну (пiсля вимкнення пiдсвiтки)" - - - *: none - lcd_sleep: "Режим Сну пiсля вимкнення пiдсвiтки" - - - - id: LANG_NEVER - desc: in lcd settings - user: core - - *: none - lcd_sleep: "Never" - - - *: none - lcd_sleep: "Нiколи" - - - *: none - lcd_sleep: "Нiколи" - - - - id: LANG_BRIGHTNESS - desc: in settings_menu - user: core - - *: none - backlight_brightness: "Brightness" - - - *: none - backlight_brightness: "Яскравiсть" - - - *: none - backlight_brightness: "Яскравiсть" - - - - id: LANG_CONTRAST - desc: in settings_menu - user: core - - *: "Contrast" - - - *: "Контраст" - - - *: "Контраст" - - - - id: LANG_INVERT - desc: in settings_menu - user: core - - *: none - lcd_invert,remote_lcd_invert: "LCD Mode" - - - *: none - lcd_invert,remote_lcd_invert: "Режим Екрану" - - - *: none - lcd_invert,remote_lcd_invert: "Режим Екрану" - - - - id: LANG_INVERT_LCD_INVERSE - desc: in settings_menu - user: core - - *: none - lcd_invert,remote_lcd_invert: "Inverse" - - - *: none - lcd_invert,remote_lcd_invert: "Iнверсний" - - - *: none - lcd_invert,remote_lcd_invert: "Iнверсний" - - - - id: LANG_FLIP_DISPLAY - desc: in settings_menu, option to turn display+buttos by 180 degrees - user: core - - *: none - lcd_bitmap: "Upside Down" - - - *: none - lcd_bitmap: "Догори ногами" - - - *: none - lcd_bitmap: "Догори ногами" - - - - id: LANG_INVERT_CURSOR - desc: in settings_menu - user: core - - *: none - lcd_bitmap: "Line Selector Type" - - - *: none - lcd_bitmap: "Тип Курсору" - - - *: none - lcd_bitmap: "Тип Курсору" - - - - id: LANG_INVERT_CURSOR_POINTER - desc: in settings_menu - user: core - - *: none - lcd_bitmap: "Pointer" - - - *: none - lcd_bitmap: "Стрiлочка" - - - *: none - lcd_bitmap: "Стрiлочка" - - - - id: LANG_INVERT_CURSOR_BAR - desc: in settings_menu - user: core - - *: none - lcd_bitmap: "Bar (Inverse)" - - - *: none - lcd_bitmap: "Iнверсний Курсор" - - - *: none - lcd_bitmap: "Iнверсний Курсор" - - - - id: LANG_CLEAR_BACKDROP - desc: text for LCD settings menu - user: core - - *: none - lcd_non-mono: "Clear Backdrop" - - - *: none - lcd_non-mono: "Очистити Фон" - - - *: none - lcd_non-mono: "Очистити Фон" - - - - id: LANG_BACKGROUND_COLOR - desc: menu entry to set the background color - user: core - - *: none - lcd_color: "Background Colour" - - - *: none - lcd_color: "Колiр Фону" - - - *: none - lcd_color: "Колiр Фону" - - - - id: LANG_FOREGROUND_COLOR - desc: menu entry to set the foreground color - user: core - - *: none - lcd_color: "Foreground Colour" - - - *: none - lcd_color: "Колiр Переднього Плану" - - - *: none - lcd_color: "Колiр Переднього Плану" - - - - id: LANG_RESET_COLORS - desc: menu - user: core - - *: none - lcd_color: "Reset Colours" - - - *: none - lcd_color: "Скинути Кольори" - - - *: none - lcd_color: "Скинути Кольори" - - - - id: LANG_COLOR_RGB_LABELS - desc: what to show for the 'R' 'G' 'B' ONE LETTER EACH - user: core - - *: none - lcd_color: "RGB" - - - *: none - lcd_color: "RGB" - - - *: none - lcd_color: "" - - - - id: LANG_COLOR_RGB_VALUE - desc: in color screen - user: core - - *: none - lcd_color: "RGB: %02X%02X%02X" - - - *: none - lcd_color: "RGB: %02X%02X%02X" - - - *: none - lcd_color: "" - - - - id: LANG_COLOR_UNACCEPTABLE - desc: splash when user selects an invalid colour - user: core - - *: none - lcd_color: "Invalid colour" - - - *: none - lcd_color: "Помилка Кольору" - - - *: none - lcd_color: "" - - - - id: LANG_LCD_REMOTE_MENU - desc: in the display sub menu - user: core - - *: none - remote: "Remote-LCD Settings" - - - *: none - remote: "Налаштування Екрану Пульту" - - - *: none - remote: "Налаштування Екрану Пульту" - - - - id: LANG_REDUCE_TICKING - desc: in remote lcd settings menu - user: core - - *: none - remote_ticking: "Reduce Ticking" - - - *: none - remote_ticking: "Знижувати Клацання" - - - *: none - remote_ticking: "Знижувати Клацання" - - - - id: LANG_SHOW_ICONS - desc: in settings_menu - user: core - - *: "Show Icons" - - - *: "Показувати Iконки" - - - *: "Показувати Iконки" - - - - id: LANG_SCROLL_MENU - desc: in display_settings_menu() - user: core - - *: "Scrolling" - - - *: "Прокрутка" - - - *: "Прокрутка" - - - - id: LANG_SCROLL - desc: in settings_menu - user: core - - *: "Scroll Speed Setting Example" - - - *: "Приклад Швидкостi Прокрутки" - - - *: "" - - - - id: LANG_SCROLL_SPEED - desc: in display_settings_menu() - user: core - - *: "Scroll Speed" - - - *: "Швидкiсть Прокрутки" - - - *: "Швидкiсть Прокрутки" - - - - id: LANG_SCROLL_DELAY - desc: Delay before scrolling - user: core - - *: "Scroll Start Delay" - - - *: "Затримка Старту Прокрутки" - - - *: "Затримка Старту Прокрутки" - - - - id: LANG_SCROLL_STEP - desc: Pixels to advance per scroll - user: core - - *: "Scroll Step Size" - - - *: "Величина Кроку Прокрутки" - - - *: "Величина Кроку Прокрутки" - - - - id: LANG_SCROLL_STEP_EXAMPLE - desc: Pixels to advance per scroll - user: core - - *: "Scroll Step Size Setting Example Text" - - - *: "Приклад Тексту Величини Кроку Прокрутки" - - - *: "" - - - - id: LANG_BIDIR_SCROLL - desc: Bidirectional scroll limit - user: core - - *: "Bidirectional Scroll Limit" - - - *: "Обмеження Прокрутки у Два Напрями" - - - *: "Обмеження Прокрутки у Два Напрями" - - - - id: LANG_REMOTE_SCROLL_SETS - desc: "Remote Scrolling Options" Submenu in "Scrolling Options" menu - user: core - - *: none - remote: "Remote Scrolling Options" - - - *: none - remote: "Властивостi Прокрутки на Пультi" - - - *: none - remote: "Властивостi Прокрутки на Пультi" - - - - id: LANG_SCREEN_SCROLL_VIEW - desc: should lines scroll out of the screen - user: core - - *: none - lcd_bitmap: "Screen Scrolls Out Of View" - - - *: none - lcd_bitmap: "Прокрутка Екрану" - - - *: none - lcd_bitmap: "Прокрутка Екрану" - - - - id: LANG_SCREEN_SCROLL_STEP - desc: Pixels to advance per Screen scroll - user: core - - *: none - lcd_bitmap: "Screen Scroll Step Size" - - - *: none - lcd_bitmap: "Крок Прокрутки Екрану" - - - *: none - lcd_bitmap: "Крок Прокрутки Екрану" - - - - id: LANG_SCROLL_PAGINATED - desc: jump to new page when scrolling - user: core - - *: "Paged Scrolling" - - - *: "Прокрутка Сторiнки" - - - *: "Прокрутка Сторiнки" - - - - id: LANG_LISTACCEL_START_DELAY - desc: Delay before list starts accelerating - user: core - - *: "List Acceleration Start Delay" - wheel_acceleration: none - - - *: "Затримка Початку Списку" - wheel_acceleration: none - - - *: "Затримка Початку Списку" - wheel_acceleration: none - - - - id: LANG_LISTACCEL_ACCEL_SPEED - desc: list acceleration speed - user: core - - *: "List Acceleration Speed" - wheel_acceleration: none - - - *: "Прискорення Списку" - wheel_acceleration: none - - - *: "Прискорення Списку" - wheel_acceleration: none - - - - id: LANG_BARS_MENU - desc: in the display sub menu - user: core - - *: none - lcd_bitmap: "Status-/Scrollbar" - - - *: none - lcd_bitmap: "Статус/Прокрутка" - - - *: none - lcd_bitmap: "Статус та Прокрутка" - - - - id: LANG_SCROLL_BAR - desc: display menu, F3 substitute - user: core - - *: none - lcd_bitmap: "Scroll Bar" - - - *: none - lcd_bitmap: "Панель Прокрутки" - - - *: none - lcd_bitmap: "Панель Прокрутки" - - - - id: LANG_STATUS_BAR - desc: display menu, F3 substitute - user: core - - *: none - lcd_bitmap: "Status Bar" - - - *: none - lcd_bitmap: "Панель Статусу" - - - *: none - lcd_bitmap: "Панель Статусу" - - - - id: LANG_BUTTON_BAR - desc: in settings menu - user: core - - *: none - recorder_pad: "Button Bar" - - - *: none - recorder_pad: "Панель Кнопок" - - - *: none - recorder_pad: "Панель Кнопок" - - - - id: LANG_VOLUME_DISPLAY - desc: Volume type title - user: core - - *: none - lcd_bitmap: "Volume Display" - - - *: none - lcd_bitmap: "Вiдображення Гучностi" - - - *: none - lcd_bitmap: "Вiдображення Гучностi" - - - - id: LANG_BATTERY_DISPLAY - desc: Battery type title - user: core - - *: none - lcd_bitmap: "Battery Display" - - - *: none - lcd_bitmap: "Вiдображення Заряду Акумулятора" - - - *: none - lcd_bitmap: "Вiдображення Заряду Акумулятора" - - - - id: LANG_DISPLAY_GRAPHIC - desc: Label for type of icon display - user: core - - *: none - lcd_bitmap: "Graphic" - - - *: none - lcd_bitmap: "Графiчний" - - - *: none - lcd_bitmap: "Графiчний" - - - - id: LANG_DISPLAY_NUMERIC - desc: Label for type of icon display - user: core - - *: none - lcd_bitmap: "Numeric" - - - *: none - lcd_bitmap: "Числовий" - - - *: none - lcd_bitmap: "Числовий" - - - - id: LANG_PM_MENU - desc: in the display menu - user: core - - *: "Peak Meter" - masd: none - - - *: "Рiвень Сигналу" - masd: none - - - *: "Рiвень Сигналу" - masd: none - - - - id: LANG_PM_CLIP_HOLD - desc: in the peak meter menu - user: core - - *: "Clip Hold Time" - masd: none - - - *: "Час Затримки Iндикатора" - masd: none - - - *: "Час Затримки Iндикатора" - masd: none - - - - id: LANG_PM_PEAK_HOLD - desc: in the peak meter menu - user: core - - *: "Peak Hold Time" - masd: none - - - *: "Час Затримки Пiкiв" - masd: none - - - *: "Час Затримки Пiкiв" - masd: none - - - - id: LANG_PM_ETERNAL - desc: in the peak meter menu - user: core - - *: "Eternal" - masd: none - - - *: "Постiйно" - masd: none - - - *: "Постiйно" - masd: none - - - - id: LANG_PM_RELEASE - desc: in the peak meter menu - user: core - - *: "Peak Release" - masd: none - - - *: "Скидання Пiкiв" - masd: none - - - *: "Скидання Пiкiв" - masd: none - - - - id: LANG_PM_SCALE - desc: in the peak meter menu - user: core - - *: "Scale" - masd: none - - - *: "Масштаб" - masd: none - - - *: "Масштаб" - masd: none - - - - id: LANG_PM_DBFS - desc: in the peak meter menu - user: core - - *: "Logarithmic (dB)" - masd: none - - - *: "Логарифмiчний (dB)" - masd: none - - - *: "Логарифмiчний децибел" - masd: none - - - - id: LANG_PM_LINEAR - desc: in the peak meter menu - user: core - - *: "Linear (%)" - masd: none - - - *: "Лiнiйний (%)" - masd: none - - - *: "Лiнiйний вiдсотки" - masd: none - - - - id: LANG_PM_MIN - desc: in the peak meter menu - user: core - - *: "Minimum Of Range" - masd: none - - - *: "Нижня Межа Дiапазону" - masd: none - - - *: "Нижня Межа Дiапазону" - masd: none - - - - id: LANG_PM_MAX - desc: in the peak meter menu - user: core - - *: "Maximum Of Range" - masd: none - - - *: "Верхня Межа Дiапазону" - masd: none - - - *: "Верхня Межа Дiапазону" - masd: none - - - - id: LANG_DEFAULT_CODEPAGE - desc: default encoding used with id3 tags - user: core - - *: "Default Codepage" - - - *: "Кодова Сторiнка" - - - *: "Кодова Сторiнка" - - - - id: LANG_CODEPAGE_LATIN1 - desc: in codepage setting menu - user: core - - *: "Latin1 (ISO-8859-1)" - - - *: "Латинська1 (ISO-8859-1)" - - - *: "Латинська 1" - - - - id: LANG_CODEPAGE_GREEK - desc: in codepage setting menu - user: core - - *: "Greek (ISO-8859-7)" - - - *: "Грецька (ISO-8859-7)" - - - *: "Грецька" - - - - id: LANG_CODEPAGE_HEBREW - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Hebrew (ISO-8859-8)" - - - *: none - lcd_bitmap: "Iврит (ISO-8859-8)" - - - *: none - lcd_bitmap: "Iврит" - - - - id: LANG_CODEPAGE_CYRILLIC - desc: in codepage setting menu - user: core - - *: "Cyrillic (CP1251)" - - - *: "Кирилиця (CP1251)" - - - *: "Кирилиця" - - - - id: LANG_CODEPAGE_THAI - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Thai (ISO-8859-11)" - - - *: none - lcd_bitmap: "Тайська (ISO-8859-11)" - - - *: none - lcd_bitmap: "Тайська" - - - - id: LANG_CODEPAGE_ARABIC - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Arabic (CP1256)" - - - *: none - lcd_bitmap: "Арабська (CP1256)" - - - *: none - lcd_bitmap: "Арабська" - - - - id: LANG_CODEPAGE_TURKISH - desc: in codepage setting menu - user: core - - *: "Turkish (ISO-8859-9)" - - - *: "Турецька (ISO-8859-9)" - - - *: "Турецька" - - - - id: LANG_CODEPAGE_LATIN_EXTENDED - desc: in codepage setting menu - user: core - - *: "Latin Extended (ISO-8859-2)" - - - *: "Латинська Розширена (ISO-8859-2)" - - - *: "Латинська Розширена" - - - - id: LANG_CODEPAGE_JAPANESE - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Japanese (SJIS)" - - - *: none - lcd_bitmap: "Японська (SJIS)" - - - *: none - lcd_bitmap: "Японська" - - - - id: LANG_CODEPAGE_SIMPLIFIED - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Simp. Chinese (GB2312)" - - - *: none - lcd_bitmap: "Китайська Спрощена (GB2312)" - - - *: none - lcd_bitmap: "Китайська Спрощена" - - - - id: LANG_CODEPAGE_KOREAN - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Korean (KSX1001)" - - - *: none - lcd_bitmap: "Корейська (KSX1001)" - - - *: none - lcd_bitmap: "Корейська" - - - - id: LANG_CODEPAGE_TRADITIONAL - desc: in codepage setting menu - user: core - - *: none - lcd_bitmap: "Trad. Chinese (BIG5)" - - - *: none - lcd_bitmap: "Китайська Традицiйна (BIG5)" - - - *: none - lcd_bitmap: "Китайська Традицiйна" - - - - id: LANG_CODEPAGE_UTF8 - desc: in codepage setting menu - user: core - - *: "Unicode (UTF-8)" - - - *: "Юнiкод (UTF-8)" - - - *: "Юнiкод" - - - - id: LANG_BUTTONLIGHT_TIMEOUT - desc: in settings_menu - user: core - - *: none - button_light: "Button Light Timeout" - sansafuze*,sansae200*: "Wheel Light Timeout" - - - *: none - button_light: "Таймаут Пiдсвiтки Кнопок" - sansafuze*,sansae200*: "Таймаут Пiдсвiтки Колеса" - - - *: none - button_light: "Таймаут Пiдсвiтки Кнопок" - sansafuze*,sansae200*: "Таймаут Пiдсвiтки Колеса" - - - - id: LANG_BUTTONLIGHT_BRIGHTNESS - desc: in settings_menu - user: core - - *: none - buttonlight_brightness: "Button Light Brightness" - - - *: none - buttonlight_brightness: "Яскравiсть Пiдсвiтки Кнопок" - - - *: none - buttonlight_brightness: "Яскравiсть Пiдсвiтки Кнопок" - - - - id: LANG_START_SCREEN - desc: in the system sub menu - user: core - - *: "Start Screen" - - - *: "Стартовий Екран" - - - *: "Стартовий Екран" - - - - id: LANG_MAIN_MENU - desc: in start screen setting - user: core - - *: "Main Menu" - - - *: "Головне Меню" - - - *: "Головне Меню" - - - - id: LANG_PREVIOUS_SCREEN - desc: in start screen setting - user: core - - *: "Previous Screen" - - - *: "Попереднiй Екран" - - - *: "Попереднiй Екран" - - - - id: LANG_BATTERY_MENU - desc: in the system sub menu - user: core - - *: "Battery" - - - *: "Акумулятор" - - - *: "Акумулятор" - - - - id: LANG_BATTERY_CAPACITY - desc: in settings_menu - user: core - - *: "Battery Capacity" - - - *: "Заряд Акумулятора" - - - *: "Заряд Акумулятора" - - - - id: LANG_BATTERY_TYPE - desc: in battery settings - user: core - - *: none - battery_types: "Battery Type" - - - *: none - battery_types: "Тип Акумулятору" - - - *: none - battery_types: "Тип Акумулятору" - - - - id: LANG_BATTERY_TYPE_ALKALINE - desc: in battery settings - user: core - - *: none - battery_types: "Alkaline" - - - *: none - battery_types: "Лужний" - - - *: none - battery_types: "Лужний" - - - - id: LANG_BATTERY_TYPE_NIMH - desc: in battery settings - user: core - - *: none - battery_types: "NiMH" - - - *: none - battery_types: "NiMH" - - - *: none - battery_types: "Нiкель метал гiдридна" - - - - id: LANG_DISK_MENU - desc: in the system sub menu - user: core - - *: "Disk" - - - *: "Диск" - - - *: "Диск" - - - - id: LANG_SPINDOWN - desc: in settings_menu - user: core - - *: "Disk Spindown" - flash_storage: none - - - *: "Уповiльнення Диску" - flash_storage: none - - - *: "Уповiльнення Диску" - flash_storage: none - - - - id: LANG_DIRCACHE_ENABLE - desc: in directory cache settings - user: core - - *: none - dircache: "Directory Cache" - - - *: none - dircache: "Кеш Папок" - - - *: none - dircache: "Кеш Папок" - - - - id: LANG_TIME_MENU - desc: in the system sub menu - user: core - - *: none - rtc: "Time & Date" - - - *: none - rtc: "Час i Дата" - - - *: none - rtc: "Час i Дата" - - - - id: LANG_SET_TIME - desc: in settings_menu - user: core - - *: none - rtc: "Set Time/Date" - - - *: none - rtc: "Встановити Час/Дату" - - - *: none - rtc: "Встановити Час i Дату" - - - - id: LANG_TIMEFORMAT - desc: select the time format of time in status bar - user: core - - *: none - rtc: "Time Format" - - - *: none - rtc: "Формат Часу" - - - *: none - rtc: "Формат Часу" - - - - id: LANG_12_HOUR_CLOCK - desc: option for 12 hour clock - user: core - - *: none - rtc: "12 Hour Clock" - - - *: none - rtc: "12 Годин" - - - *: none - rtc: "12 Годин" - - - - id: LANG_24_HOUR_CLOCK - desc: option for 24 hour clock - user: core - - *: none - rtc: "24 Hour Clock" - - - *: none - rtc: "24 Години" - - - *: none - rtc: "24 Години" - - - - id: LANG_TIME_SET_BUTTON - desc: used in set_time() - user: core - - *: none - rtc: "ON = Set" - iriverh100,iriverh120,iriverh300: "NAVI = Set" - ipod*,iaudiox5,iaudiom5,iriverh10,iriverh10_5gb,sansae200*,sansac200*,gigabeat*,mrobe100,sansaclip*,sansafuze*: "SELECT = Set" - gogearsa9200: "PLAY = Set" - vibe500: "OK = Set" - - - *: none - rtc: "ВВIМК. = Встановити" - iriverh100,iriverh120,iriverh300: "НАВIГ. = Встановити" - ipod*,iaudiox5,iaudiom5,iriverh10,iriverh10_5gb,sansae200*,sansac200*,gigabeat*,mrobe100,sansaclip*,sansafuze*: "ВИБIР = Встановити" - gogearsa9200: "ПРОГРАВ. = Встановити" - vibe500: "OK = Встановити" - - - *: none - rtc,iriverh100,iriverh120,iriverh300,iriverh10,iriverh10_5gb,iaudiox5,iaudiom5,ipod*,sansae200*,sansac200*,gigabeat*,mrobe100,gogearsa9200: "" - - - - id: LANG_TIME_REVERT - desc: used in set_time() - user: core - - *: none - rtc: "OFF = Revert" - iriverh100,iriverh120,iriverh300: "STOP = Revert" - ipod*,sansac200*: "MENU = Revert" - iaudiox5,iaudiom5: "RECORD = Revert" - iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "PREV = Revert" - gigabeatfx: "POWER = Revert" - mrobe100: "DISPLAY = Revert" - gigabeats: "BACK = Revert" - gogearsa9200: "LEFT = Revert" - vibe500: "CANCEL = Revert" - - - *: none - rtc: "ВИМК. = Вiдмiнити" - iriverh100,iriverh120,iriverh300: "СТОП = Вiдмiнити" - ipod*,sansac200*: "МЕНЮ = Вiдмiнити" - iaudiox5,iaudiom5: "ЗАПИС = Вiдмiнити" - iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "ПОПЕРЕД. = Вiдмiнити" - gigabeatfx: "ЖИВЛЕННЯ = Вiдмiнити" - mrobe100: "ДИСПЛЕЙ = Вiдмiнити" - gigabeats: "НАЗАД = Вiдмiнити" - gogearsa9200: "ВЛIВО = Вiдмiнити" - vibe500: "C = Вiдмiнити" - - - *: none - rtc,iriverh100,iriverh120,iriverh300,ipod*,sansae200*,sansac200*,iaudiox5,iaudiom5,iriverh10,iriverh10_5gb,gigabeat*,mrobe100,gogearsa9200: "" - - - - id: LANG_WEEKDAY_SUNDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Sun" - - - *: none - rtc: "Нед" - - - *: none - rtc: "" - - - - id: LANG_WEEKDAY_MONDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Mon" - - - *: none - rtc: "Пон" - - - *: none - rtc: "" - - - - id: LANG_WEEKDAY_TUESDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Tue" - - - *: none - rtc: "Вiв" - - - *: none - rtc: "" - - - - id: LANG_WEEKDAY_WEDNESDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Wed" - - - *: none - rtc: "Сер" - - - *: none - rtc: "" - - - - id: LANG_WEEKDAY_THURSDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Thu" - - - *: none - rtc: "Чет" - - - *: none - rtc: "" - - - - id: LANG_WEEKDAY_FRIDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Fri" - - - *: none - rtc: "Пят" - - - *: none - rtc: "" - - - - id: LANG_WEEKDAY_SATURDAY - desc: Maximum 3-letter abbreviation for weekday - user: core - - *: none - rtc: "Sat" - - - *: none - rtc: "Суб" - - - *: none - rtc: "" - - - - id: LANG_MONTH_JANUARY - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Jan" - - - *: none - rtc: "Сiч" - - - *: none - rtc: "Сiчень" - - - - id: LANG_MONTH_FEBRUARY - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Feb" - - - *: none - rtc: "Лют" - - - *: none - rtc: "Лютий" - - - - id: LANG_MONTH_MARCH - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Mar" - - - *: none - rtc: "Бер" - - - *: none - rtc: "Березень" - - - - id: LANG_MONTH_APRIL - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Apr" - - - *: none - rtc: "Квi" - - - *: none - rtc: "Квiтень" - - - - id: LANG_MONTH_MAY - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "May" - - - *: none - rtc: "Тра" - - - *: none - rtc: "Травень" - - - - id: LANG_MONTH_JUNE - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Jun" - - - *: none - rtc: "Чер" - - - *: none - rtc: "Червень" - - - - id: LANG_MONTH_JULY - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Jul" - - - *: none - rtc: "Лип" - - - *: none - rtc: "Липень" - - - - id: LANG_MONTH_AUGUST - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Aug" - - - *: none - rtc: "Сер" - - - *: none - rtc: "Серпень" - - - - id: LANG_MONTH_SEPTEMBER - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Sep" - - - *: none - rtc: "Вер" - - - *: none - rtc: "Вересень" - - - - id: LANG_MONTH_OCTOBER - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Oct" - - - *: none - rtc: "Жов" - - - *: none - rtc: "Жовтень" - - - - id: LANG_MONTH_NOVEMBER - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Nov" - - - *: none - rtc: "Лис" - - - *: none - rtc: "Листопад" - - - - id: LANG_MONTH_DECEMBER - desc: Maximum 3-letter abbreviation for monthname - user: core - - *: none - rtc: "Dec" - - - *: none - rtc: "Гру" - - - *: none - rtc: "Грудень" - - - - id: LANG_POWEROFF_IDLE - desc: in settings_menu - user: core - - *: "Idle Poweroff" - - - *: "Вимкнення при Неактивностi" - - - *: "Вимкнення при Неактивностi" - - - - id: LANG_SLEEP_TIMER - desc: sleep timer setting - user: core - - *: "Sleep Timer" - - - *: "Таймер Сну Пристрою" - - - *: "Таймер Сну Пристрою" - - - - id: LANG_LIMITS_MENU - desc: in the system sub menu - user: core - - *: "Limits" - - - *: "Обмеження" - - - *: "Обмеження" - - - - id: LANG_MAX_FILES_IN_DIR - desc: in settings_menu - user: core - - *: "Max Entries in File Browser" - - - *: "Максимум Файлiв у Папцi" - - - *: "Максимум Файлiв у Папцi" - - - - id: LANG_MAX_FILES_IN_PLAYLIST - desc: in settings_menu - user: core - - *: "Max Playlist Size" - - - *: "Найбiльший Розмiр Списку Вiдтворення" - - - *: "Найбiльший Розмiр Списку Вiдтворення" - - - - id: LANG_CAR_ADAPTER_MODE - desc: Displayed for setting car adapter mode to on/off - user: core - - *: none - charging: "Car Adapter Mode" - - - *: none - charging: "Режим Автомобiльного Адаптеру" - - - *: none - charging: "Режим Автомобiльного Адаптеру" - - - - id: LANG_ALARM_MOD_ALARM_MENU - desc: The name of the additional entry in the main menu for the RTC alarm mod. - user: core - - *: none - alarm: "Wake-Up Alarm" - - - *: none - alarm: "Будильник" - - - *: none - alarm: "Будильник" - - - - id: LANG_ALARM_WAKEUP_SCREEN - desc: in alarm menu setting - user: core - - *: none - alarm: "Alarm Wake up Screen" - - - *: none - alarm: "Екран Будильнику" - - - *: none - alarm: "Екран Будильнику" - - - - id: LANG_ALARM_MOD_TIME - desc: The current alarm time shown in the alarm menu for the RTC alarm mod. - user: core - - *: none - alarm: "Alarm Time:" - - - *: none - alarm: "Час Будильнику:" - - - *: none - alarm: "" - - - - id: LANG_ALARM_MOD_TIME_TO_GO - desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod. - user: core - - *: none - alarm: "Waking Up In %d:%02d" - - - *: none - alarm: "Прокинутись у %d:%02d" - - - *: none - alarm: "Прокинутись у" - - - - id: LANG_ALARM_MOD_SHUTDOWN - desc: The text that tells the user that the alarm time is ok and the device shuts off (for the RTC alarm mod). - user: core - - *: none - alarm: "Alarm Set" - - - *: none - alarm: "Встановити Будильник" - - - *: none - alarm: "Встановити Будильник" - - - - id: LANG_ALARM_MOD_ERROR - desc: The text that tells that the time is incorrect (for the RTC alarm mod). - user: core - - *: none - alarm: "Alarm Time Is Too Soon!" - - - *: none - alarm: "Час Будильнику Дуже Скоро!" - - - *: none - alarm: "Час Будильнику Дуже Скоро!" - - - - id: LANG_ALARM_MOD_KEYS - desc: Shown key functions in alarm menu (for the RTC alarm mod). - user: core - - *: none - alarm: "PLAY=Set OFF=Cancel" - ipod*: "SELECT=Set MENU=Cancel" - iriverh10,iriverh10_5gb: "SELECT=Set PREV=Cancel" - gigabeats: "SELECT=Set POWER=Cancel" - vibe500: "OK=Set C=Cancel" - - - *: none - alarm: "ВIДТВОР.=Встановити ВИМК.=Вiдмiнити" - ipod*: "ВИБIР=Встановити МЕНЮ=Вiдмiнити" - iriverh10,iriverh10_5gb: "ВИБIР=Встановити ПОПЕРЕД.=Вiдмiнити" - gigabeats: "ВИБIР=Встановити ЖИВЛ.=Вiдмiнити" - vibe500: "OK=Встановити C=Вiдмiнити" - - - *: none - alarm,ipod*: "" - - - - id: LANG_ALARM_MOD_DISABLE - desc: Announce that the RTC alarm has been turned off - user: core - - *: none - alarm: "Alarm Disabled" - - - *: none - alarm: "Будильник Вимкнено" - - - *: none - alarm: "Будильник Вимкнено" - - - - id: LANG_BOOKMARK_SETTINGS - desc: in general settings - user: core - - *: "Bookmarking" - - - *: "Закладки" - - - *: "Закладки" - - - - id: LANG_BOOKMARK_SETTINGS_AUTOCREATE - desc: prompt for user to decide to create an bookmark - user: core - - *: "Bookmark on Stop" - - - *: "Створення Закладки при Зупинцi" - - - *: "Створення Закладки при Зупинцi" - - - - id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES - desc: Save in recent bookmarks only - user: core - - *: "Yes - Recent only" - - - *: "Так - Тiльки Новi" - - - *: "Так - Тiльки Новi" - - - - id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK - desc: Save in recent bookmarks only - user: core - - *: "Ask - Recent only" - - - *: "Спитати - Тiльки Новi" - - - *: "Спитати - Тiльки Новi" - - - - id: LANG_BOOKMARK_SETTINGS_AUTOLOAD - desc: prompt for user to decide to create a bookmark - user: core - - *: "Load Last Bookmark" - - - *: "Завантажити Останню Закладку" - - - *: "Завантажити Останню Закладку" - - - - id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS - desc: Configuration option to maintain a list of recent bookmarks - user: core - - *: "Maintain a List of Recent Bookmarks?" - - - *: "Вести Список Останнiх Закладок?" - - - *: "Вести Список Останнiх Закладок?" - - - - id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY - desc: Save only on bookmark for each playlist in recent bookmarks - user: core - - *: "Unique only" - - - *: "Тiльки Унiкальнi" - - - *: "Тiльки Унiкальнi" - - - - id: LANG_LANGUAGE - desc: in settings_menu - user: core - - *: "Language" - - - *: "Мова" - - - *: "Мова" - - - - id: LANG_LANGUAGE_LOADED - desc: shown when a language has been loaded from the dir browser - user: core - - *: "New Language" - - - *: "Нова Мова" - - - *: "Нова Мова" - - - - id: LANG_VOICE - desc: root of voice menu - user: core - - *: "Voice" - - - *: "Голос" - - - *: "Голос" - - - - id: LANG_VOICE_MENU - desc: item of voice menu, enable/disable the voice UI - user: core - - *: "Voice Menus" - - - *: "Озвучувати Меню" - - - *: "Озвучувати Меню" - - - - id: LANG_VOICE_DIR - desc: item of voice menu, set the voice mode for directories - user: core - - *: "Voice Directories" - - - *: "Озвучувати Папки" - - - *: "Озвучувати Папки" - - - - id: LANG_VOICE_DIR_TALK - desc: Item of voice menu, whether to use directory .talk clips - user: core - - *: "Use Directory .talk Clips" - - - *: "Використовувати Файли .talk для озвучення Папок" - - - *: "Використовувати Файли talk для озвучення Папок" - - - - id: LANG_VOICE_FILE - desc: item of voice menu, set the voice mode for files - user: core - - *: "Voice Filenames" - - - *: "Озвучувати Iмена Файлiв" - - - *: "Озвучувати Iмена Файлiв" - - - - id: LANG_VOICE_FILE_TALK - desc: Item of voice menu, whether to use file .talk clips - user: core - - *: "Use File .talk Clips" - - - *: "Використовувати Файли .talk для озвучення Файлiв" - - - *: "Використовувати Файли talk для озвучення Файлiв" - - - - id: LANG_VOICE_NUMBER - desc: "talkbox" mode for files+directories - user: core - - *: "Numbers" - - - *: "Числа" - - - *: "Числа" - - - - id: LANG_VOICE_SPELL - desc: "talkbox" mode for files+directories - user: core - - *: "Spell" - - - *: "Вимовляти" - - - *: "Вимовляти" - - - - id: LANG_VOICE_DIR_HOVER - desc: "talkbox" mode for directories + files - user: core - - *: ".talk mp3 clip" - - - *: "Використовувати файли .talk для промовляння назви mp3" - - - *: "Використовувати файли talk для промовляння назви mp3" - - - - id: LANG_MANAGE_MENU - desc: in the main menu - user: core - - *: "Manage Settings" - - - *: "Керування Налаштуваннями" - - - *: "Керування Налаштуваннями" - - - - id: LANG_CUSTOM_CFG - desc: in setting_menu() - user: core - - *: "Browse .cfg Files" - - - *: "Вибiр файлiв .cfg" - - - *: "Вибiр файлiв конфiгурацii" - - - - id: LANG_SETTINGS_LOADED - desc: Feedback shown when a .cfg file is loaded - user: core - - *: "Settings Loaded" - - - *: "Завантаження Налаштувань" - - - *: "Завантаження Налаштувань" - - - - id: LANG_RESET - desc: in system_settings_menu() - user: core - - *: "Reset Settings" - - - *: "Скидання Налаштувань" - - - *: "Скидання Налаштувань" - - - - id: LANG_RESET_DONE_CLEAR - desc: visual confirmation after settings reset - user: core - - *: "Cleared" - - - *: "Налаштування Скинутi" - - - *: "Налаштування Скинутi" - - - - id: LANG_SAVE_SETTINGS - desc: in system_settings_menu() - user: core - - *: "Save .cfg File" - - - *: "Зберегти файл .cfg" - - - *: "Зберегти файл конфiгурацii" - - - - id: LANG_SETTINGS_SAVED - desc: Feedback shown when a .cfg file is saved - user: core - - *: "Settings Saved" - - - *: "Налаштування Збережено" - - - *: "Налаштування Збережено" - - - - id: LANG_SAVE_THEME - desc: save a theme file - user: core - - *: "Save Theme Settings" - - - *: "Зберегти Налаштування Тем" - - - *: "Зберегти Налаштування Тем" - - - - id: LANG_CUSTOM_THEME - desc: in the main menu - user: core - - *: "Browse Theme Files" - - - *: "Перегляд Файлiв Тем" - - - *: "Перегляд Файлiв Тем" - - - - id: LANG_RECORDING_SETTINGS - desc: in the main menu - user: core - - *: none - recording: "Recording Settings" - - - *: none - recording: "Налаштування Запису" - - - *: none - recording: "Налаштування Запису" - - - - id: LANG_FM_MENU - desc: fm menu title - user: core - - *: none - radio: "FM Radio Menu" - - - *: none - radio: "Меню ФМ-радiо" - - - *: none - radio: "Меню ФМ-радiо" - - - - id: LANG_FM_NO_PRESETS - desc: error when preset list is empty - user: core - - *: none - radio: "No presets" - - - *: none - radio: "Вiдсутнi пресети" - - - *: none - radio: "Вiдсутнi пресети" - - - - id: LANG_FM_ADD_PRESET - desc: in radio menu - user: core - - *: none - radio: "Add Preset" - - - *: none - radio: "Додати Пресет" - - - *: none - radio: "Додати Пресет" - - - - id: LANG_FM_EDIT_PRESET - desc: in radio screen - user: core - - *: none - radio: "Edit Preset" - - - *: none - radio: "Редагувати Пресет" - - - *: none - radio: "Редагувати Пресет" - - - - id: LANG_FM_DELETE_PRESET - desc: in radio screen - user: core - - *: none - radio: "Remove Preset" - - - *: none - radio: "Видалити Пресет" - - - *: none - radio: "Видалити Пресет" - - - - id: LANG_FM_PRESET_SAVE_FAILED - desc: in radio screen - user: core - - *: none - radio: "Preset Save Failed" - - - *: none - radio: "Не вдалося зберегти Пресет" - - - *: none - radio: "Не вдалося зберегти Пресет" - - - - id: LANG_FM_NO_FREE_PRESETS - desc: in radio screen - user: core - - *: none - radio: "The Preset List is Full" - - - *: none - radio: "Список Пресетiв Повний" - - - *: none - radio: "Список Пресетiв Повний" - - - - id: LANG_BUTTONBAR_MENU - desc: in button bar - user: core - - *: none - radio_screen_button_bar: "Menu" - - - *: none - radio_screen_button_bar: "Меню" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_BUTTONBAR_EXIT - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Exit" - - - *: none - radio_screen_button_bar: "Вихiд" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_BUTTONBAR_ACTION - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Action" - - - *: none - radio_screen_button_bar: "Дiя" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_PRESET - desc: in button bar and radio screen / menu - user: core - - *: none - radio: "Preset" - - - *: none - radio: "Пресет" - - - *: none - radio: "Пресет" - - - - id: LANG_FM_BUTTONBAR_ADD - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Add" - - - *: none - radio_screen_button_bar: "Додати" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_BUTTONBAR_RECORD - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Record" - - - *: none - radio_screen_button_bar: "Запис" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_MONO_MODE - desc: in radio screen - user: core - - *: none - radio: "Force Mono" - - - *: none - radio: "Примусове Моно" - - - *: none - radio: "Примусове Моно" - - - - id: LANG_FM_FREEZE - desc: splash screen during freeze in radio mode - user: core - - *: none - radio: "Screen frozen!" - - - *: none - radio: "Екран заморожено!" - - - *: none - radio: "" - - - - id: LANG_FM_SCAN_PRESETS - desc: in radio menu - user: core - - *: none - radio: "Auto-Scan Presets" - - - *: none - radio: "Автоматичне Сканування Пресетiв" - - - *: none - radio: "Автоматичне Сканування Пресетiв" - - - - id: LANG_FM_CLEAR_PRESETS - desc: confirmation if presets can be cleared - user: core - - *: none - radio: "Clear Current Presets?" - - - *: none - radio: "Очистити Поточнi Пресети?" - - - *: none - radio: "Очистити Поточнi Пресети?" - - - - id: LANG_FM_SCANNING - desc: during auto scan - user: core - - *: none - radio: "Scanning %d.%02d MHz" - - - *: none - radio: "Сканування %d.%02d MHz" - - - *: none - radio: "" - - - - id: LANG_FM_DEFAULT_PRESET_NAME - desc: default preset name for auto scan mode - user: core - - *: none - radio: "%d.%02d MHz" - - - *: none - radio: "%d.%02d MHz" - - - *: none - radio: "" - - - - id: LANG_RADIO_SCAN_MODE - desc: in radio screen / menu - user: core - - *: none - radio: "Scan" - - - *: none - radio: "Сканування" - - - *: none - radio: "Сканування" - - - - id: LANG_FM_PRESET_LOAD - desc: load preset list in fm radio - user: core - - *: none - radio: "Load Preset List" - - - *: none - radio: "Завантажити Список Пресетiв" - - - *: none - radio: "Завантажити Список Пресетiв" - - - - id: LANG_FM_PRESET_SAVE - desc: Save preset list in fm radio - user: core - - *: none - radio: "Save Preset List" - - - *: none - radio: "Зберегти Список Пресетiв" - - - *: none - radio: "Зберегти Список Пресетiв" - - - - id: LANG_FM_PRESET_CLEAR - desc: clear preset list in fm radio - user: core - - *: none - radio: "Clear Preset List" - - - *: none - radio: "Очистити Список Пресетiв" - - - *: none - radio: "Очистити Список Пресетiв" - - - - id: LANG_FMR - desc: Used when you need to say Preset List, also voiced - user: core - - *: none - radio: "Preset List" - - - *: none - radio: "Список Пресетiв" - - - *: none - radio: "Список Пресетiв" - - - - id: LANG_FM_FIRST_AUTOSCAN - desc: When you run the radio without an fmr file in settings - user: core - - *: none - radio: "No settings found. Autoscan?" - - - *: none - radio: "Не знайдено налаштувань. Провести Автосканування?" - - - *: none - radio: "Не знайдено налаштувань. Провести Автосканування?" - - - - id: LANG_FM_SAVE_CHANGES - desc: When you try to exit radio to confirm save - user: core - - *: none - radio: "Save Changes?" - - - *: none - radio: "Зберегти Змiни?" - - - *: none - radio: "Зберегти Змiни?" - - - - id: LANG_FM_REGION - desc: fm tuner region setting - user: core - - *: none - radio: "Region" - - - *: none - radio: "Регiон" - - - *: none - radio: "Регiон" - - - - id: LANG_FM_EUROPE - desc: fm tuner region europe - user: core - - *: none - radio: "Europe" - - - *: none - radio: "Европа" - - - *: none - radio: "Европа" - - - - id: LANG_FM_US - desc: fm region us / canada - user: core - - *: none - radio: "US / Canada" - - - *: none - radio: "США / Канада" - - - *: none - radio: "США / Канада" - - - - id: LANG_FM_JAPAN - desc: fm region japan - user: core - - *: none - radio: "Japan" - - - *: none - radio: "Японiя" - - - *: none - radio: "Японiя" - - - - id: LANG_FM_KOREA - desc: fm region korea - user: core - - *: none - radio: "Korea" - - - *: none - radio: "Корея" - - - *: none - radio: "Корея" - - - - id: LANG_RECORDING_FORMAT - desc: audio format item in recording menu - user: core - - *: none - recording: "Format" - - - *: none - recording: "Формат" - - - *: none - recording: "Формат" - - - - id: LANG_AFMT_MPA_L3 - desc: audio format description - user: core - - *: none - recording: "MPEG Layer 3" - - - *: none - recording: "MPEG Layer 3" - - - *: none - recording: "MPEG Layer 3" - - - - id: LANG_AFMT_PCM_WAV - desc: audio format description - user: core - - *: none - recording: "PCM Wave" - - - *: none - recording: "PCM Wave" - - - *: none - recording: "PCM Wave" - - - - id: LANG_AFMT_WAVPACK - desc: audio format description - user: core - - *: none - recording_swcodec: "WavPack" - - - *: none - recording_swcodec: "WavPack" - - - *: none - recording_swcodec: "WavPack" - - - - id: LANG_AFMT_AIFF - desc: audio format description - user: core - - *: none - recording: "AIFF" - - - *: none - recording: "AIFF" - - - *: none - recording: "AIFF" - - - - id: LANG_ENCODER_SETTINGS - desc: encoder settings - user: core - - *: none - recording: "Encoder Settings" - - - *: none - recording: "Налаштування Кодеку" - - - *: none - recording: "Налаштування Кодеку" - - - - id: LANG_BITRATE - desc: bits-kilobits per unit time - user: core - - *: none - recording_swcodec: "Bitrate" - - - *: none - recording_swcodec: "Бiтрейт" - - - *: none - recording_swcodec: "Бiтрейт" - - - - id: LANG_NO_SETTINGS - desc: when something has settings in a certain context - user: core - - *: none - recording: "(No Settings)" - - - *: none - recording: "(Налаштування Вiдсутнi)" - - - *: none - recording: "Налаштування Вiдсутнi" - - - - id: LANG_RECORDING_QUALITY - desc: in the recording settings - user: core - - *: none - recording_hwcodec: "Quality" - - - *: none - recording_hwcodec: "Якiсть" - - - *: none - recording_hwcodec: "Якiсть" - - - - id: LANG_RECORDING_FREQUENCY - desc: in the recording settings - user: core - - *: none - recording: "Frequency" - - - *: none - recording: "Частота" - - - *: none - recording: "Частота" - - - - id: LANG_SOURCE_FREQUENCY - desc: when recording source frequency setting must follow source - user: core - - *: none - recording: "(Same As Source)" - - - *: none - recording: "(Як В Джерелi)" - - - *: none - recording: "Як В Джерелi" - - - - id: LANG_RECORDING_SOURCE - desc: in the recording settings - user: core - - *: none - recording: "Source" - - - *: none - recording: "Джерело" - - - *: none - recording: "Джерело" - - - - id: LANG_RECORDING_SRC_MIC - desc: in the recording settings - user: core - - *: none - recording: "Microphone" - iriverh100,iriverh120,iriverh300: "Internal Microphone" - - - *: none - recording: "Мiкрофон" - iriverh100,iriverh120,iriverh300: "Вбудований Мiкрофон" - - - *: none - recording: "Мiкрофон" - iriverh100,iriverh120,iriverh300: "Вбудований Мiкрофон" - - - - id: LANG_RECORDING_SRC_DIGITAL - desc: in the recording settings - user: core - - *: none - recording: "Digital" - - - *: none - recording: "Цифровий" - - - *: none - recording: "Цифровий" - - - - id: LANG_LINE_IN - desc: in the recording settings - user: core - - *: none - recording,archosplayer: "Line In" - - - *: none - recording,archosplayer: "Лiнiйний Вхiд" - - - *: none - recording,archosplayer: "Лiнiйний Вхiд" - - - - id: LANG_RECORDING_EDITABLE - desc: Editable recordings setting - user: core - - *: none - recording_hwcodec: "Independent Frames" - - - *: none - recording_hwcodec: "Незалежнi Вiдрiзки" - - - *: none - recording_hwcodec: "Незалежнi Вiдрiзки" - - - - id: LANG_RECORD_TIMESPLIT - desc: Record split menu - user: core - - *: none - recording: "File Split Options" - - - *: none - recording: "Властивостi Роздiлення Файлу" - - - *: none - recording: "Властивостi Роздiлення Файлу" - - - - id: LANG_SPLIT_MEASURE - desc: in record timesplit options - user: core - - *: none - recording: "Split Measure" - - - *: none - recording: "Межа Роздiлення" - - - *: none - recording: "Межа Роздiлення" - - - - id: LANG_SPLIT_TYPE - desc: in record timesplit options - user: core - - *: none - recording: "What to do when Splitting" - - - *: none - recording: "Що робити пiд час Роздiлення" - - - *: none - recording: "Що робити пiд час Роздiлення" - - - - id: LANG_START_NEW_FILE - desc: in record timesplit options - user: core - - *: none - recording: "Start new file" - - - *: none - recording: "Почати новий файл" - - - *: none - recording: "Почати новий файл" - - - - id: LANG_STOP_RECORDING - desc: in record timesplit options - user: core - - *: none - recording: "Stop recording" - - - *: none - recording: "Зупинити запис" - - - *: none - recording: "Зупинити запис" - - - - id: LANG_SPLIT_TIME - desc: in record timesplit options - user: core - - *: none - recording: "Split Time" - - - *: none - recording: "Час роздiлення" - - - *: none - recording: "Час роздiлення" - - - - id: LANG_SPLIT_SIZE - desc: in record timesplit options - user: core - - *: none - recording: "Split Filesize" - - - *: none - recording: "Розмiр Файлу при Роздiленнi" - - - *: none - recording: "Розмiр Файлу при Роздiленнi" - - - - id: LANG_REC_SIZE - desc: in record timesplit options - user: core - - *: none - recording: "Filesize" - - - *: none - recording: "Розмiр Файлу" - - - *: none - recording: "Розмiр Файлу" - - - - id: LANG_RECORD_PRERECORD_TIME - desc: in recording settings_menu - user: core - - *: none - recording: "Prerecord Time" - - - *: none - recording: "Час попереднього запису" - - - *: none - recording: "Час попереднього запису" - - - - id: LANG_RECORD_DIRECTORY - desc: in recording settings_menu - user: core - - *: none - recording: "Directory" - - - *: none - recording: "Папка" - - - *: none - recording: "Папка" - - - - id: LANG_SET_AS_REC_DIR - desc: used in the onplay menu to set a recording dir - user: core - - *: none - recording: "Set As Recording Directory" - - - *: none - recording: "Встановити як Папку для Запису" - - - *: none - recording: "Встановити як Папку для Запису" - - - - id: LANG_CLEAR_REC_DIR - desc: - user: core - - *: none - recording: "Clear Recording Directory" - - - *: none - recording: "Очистити Папку Запису" - - - *: none - recording: "Очистити Папку Запису" - - - - id: LANG_REC_DIR_NOT_WRITABLE - desc: - user: core - - *: none - recording: "Can't write to recording directory" - - - *: none - recording: "Неможливо зберегти в папку записiв" - - - *: none - recording: "Неможливо зберегти в папку записiв" - - - - id: LANG_CLIP_LIGHT - desc: in record settings menu. - user: core - - *: none - recording: "Clipping Light" - - - *: none - recording: "Пiдсвiтка Перевантаження" - - - *: none - recording: "Пiдсвiтка Перевантаження" - - - - id: LANG_MAIN_UNIT - desc: in record settings menu. - user: core - - *: none - remote: "Main Unit Only" - - - *: none - remote: "Тiльки на Програвачi" - - - *: none - remote: "Тiльки на Програвачi" - - - - id: LANG_REMOTE_UNIT - desc: in record settings menu. - user: core - - *: none - remote: "Remote Unit Only" - - - *: none - remote: "Тiльки на Пультi" - - - *: none - remote: "Тiльки на Пультi" - - - - id: LANG_REMOTE_MAIN - desc: in record settings menu. - user: core - - *: none - remote: "Main and Remote Unit" - - - *: none - remote: "На Програвачi i на Пультi" - - - *: none - remote: "На Програвачi i на Пультi" - - - - id: LANG_RECORD_TRIGGER - desc: in recording settings_menu - user: core - - *: none - recording: "Trigger" - - - *: none - recording: "Тригер" - - - *: none - recording: "Тригер" - - - - id: LANG_RECORD_TRIG_NOREARM - desc: in recording settings_menu - user: core - - *: none - recording: "Once" - - - *: none - recording: "Один раз" - - - *: none - recording: "Один раз" - - - - id: LANG_RECORD_TRIGGER_TYPE - desc: in recording trigger menu - user: core - - *: none - recording: "Trigtype" - - - *: none - recording: "Тип Тригеру" - - - *: none - recording: "Тип Тригеру" - - - - id: LANG_RECORD_TRIGGER_NEWFILESTP - desc: trigger types - user: core - - *: none - recording: "New file" - - - *: none - recording: "Новий файл" - - - *: none - recording: "Новий файл" - - - - id: LANG_RECORD_TRIGGER_STOP - desc: trigger types - user: core - - *: none - recording: "Stop" - - - *: none - recording: "Стоп" - - - *: none - recording: "Стоп" - - - - id: LANG_RECORD_START_THRESHOLD - desc: in recording settings_menu - user: core - - *: none - recording: "Start Above" - - - *: none - recording: "Почати пiсля" - - - *: none - recording: "Почати пiсля" - - - - id: LANG_MIN_DURATION - desc: in recording settings_menu - user: core - - *: none - recording: "for at least" - - - *: none - recording: "як мiнiмум" - - - *: none - recording: "як мiнiмум" - - - - id: LANG_RECORD_STOP_THRESHOLD - desc: in recording settings_menu - user: core - - *: none - recording: "Stop Below" - - - *: none - recording: "Зупинити Пiсля" - - - *: none - recording: "Зупинити Пiсля" - - - - id: LANG_RECORD_STOP_GAP - desc: in recording settings_menu - user: core - - *: none - recording: "Presplit Gap" - - - *: none - recording: "Промiжок Попереднього Роздiлення" - - - *: none - recording: "Промiжок Попереднього Роздiлення" - - - - id: LANG_RECORD_PRERECORD - desc: in recording and radio screen - user: core - - *: none - recording: "Pre-Recording" - - - *: none - recording: "Попереднiй Запис" - - - *: none - recording: "" - - - - id: LANG_AGC_SAFETY - desc: AGC preset - user: core - - *: none - agc: "Safety (clip)" - - - *: none - agc: "Безпечний (клiп)" - - - *: none - agc: "Безпечний (клiп)" - - - - id: LANG_AGC_LIVE - desc: AGC preset - user: core - - *: none - agc: "Live (slow)" - - - *: none - agc: "Живий Звук (повiльний)" - - - *: none - agc: "Живий Звук (повiльний)" - - - - id: LANG_AGC_DJSET - desc: AGC preset - user: core - - *: none - agc: "DJ-Set (slow)" - - - *: none - agc: "DJ-сет (повiльний)" - - - *: none - agc: "DJ сет (повiльний)" - - - - id: LANG_AGC_MEDIUM - desc: AGC preset - user: core - - *: none - agc: "Medium" - - - *: none - agc: "Середнiй" - - - *: none - agc: "Середнiй" - - - - id: LANG_AGC_VOICE - desc: AGC preset - user: core - - *: none - agc: "Voice (fast)" - - - *: none - agc: "Голос (швидкий)" - - - *: none - agc: "Голос (швидкий)" - - - - id: LANG_REMOTE_LCD_OFF - desc: Remote lcd off splash in recording screen - user: core - - *: none - remote: "Remote Display OFF" - - - *: none - remote: "Вимкнути Екран Пульту" - - - *: none - remote: "Вимкнути Екран Пульту" - - - - id: LANG_REMOTE_LCD_ON - desc: Remote lcd off splash in recording screen - user: core - - *: none - remote: "(Vol- : Re-enable)" - - - *: none - remote: "(Гучнiсть- : Переiнiцiалiзацiя)" - - - *: none - remote: "(Гучнiсть- : Переiнiцiалiзацiя)" - - - - id: LANG_CREATE_PLAYLIST - desc: Menu option for creating a playlist - user: core - - *: "Create Playlist" - - - *: "Створити Список Вiдтворення" - - - *: "Створити Список Вiдтворення" - - - - id: LANG_PLAYLISTVIEWER_SETTINGS - desc: title for the playlist viewer settings menus - user: core - - *: "Playlist Viewer Settings" - - - *: "Налаштування Перегляду Списку Вiдтворення" - - - *: "Налаштування Перегляду Списку Вiдтворення" - - - - id: LANG_VIEW_DYNAMIC_PLAYLIST - desc: in playlist menu. - user: core - - *: "View Current Playlist" - - - *: "Переглянути Поточний Список Вiдтвореня" - - - *: "Переглянути Поточний Список Вiдтвореня" - - - - id: LANG_MOVE - desc: The verb/action Move - user: core - - *: "Move" - - - *: "Перенести" - - - *: "Перенести" - - - - id: LANG_SHOW_INDICES - desc: in playlist viewer menu - user: core - - *: "Show Indices" - - - *: "Показати Iндекси" - - - *: "Показати Iндекси" - - - - id: LANG_TRACK_DISPLAY - desc: in playlist viewer on+play menu - user: core - - *: "Track Display" - - - *: "Екран Треку" - - - *: "Екран Треку" - - - - id: LANG_DISPLAY_TRACK_NAME_ONLY - desc: track display options - user: core - - *: "Track Name Only" - - - *: "Тiльки Iм'я Треку" - - - *: "Тiльки Iм'я Треку" - - - - id: LANG_REMOVE - desc: in playlist viewer on+play menu - user: core - - *: "Remove" - - - *: "Видалити" - - - *: "Видалити" - - - - id: LANG_SAVE_DYNAMIC_PLAYLIST - desc: in playlist menu. - user: core - - *: "Save Current Playlist" - - - *: "Зберегти Поточний Список Вiдтворення" - - - *: "Зберегти Поточний Список Вiдтворення" - - - - id: LANG_PLAYLIST_SAVE_COUNT - desc: splash number of tracks saved - user: core - - *: "Saved %d tracks (%s)" - - - *: "Збережено %d треки (%s)" - - - *: "треки збережено" - - - - id: LANG_CATALOG - desc: in onplay menu - user: core - - *: "Playlist Catalog" - - - *: "Каталог Спискiв Вiдтвореня" - - - *: "Каталог Спискiв Вiдтвореня" - - - - id: LANG_RECURSE_DIRECTORY - desc: In playlist menu - user: core - - *: "Recursively Insert Directories" - - - *: "Рекрусивна Вставка Папок" - - - *: "Рекрусивна Вставка Папок" - - - - id: LANG_RECURSE_DIRECTORY_QUESTION - desc: Asked from onplay screen - user: core - - *: "Recursively?" - - - *: "Рекрусивно?" - - - *: "Рекрусивно?" - - - - id: LANG_WARN_ERASEDYNPLAYLIST_MENU - desc: in playlist options menu, option to warn when erasing dynamic playlist - user: core - - *: "Warn When Erasing Dynamic Playlist" - - - *: "Пiдтверджувати Очистку Динамiчного Списку Вiдтворення" - - - *: "Пiдтверджувати Очистку Динамiчного Списку Вiдтворення" - - - - id: LANG_WARN_ERASEDYNPLAYLIST_PROMPT - desc: prompt shown when about to erase a modified dynamic playlist - user: core - - *: "Erase dynamic playlist?" - - - *: "Очистити динамiчний вписок вiдтворення?" - - - *: "Очистити динамiчний вписок вiдтворення?" - - - - id: LANG_SHUTDOWN - desc: in main menu - user: core - - *: none - soft_shutdown: "Shut down" - - - *: none - soft_shutdown: "Вимкнути" - - - *: none - soft_shutdown: "Вимкнути" - - - - id: LANG_ROCKBOX_INFO - desc: displayed topmost on the info screen and in the info menu - user: core - - *: "Rockbox Info" - - - *: "Iнформацiя про Рокбокс" - - - *: "Iнформацiя про Рокбокс" - - - - id: LANG_BUFFER_STAT - desc: the buffer size, %d MB %d fraction of MB - user: core - - *: "Buffer:" - archosplayer: "Buf:" - - - *: "Буфер:" - archosplayer: "Буф:" - - - *: "Розмiр буферу" - - - - id: LANG_BATTERY_TIME - desc: battery level in % and estimated time remaining - user: core - - *: "Battery: %d%% %dh %dm" - archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" - iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" - - - *: "Акумулятор: %d%% %dh %dm" - archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" - iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" - - - *: "Рiвень Заряду Акумулятору" - - - - id: LANG_DISK_SIZE_INFO - desc: disk size info - user: core - - *: "Disk:" - - - *: "Диск:" - - - *: "Розмiр диску" - - - - id: LANG_DISK_FREE_INFO - desc: disk size info - user: core - - *: "Free:" - - - *: "Вiльно:" - - - *: "Вiльно на диску:" - - - - id: LANG_DISK_NAME_INTERNAL - desc: in info menu; name for internal disk with multivolume (keep short!) - user: core - - *: none - multivolume: "Int:" - - - *: none - multivolume: "Пам'ять:" - - - *: none - multivolume: "Память" - - - - id: LANG_DISK_NAME_MMC - desc: in info menu; name for external disk with multivolume (Ondio; keep short!) - user: core - - *: none - multivolume: "HD1" - sansae200*,sansac200*,sansafuze*: "mSD:" - archosondio*: "MMC:" - - - *: none - multivolume: "HD1" - sansae200*,sansac200*,sansafuze*: "microSD:" - archosondio*: "MMC:" - - - *: none - multivolume: "H D 1" - sansae200*,sansac200*,sansafuze*: "micro S D" - archosondio*: "M M C" - - - - id: LANG_VERSION - desc: in the Rockbox Info screen - user: core - - *: "Version" - - - *: "Версiя" - - - *: "Версiя" - - - - id: LANG_RUNNING_TIME - desc: in run time screen - user: core - - *: "Running Time" - - - *: "Тривалiсть роботи" - - - *: "Тривалiсть роботи" - - - - id: LANG_TOP_TIME - desc: in run time screen - user: core - - *: "Top Time" - - - *: "Кращий Час" - - - *: "Кращий Час" - - - - id: LANG_CLEAR_TIME - desc: in run time screen - user: core - - *: "Clear Time?" - - - *: "Очистити час?" - - - *: "Очистити час?" - - - - id: LANG_DEBUG - desc: in the info menu - user: core - - *: "Debug (Keep Out!)" - - - *: "Дебаг (Не чiпати!)" - - - *: "Дебаг, Не чiпати!" - - - - id: LANG_PLAYLIST - desc: Used when you need to say playlist, also voiced - user: core - - *: "Playlist" - - - *: "Список Вiдтворення" - - - *: "Список Вiдтворення" - - - - id: LANG_INSERT - desc: in onplay menu. insert a track/playlist into dynamic playlist. - user: core - - *: "Insert" - - - *: "Вставити" - - - *: "Вставити" - - - - id: LANG_INSERT_FIRST - desc: in onplay menu. insert a track/playlist into dynamic playlist. - user: core - - *: "Insert Next" - - - *: "Вставити Наступним" - - - *: "Вставити Наступним" - - - - id: LANG_INSERT_LAST - desc: in onplay menu. append a track/playlist into dynamic playlist. - user: core - - *: "Insert Last" - - - *: "Вставити Останнiм" - - - *: "Вставити Останнiм" - - - - id: LANG_INSERT_SHUFFLED - desc: in onplay menu. insert a track/playlist randomly into dynamic playlist - user: core - - *: "Insert Shuffled" - - - *: "Вставити у випадкове мiсце" - - - *: "Вставити у випадкове мiсце" - - - - id: LANG_QUEUE - desc: The verb/action Queue - user: core - - *: "Queue" - - - *: "Черга" - - - *: "Черга" - - - - id: LANG_QUEUE_FIRST - desc: in onplay menu. queue a track/playlist into dynamic playlist. - user: core - - *: "Queue Next" - - - *: "В Чергу Наступним" - - - *: "В Чергу Наступним" - - - - id: LANG_QUEUE_LAST - desc: in onplay menu. queue a track/playlist at end of playlist. - user: core - - *: "Queue Last" - - - *: "В Чергу Останнiм" - - - *: "В Чергу Останнiм" - - - - id: LANG_QUEUE_SHUFFLED - desc: in onplay menu. queue a track/playlist randomly into dynamic playlist - user: core - - *: "Queue Shuffled" - - - *: "В Чергу у Випадкове Мiсце" - - - *: "В Чергу у Випадкове Мiсце" - - - - id: LANG_REPLACE - desc: in onplay menu. Replace the current playlist with a new one. - user: core - - *: "Play Next" - - - *: "Вiдтворити Наступне" - - - *: "Вiдтворити Наступне" - - - - id: LANG_PLAYLIST_INSERT_COUNT - desc: splash number of tracks inserted - user: core - - *: "Inserted %d tracks (%s)" - - - *: "Вставлено %d трекiв (%s)" - - - *: "треки вставлено" - - - - id: LANG_PLAYLIST_QUEUE_COUNT - desc: splash number of tracks queued - user: core - - *: "Queued %d tracks (%s)" - - - *: "Черга %d трекiв (%s)" - - - *: "треки у черзi" - - - - id: LANG_VIEW - desc: in on+play menu - user: core - - *: "View" - - - *: "Перегляд" - - - *: "Перегляд" - - - - id: LANG_SEARCH_IN_PLAYLIST - desc: in playlist menu. - user: core - - *: "Search In Playlist" - - - *: "Пошук у Списку Вiдтворення" - - - *: "Пошук у Списку Вiдтворення" - - - - id: LANG_PLAYLIST_SEARCH_MSG - desc: splash number of tracks inserted - user: core - - *: "Searching... %d found (%s)" - - - *: "Пошук... %d знайдено (%s)" - - - *: "" - - - - id: LANG_SHUFFLE_PLAYLIST - desc: in playlist menu, reshuffles the order in which songs are played - user: core - - *: "Reshuffle" - - - *: "Перемiшати" - - - *: "Перемiшати" - - - - id: LANG_CATALOG_VIEW - desc: in onplay playlist catalog submenu - user: core - - *: "View Catalog" - - - *: "Переглянути Каталог" - - - *: "Переглянути Каталог" - - - - id: LANG_CATALOG_ADD_TO - desc: in onplay playlist catalog submenu - user: core - - *: "Add to Playlist" - - - *: "Додатти до Списку Вiдтворення" - - - *: "Додатти до Списку Вiдтворення" - - - - id: LANG_CATALOG_ADD_TO_NEW - desc: in onplay playlist catalog submenu - user: core - - *: "Add to New Playlist" - - - *: "Додати до Нового Списку Вiдтворення" - - - *: "Додати до Нового Списку Вiдтворення" - - - - id: LANG_CATALOG_NO_DIRECTORY - desc: error message when playlist catalog directory doesn't exist - user: core - - *: "%s doesn't exist" - - - *: "%s вiдсутня" - - - *: "Папка Списку Вiдтворення Вiдсутня" - - - - id: LANG_CATALOG_NO_PLAYLISTS - desc: error message when no playlists for playlist catalog - user: core - - *: "No Playlists" - - - *: "Вiдсутнiй Список Вiдтворення" - - - *: "Вiдсутнiй Список Вiдтворення" - - - - id: LANG_BOOKMARK_MENU - desc: Text on main menu to get to bookmark commands - user: core - - *: "Bookmarks" - - - *: "Закладки" - - - *: "Закладки" - - - - id: LANG_BOOKMARK_MENU_CREATE - desc: Used off of the bookmark menu to create a bookmark - user: core - - *: "Create Bookmark" - - - *: "Створити Закладку" - - - *: "Створити Закладку" - - - - id: LANG_BOOKMARK_MENU_LIST - desc: Used off of the bookmark menu to list available bookmarks for the currently playing directory or M3U - user: core - - *: "List Bookmarks" - - - *: "Список Закладок" - - - *: "Список Закладок" - - - - id: LANG_ONPLAY_MENU_TITLE - desc: title for the onplay menus - user: core - - *: "Context Menu" - - - *: "Контекстне Меню" - - - *: "Контекстне Меню" - - - - id: LANG_MENU_SET_RATING - desc: Set the rating of a file in the wps context menu - user: core - - *: "Set Song Rating" - - - *: "Встановити Рейтинг Пiснi" - - - *: "Встановити Рейтинг Пiснi" - - - - id: LANG_BROWSE_CUESHEET - desc: - user: core - - *: "Browse Cuesheet" - - - *: "Перегляд Cuesheet" - - - *: "Перегляд Cuesheet" - - - - id: LANG_MENU_SHOW_ID3_INFO - desc: Menu option to start tag viewer - user: core - - *: "Show Track Info" - - - *: "Iнформацiя про Трек" - - - *: "Iнформацiя про Трек" - - - - id: LANG_ID3_TITLE - desc: in tag viewer - user: core - - *: "Title" - - - *: "Назва" - - - *: "" - - - - id: LANG_ID3_ARTIST - desc: in tag viewer - user: core - - *: "Artist" - - - *: "Виконавець" - - - *: "" - - - - id: LANG_ID3_ALBUM - desc: in tag viewer - user: core - - *: "Album" - - - *: "Альбом" - - - *: "" - - - - id: LANG_ID3_TRACKNUM - desc: in tag viewer - user: core - - *: "Tracknum" - - - *: "Номер треку" - - - *: "" - - - - id: LANG_ID3_GENRE - desc: in tag viewer - user: core - - *: "Genre" - - - *: "Жанр" - - - *: "" - - - - id: LANG_ID3_YEAR - desc: in tag viewer - user: core - - *: "Year" - - - *: "Рiк" - - - *: "" - - - - id: LANG_ID3_LENGTH - desc: in tag viewer - user: core - - *: "Length" - - - *: "Тривалiсть" - - - *: "" - - - - id: LANG_ID3_PLAYLIST - desc: in tag viewer - user: core - - *: "Playlist" - - - *: "Список вiдтворення" - - - *: "" - - - - id: LANG_ID3_BITRATE - desc: in tag viewer - user: core - - *: "Bitrate" - - - *: "Бiтрейт" - - - *: "" - - - - id: LANG_ID3_ALBUMARTIST - desc: in tag viewer - user: core - - *: "Album Artist" - - - *: "Обкладинка Альбому" - - - *: "" - - - - id: LANG_ID3_DISCNUM - desc: in tag viewer - user: core - - *: "Discnum" - - - *: "Номер диску" - - - *: "" - - - - id: LANG_ID3_COMMENT - desc: in tag viewer - user: core - - *: "Comment" - - - *: "Коментар" - - - *: "" - - - - id: LANG_ID3_VBR - desc: in browse_id3 - user: core - - *: " (VBR)" - - - *: " (VBR)" - - - *: "" - - - - id: LANG_ID3_FREQUENCY - desc: in tag viewer - user: core - - *: "Frequency" - - - *: "Частота" - - - *: "" - - - - id: LANG_ID3_TRACK_GAIN - desc: in tag viewer - user: core - - *: "Track Gain" - - - *: "Пiдсилення Треку" - - - *: "" - - - - id: LANG_ID3_ALBUM_GAIN - desc: in tag viewer - user: core - - *: "Album Gain" - - - *: "Пiдсилення Альбому" - - - *: "" - - - - id: LANG_ID3_PATH - desc: in tag viewer - user: core - - *: "Path" - - - *: "Шлях" - - - *: "" - - - - id: LANG_ID3_NO_INFO - desc: in tag viewer - user: core - - *: "" - - - *: "" - - - *: "" - - - - id: LANG_RENAME - desc: The verb/action Rename - user: core - - *: "Rename" - - - *: "Переiменувати" - - - *: "Переiменувати" - - - - id: LANG_CUT - desc: The verb/action Cut - user: core - - *: "Cut" - - - *: "Вирiзати" - - - *: "Вирiзати" - - - - id: LANG_COPY - desc: The verb/action Copy - user: core - - *: "Copy" - - - *: "Копiювати" - - - *: "Копiювати" - - - - id: LANG_PASTE - desc: The verb/action Paste - user: core - - *: "Paste" - - - *: "Вставити" - - - *: "Вставити" - - - - id: LANG_REALLY_OVERWRITE - desc: The verb/action Paste - user: core - - *: "File/directory exists. Overwrite?" - - - *: "Файл/папка вже присутня. Замiнити?" - - - *: "Файл чи папка вже присутня. Замiнити?" - - - - id: LANG_DELETE - desc: The verb/action Delete - user: core - - *: "Delete" - - - *: "Видалити" - - - *: "Видалити" - - - - id: LANG_DELETE_DIR - desc: in on+play menu - user: core - - *: "Delete Directory" - - - *: "Видалити Папку" - - - *: "Видалити Папку" - - - - id: LANG_REALLY_DELETE - desc: Really Delete? - user: core - - *: "Delete?" - - - *: "Видалити?" - - - *: "Дiйсно видалити?" - - - - id: LANG_COPYING - desc: - user: core - - *: "Copying..." - - - *: "Копiювання..." - - - *: "Копiювання" - - - - id: LANG_DELETING - desc: - user: core - - *: "Deleting..." - - - *: "Видалення..." - - - *: "Вдалення" - - - - id: LANG_MOVING - desc: - user: core - - *: "Moving..." - - - *: "Перемiщеня..." - - - *: "Перемiщеня" - - - - id: LANG_DELETED - desc: A file has beed deleted - user: core - - *: "Deleted" - - - *: "Видалено" - - - *: "Видалено" - - - - id: LANG_SET_AS_BACKDROP - desc: text for onplay menu entry - user: core - - *: none - lcd_non-mono: "Set As Backdrop" - - - *: none - lcd_non-mono: "Встановити Як Фон" - - - *: none - lcd_non-mono: "Встановити Як Фон" - - - - id: LANG_BACKDROP_LOADED - desc: text for splash to indicate a new backdrop has been loaded successfully - user: core - - *: none - lcd_non-mono: "Backdrop Loaded" - - - *: none - lcd_non-mono: "Фон Завантажено" - - - *: none - lcd_non-mono: "" - - - - id: LANG_BACKDROP_FAILED - desc: text for splash to indicate a failure to load a bitmap as backdrop - user: core - - *: none - lcd_non-mono: "Backdrop Failed" - - - *: none - lcd_non-mono: "Помилка Завантаження Фону" - - - *: none - lcd_non-mono: "" - - - - id: LANG_ONPLAY_OPEN_WITH - desc: Onplay open with - user: core - - *: "Open With..." - - - *: "Вiдкрити за допомогою..." - - - *: "Вiдкрити за допомогою" - - - - id: LANG_CREATE_DIR - desc: in main menu - user: core - - *: "Create Directory" - - - *: "Створити Папку" - - - *: "Створити Папку" - - - - id: LANG_PROPERTIES - desc: browser file/dir properties - user: core - - *: "Properties" - - - *: "Властивостi" - - - *: "Властивостi" - - - - id: LANG_ADD_TO_FAVES - desc: - user: core - - *: "Add to Shortcuts" - - - *: "Додати до Ярликiв" - - - *: "Додати до Ярликiв" - - - - id: LANG_PITCH - desc: "pitch" in the pitch screen - user: core - - *: none - pitchscreen: "Pitch" - - - *: none - pitchscreen: "Прискорення" - - - *: none - pitchscreen: "Прискорення" - - - - id: LANG_PITCH_UP - desc: in wps - user: core - - *: none - pitchscreen: "Pitch Up" - - - *: none - pitchscreen: "Швидше" - - - *: none - pitchscreen: "" - - - - id: LANG_PITCH_DOWN - desc: in wps - user: core - - *: none - pitchscreen: "Pitch Down" - - - *: none - pitchscreen: "Повiльнiше" - - - *: none - pitchscreen: "" - - - - id: LANG_PITCH_UP_SEMITONE - desc: in wps - user: core - - *: none - pitchscreen: "Semitone Up" - - - *: none - pitchscreen: "Збiльшити напiвтони" - - - *: none - pitchscreen: "" - - - - id: LANG_PITCH_DOWN_SEMITONE - desc: in wps - user: core - - *: none - pitchscreen: "Semitone Down" - - - *: none - pitchscreen: "Зменшити напiвтони" - - - *: none - pitchscreen: "" - - - - id: LANG_PLAYLIST_BUFFER_FULL - desc: in playlist.indices() when playlist is full - user: core - - *: "Playlist Buffer Full" - - - *: "Буфер Списку Вiдтворення Переповнено" - - - *: "Буфер Списку Вiдтворення Переповнено" - - - - id: LANG_END_PLAYLIST - desc: when playlist has finished - user: core - - *: "End of Song List" - archosplayer: "End of List" - - - *: "Кiнець Списку Пiсень" - archosplayer: "Кiнець Списку" - - - *: "Кiнець Списку Пiсень" - - - - id: LANG_CREATING - desc: Screen feedback during playlist creation - user: core - - *: "Creating" - - - *: "Створення" - - - *: "" - - - - id: LANG_NOTHING_TO_RESUME - desc: Error message displayed when resume button pressed but no playlist - user: core - - *: "Nothing to resume" - - - *: "Нiчого продовжувати" - - - *: "Нiчого продовжувати" - - - - id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR - desc: Playlist error - user: core - - *: "Error updating playlist control file" - - - *: "Помилка оновлення файлу списку вiдтворення" - - - *: "Помилка оновлення файлу списку вiдтворення" - - - - id: LANG_PLAYLIST_ACCESS_ERROR - desc: Playlist error - user: core - - *: "Error accessing playlist file" - - - *: "Помилка доступу до файлу списку вiдтворення" - - - *: "Помилка доступу до файлу списку вiдтворення" - - - - id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR - desc: Playlist error - user: core - - *: "Error accessing playlist control file" - - - *: "Помилка доступу до файлу контролю списку вiдтворення" - - - *: "Помилка доступу до файлу контролю списку вiдтворення" - - - - id: LANG_PLAYLIST_DIRECTORY_ACCESS_ERROR - desc: Playlist error - user: core - - *: "Error accessing directory" - - - *: "Помилка доступу до папки" - - - *: "Помилка доступу до папки" - - - - id: LANG_PLAYLIST_CONTROL_INVALID - desc: Playlist resume error - user: core - - *: "Playlist control file is invalid" - - - *: "Файл контролю списку вiдтворення пошкоджено" - - - *: "Файл контролю списку вiдтворення пошкоджено" - - - - id: LANG_PAUSE - desc: in wps and recording trigger menu - user: core - - *: "Pause" - - - *: "Пауза" - - - *: "Пауза" - - - - id: LANG_MODE - desc: in wps F2 pressed and radio screen - user: core - - *: "Mode:" - - - *: "Режим:" - - - *: "" - - - - id: LANG_TIME - desc: Used on the bookmark select window to label elapsed time - user: core - - *: "Time" - - - *: "Час" - - - *: "Час" - - -/* TODO: cleanup LANG_USB_CHARGING unless HAVE_USB_CHARGING_ENABLE defined, - * the selector should probably be usb_charging_enable_enable as well. */ - - id: LANG_USB_CHARGING - desc: in Battery menu - user: core - - *: none - usb_charging_enable: "Charge During USB Connection" - - - *: none - usb_charging_enable: "Заряджати, при пiдключенню по USB" - - - *: none - usb_charging_enable: "Заряджати при пiдключенню по USB" - - - - id: LANG_KEYLOCK_ON - desc: displayed when key lock is on - user: core - - *: "Buttons Locked" - - - *: "Кнопки Заблоковано" - - - *: "" - - - - id: LANG_KEYLOCK_OFF - desc: displayed when key lock is turned off - user: core - - *: "Buttons Unlocked" - - - *: "Кнопки Розблоковано" - - - *: "" - - - - id: LANG_RECORDING_TIME - desc: Display of recorded time - user: core - - *: none - recording: "Time:" - - - *: none - recording: "Час:" - - - *: none - recording: "" - - - - id: LANG_DISK_FULL - desc: in recording screen - user: core - - *: none - recording: "The disk is full. Press OFF to continue." - iriverh100,iriverh120,iriverh300: "The disk is full. Press STOP to continue." - iaudiom5,iaudiox5: "The disk is full. Press POWER to continue." - sansae200*,sansac200*,vibe500: "The disk is full. Press PREV to continue." - - - *: none - recording: "Диск повний. Натичнiть OFF для продовження." - iriverh100,iriverh120,iriverh300: "Диск повний. Натичнiть STOP для продовження." - iaudiom5,iaudiox5: "Диск повний. Натичнiть POWER для продовження." - sansae200*,sansac200*,vibe500: "Диск повний. Натичнiть PREV для продовження." - - - *: none - recording,iriverh100,iriverh120,iriverh300,iaudiom5,iaudiox5,sansae200*,sansac200*: "" - - - - id: LANG_DB_INF - desc: -inf db for values below measurement - user: core - - *: none - recording: "-inf" - - - *: none - recording: "-inf" - - - *: none - recording: "minus infinity" - - - - id: LANG_CONFIRM_SHUTDOWN - desc: in shutdown screen - user: core - - *: none - soft_shutdown: "Press OFF to shut down" - - - *: none - soft_shutdown: "Натиснiть OFF для вимкнення" - - - *: none - soft_shutdown: "" - - - - id: LANG_REMOVE_MMC - desc: before acknowledging usb in case an MMC is inserted (Ondio) - user: core - - *: none - archosondio*: "Please remove inserted MMC" - - - *: none - archosondio*: "Будьласк витягнiть вставлену MMC" - - - *: none - archosondio*: "Будьласк витягнiть вставлену multimedia card" - - - - id: LANG_BOOT_CHANGED - desc: File browser discovered the boot file was changed - user: core - - *: "Boot changed" - - - *: "Файл завантаження змiнено" - - - *: "Файл завантаження змiнено" - - - - id: LANG_REBOOT_NOW - desc: Do you want to reboot? - user: core - - *: "Reboot now?" - - - *: "Перезавантажити зараз?" - - - *: "Перезавантажити зараз?" - - - - id: LANG_OFF_ABORT - desc: Used on archosrecorder models - user: core - - *: "OFF to abort" - archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" - ipod*: "PLAY/PAUSE to abort" - iaudiox5,iaudiom5: "Long PLAY to abort" - iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" - gigabeats: "BACK to abort" - gigabeatfx: "POWER to abort" - - - *: "OFF для вiдмiни" - archosplayer,iriverh100,iriverh120,iriverh300: "STOP для вiдмiни" - ipod*: "PLAY/PAUSE для вiдмiни" - iaudiox5,iaudiom5: "Довге натискання PLAY для вiдмiни" - iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV для вiдмiни" - gigabeats: "BACK для вiдмiни" - gigabeatfx: "POWER для вiдмiни" - - - *: "" - - - - id: LANG_NO_FILES - desc: in settings_menu - user: core - - *: "No files" - - - *: "Файли Вiдсутнi" - - - *: "Файли Вiдсутнi" - - - - id: LANG_KEYBOARD_LOADED - desc: shown when a keyboard has been loaded from the dir browser - user: core - - *: "New Keyboard" - - - *: "Нова Клавiатура" - - - *: "Нова Клавiатура" - - - - id: LANG_PLUGIN_CANT_OPEN - desc: Plugin open error message - user: core - - *: "Can't open %s" - - - *: "Неможливо вiдкрити %s" - - - *: "" - - - - id: LANG_READ_FAILED - desc: There was an error reading a file - user: core - - *: "Failed reading %s" - - - *: "Помилка читання %s" - - - *: "" - - - - id: LANG_PLUGIN_WRONG_MODEL - desc: The plugin is not compatible with the archos model trying to run it - user: core - - *: "Incompatible model" - - - *: "Несумiсний режим" - - - *: "" - - - - id: LANG_PLUGIN_WRONG_VERSION - desc: The plugin is not compatible with the rockbox version trying to run it - user: core - - *: "Incompatible version" - - - *: "Несумiсна версiя" - - - *: "" - - - - id: LANG_PLUGIN_ERROR - desc: The plugin return an error code - user: core - - *: "Plugin returned error" - - - *: "Плагiн повернув помилку" - - - *: "" - - - - id: LANG_FILETYPES_FULL - desc: Filetype array full - user: core - - *: "Filetype array full" - - - *: "Масив типiв файлiв повний" - - - *: "Масив типiв файлiв повний" - - - - id: LANG_SHOWDIR_BUFFER_FULL - desc: in showdir(), displayed on screen when you reach buffer limit - user: core - - *: "Dir Buffer is Full!" - - - *: "Буфер Папок Повний!" - - - *: "Буфер Папок Повний!" - - - - id: LANG_INVALID_FILENAME - desc: "invalid filename entered" error message - user: core - - *: "Invalid Filename!" - - - *: "Невiрне Iм'я Файлу!" - - - *: "Невiрне Iм'я Файлу" - - - - id: LANG_PLEASE_REBOOT - desc: when activating an option that requires a reboot - user: core - - *: "Please reboot to enable" - - - *: "Перезавантажте для прийняття змiн" - - - *: "Перезавантажте для прийняття змiн" - - - - id: LANG_BATTERY_CHARGE - desc: tells that the battery is charging, instead of battery level - user: core - - *: none - charging: "Battery: Charging" - - - *: none - charging: "Акумулятор: Зарядка" - - - *: none - charging: "Акумулятор Зарядка" - - - - id: LANG_BATTERY_TOPOFF_CHARGE - desc: in info display, shows that top off charge is running Only for V1 archosrecorder - user: core - - *: none - archosrecorder: "Battery: Top-Off Chg" - - - *: none - archosrecorder: "Акумулятор: Більше Можливого" - - - *: none - archosrecorder: "Акумулятор: Більше Можливого" - - - - id: LANG_BATTERY_TRICKLE_CHARGE - desc: in info display, shows that trickle charge is running - user: core - - *: none - charging: "Battery: Trickle Chg" - - - *: none - charging: "Акумулятор: Iмульс. Заряд" - - - *: none - charging: "TАкумулятор Iмульс. Заряд" - - - - id: LANG_WARNING_BATTERY_LOW - desc: general warning - user: core - - *: "WARNING! Low Battery!" - - - *: "УВАГА! Низький рiвень заряду акумулятора!" - - - *: "УВАГА! Низький рiвень заряду акумулятора!" - - - - id: LANG_WARNING_BATTERY_EMPTY - desc: general warning - user: core - - *: "Battery empty! RECHARGE!" - - - *: "Акумулятор на межi! ЗАРЯДIТЬ!" - - - *: "Акумулятор на межi! ЗАРЯДIТЬ!" - - - - id: LANG_BYTE - desc: a unit postfix - user: core - - *: "B" - - - *: "B" - - - *: "" - - - - id: LANG_KILOBYTE - desc: a unit postfix, also voiced - user: core - - *: "KB" - - - *: "KB" - - - *: "kilobyte" - - - - id: LANG_MEGABYTE - desc: a unit postfix, also voiced - user: core - - *: "MB" - - - *: "MB" - - - *: "megabyte" - - - - id: LANG_GIGABYTE - desc: a unit postfix, also voiced - user: core - - *: "GB" - - - *: "GB" - - - *: "gigabyte" - - - - id: LANG_POINT - desc: decimal separator for composing numbers - user: core - - *: "." - - - *: "." - - - *: "точка" - - - - id: VOICE_ZERO - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "0" - - - - id: VOICE_ONE - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "1" - - - - id: VOICE_TWO - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "2" - - - - id: VOICE_THREE - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "3" - - - - id: VOICE_FOUR - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "4" - - - - id: VOICE_FIVE - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "5" - - - - id: VOICE_SIX - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "6" - - - - id: VOICE_SEVEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "7" - - - - id: VOICE_EIGHT - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "8" - - - - id: VOICE_NINE - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "9" - - - - id: VOICE_TEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "10" - - - - id: VOICE_ELEVEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "11" - - - - id: VOICE_TWELVE - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "12" - - - - id: VOICE_THIRTEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "13" - - - - id: VOICE_FOURTEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "14" - - - - id: VOICE_FIFTEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "15" - - - - id: VOICE_SIXTEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "16" - - - - id: VOICE_SEVENTEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "17" - - - - id: VOICE_EIGHTEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "18" - - - - id: VOICE_NINETEEN - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "19" - - - - id: VOICE_TWENTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "20" - - - - id: VOICE_THIRTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "30" - - - - id: VOICE_FORTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "40" - - - - id: VOICE_FIFTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "50" - - - - id: VOICE_SIXTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "60" - - - - id: VOICE_SEVENTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "70" - - - - id: VOICE_EIGHTY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "80" - - - - id: VOICE_NINETY - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "90" - - - - id: VOICE_HUNDRED - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "сто" - - - - id: VOICE_THOUSAND - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "тисяча" - - - - id: VOICE_MILLION - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "мiльйон" - - - - id: VOICE_BILLION - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "мiльярд" - - - - id: VOICE_MINUS - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "мiнус" - - - - id: VOICE_PLUS - desc: spoken only, for composing numbers - user: core - - *: "" - - - *: "" - - - *: "плюс" - - - - id: VOICE_MILLISECONDS - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "мiлiсекунд" - - - - id: VOICE_SECOND - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "секунда" - - - - id: VOICE_SECONDS - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "секунд" - - - - id: VOICE_MINUTE - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "хвилина" - - - - id: VOICE_MINUTES - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "чвилин" - - - - id: VOICE_HOUR - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "година" - - - - id: VOICE_HOURS - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "година" - - - - id: VOICE_KHZ - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "кiлогерц" - - - - id: VOICE_DB - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "децибел" - - - - id: VOICE_PERCENT - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "вiдсоток" - - - - id: VOICE_MILLIAMPHOURS - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "мiлiампер годин" - - - - id: VOICE_PIXEL - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "пiксель" - - - - id: VOICE_PER_SEC - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "за секунду" - - - - id: VOICE_HERTZ - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "герц" - - - - id: VOICE_KBIT_PER_SEC - desc: spoken only, a unit postfix - user: core - - *: "" - - - *: "" - - - *: "кiлобiт за секунду" - - - - id: VOICE_CHAR_A - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "A" - - - - - id: VOICE_CHAR_B - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "B" - - - - id: VOICE_CHAR_C - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "C" - - - - id: VOICE_CHAR_D - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "D" - - - - id: VOICE_CHAR_E - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "E" - - - - id: VOICE_CHAR_F - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "F" - - - - id: VOICE_CHAR_G - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "G" - - - - id: VOICE_CHAR_H - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "H" - - - - id: VOICE_CHAR_I - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "I" - - - - id: VOICE_CHAR_J - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "J" - - - - id: VOICE_CHAR_K - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "K" - - - - id: VOICE_CHAR_L - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "L" - - - - id: VOICE_CHAR_M - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "M" - - - - id: VOICE_CHAR_N - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "N" - - - - id: VOICE_CHAR_O - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "O" - - - - id: VOICE_CHAR_P - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "P" - - - - id: VOICE_CHAR_Q - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "Q" - - - - id: VOICE_CHAR_R - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "R" - - - - id: VOICE_CHAR_S - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "S" - - - - id: VOICE_CHAR_T - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "T" - - - - id: VOICE_CHAR_U - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "U" - - - - id: VOICE_CHAR_V - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "V" - - - - id: VOICE_CHAR_W - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "W" - - - - id: VOICE_CHAR_X - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "X" - - - - id: VOICE_CHAR_Y - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "Y" - - - - id: VOICE_CHAR_Z - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "Z" - - - - id: VOICE_DOT - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "крапка" - - - - id: VOICE_PAUSE - desc: spoken only, for spelling, a split second of silence (difficult to author) - user: core - - *: "" - - - *: "" - - - *: " " - - - - id: VOICE_FILE - desc: spoken only, prefix for file number - user: core - - *: "" - - - *: "" - - - *: "файл" - - - - id: VOICE_DIR - desc: spoken only, prefix for directory number - user: core - - *: "" - - - *: "" - - - *: "папка" - - - - id: VOICE_EXT_MPA - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "аудiо" - - - - id: VOICE_EXT_CFG - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "конфiгурацiя" - - - - id: VOICE_EXT_WPS - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "while-playing-screen" - - - - id: VOICE_EXT_ROCK - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "плагiн" - - - - id: VOICE_EXT_FONT - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "шрифт" - - - - id: VOICE_EXT_BMARK - desc: spoken only, for file extension and the word in general - user: core - - *: "" - - - *: "" - - - *: "закладка" - - - - id: VOICE_EXT_AJZ - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "прошивка" - - - - id: VOICE_EXT_RWPS - desc: spoken only, for file extension - user: core - - *: none - remote: "" - - - *: none - remote: "" - - - *: none - remote: "на пультi while-playing-screen" - - - - id: VOICE_EXT_KBD - desc: spoken only, for file extension - user: core - - *: "" - - - *: "" - - - *: "Клавiатура" - - - - id: VOICE_EXT_CUESHEET - desc: - user: core - - *: "" - - - *: "" - - - *: "cuesheet" - - - - id: VOICE_BOOKMARK_SELECT_INDEX_TEXT - desc: voice only, used in the bookmark list to label index number - user: core - - *: "" - - - *: "" - - - *: "Index" - - - - id: VOICE_CURRENT_TIME - desc: spoken only, for wall clock announce - user: core - - *: none - rtc: "" - - - *: none - rtc: "" - - - *: none - rtc: "Поточний час:" - - - - id: LANG_SYSFONT_EQUALIZER_EDIT_MODE - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Edit mode: %s %s" - - - *: none - swcodec: "Режим редагування: %s %s" - - - *: none - swcodec: "" - - - - id: LANG_SYSFONT_EQUALIZER_BAND_CUTOFF - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Cutoff" - - - *: none - swcodec: "Зрiзання" - - - *: none - swcodec: "Частота Зрiзання" - - - - id: LANG_SYSFONT_GAIN - desc: in the equalizer settings menu - user: core - - *: none - swcodec: "Gain" - - - *: none - swcodec: "Пiдсилення" - - - *: none - swcodec: "Пiдсилення" - - - - id: LANG_SYSFONT_MODE - desc: in wps F2 pressed - user: core - - *: none - lcd_bitmap: "Mode:" - - - *: none - lcd_bitmap: "Режим:" - - - *: none - lcd_bitmap: "" - - - - id: LANG_SYSFONT_DIRBROWSE_F1 - desc: in dir browser, F1 button bar text - user: core - - *: none - recorder_pad: "Menu" - - - *: none - recorder_pad: "Меню" - - - *: none - recorder_pad: "" - - - - id: LANG_SYSFONT_DIRBROWSE_F2 - desc: in dir browser, F2 button bar text - user: core - - *: none - recorder_pad: "Option" - - - *: none - recorder_pad: "Властивостi" - - - *: none - recorder_pad: "" - - - - id: LANG_SYSFONT_DIRBROWSE_F3 - desc: in dir browser, F3 button bar text - user: core - - *: none - recorder_pad: "LCD" - - - *: none - recorder_pad: "РКД" - - - *: none - recorder_pad: "" - - - - id: LANG_SYSFONT_CHANNEL_STEREO - desc: in sound_settings - user: core - - *: none - recording: "Stereo" - - - *: none - recording: "Стерео" - - - *: none - recording: "Стерео" - - - - id: LANG_SYSFONT_CHANNEL_MONO - desc: in sound_settings - user: core - - *: none - recording: "Mono" - - - *: none - recording: "Моно" - - - *: none - recording: "Моно" - - - - id: LANG_SYSFONT_RECORDING_QUALITY - desc: in the recording settings - user: core - - *: none - recording_hwcodec: "Quality" - - - *: none - recording_hwcodec: "Якiсть" - - - *: none - recording_hwcodec: "Якiсть" - - - - id: LANG_SYSFONT_RECORDING_FREQUENCY - desc: in the recording settings - user: core - - *: none - recording: "Frequency" - - - *: none - recording: "Частота" - - - *: none - recording: "Частота" - - - - id: LANG_SYSFONT_RECORDING_SOURCE - desc: in the recording settings - user: core - - *: none - recording: "Source" - - - *: none - recording: "Джерело" - - - *: none - recording: "Джерело" - - - - id: LANG_SYSFONT_RECORDING_SRC_MIC - desc: in the recording settings - user: core - - *: none - recording: "Int. Mic" - - - *: none - recording: "Вбуд. Мiкрофон" - - - *: none - recording: "Вбудований Мiкрофон" - - - - id: LANG_SYSFONT_LINE_IN - desc: in the recording settings - user: core - - *: none - recording: "Line In" - - - *: none - recording: "Лiнiйний вхiд" - - - *: none - recording: "Лiнiйний вхiд" - - - - id: LANG_SYSFONT_RECORDING_SRC_DIGITAL - desc: in the recording settings - user: core - - *: none - recording: "Digital" - - - *: none - recording: "Цифровий" - - - *: none - recording: "Цифровий" - - - - id: LANG_SYSFONT_CHANNELS - desc: in the recording settings - user: core - - *: none - recording: "Channels" - - - *: none - recording: "Канали" - - - *: none - recording: "Канали" - - - - id: LANG_SYSFONT_RECORD_TRIGGER - desc: in recording settings_menu - user: core - - *: none - recording: "Trigger" - - - *: none - recording: "Тригер" - - - *: none - recording: "Тригер" - - - - id: VOICE_OF - desc: spoken only, as in 3/8 => 3 of 8 - user: core - - *: "" - - - *: "" - - - *: "вимкнути" - - - - id: LANG_PLUGIN_GAMES - desc: in the main menu - user: core - - *: "Games" - - - *: "Iгри" - - - *: "Iгри" - - - - id: LANG_PLUGIN_APPS - desc: in the main menu - user: core - - *: "Applications" - - - *: "Програми" - - - *: "Програми" - - - - id: LANG_PLUGIN_DEMOS - desc: in the main menu - user: core - - *: "Demos" - - - *: "Демонстрацiя" - - - *: "Демонстрацiя" - - - - id: LANG_ID3_GROUPING - desc: in tag viewer - user: core - - *: "Work" - - - *: "Робота" - - - *: "" - - - - id: LANG_SHOW_FILENAME_EXT - desc: in settings_menu - user: core - - *: "Show Filename Extensions" - - - *: "Показувати Розширення Файлiв" - - - *: "Показувати Розширення Файлiв" - - - - id: LANG_UNKNOWN_TYPES - desc: in settings_menu - user: core - - *: "Only Unknown Types" - - - *: "Тiльки Невiдомi Типи" - - - *: "Тiльки Невiдомi Типи" - - - - id: LANG_EXT_ONLY_VIEW_ALL - desc: in settings_menu - user: core - - *: "Only When Viewing All Types" - - - *: "Тiльки, якшо переглядаются Всi Типи" - - - *: "Тiльки, якшо переглядаются Всi Типи" - - - - id: VOICE_PM_UNITS_PER_TICK - desc: spoken only, peak meter release unit - user: core - - *: "" - - - *: "" - - - *: "кадрiв за секунду" - - - - id: VOICE_OCLOCK - desc: spoken only, for wall clock announce - user: core - - *: none - rtc: "" - - - *: none - rtc: "" - - - *: none - rtc: "час" - - - - id: VOICE_PM - desc: spoken only, for wall clock announce - user: core - - *: none - rtc: "" - - - *: none - rtc: "" - - - *: none - rtc: "P M" - - - - id: VOICE_AM - desc: spoken only, for wall clock announce - user: core - - *: none - rtc: "" - - - *: none - rtc: "" - - - *: none - rtc: "A M" - - - - id: VOICE_OH - desc: spoken only, for wall clock announce - user: core - - *: none - rtc: "" - - - *: none - rtc: "" - - - *: none - rtc: "ох" - - - - id: LANG_PM_CLIPCOUNTER - desc: in settings, for recording peak meter - user: core - - *: none - recording: "Clip Counter" - - - *: none - recording: "Лiчильник Перевантажень" - - - *: none - recording: "Лiчильник Перевантажень" - - - - id: LANG_SELECTOR_START_COLOR - desc: line selector color option - user: core - - *: none - lcd_color: "Primary Colour" - - - *: none - lcd_color: "Основний Колiр" - - - *: none - lcd_color: "Основний Колiр" - - - - id: LANG_SELECTOR_END_COLOR - desc: line selector color option - user: core - - *: none - lcd_color: "Secondary Colour" - - - *: none - lcd_color: "Другорядний Колiр" - - - *: none - lcd_color: "Другорядний Колiр" - - - - id: LANG_SELECTOR_TEXT_COLOR - desc: line selector text color option - user: core - - *: none - lcd_color: "Text Colour" - - - *: none - lcd_color: "Колiр Тексту" - - - *: none - lcd_color: "Колiр Тексту" - - - - id: LANG_INVERT_CURSOR_COLOR - desc: in settings_menu - user: core - - *: none - lcd_color: "Bar (Solid Colour)" - - - *: none - lcd_color: "Смужка (Одним Кольором)" - - - *: none - lcd_color: "Смужка (Одним Кольором)" - - - - id: LANG_INVERT_CURSOR_GRADIENT - desc: in settings_menu - user: core - - *: none - lcd_color: "Bar (Gradient Colour)" - - - *: none - lcd_color: "Смужка (Подвiйний Колiр)" - - - *: none - lcd_color: "Смужка (Подвiйний Колiр)" - - - - id: LANG_CODEPAGE_CENTRAL_EUROPEAN - desc: in codepage setting menu - user: core - - *: "Central European (CP1250)" - - - *: "Центрально Европейська (CP1250)" - - - *: "Центрально Европейська" - - - - id: LANG_THEME_MENU - desc: in the settings menu - user: core - - *: "Theme Settings" - - - *: "Налаштування Тем" - - - *: "Налаштування Тем" - - - - id: LANG_COLORS_MENU - desc: colours menu under theme settings - user: core - - *: none - lcd_color: "Colours" - - - *: none - lcd_color: "Кольори" - - - *: none - lcd_color: "Кольори" - - - - id: LANG_SELECTOR_COLOR_MENU - desc: line selector color menu title - user: core - - *: none - lcd_color: "Line Selector Colours" - - - *: none - lcd_color: "Колiр Смужки Вибору" - - - *: none - lcd_color: "Колiр Смужки Вибору" - - - - id: VOICE_EDIT - desc: keyboard - user: core - - *: "" - - - *: "" - - - *: "Редагувати" - - - - id: VOICE_BLANK - desc: keyboard - user: core - - *: "" - - - *: "" - - - *: "Пусто" - - - - id: VOICE_EMPTY_LIST - desc: spoken only, when a list dialog contains no elements - user: core - - *: "" - - - *: "" - - - *: "Порожнiй список" - - - - id: LANG_NOT_PRESENT - desc: when external memory is not present - user: core - - *: none - multivolume: "Not present" - - - *: none - multivolume: "Не присутнiй" - - - *: none - multivolume: "Не присутнiй" - - - - id: LANG_TALK_BATTERY_LEVEL - desc: Setting for spontaneous battery level announcement - user: core - - *: "Announce Battery Level" - - - *: "Повiдомляти Заряд Акумулятора" - - - *: "Повiдомляти Заряд Акумулятора" - - - - id: LANG_VOICE_FILETYPE - desc: voice settings menu - user: core - - *: "Say File Type" - - - *: "Сказати Тип Файлу" - - - *: "Сказати Тип Файлу" - - - - id: LANG_BASS_CUTOFF - desc: Bass setting cut-off frequency - user: core - - *: none - ipodvideo: "Bass Cutoff" - - - *: none - ipodvideo: "Вiдсiкання Басу" - - - *: none - ipodvideo: "Вiдсiкання Басу" - - - - id: LANG_TREBLE_CUTOFF - desc: Treble setting cut-off frequency - user: core - - *: none - ipodvideo: "Treble Cutoff" - - - *: none - ipodvideo: "Вiдсiкання Високих Частот" - - - *: none - ipodvideo: "Вiдсiкання Високих Частот" - - - - id: LANG_TAGNAVI_RANDOM - desc: "" entry in tag browser - user: core - - *: "" - - - *: "<Випадково>" - - - *: "Випадково" - - - - id: LANG_SAVE_SOUND - desc: save a sound config file - user: core - - *: "Save Sound Settings" - - - *: "Зберегти Налаштування Звуку" - - - *: "Зберегти Налаштування Звуку" - - - - id: LANG_KEYCLICK - desc: in keyclick settings menu - user: core - - *: none - swcodec: "Keyclick" - - - *: none - swcodec: "Озвучення Натискання Кнопок" - - - *: none - swcodec: "Озвучення Натискання Кнопок" - - - - id: LANG_KEYCLICK_REPEATS - desc: in keyclick settings menu - user: core - - *: none - swcodec: "Keyclick Repeats" - - - *: none - swcodec: "Повторення Сигналу Натискання" - - - *: none - swcodec: "Повторення Сигналу Натискання" - - - - id: LANG_ACCESSORY_SUPPLY - desc: in system settings menu - user: core - - *: none - accessory_supply: "Accessory Power Supply" - - - *: none - accessory_supply: "Додатковi Джерела Живлення" - - - *: none - accessory_supply: "Додатковi Джерела Живлення" - - - - id: LANG_UNKNOWN - desc: generic string for unknown states, such as an unset clock - user: core - - *: "Unknown" - - - *: "Невiдомо" - - - *: "Невiдомо" - - - - id: VOICE_QUICKSCREEN - desc: spoken only, Announces entering the "quick screen" - user: core - - *: "" - - - *: "" - - - *: "Швидкий екран" - - - - id: VOICE_OK - desc: spoken only, On exiting a context, specifically the quick screen - user: core - - *: "" - - - *: "" - - - *: "OK" - - - - id: LANG_STOP_RECORDING_AND_SHUTDOWN - desc: in record timesplit options - user: core - - *: none - recording: "Stop Recording And Shutdown" - - - *: none - recording: "Зупинити Запис i Вимкнути" - - - *: none - recording: "Зупинити Запис i Вимкнути" - - - - id: LANG_TOUCHPAD_SENSITIVITY - desc: touchpad sensitivity setting - user: core - - *: none - gigabeatfx: "Touchpad Sensitivity" - - - *: none - gigabeatfx: "Чутливiсть Тачпаду" - - - *: none - gigabeatfx: "Чутливiсть Тачпаду" - - - - id: LANG_HIGH - desc: in settings_menu - user: core - - *: none - gigabeatfx: "High" - - - *: none - gigabeatfx: "Висока" - - - *: none - gigabeatfx: "Висока" - - - - id: LANG_SERIAL_BITRATE - desc: in system settings menu - user: core - - *: none - serial_port: "Serial Bitrate" - - - *: none - serial_port: "Швидкiсть Послiдовного Порту" - - - *: none - serial_port: "Швидкiсть Послiдовного Порту" - - - - id: LANG_SERIAL_BITRATE_AUTO - desc: in system settings menu - user: core - - *: none - serial_port: "Auto" - - - *: none - serial_port: "Авто" - - - *: none - serial_port: "Автоматично" - - - - id: LANG_SERIAL_BITRATE_9600 - desc: in system settings menu - user: core - - *: none - serial_port: "9600" - - - *: none - serial_port: "9600" - - - *: none - serial_port: "9600" - - - - id: LANG_SERIAL_BITRATE_19200 - desc: in system settings menu - user: core - - *: none - serial_port: "19200" - - - *: none - serial_port: "19200" - - - *: none - serial_port: "19200" - - - - id: LANG_SERIAL_BITRATE_38400 - desc: in system settings menu - user: core - - *: none - serial_port: "38400" - - - *: none - serial_port: "38400" - - - *: none - serial_port: "38400" - - - - id: LANG_SERIAL_BITRATE_57600 - desc: in system settings menu - user: core - - *: none - serial_port: "57600" - - - *: none - serial_port: "57600" - - - *: none - serial_port: "57600" - - - - id: LANG_VERY_SLOW - desc: in settings_menu - user: core - - *: "Very slow" - - - *: "Дуже повiльно" - - - *: "Дуже повiльно" - - - - id: LANG_SLOW - desc: in settings_menu - user: core - - *: "Slow" - - - *: "Повiльно" - - - *: "Повiльно" - - - - id: LANG_VERY_FAST - desc: in settings_menu - user: core - - *: "Very fast" - - - *: "Дуже швидко" - - - *: "Дуже швидко" - - - - id: LANG_FAST - desc: in settings_menu - user: core - - *: "Fast" - - - *: "Швидко" - - - *: "Швидко" - - - - id: LANG_SKIP_LENGTH - desc: playback settings menu - user: core - - *: "Skip Length" - - - *: "Пропустити Довжину" - - - *: "Пропустити Довжину" - - - - id: LANG_SKIP_TRACK - desc: skip length setting entry 0 - user: core - - *: "Skip Track" - - - *: "Пропустити Трек" - - - *: "Пропустити Трек" - - - - id: VOICE_CHAR_SLASH - desc: spoken only, for spelling - user: core - - *: "" - - - *: "" - - - *: "слеш" - - - - id: LANG_GAIN_LEFT - desc: in the recording screen - user: core - - *: none - recording: "Gain L" - - - *: none - recording: "Пiдсилення Лiв." - - - *: none - recording: "Пiдсилення Лiвого" - - - - id: LANG_GAIN_RIGHT - desc: in the recording screen - user: core - - *: none - recording: "Gain R" - - - *: none - recording: "Пiдсилення Прав." - - - *: none - recording: "Пiдсилення Правого" - - - - id: LANG_RECORDING_AGC_PRESET - desc: automatic gain control in record settings and screen - user: core - - *: none - agc: "AGC" - - - *: none - agc: "АКП" - - - *: none - agc: "Автоматичний контроль пiдсилення" - - - - id: LANG_RECORDING_AGC_CLIPTIME - desc: in record settings - user: core - - *: none - agc: "AGC clip time" - - - *: none - agc: "АКП часу клiпу" - - - *: none - agc: "АКП часу клiпу" - - - - id: LANG_RECORDING_AGC_MAXGAIN - desc: AGC maximum gain in recording screen - user: core - - *: none - agc: "AGC max. gain" - - - *: none - agc: "АКП макс. пiдсилення" - - - *: none - agc: "АКП максимальне пiдсилення" - - - - id: LANG_RECORDING_FILENAME - desc: Filename header in recording screen - user: core - - *: none - recording: "Filename:" - - - *: none - recording: "Iм'я Файлу:" - - - *: none - recording: "" - - - - id: LANG_PM_CLIPCOUNT - desc: in recording GUI, for recording peak meter. MAX 5 characters! - user: core - - *: none - recording: "CLIP:" - - - *: none - recording: "Клiп:" - - - *: none - recording: "" - - - - id: LANG_RECORDING_TIMESPLIT_REC - desc: Display of record timer interval setting, on the record screen - user: core - - *: none - recording: "Split Time:" - - - *: none - recording: "Час Роздiлення:" - - - *: none - recording: "" - - - - id: LANG_RECORDING_SIZE - desc: Display of recorded file size - user: core - - *: none - recording: "Size:" - - - *: none - recording: "Розмiр:" - - - *: none - recording: "" - - - - id: LANG_RECORDING_MONO_MODE - desc: in the recording settings - user: core - - *: none - recording_swcodec: "Mono mode" - - - *: none - recording_swcodec: "Режим моно" - - - *: none - recording_swcodec: "Режим моно" - - - - id: LANG_SEARCH_RESULTS - desc: title for the list of results displayed after searching in a playlist - user: core - - *: "Search Results" - - - *: "Пошук Результатiв" - - - *: "Пошук Результатiв" - - - - id: LANG_RESET_SETTING - desc: used in the settings context menu - user: core - - *: "Reset Setting" - - - *: "Скинути Налаштування" - - - *: "Скинути Налаштування" - - - - id: LANG_LEFT_QS_ITEM - desc: used for the submenu name for the quickscreen items - user: core - - *: none - quickscreen: "Set as Left Quickscreen Item" - - - *: none - quickscreen: "Встановити як Лiву Кнопку на Швидкому Екранi" - - - *: none - quickscreen: "Встановити як Лiву Кнопку на Швидкому Екранi" - - - - id: LANG_RIGHT_QS_ITEM - desc: used for the submenu name for the quickscreen items - user: core - - *: none - quickscreen: "Set as Right Quickscreen Item" - - - *: none - quickscreen: "Встановити як Праву Кнопку на Швидкому Екранi" - - - *: none - quickscreen: "Встановити як Праву Кнопку на Швидкому Екранi" - - - - id: LANG_BOTTOM_QS_ITEM - desc: used for the submenu name for the quickscreen items - user: core - - *: none - quickscreen: "Set as Bottom Quickscreen Item" - - - *: none - quickscreen: "Встановити як Кнопку Вниз на Швидкому Екранi" - - - *: none - quickscreen: "Встановити як Кнопку Вниз на Швидкому Екранi" - - - - id: LANG_CREDITS - desc: in the Main Menu -> System screen - user: core - - *: "Credits" - - - *: "Подяки" - - - *: "Подяки" - - - - id: LANG_SORT_INTERPRET_NUMBERS - desc: in Settings -> File view - user: core - - *: "Interpret numbers when sorting" - - - *: "Як враховувати числа при сортуваннi" - - - *: "Як враховувати числа при сортуваннi" - - - - id: LANG_SORT_INTERPRET_AS_DIGIT - desc: in Settings -> File view - user: core - - *: "As digits" - - - *: "Як цифри" - - - *: "Як цифри" - - - - id: LANG_SORT_INTERPRET_AS_NUMBERS - desc: in Settings -> File view - user: core - - *: "As whole numbers" - - - *: "Як числа" - - - *: "Як числа" - - - - id: LANG_ENABLE_SPEAKER - desc: in Settings -> Sound Settings - user: core - - *: none - speaker: "Enable Speaker" - - - *: none - speaker: "Ввiмкнути Динамiк" - - - *: none - speaker: "Ввiмкнути Динамiк" - - - - id: LANG_TOUCHSCREEN_MODE - desc: in Settings -> General -> Display -> Touchscreen Settings - user: core - - *: none - touchscreen: "Touchscreen Mode" - - - *: none - touchscreen: "Режим Тачскрiну" - - - *: none - touchscreen: "Режим Тачскрiну" - - - - id: LANG_TOUCHSCREEN_GRID - desc: in Settings -> General -> Display -> Touchscreen Settings - user: core - - *: none - touchscreen: "3x3 Grid" - - - *: none - touchscreen: "3x3 Сiтка" - - - *: none - touchscreen: "3 на 3 сiтка" - - - - id: LANG_TOUCHSCREEN_POINT - desc: in Settings -> General -> Display -> Touchscreen Settings - user: core - - *: none - touchscreen: "Absolute Point" - - - *: none - touchscreen: "Абсолютний Центр" - - - *: none - touchscreen: "Абсолютний Центр" - - - - id: LANG_PREVENT_SKIPPING - desc: in Settings -> Playback Settings - user: core - - *: "Prevent Track Skipping" - - - *: "Заборонити пропуск треку" - - - *: "Заборонити пропуск треку" - - - - id: LANG_TIMESTRETCH - desc: timestretch enable - user: core - - *: none - swcodec: "Timestretch" - - - *: none - swcodec: "Розтягування Часу" - - - *: none - swcodec: "Розтягування Часу" - - - - id: LANG_SPEED - desc: timestretch speed - user: core - - *: none - swcodec: "Speed" - - - *: none - swcodec: "Швидкiсть" - - - *: none - swcodec: "Швидкiсть" - - - - id: LANG_TOUCHSCREEN_SETTINGS - desc: in Settings -> General -> Display menu - user: core - - *: none - touchscreen: "Touchscreen Settings" - - - *: none - touchscreen: "Налаштування Тачскрiну" - - - *: none - touchscreen: "Налаштування Тачскрiну" - - - - id: LANG_TOUCHSCREEN_CALIBRATE - desc: in Settings -> General -> Display -> Touchscreen Settings - user: core - - *: none - touchscreen: "Calibrate" - - - *: none - touchscreen: "Калiбрування" - - - *: none - touchscreen: "Калiбрування" - - - - id: LANG_TOUCHSCREEN_RESET_CALIBRATION - desc: in Settings -> General -> Display -> Touchscreen Settings - user: core - - *: none - touchscreen: "Reset Calibration" - - - *: none - touchscreen: "Скинути Калiбрування" - - - *: none - touchscreen: "Скинути Калiбрування" - - - - id: LANG_STATUSBAR_TOP - desc: in Settings -> General -> Display -> statusbar - user: core - - *: "Top" - - - *: "Верх" - - - *: "Верх" - - - - id: LANG_STATUSBAR_BOTTOM - desc: in Settings -> General -> Display -> statusbar - user: core - - *: "Bottom" - - - *: "Низ" - - - *: "Низ" - - - - id: LANG_REMOTE_STATUSBAR - desc: in Settings -> General -> Display -> statusbar - user: core - - *: none - remote: "Remote Statusbar" - - - *: none - remote: "Панель Статусу Пульту" - - - *: none - remote: "Панель Статусу Пульту" - - - - id: LANG_SEMITONE - desc: - user: core - - *: none - pitchscreen: "Semitone" - - - *: none - pitchscreen: "Напiвтон" - - - *: none - pitchscreen: "Напiвтон" - - - - id: LANG_STRETCH_LIMIT - desc: "limit" in pitch screen - user: core - - *: none - pitchscreen: "Limit" - - - *: none - pitchscreen: "Межа" - - - *: none - pitchscreen: "Межа" - - - - id: LANG_PLAYBACK_RATE - desc: "rate" in pitch screen - user: core - - *: none - pitchscreen: "Rate" - - - *: none - pitchscreen: "Оцiнка" - - - *: none - pitchscreen: "Оцiнка" - - +# __________ __ ___. +# Open \______ \ ____ ____ | | _\_ |__ _______ ___ +# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +# \/ \/ \/ \/ \/ +# $Id: ukrainian.lang 21788 2009-07-16 07:00:00Z amiconn $ +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU 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. +# +# Ukrainian language file, translated by: +# - Mykhailo Radzievskyi + + + id: LANG_SET_BOOL_YES + desc: bool true representation + user: core + + *: "Yes" + + + *: "Так" + + + *: "Так" + + + + id: LANG_SET_BOOL_NO + desc: bool false representation + user: core + + *: "No" + + + *: "Нi" + + + *: "Нi" + + + + id: LANG_ON + desc: Used in a lot of places + user: core + + *: "On" + + + *: "Вкл" + + + *: "Ввiмкнути" + + + + id: LANG_OFF + desc: Used in a lot of places + user: core + + *: "Off" + + + *: "Вимк" + + + *: "Вимкнути" + + + + id: LANG_ASK + desc: in settings_menu + user: core + + *: "Ask" + + + *: "Запитати" + + + *: "Запитати" + + + + id: LANG_ALWAYS + desc: used in various places + user: core + + *: "Always" + + + *: "Завжди" + + + *: "Завжди" + + + + id: LANG_NORMAL + desc: in settings_menu + user: core + + *: "Normal" + + + *: "Нормальний" + + + *: "Нормальний" + + + + id: LANG_GAIN + desc: Generic string for gain used in EQ menu and recording screen + user: core + + *: "Gain" + + + *: "Пiдсилення" + + + *: "Пiдсилення" + + + + id: LANG_WAIT + desc: general please wait splash + user: core + + *: "Loading..." + + + *: "Завантаження..." + + + *: "Завантаження" + + + + id: LANG_LOADING_PERCENT + desc: splash number of percents loaded + user: core + + *: "Loading... %d%% done (%s)" + + + *: "Завантаження... %d%% завершено (%s)" + + + *: "" + + + + id: LANG_SCANNING_DISK + desc: when booting up and rebuilding the cache and calculating free space + user: core + + *: "Scanning disk..." + + + *: "Сканування диску..." + + + *: "Сканування диску" + + + + id: LANG_SHUTTINGDOWN + desc: in main menu + user: core + + *: "Shutting down..." + + + *: "Вимкнення..." + + + *: "Вимкнення" + + + + id: LANG_CANCEL + desc: Visual confirmation of canceling a changed setting + user: core + + *: "Cancelled" + + + *: "Вiдмiнено" + + + *: "Вiдмiнено" + + + + id: LANG_FAILED + desc: Something failed. To be appended after actions + user: core + + *: "Failed" + + + *: "Помилка" + + + *: "Помилка" + + + + id: LANG_CHANNELS + desc: in sound_settings + user: core + + *: "Channels" + + + *: "Канали" + + + *: "Канали" + + + + id: LANG_RESET_ASK + desc: confirm to reset settings + user: core + + *: "Are You Sure?" + + + *: "Ви Впевненi?" + + + *: "Ви Впевненi?" + + + + id: LANG_CONFIRM_WITH_BUTTON + desc: Generic string to use to confirm + user: core + + *: "PLAY = Yes" + iriverh100,iriverh120,iriverh300: "NAVI = Yes" + samsungyh*,ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*: "SELECT = Yes" + archosplayer: "(PLAY/STOP)" + vibe500: "OK = Yes" + + + *: "ВIДТВОР. = Так" + iriverh100,iriverh120,iriverh300: "НАВIГ. = Так" + samsungyh*,ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*: "ВИБIР = Так" + archosplayer: "(ВIДТВОР./СТОП)" + vibe500: "OK = Так" + + + *: "" + + + + id: LANG_CANCEL_WITH_ANY + desc: Generic string to use to cancel + user: core + + *: "Any Other = No" + archosplayer: none + + + *: "Будь-яка Iнша Кнопка = Нi" + archosplayer: none + + + *: "" + archosplayer: none + + + + id: LANG_ROCKBOX_TITLE + desc: main menu title + user: core + + *: "Rockbox" + + + *: "Рокбокс" + + + *: "Рокбокс" + + + + id: LANG_BOOKMARK_MENU_RECENT_BOOKMARKS + desc: in the main menu + user: core + + *: "Recent Bookmarks" + + + *: "Останнi Закладки" + + + *: "Останнi Закладки" + + + + id: LANG_DIR_BROWSER + desc: main menu title + user: core + + *: "Files" + + + *: "Файли" + + + *: "Файли" + + + + id: LANG_TAGCACHE + desc: in the main menu and the settings menu + user: core + + *: "Database" + + + *: "База Даних" + + + *: "База Даних" + + + + id: LANG_NOW_PLAYING + desc: in the main menu + user: core + + *: "Now Playing" + + + *: "Вiдтворення" + + + *: "Вiдтворення" + + + + id: LANG_RESUME_PLAYBACK + desc: in the main menu + user: core + + *: "Resume Playback" + + + *: "Продовжити Вiдтворення" + + + *: "Продовжити Вiдтворення" + + + + id: LANG_SETTINGS + desc: in main menu and visual confirmation after settings reset + user: core + + *: "Settings" + + + *: "Налаштування" + + + *: "Налаштування" + + + + id: LANG_RECORDING + desc: in the main menu + user: core + + *: none + recording: "Recording" + + + *: none + recording: "Запис" + + + *: none + recording: "Запис" + + + + id: LANG_FM_RADIO + desc: in the main menu + user: core + + *: none + radio: "FM Radio" + + + *: none + radio: "ФМ Радiо" + + + *: none + radio: "ФМ Радiо" + + + + id: LANG_PLAYLISTS + desc: in the main menu and file view setting + user: core + + *: "Playlists" + + + *: "Списки Вiдтворення" + + + *: "Списки Вiдтворення" + + + + id: LANG_PLUGINS + desc: in the main menu + user: core + + *: "Plugins" + + + *: "Плагiни" + + + *: "Плагiни" + + + + id: LANG_SYSTEM + desc: in the main menu and settings menu + user: core + + *: "System" + + + *: "Система" + + + *: "Система" + + + + id: LANG_BOOKMARK_SELECT_BOOKMARK + desc: bookmark selection list title + user: core + + *: "Select Bookmark" + + + *: "Обрати Закладку" + + + *: "Обрати Закладку" + + + + id: LANG_BOOKMARK_DONT_RESUME + desc: top item in the list when asking user about bookmark auto load + user: core + + *: "" + + + *: "<Не Продовжувати>" + + + *: "Не Продовжувати" + + + + id: LANG_BOOKMARK_SHUFFLE + desc: bookmark selection list, bookmark enables shuffle + user: core + + *: ", Shuffle" + + + *: ", Перемiшування" + + + *: "" + + + + id: LANG_BOOKMARK_INVALID + desc: bookmark selection list, bookmark couldn't be parsed + user: core + + *: "" + + + *: "<Помилкова Закладка>" + + + *: "Помилкова Закладка" + + + + id: LANG_BOOKMARK_CONTEXT_MENU + desc: bookmark selection list context menu + user: core + + *: "Bookmark Actions" + + + *: "Дiя над Закладками" + + + *: "Дiя над Закладками" + + + + id: LANG_BOOKMARK_CONTEXT_RESUME + desc: bookmark context menu, resume this bookmark + user: core + + *: "Resume" + + + *: "Продовжити" + + + *: "Продовжити" + + + + id: LANG_BOOKMARK_CONTEXT_DELETE + desc: bookmark context menu, delete this bookmark + user: core + + *: "Delete" + + + *: "Видалити" + + + *: "Видалити" + + + + id: LANG_AUTO_BOOKMARK_QUERY + desc: prompt for user to decide to create an bookmark + user: core + + *: "Create a Bookmark?" + + + *: "Створити Закладку?" + + + *: "Створити Закладку?" + + + + id: LANG_BOOKMARK_CREATE_SUCCESS + desc: Indicates bookmark was successfully created + user: core + + *: "Bookmark Created" + + + *: "Закладку Створено" + + + *: "Закладку Створено" + + + + id: LANG_BOOKMARK_CREATE_FAILURE + desc: Indicates bookmark was not created + user: core + + *: "Bookmark Failed!" + + + *: "Помилка Закладки!" + + + *: "Помилка закладки!" + + + + id: LANG_BOOKMARK_LOAD_EMPTY + desc: Indicates bookmark was empty + user: core + + *: "Bookmark Empty" + + + *: "Закладка Порожня" + + + *: "Закладка Порожня" + + + + id: LANG_SOUND_SETTINGS + desc: in the main menu + user: core + + *: "Sound Settings" + + + *: "Налаштування Звуку" + + + *: "Налаштування Звуку" + + + + id: LANG_VOLUME + desc: in sound_settings + user: core + + *: "Volume" + + + *: "Гучнiсть" + + + *: "Гучнiсть" + + + + id: LANG_BASS + desc: in sound_settings + user: core + + *: "Bass" + + + *: "Бас" + + + *: "Бас" + + + + id: LANG_TREBLE + desc: in sound_settings + user: core + + *: "Treble" + + + *: "Високi" + + + *: "Високi" + + + + id: LANG_BALANCE + desc: in sound_settings + user: core + + *: "Balance" + + + *: "Баланс" + + + *: "Баланс" + + + + id: LANG_CHANNEL_CONFIGURATION + desc: in sound_settings + user: core + + *: "Channel Configuration" + + + *: "Конфiгурацiя Каналiв" + + + *: "Конфiгурацiя Каналiв" + + + + id: LANG_CHANNEL_STEREO + desc: in sound_settings + user: core + + *: "Stereo" + + + *: "Стерео" + + + *: "Стерео" + + + + id: LANG_CHANNEL_MONO + desc: in sound_settings + user: core + + *: "Mono" + + + *: "Моно" + + + *: "Моно" + + + + id: LANG_CHANNEL_CUSTOM + desc: in sound_settings + user: core + + *: "Custom" + + + *: "Детальне Налаштування" + + + *: "Детальне Налаштування" + + + + id: LANG_CHANNEL_LEFT + desc: in sound_settings + user: core + + *: "Mono Left" + + + *: "Лiве Моно" + + + *: "Лiве Моно" + + + + id: LANG_CHANNEL_RIGHT + desc: in sound_settings + user: core + + *: "Mono Right" + + + *: "Праве Моно" + + + *: "Праве Моно" + + + + id: LANG_CHANNEL_LEFTRIGHT + desc: in sound_settings + user: core + + *: none + recording_swcodec: "Mono Left + Right" + + + *: none + recording_swcodec: "Моно Лiве+Праве" + + + *: none + recording_swcodec: "Моно Лiве плюс Праве" + + + + id: LANG_CHANNEL_KARAOKE + desc: in sound_settings + user: core + + *: "Karaoke" + + + *: "Караоке" + + + *: "Караоке" + + + + id: LANG_STEREO_WIDTH + desc: in sound_settings + user: core + + *: "Stereo Width" + + + *: "Ширина Стерео" + + + *: "Ширина Стерео" + + + + id: LANG_CROSSFEED + desc: in sound settings + user: core + + *: none + swcodec: "Crossfeed" + + + *: none + swcodec: "Зменшення Стерео" + + + *: none + swcodec: "Зменшення Стерео" + + + + id: LANG_CROSSFEED_DIRECT_GAIN + desc: in crossfeed settings + user: core + + *: none + swcodec: "Direct Gain" + + + *: none + swcodec: "Пряме Пiдсилення" + + + *: none + swcodec: "Пряме Пiдсилення" + + + + id: LANG_CROSSFEED_CROSS_GAIN + desc: in crossfeed settings + user: core + + *: none + swcodec: "Cross Gain" + + + *: none + swcodec: "Накладання" + + + *: none + swcodec: "Накладання" + + + + id: LANG_CROSSFEED_HF_ATTENUATION + desc: in crossfeed settings + user: core + + *: none + swcodec: "High-Frequency Attenuation" + + + *: none + swcodec: "Зменшення Високих Частот" + + + *: none + swcodec: "Зменшення Високих Частот" + + + + id: LANG_CROSSFEED_HF_CUTOFF + desc: in crossfeed settings + user: core + + *: none + swcodec: "High-Frequency Cutoff" + + + *: none + swcodec: "Зрiз Високих Частот" + + + *: none + swcodec: "Зрiз Високих Частот" + + + + id: LANG_EQUALIZER + desc: in the sound settings menu + user: core + + *: none + swcodec: "Equalizer" + + + *: none + swcodec: "Еквалайзер" + + + *: none + swcodec: "Еквалайзер" + + + + id: LANG_EQUALIZER_ENABLED + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Enable EQ" + + + *: none + swcodec: "Ввiмкнути Еквалайзер" + + + *: none + swcodec: "Ввiмкнути Еквалайзер" + + + + id: LANG_EQUALIZER_GRAPHICAL + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Graphical EQ" + + + *: none + swcodec: "Графiчний Еквалайзер" + + + *: none + swcodec: "Графiчний Еквалайзер" + + + + id: LANG_EQUALIZER_PRECUT + desc: in eq settings + user: core + + *: none + swcodec: "Precut" + + + *: none + swcodec: "Поперед. Обрiзання" + + + *: none + swcodec: "Поперед. Обрiзання" + + + + id: LANG_EQUALIZER_GAIN + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Simple EQ Settings" + + + *: none + swcodec: "Простi Налаштування Еквалайзеру" + + + *: none + swcodec: "Простi Налаштування Еквалайзеру" + + + + id: LANG_EQUALIZER_ADVANCED + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Advanced EQ Settings" + + + *: none + swcodec: "Розширеннi Налаштування Еквалайзеру" + + + *: none + swcodec: "Розширеннi Налаштування Еквалайзеру" + + + + id: LANG_EQUALIZER_SAVE + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Save EQ Preset" + + + *: none + swcodec: "Зберегти Налаштування" + + + *: none + swcodec: "Зберегти Налаштування Еквалайзеру" + + + + id: LANG_EQUALIZER_BROWSE + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Browse EQ Presets" + + + *: none + swcodec: "Завантажити Налаштування" + + + *: none + swcodec: "Завантажити Налаштування Еквалайзеру" + + + + id: LANG_EQUALIZER_EDIT_MODE + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Edit mode: %s" + + + *: none + swcodec: "Режим редагування: %s" + + + *: none + swcodec: "" + + + + id: LANG_EQUALIZER_GAIN_ITEM + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "%d Hz Band Gain" + + + *: none + swcodec: "%d Гц" + + + *: none + swcodec: "Герц" + + + + id: LANG_EQUALIZER_BAND_LOW_SHELF + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Low Shelf Filter" + + + *: none + swcodec: "Фiльтр Низьких Частот" + + + *: none + swcodec: "Фiльтр Низьких Частот" + + + + id: LANG_EQUALIZER_BAND_PEAK + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Peak Filter %d" + + + *: none + swcodec: "Пiковий Фiльтр %d" + + + *: none + swcodec: "Пiковий Фiльтр" + + + + id: LANG_EQUALIZER_BAND_HIGH_SHELF + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "High Shelf Filter" + + + *: none + swcodec: "Фiльтр Високих Частот" + + + *: none + swcodec: "Фiльтр Високих Частот" + + + + id: LANG_EQUALIZER_BAND_CUTOFF + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Cutoff Frequency" + + + *: none + swcodec: "Частота Зрiзу" + + + *: none + swcodec: "Частота Зрiзу" + + + + id: LANG_EQUALIZER_BAND_CENTER + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Centre Frequency" + + + *: none + swcodec: "Центральна Частота" + + + *: none + swcodec: "Центральна Частота" + + + + id: LANG_EQUALIZER_BAND_Q + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Q" + + + *: none + swcodec: "Q" + + + *: none + swcodec: "Q" + + + + id: LANG_DITHERING + desc: in the sound settings menu + user: core + + *: none + swcodec: "Dithering" + + + *: none + swcodec: "Зглажування" + + + *: none + swcodec: "Зглажування" + + + + id: LANG_LOUDNESS + desc: in sound_settings + user: core + + *: none + masf: "Loudness" + + + *: none + masf: "Середнi Частоти" + + + *: none + masf: "Середнi Частоти" + + + + id: LANG_AUTOVOL + desc: in sound_settings + user: core + + *: none + masf: "Auto Volume" + + + *: none + masf: "Автогучнiсть" + + + *: none + masf: "Автогучнiсть" + + + + id: LANG_DECAY + desc: in sound_settings + user: core + + *: none + masf: "AV Decay Time" + + + *: none + masf: "Час затухання автогучностi" + + + *: none + masf: "" + + + + id: LANG_SUPERBASS + desc: in sound settings + user: core + + *: none + masf: "Super Bass" + + + *: none + masf: "Супер Бас" + + + *: none + masf: "Супер Бас" + + + + id: LANG_MDB_ENABLE + desc: in sound settings + user: core + + *: none + masf: "MDB Enable" + + + *: none + masf: "Ввiмкнути MDB" + + + *: none + masf: "Ввiмкнути MDB" + + + + id: LANG_MDB_STRENGTH + desc: in sound settings + user: core + + *: none + masf: "MDB Strength" + + + *: none + masf: "Сила MDB" + + + *: none + masf: "Сила MDB" + + + + id: LANG_MDB_HARMONICS + desc: in sound settings + user: core + + *: none + masf: "MDB Harmonics" + + + *: none + masf: "Гармонiки MDB" + + + *: none + masf: "Гармонiки MDB" + + + + id: LANG_MDB_CENTER + desc: in sound settings + user: core + + *: none + masf: "MDB Centre Frequency" + + + *: none + masf: "Центральна частота MDB" + + + *: none + masf: "Центральна частота MDB" + + + + id: LANG_MDB_SHAPE + desc: in sound settings + user: core + + *: none + masf: "MDB Shape" + + + *: none + masf: "Фома сигналу MDB" + + + *: none + masf: "Фома сигналу MDB" + + + + id: LANG_GENERAL_SETTINGS + desc: in the main menu + user: core + + *: "General Settings" + + + *: "Головнi Налаштування" + + + *: "Головнi Налаштування" + + + + id: LANG_PLAYBACK + desc: in settings_menu() + user: core + + *: "Playback Settings" + + + *: "Налаштування Вiдтворення" + + + *: "Налаштування Вiдтворення" + + + + id: LANG_SHUFFLE + desc: in settings_menu + user: core + + *: "Shuffle" + + + *: "Перемiшувати" + + + *: "Перемiшувати" + + + + id: LANG_REPEAT + desc: in settings_menu + user: core + + *: "Repeat" + + + *: "Повторювати" + + + *: "Повторювати" + + + + id: LANG_ALL + desc: generic string used both in dir file filter and repeat mode selection + user: core + + *: "All" + + + *: "Всi" + + + *: "Всi" + + + + id: LANG_REPEAT_ONE + desc: repeat one song + user: core + + *: "One" + + + *: "Один" + + + *: "Один" + + + + id: LANG_REPEAT_AB + desc: repeat range from point A to B + user: core + + *: "A-B" + + + *: "A-B" + + + *: "A-B" + + + + id: LANG_PLAY_SELECTED + desc: in settings_menu + user: core + + *: "Play Selected First" + + + *: "Вiдтворювати починаючи з обраного файлу" + + + *: "Вiдтворювати починаючи з обраного файлу" + + + + id: LANG_WIND_MENU + desc: in the playback sub menu + user: core + + *: "Fast-Forward/Rewind" + + + *: "Швидкiсть перемотки" + + + *: "Швидкiсть перемотки" + + + + id: LANG_FFRW_STEP + desc: in settings_menu + user: core + + *: "FF/RW Min Step" + + + *: "Мiнiмальний Крок Перемотки" + + + *: "Мiнiмальний Крок Перемотки" + + + + id: LANG_FFRW_ACCEL + desc: in settings_menu + user: core + + *: "FF/RW Accel" + + + *: "Прискорена Перемотка" + + + *: "Прискорена Перемота" + + + + id: LANG_MP3BUFFER_MARGIN + desc: MP3 buffer margin time + user: core + + *: "Anti-Skip Buffer" + flash_storage: none + + + *: "Буфер Антишоку" + flash_storage: none + + + *: "Буфер Антишоку" + flash_storage: none + + + + id: LANG_FADE_ON_STOP + desc: options menu to set fade on stop or pause + user: core + + *: "Fade on Stop/Pause" + + + *: "Затухання при Зупинцi/Паузi" + + + *: "Затухання при Зупинцi i Паузi" + + + + id: LANG_PARTY_MODE + desc: party mode + user: core + + *: "Party Mode" + + + *: "Режим Вечiрки" + + + *: "Режим Вечiрки" + + + + id: LANG_CROSSFADE + desc: in playback settings + user: core + + *: none + crossfade: "Crossfade" + + + *: none + crossfade: "Накладання" + + + *: none + crossfade: "Накладання" + + + + id: LANG_CROSSFADE_ENABLE + desc: in crossfade settings menu + user: core + + *: none + crossfade: "Enable Crossfade" + + + *: none + crossfade: "Задiяти Накладання" + + + *: none + crossfade: "Задiяти Накладання" + + + + id: LANG_MANTRACKSKIP + desc: in crossfade settings + user: core + + *: none + crossfade: "Manual Track Skip Only" + + + *: none + crossfade: "Тiльки пропуск треку" + + + *: none + crossfade: "Тiльки пропуск треку" + + + + id: LANG_SHUFFLE_TRACKSKIP + desc: in settings_menu + user: core + + *: none + crossfade: "Shuffle or Manual Track Skip" + + + *: none + crossfade: "Змiшування i пропуск треку" + + + *: none + crossfade: "Змiшування i пропуск треку" + + + + id: LANG_CROSSFADE_FADE_IN_DELAY + desc: in crossfade settings menu + user: core + + *: none + crossfade: "Fade-In Delay" + + + *: none + crossfade: "Затримка Зростання" + + + *: none + crossfade: "Затримка Зростання" + + + + id: LANG_CROSSFADE_FADE_IN_DURATION + desc: in crossfade settings menu + user: core + + *: none + crossfade: "Fade-In Duration" + + + *: none + crossfade: "Тривалiсть Зростання" + + + *: none + crossfade: "Тривалiсть Зростання" + + + + id: LANG_CROSSFADE_FADE_OUT_DELAY + desc: in crossfade settings menu + user: core + + *: none + crossfade: "Fade-Out Delay" + + + *: none + crossfade: "Затримка Затухання" + + + *: none + crossfade: "Затримка Затухання" + + + + id: LANG_CROSSFADE_FADE_OUT_DURATION + desc: in crossfade settings menu + user: core + + *: none + crossfade: "Fade-Out Duration" + + + *: none + crossfade: "Тривалiсть Затухання" + + + *: none + crossfade: "Тривалiсть Затухання" + + + + id: LANG_CROSSFADE_FADE_OUT_MODE + desc: in crossfade settings menu + user: core + + *: none + crossfade: "Fade-Out Mode" + + + *: none + crossfade: "Режим Затухання" + + + *: none + crossfade: "Режим Затухання" + + + + id: LANG_MIX + desc: in playback settings, crossfade option + user: core + + *: none + crossfade: "Mix" + + + *: none + crossfade: "Змiшування" + + + *: none + crossfade: "Змiшування" + + + + id: LANG_REPLAYGAIN + desc: in replaygain + user: core + + *: "Replaygain" + + + *: "Пiдсилення" + + + *: "Пiдсилення" + + + + id: LANG_REPLAYGAIN_NOCLIP + desc: in replaygain + user: core + + *: none + swcodec: "Prevent Clipping" + + + *: none + swcodec: "Запобiгати Перевантаженню" + + + *: none + swcodec: "Запобiгати Перевантаженню" + + + + id: LANG_REPLAYGAIN_MODE + desc: in replaygain + user: core + + *: "Replaygain Type" + + + *: "Тип Пiдсилення" + + + *: "Тип Пiдсилення" + + + + id: LANG_ALBUM_GAIN + desc: in replaygain + user: core + + *: "Album Gain" + + + *: "Пiдсилення Альбому" + + + *: "Пiдсилення Альбому" + + + + id: LANG_TRACK_GAIN + desc: in replaygain + user: core + + *: "Track Gain" + + + *: "Пiдсилення Треку" + + + *: "Пiдсилення Треку" + + + + id: LANG_SHUFFLE_GAIN + desc: use track gain if shuffle mode is on, album gain otherwise + user: core + + *: "Track Gain if Shuffling" + + + *: "Пiдсилення Треку при Випадковому Вiдтвореннi" + + + *: "Пiдсилення Треку при Випадковому Вiдтвореннi" + + + + id: LANG_REPLAYGAIN_PREAMP + desc: in replaygain settings + user: core + + *: "Pre-amp" + + + *: "Поперед. Пiдсилення" + + + *: "Поперед. Пiдсилення" + + + + id: LANG_BEEP + desc: in playback settings + user: core + + *: none + swcodec: "Track Skip Beep" + + + *: none + swcodec: "Сигнал Пропуску Треку" + + + *: none + swcodec: "Сигнал Пропуску Треку" + + + + id: LANG_WEAK + desc: in beep volume in playback settings + user: core + + *: none + swcodec: "Weak" + + + *: none + swcodec: "Слабкий" + + + *: none + swcodec: "Слабкий" + + + + id: LANG_MODERATE + desc: in beep volume in playback settings + user: core + + *: none + swcodec: "Moderate" + + + *: none + swcodec: "Помiрний" + + + *: none + swcodec: "Помiрний" + + + + id: LANG_STRONG + desc: in beep volume in playback settings + user: core + + *: none + swcodec: "Strong" + + + *: none + swcodec: "Сильний" + + + *: none + swcodec: "Сильний" + + + + id: LANG_SPDIF_ENABLE + desc: in playback settings menu. enable/disable the optical out + user: core + + *: none + spdif_power: "Optical Output" + + + *: none + spdif_power: "Оптичний Вихiд" + + + *: none + spdif_power: "Оптичний Вихiд" + + + + id: LANG_NEXT_FOLDER + desc: in settings_menu. Should we allow move to next/prev folder from last/first track of current one + user: core + + *: "Auto-Change Directory" + + + *: "Автозмiна Папки" + + + *: "Автозмiна Папки" + + + + id: LANG_RANDOM + desc: random folder + user: core + + *: "Random" + + + *: "Випадково" + + + *: "Випадково" + + + + id: LANG_AUDIOSCROBBLER + desc: "Last.fm Log" in the playback menu + user: core + + *: "Last.fm Log" + + + *: "Звiт по Last.fm" + + + *: "Звiт по Last.fm" + + + + id: LANG_CUESHEET_ENABLE + desc: cuesheet support option + user: core + + *: "Cuesheet Support" + + + *: "Пiдтримка Cuesheet" + + + *: "Пiдтримка Cuesheet" + + + + id: LANG_HEADPHONE_UNPLUG + desc: in settings_menu. + user: core + + *: none + headphone_detection: "Pause on Headphone Unplug" + + + *: none + headphone_detection: "Пауза при Вiдключеннi Навушникiв" + + + *: none + headphone_detection: "Пауза при Вiдключеннi Навушникiв" + + + + id: LANG_HEADPHONE_UNPLUG_RESUME + desc: in pause_phones_menu. + user: core + + *: none + headphone_detection: "Pause and Resume" + + + *: none + headphone_detection: "Пауза i Продовження" + + + *: none + headphone_detection: "Пауза i Продовження" + + + + id: LANG_HEADPHONE_UNPLUG_RW + desc: in pause_phones_menu. + user: core + + *: none + headphone_detection: "Duration to Rewind" + + + *: none + headphone_detection: "Тривалiсть Перемотки" + + + *: none + headphone_detection: "Тривалiсть Перемотки" + + + + id: LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME + desc: in pause_phones_menu. + user: core + + *: none + headphone_detection: "Disable resume on startup if phones unplugged" + + + *: none + headphone_detection: "Вiдключити вiдтворення при запуску, якщо навушники вiдключено" + + + *: none + headphone_detection: "Вiдключити вiдтворення при запуску, якщо навушники вiдключено" + + + + id: LANG_FILE + desc: in settings_menu() + user: core + + *: "File View" + + + *: "Перегляд Файлiв" + + + *: "Перегляд Файлiв" + + + + id: LANG_SORT_CASE + desc: in settings_menu + user: core + + *: "Sort Case Sensitive" + + + *: "Сортувати з Врахуванням Регiстру" + + + *: "Сортувати з Врахуванням Регiстру"" + + + + id: LANG_SORT_DIR + desc: browser sorting setting + user: core + + *: "Sort Directories" + + + *: "Сортувати Папки" + + + *: "Сортувати Папки" + + + + id: LANG_SORT_FILE + desc: browser sorting setting + user: core + + *: "Sort Files" + + + *: "Сортувати Файли" + + + *: "Сортувати Файли" + + + + id: LANG_SORT_ALPHA + desc: browser sorting setting + user: core + + *: "Alphabetical" + + + *: "За Алфавiтом" + + + *: "За Алфавiтом" + + + + id: LANG_SORT_DATE + desc: browser sorting setting + user: core + + *: "By Date" + + + *: "За Датою" + + + *: "За Датою" + + + + id: LANG_SORT_DATE_REVERSE + desc: browser sorting setting + user: core + + *: "By Newest Date" + + + *: "За Останньою Датою" + + + *: "За Останньою Датою" + + + + id: LANG_SORT_TYPE + desc: browser sorting setting + user: core + + *: "By Type" + + + *: "За Типом" + + + *: "За Типом" + + + + id: LANG_FILTER + desc: setting name for dir filter + user: core + + *: "Show Files" + + + *: "Показати Файли" + + + *: "Показати Файли" + + + + id: LANG_FILTER_SUPPORTED + desc: show all file types supported by Rockbox + user: core + + *: "Supported" + + + *: "Що Пiдтримуються" + + + *: "Що Пiдтримуються" + + + + id: LANG_FILTER_MUSIC + desc: show only music-related files + user: core + + *: "Music" + + + *: "Музичнi" + + + *: "Музичнi" + + + + id: LANG_FOLLOW + desc: in settings_menu + user: core + + *: "Follow Playlist" + + + *: "Йти за Списком Вiдтворення" + + + *: "Йти за Списком Вiдтворення" + + + + id: LANG_SHOW_PATH + desc: in settings_menu + user: core + + *: "Show Path" + + + *: "Показати Шлях" + + + *: "Показати Шлях" + + + + id: LANG_SHOW_PATH_CURRENT + desc: in show path menu + user: core + + *: "Current Directory Only" + + + *: "Тiльки ця Папка" + + + *: "Тiльки ця Папка" + + + + id: LANG_DISPLAY_FULL_PATH + desc: track display options + user: core + + *: "Full Path" + + + *: "Повний Шлях" + + + *: "Повний Шлях" + + + + id: LANG_BUILDING_DATABASE + desc: splash database building progress + user: core + + *: "Building database... %d found (OFF to return)" + iriverh100,iriverh120,iriverh300: "Building database... %d found (STOP to return)" + ipod*: "Building database... %d found (PREV to return)" + iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)" + iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" + gogearsa9200: "Building database... %d found (REW to return)" + + + *: "Створення Бази Даних ... %d знайдено (ВИМК. для вiдмiни)" + iriverh100,iriverh120,iriverh300: "Створення Бази Даних... %d знайдено (СТОП для вiдмiни)" + ipod*: "Створення Бази Даних... %d знайдено (ПОПЕРЕД. для вiдмiни)" + iaudiox5,iaudiom5,gigabeat*,mrobe100: "Створення Бази Даних... %d знайдено (ЛIВО для вiдмiни)" + iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Створення Бази Даних... %d знайдено (ПОПЕРЕД. для вiдмiни)" + gogearsa9200: "Створення Бази Даних... %d знайденр (ПЕРЕМ. для вiдмiни)" + + + *: "Знайдено записiв в базi даних" + + + + id: LANG_TAGCACHE_RAM + desc: in tag cache settings + user: core + + *: none + tc_ramcache: "Load to RAM" + + + *: none + tc_ramcache: "Завантажити до ОЗП" + + + *: none + tc_ramcache: "Завантажити до ОЗП" + + + + id: LANG_TAGCACHE_AUTOUPDATE + desc: in tag cache settings + user: core + + *: "Auto Update" + + + *: "Автооновлення" + + + *: "Автооновлення" + + + + id: LANG_TAGCACHE_FORCE_UPDATE + desc: in tag cache settings + user: core + + *: "Initialize Now" + + + *: "Створити Зараз" + + + *: "Створити Зараз" + + + + id: LANG_TAGCACHE_UPDATE + desc: in tag cache settings + user: core + + *: "Update Now" + + + *: "Оновити Зараз" + + + *: "Оновити Зараз" + + + + id: LANG_RUNTIMEDB_ACTIVE + desc: in settings_menu. + user: core + + *: "Gather Runtime Data" + + + *: "Збирати Данi про Треки" + + + *: "Збирати Данi про Треки" + + + + id: LANG_TAGCACHE_EXPORT + desc: in tag cache settings + user: core + + *: "Export Modifications" + + + *: "Експорт Змiн" + + + *: "Експорт Змiн" + + + + id: LANG_TAGCACHE_IMPORT + desc: in tag cache settings + user: core + + *: "Import Modifications" + + + *: "Iмпорт Змiн" + + + *: "Iмпорт Змiн" + + + + id: LANG_TAGCACHE_FORCE_UPDATE_SPLASH + desc: in tag cache settings + user: core + + *: "Updating in background" + + + *: "Оновлення у Фонi" + + + *: "Оновлення у Фонi" + + + + id: LANG_TAGCACHE_INIT + desc: while initializing tagcache on boot + user: core + + *: "Committing database" + + + *: "Запис Бази Даних" + + + *: "Запис Бази Даних" + + + + id: LANG_TAGCACHE_BUSY + desc: when trying to shutdown and tagcache is committing + user: core + + *: "Database is not ready" + + + *: "База Даних не Готова" + + + *: "База Даних не Готова" + + + + id: LANG_TAGNAVI_ALL_TRACKS + desc: "" entry in tag browser + user: core + + *: "" + + + *: "<Всi треки>" + + + *: "Всi треки" + + + + id: LANG_DISPLAY + desc: in settings_menu() + user: core + + *: "Display" + + + *: "Дисплей" + + + *: "Дисплей" + + + + id: LANG_CUSTOM_FONT + desc: in setting_menu() + user: core + + *: none + lcd_bitmap: "Font" + + + *: none + lcd_bitmap: "Шрифт" + + + *: none + lcd_bitmap: "Шрифт" + + + + id: LANG_WHILE_PLAYING + desc: in settings_menu() + user: core + + *: "While Playing Screen" + + + *: "Екран пiд час вiдтворення" + + + *: "Екран пiд час вiдтворення" + + + + id: LANG_REMOTE_WHILE_PLAYING + desc: in settings_menu() + user: core + + *: none + remote: "Remote While Playing Screen" + + + *: none + remote: "Екран пульту пiд час вiдтворення" + + + *: none + remote: "Екран пульту пiд час вiдтворення" + + + + id: LANG_LCD_MENU + desc: in the display sub menu + user: core + + *: "LCD Settings" + + + *: "Налаштування Екрану" + + + *: "Налаштування Екрану" + + + + id: LANG_BACKLIGHT + desc: in settings_menu + user: core + + *: "Backlight" + + + *: "Пiдсвiтка" + + + *: "Пiдсвiтка" + + + + id: LANG_BACKLIGHT_ON_WHEN_CHARGING + desc: in display_settings_menu, backlight timeout with charger connected + user: core + + *: none + charging: "Backlight (While Plugged In)" + + + *: none + charging: "Пiдсвiтка при зовнiшньому живленнi" + + + *: none + charging: "Пiдсвiтка при зовнiшньому живленнi" + + + + id: LANG_BACKLIGHT_ON_BUTTON_HOLD + desc: in lcd settings + user: core + + *: none + hold_button: "Backlight on Hold" + + + *: none + hold_button: "Пiдсвiтка при Блокуваннi" + + + *: none + hold_button: "Пiдсвiтка при Блокуваннi" + + + + id: LANG_CAPTION_BACKLIGHT + desc: in settings_menu + user: core + + *: "Caption Backlight" + + + *: "Пiдсвiтка при Змiнi Назви" + + + *: "Пiдсвiтка при Змiнi Назви" + + + + id: LANG_BACKLIGHT_FADE_IN + desc: in settings_menu + user: core + + *: none + backlight_fade*: "Backlight Fade In" + + + *: none + backlight_fade*: "Зростання пiдсвiтки" + + + *: none + backlight_fade*: "Зростання пiдсвiтки" + + + + id: LANG_BACKLIGHT_FADE_OUT + desc: in settings_menu + user: core + + *: none + backlight_fade*: "Backlight Fade Out" + + + *: none + backlight_fade*: "Затухання пiдсвiтки" + + + *: none + backlight_fade*: "Затухання пiдсвiтки" + + + + id: LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS + desc: Backlight behaviour setting + user: core + + *: "First Buttonpress Enables Backlight Only" + + + *: "Перше натискання кнопки тiльки вмик. пiдсвiтку" + + + *: "Перше натискання кнопки тiльки вмика пiдсвiтку" + + + + id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF + desc: In display settings, time to switch LCD chip into power saving state + user: core + + *: none + lcd_sleep: "Sleep (After Backlight Off)" + + + *: none + lcd_sleep: "Режим Сну (пiсля вимкнення пiдсвiтки)" + + + *: none + lcd_sleep: "Режим Сну пiсля вимкнення пiдсвiтки" + + + + id: LANG_NEVER + desc: in lcd settings + user: core + + *: none + lcd_sleep: "Never" + + + *: none + lcd_sleep: "Нiколи" + + + *: none + lcd_sleep: "Нiколи" + + + + id: LANG_BRIGHTNESS + desc: in settings_menu + user: core + + *: none + backlight_brightness: "Brightness" + + + *: none + backlight_brightness: "Яскравiсть" + + + *: none + backlight_brightness: "Яскравiсть" + + + + id: LANG_CONTRAST + desc: in settings_menu + user: core + + *: "Contrast" + + + *: "Контраст" + + + *: "Контраст" + + + + id: LANG_INVERT + desc: in settings_menu + user: core + + *: none + lcd_invert,remote_lcd_invert: "LCD Mode" + + + *: none + lcd_invert,remote_lcd_invert: "Режим Екрану" + + + *: none + lcd_invert,remote_lcd_invert: "Режим Екрану" + + + + id: LANG_INVERT_LCD_INVERSE + desc: in settings_menu + user: core + + *: none + lcd_invert,remote_lcd_invert: "Inverse" + + + *: none + lcd_invert,remote_lcd_invert: "Iнверсний" + + + *: none + lcd_invert,remote_lcd_invert: "Iнверсний" + + + + id: LANG_FLIP_DISPLAY + desc: in settings_menu, option to turn display+buttos by 180 degrees + user: core + + *: none + lcd_bitmap: "Upside Down" + + + *: none + lcd_bitmap: "Догори ногами" + + + *: none + lcd_bitmap: "Догори ногами" + + + + id: LANG_INVERT_CURSOR + desc: in settings_menu + user: core + + *: none + lcd_bitmap: "Line Selector Type" + + + *: none + lcd_bitmap: "Тип Курсору" + + + *: none + lcd_bitmap: "Тип Курсору" + + + + id: LANG_INVERT_CURSOR_POINTER + desc: in settings_menu + user: core + + *: none + lcd_bitmap: "Pointer" + + + *: none + lcd_bitmap: "Стрiлочка" + + + *: none + lcd_bitmap: "Стрiлочка" + + + + id: LANG_INVERT_CURSOR_BAR + desc: in settings_menu + user: core + + *: none + lcd_bitmap: "Bar (Inverse)" + + + *: none + lcd_bitmap: "Iнверсний Курсор" + + + *: none + lcd_bitmap: "Iнверсний Курсор" + + + + id: LANG_CLEAR_BACKDROP + desc: text for LCD settings menu + user: core + + *: none + lcd_non-mono: "Clear Backdrop" + + + *: none + lcd_non-mono: "Очистити Фон" + + + *: none + lcd_non-mono: "Очистити Фон" + + + + id: LANG_BACKGROUND_COLOR + desc: menu entry to set the background color + user: core + + *: none + lcd_color: "Background Colour" + + + *: none + lcd_color: "Колiр Фону" + + + *: none + lcd_color: "Колiр Фону" + + + + id: LANG_FOREGROUND_COLOR + desc: menu entry to set the foreground color + user: core + + *: none + lcd_color: "Foreground Colour" + + + *: none + lcd_color: "Колiр Переднього Плану" + + + *: none + lcd_color: "Колiр Переднього Плану" + + + + id: LANG_RESET_COLORS + desc: menu + user: core + + *: none + lcd_color: "Reset Colours" + + + *: none + lcd_color: "Скинути Кольори" + + + *: none + lcd_color: "Скинути Кольори" + + + + id: LANG_COLOR_RGB_LABELS + desc: what to show for the 'R' 'G' 'B' ONE LETTER EACH + user: core + + *: none + lcd_color: "RGB" + + + *: none + lcd_color: "RGB" + + + *: none + lcd_color: "" + + + + id: LANG_COLOR_RGB_VALUE + desc: in color screen + user: core + + *: none + lcd_color: "RGB: %02X%02X%02X" + + + *: none + lcd_color: "RGB: %02X%02X%02X" + + + *: none + lcd_color: "" + + + + id: LANG_COLOR_UNACCEPTABLE + desc: splash when user selects an invalid colour + user: core + + *: none + lcd_color: "Invalid colour" + + + *: none + lcd_color: "Помилка Кольору" + + + *: none + lcd_color: "" + + + + id: LANG_LCD_REMOTE_MENU + desc: in the display sub menu + user: core + + *: none + remote: "Remote-LCD Settings" + + + *: none + remote: "Налаштування Екрану Пульту" + + + *: none + remote: "Налаштування Екрану Пульту" + + + + id: LANG_REDUCE_TICKING + desc: in remote lcd settings menu + user: core + + *: none + remote_ticking: "Reduce Ticking" + + + *: none + remote_ticking: "Знижувати Клацання" + + + *: none + remote_ticking: "Знижувати Клацання" + + + + id: LANG_SHOW_ICONS + desc: in settings_menu + user: core + + *: "Show Icons" + + + *: "Показувати Iконки" + + + *: "Показувати Iконки" + + + + id: LANG_SCROLL_MENU + desc: in display_settings_menu() + user: core + + *: "Scrolling" + + + *: "Прокрутка" + + + *: "Прокрутка" + + + + id: LANG_SCROLL + desc: in settings_menu + user: core + + *: "Scroll Speed Setting Example" + + + *: "Приклад Швидкостi Прокрутки" + + + *: "" + + + + id: LANG_SCROLL_SPEED + desc: in display_settings_menu() + user: core + + *: "Scroll Speed" + + + *: "Швидкiсть Прокрутки" + + + *: "Швидкiсть Прокрутки" + + + + id: LANG_SCROLL_DELAY + desc: Delay before scrolling + user: core + + *: "Scroll Start Delay" + + + *: "Затримка Старту Прокрутки" + + + *: "Затримка Старту Прокрутки" + + + + id: LANG_SCROLL_STEP + desc: Pixels to advance per scroll + user: core + + *: "Scroll Step Size" + + + *: "Величина Кроку Прокрутки" + + + *: "Величина Кроку Прокрутки" + + + + id: LANG_SCROLL_STEP_EXAMPLE + desc: Pixels to advance per scroll + user: core + + *: "Scroll Step Size Setting Example Text" + + + *: "Приклад Тексту Величини Кроку Прокрутки" + + + *: "" + + + + id: LANG_BIDIR_SCROLL + desc: Bidirectional scroll limit + user: core + + *: "Bidirectional Scroll Limit" + + + *: "Обмеження Прокрутки у Два Напрями" + + + *: "Обмеження Прокрутки у Два Напрями" + + + + id: LANG_REMOTE_SCROLL_SETS + desc: "Remote Scrolling Options" Submenu in "Scrolling Options" menu + user: core + + *: none + remote: "Remote Scrolling Options" + + + *: none + remote: "Властивостi Прокрутки на Пультi" + + + *: none + remote: "Властивостi Прокрутки на Пультi" + + + + id: LANG_SCREEN_SCROLL_VIEW + desc: should lines scroll out of the screen + user: core + + *: none + lcd_bitmap: "Screen Scrolls Out Of View" + + + *: none + lcd_bitmap: "Прокрутка Екрану" + + + *: none + lcd_bitmap: "Прокрутка Екрану" + + + + id: LANG_SCREEN_SCROLL_STEP + desc: Pixels to advance per Screen scroll + user: core + + *: none + lcd_bitmap: "Screen Scroll Step Size" + + + *: none + lcd_bitmap: "Крок Прокрутки Екрану" + + + *: none + lcd_bitmap: "Крок Прокрутки Екрану" + + + + id: LANG_SCROLL_PAGINATED + desc: jump to new page when scrolling + user: core + + *: "Paged Scrolling" + + + *: "Прокрутка Сторiнки" + + + *: "Прокрутка Сторiнки" + + + + id: LANG_LISTACCEL_START_DELAY + desc: Delay before list starts accelerating + user: core + + *: "List Acceleration Start Delay" + wheel_acceleration: none + + + *: "Затримка Початку Списку" + wheel_acceleration: none + + + *: "Затримка Початку Списку" + wheel_acceleration: none + + + + id: LANG_LISTACCEL_ACCEL_SPEED + desc: list acceleration speed + user: core + + *: "List Acceleration Speed" + wheel_acceleration: none + + + *: "Прискорення Списку" + wheel_acceleration: none + + + *: "Прискорення Списку" + wheel_acceleration: none + + + + id: LANG_BARS_MENU + desc: in the display sub menu + user: core + + *: none + lcd_bitmap: "Status-/Scrollbar" + + + *: none + lcd_bitmap: "Статус/Прокрутка" + + + *: none + lcd_bitmap: "Статус та Прокрутка" + + + + id: LANG_SCROLL_BAR + desc: display menu, F3 substitute + user: core + + *: none + lcd_bitmap: "Scroll Bar" + + + *: none + lcd_bitmap: "Панель Прокрутки" + + + *: none + lcd_bitmap: "Панель Прокрутки" + + + + id: LANG_STATUS_BAR + desc: display menu, F3 substitute + user: core + + *: none + lcd_bitmap: "Status Bar" + + + *: none + lcd_bitmap: "Панель Статусу" + + + *: none + lcd_bitmap: "Панель Статусу" + + + + id: LANG_BUTTON_BAR + desc: in settings menu + user: core + + *: none + recorder_pad: "Button Bar" + + + *: none + recorder_pad: "Панель Кнопок" + + + *: none + recorder_pad: "Панель Кнопок" + + + + id: LANG_VOLUME_DISPLAY + desc: Volume type title + user: core + + *: none + lcd_bitmap: "Volume Display" + + + *: none + lcd_bitmap: "Вiдображення Гучностi" + + + *: none + lcd_bitmap: "Вiдображення Гучностi" + + + + id: LANG_BATTERY_DISPLAY + desc: Battery type title + user: core + + *: none + lcd_bitmap: "Battery Display" + + + *: none + lcd_bitmap: "Вiдображення Заряду Акумулятора" + + + *: none + lcd_bitmap: "Вiдображення Заряду Акумулятора" + + + + id: LANG_DISPLAY_GRAPHIC + desc: Label for type of icon display + user: core + + *: none + lcd_bitmap: "Graphic" + + + *: none + lcd_bitmap: "Графiчний" + + + *: none + lcd_bitmap: "Графiчний" + + + + id: LANG_DISPLAY_NUMERIC + desc: Label for type of icon display + user: core + + *: none + lcd_bitmap: "Numeric" + + + *: none + lcd_bitmap: "Числовий" + + + *: none + lcd_bitmap: "Числовий" + + + + id: LANG_PM_MENU + desc: in the display menu + user: core + + *: "Peak Meter" + masd: none + + + *: "Рiвень Сигналу" + masd: none + + + *: "Рiвень Сигналу" + masd: none + + + + id: LANG_PM_CLIP_HOLD + desc: in the peak meter menu + user: core + + *: "Clip Hold Time" + masd: none + + + *: "Час Затримки Iндикатора" + masd: none + + + *: "Час Затримки Iндикатора" + masd: none + + + + id: LANG_PM_PEAK_HOLD + desc: in the peak meter menu + user: core + + *: "Peak Hold Time" + masd: none + + + *: "Час Затримки Пiкiв" + masd: none + + + *: "Час Затримки Пiкiв" + masd: none + + + + id: LANG_PM_ETERNAL + desc: in the peak meter menu + user: core + + *: "Eternal" + masd: none + + + *: "Постiйно" + masd: none + + + *: "Постiйно" + masd: none + + + + id: LANG_PM_RELEASE + desc: in the peak meter menu + user: core + + *: "Peak Release" + masd: none + + + *: "Скидання Пiкiв" + masd: none + + + *: "Скидання Пiкiв" + masd: none + + + + id: LANG_PM_SCALE + desc: in the peak meter menu + user: core + + *: "Scale" + masd: none + + + *: "Масштаб" + masd: none + + + *: "Масштаб" + masd: none + + + + id: LANG_PM_DBFS + desc: in the peak meter menu + user: core + + *: "Logarithmic (dB)" + masd: none + + + *: "Логарифмiчний (dB)" + masd: none + + + *: "Логарифмiчний децибел" + masd: none + + + + id: LANG_PM_LINEAR + desc: in the peak meter menu + user: core + + *: "Linear (%)" + masd: none + + + *: "Лiнiйний (%)" + masd: none + + + *: "Лiнiйний вiдсотки" + masd: none + + + + id: LANG_PM_MIN + desc: in the peak meter menu + user: core + + *: "Minimum Of Range" + masd: none + + + *: "Нижня Межа Дiапазону" + masd: none + + + *: "Нижня Межа Дiапазону" + masd: none + + + + id: LANG_PM_MAX + desc: in the peak meter menu + user: core + + *: "Maximum Of Range" + masd: none + + + *: "Верхня Межа Дiапазону" + masd: none + + + *: "Верхня Межа Дiапазону" + masd: none + + + + id: LANG_DEFAULT_CODEPAGE + desc: default encoding used with id3 tags + user: core + + *: "Default Codepage" + + + *: "Кодова Сторiнка" + + + *: "Кодова Сторiнка" + + + + id: LANG_CODEPAGE_LATIN1 + desc: in codepage setting menu + user: core + + *: "Latin1 (ISO-8859-1)" + + + *: "Латинська1 (ISO-8859-1)" + + + *: "Латинська 1" + + + + id: LANG_CODEPAGE_GREEK + desc: in codepage setting menu + user: core + + *: "Greek (ISO-8859-7)" + + + *: "Грецька (ISO-8859-7)" + + + *: "Грецька" + + + + id: LANG_CODEPAGE_HEBREW + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Hebrew (ISO-8859-8)" + + + *: none + lcd_bitmap: "Iврит (ISO-8859-8)" + + + *: none + lcd_bitmap: "Iврит" + + + + id: LANG_CODEPAGE_CYRILLIC + desc: in codepage setting menu + user: core + + *: "Cyrillic (CP1251)" + + + *: "Кирилиця (CP1251)" + + + *: "Кирилиця" + + + + id: LANG_CODEPAGE_THAI + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Thai (ISO-8859-11)" + + + *: none + lcd_bitmap: "Тайська (ISO-8859-11)" + + + *: none + lcd_bitmap: "Тайська" + + + + id: LANG_CODEPAGE_ARABIC + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Arabic (CP1256)" + + + *: none + lcd_bitmap: "Арабська (CP1256)" + + + *: none + lcd_bitmap: "Арабська" + + + + id: LANG_CODEPAGE_TURKISH + desc: in codepage setting menu + user: core + + *: "Turkish (ISO-8859-9)" + + + *: "Турецька (ISO-8859-9)" + + + *: "Турецька" + + + + id: LANG_CODEPAGE_LATIN_EXTENDED + desc: in codepage setting menu + user: core + + *: "Latin Extended (ISO-8859-2)" + + + *: "Латинська Розширена (ISO-8859-2)" + + + *: "Латинська Розширена" + + + + id: LANG_CODEPAGE_JAPANESE + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Japanese (SJIS)" + + + *: none + lcd_bitmap: "Японська (SJIS)" + + + *: none + lcd_bitmap: "Японська" + + + + id: LANG_CODEPAGE_SIMPLIFIED + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Simp. Chinese (GB2312)" + + + *: none + lcd_bitmap: "Китайська Спрощена (GB2312)" + + + *: none + lcd_bitmap: "Китайська Спрощена" + + + + id: LANG_CODEPAGE_KOREAN + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Korean (KSX1001)" + + + *: none + lcd_bitmap: "Корейська (KSX1001)" + + + *: none + lcd_bitmap: "Корейська" + + + + id: LANG_CODEPAGE_TRADITIONAL + desc: in codepage setting menu + user: core + + *: none + lcd_bitmap: "Trad. Chinese (BIG5)" + + + *: none + lcd_bitmap: "Китайська Традицiйна (BIG5)" + + + *: none + lcd_bitmap: "Китайська Традицiйна" + + + + id: LANG_CODEPAGE_UTF8 + desc: in codepage setting menu + user: core + + *: "Unicode (UTF-8)" + + + *: "Юнiкод (UTF-8)" + + + *: "Юнiкод" + + + + id: LANG_BUTTONLIGHT_TIMEOUT + desc: in settings_menu + user: core + + *: none + button_light: "Button Light Timeout" + sansafuze*,sansae200*: "Wheel Light Timeout" + + + *: none + button_light: "Таймаут Пiдсвiтки Кнопок" + sansafuze*,sansae200*: "Таймаут Пiдсвiтки Колеса" + + + *: none + button_light: "Таймаут Пiдсвiтки Кнопок" + sansafuze*,sansae200*: "Таймаут Пiдсвiтки Колеса" + + + + id: LANG_BUTTONLIGHT_BRIGHTNESS + desc: in settings_menu + user: core + + *: none + buttonlight_brightness: "Button Light Brightness" + + + *: none + buttonlight_brightness: "Яскравiсть Пiдсвiтки Кнопок" + + + *: none + buttonlight_brightness: "Яскравiсть Пiдсвiтки Кнопок" + + + + id: LANG_START_SCREEN + desc: in the system sub menu + user: core + + *: "Start Screen" + + + *: "Стартовий Екран" + + + *: "Стартовий Екран" + + + + id: LANG_MAIN_MENU + desc: in start screen setting + user: core + + *: "Main Menu" + + + *: "Головне Меню" + + + *: "Головне Меню" + + + + id: LANG_PREVIOUS_SCREEN + desc: in start screen setting + user: core + + *: "Previous Screen" + + + *: "Попереднiй Екран" + + + *: "Попереднiй Екран" + + + + id: LANG_BATTERY_MENU + desc: in the system sub menu + user: core + + *: "Battery" + + + *: "Акумулятор" + + + *: "Акумулятор" + + + + id: LANG_BATTERY_CAPACITY + desc: in settings_menu + user: core + + *: "Battery Capacity" + + + *: "Заряд Акумулятора" + + + *: "Заряд Акумулятора" + + + + id: LANG_BATTERY_TYPE + desc: in battery settings + user: core + + *: none + battery_types: "Battery Type" + + + *: none + battery_types: "Тип Акумулятору" + + + *: none + battery_types: "Тип Акумулятору" + + + + id: LANG_BATTERY_TYPE_ALKALINE + desc: in battery settings + user: core + + *: none + battery_types: "Alkaline" + + + *: none + battery_types: "Лужний" + + + *: none + battery_types: "Лужний" + + + + id: LANG_BATTERY_TYPE_NIMH + desc: in battery settings + user: core + + *: none + battery_types: "NiMH" + + + *: none + battery_types: "NiMH" + + + *: none + battery_types: "Нiкель метал гiдридна" + + + + id: LANG_DISK_MENU + desc: in the system sub menu + user: core + + *: "Disk" + + + *: "Диск" + + + *: "Диск" + + + + id: LANG_SPINDOWN + desc: in settings_menu + user: core + + *: "Disk Spindown" + flash_storage: none + + + *: "Уповiльнення Диску" + flash_storage: none + + + *: "Уповiльнення Диску" + flash_storage: none + + + + id: LANG_DIRCACHE_ENABLE + desc: in directory cache settings + user: core + + *: none + dircache: "Directory Cache" + + + *: none + dircache: "Кеш Папок" + + + *: none + dircache: "Кеш Папок" + + + + id: LANG_TIME_MENU + desc: in the system sub menu + user: core + + *: none + rtc: "Time & Date" + + + *: none + rtc: "Час i Дата" + + + *: none + rtc: "Час i Дата" + + + + id: LANG_SET_TIME + desc: in settings_menu + user: core + + *: none + rtc: "Set Time/Date" + + + *: none + rtc: "Встановити Час/Дату" + + + *: none + rtc: "Встановити Час i Дату" + + + + id: LANG_TIMEFORMAT + desc: select the time format of time in status bar + user: core + + *: none + rtc: "Time Format" + + + *: none + rtc: "Формат Часу" + + + *: none + rtc: "Формат Часу" + + + + id: LANG_12_HOUR_CLOCK + desc: option for 12 hour clock + user: core + + *: none + rtc: "12 Hour Clock" + + + *: none + rtc: "12 Годин" + + + *: none + rtc: "12 Годин" + + + + id: LANG_24_HOUR_CLOCK + desc: option for 24 hour clock + user: core + + *: none + rtc: "24 Hour Clock" + + + *: none + rtc: "24 Години" + + + *: none + rtc: "24 Години" + + + + id: LANG_TIME_SET_BUTTON + desc: used in set_time() + user: core + + *: none + rtc: "ON = Set" + iriverh100,iriverh120,iriverh300: "NAVI = Set" + ipod*,iaudiox5,iaudiom5,iriverh10,iriverh10_5gb,sansae200*,sansac200*,gigabeat*,mrobe100,sansaclip*,sansafuze*: "SELECT = Set" + gogearsa9200: "PLAY = Set" + vibe500: "OK = Set" + + + *: none + rtc: "ВВIМК. = Встановити" + iriverh100,iriverh120,iriverh300: "НАВIГ. = Встановити" + ipod*,iaudiox5,iaudiom5,iriverh10,iriverh10_5gb,sansae200*,sansac200*,gigabeat*,mrobe100,sansaclip*,sansafuze*: "ВИБIР = Встановити" + gogearsa9200: "ПРОГРАВ. = Встановити" + vibe500: "OK = Встановити" + + + *: none + rtc,iriverh100,iriverh120,iriverh300,iriverh10,iriverh10_5gb,iaudiox5,iaudiom5,ipod*,sansae200*,sansac200*,gigabeat*,mrobe100,gogearsa9200: "" + + + + id: LANG_TIME_REVERT + desc: used in set_time() + user: core + + *: none + rtc: "OFF = Revert" + iriverh100,iriverh120,iriverh300: "STOP = Revert" + ipod*,sansac200*: "MENU = Revert" + iaudiox5,iaudiom5: "RECORD = Revert" + iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "PREV = Revert" + gigabeatfx: "POWER = Revert" + mrobe100: "DISPLAY = Revert" + gigabeats: "BACK = Revert" + gogearsa9200: "LEFT = Revert" + vibe500: "CANCEL = Revert" + + + *: none + rtc: "ВИМК. = Вiдмiнити" + iriverh100,iriverh120,iriverh300: "СТОП = Вiдмiнити" + ipod*,sansac200*: "МЕНЮ = Вiдмiнити" + iaudiox5,iaudiom5: "ЗАПИС = Вiдмiнити" + iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "ПОПЕРЕД. = Вiдмiнити" + gigabeatfx: "ЖИВЛЕННЯ = Вiдмiнити" + mrobe100: "ДИСПЛЕЙ = Вiдмiнити" + gigabeats: "НАЗАД = Вiдмiнити" + gogearsa9200: "ВЛIВО = Вiдмiнити" + vibe500: "C = Вiдмiнити" + + + *: none + rtc,iriverh100,iriverh120,iriverh300,ipod*,sansae200*,sansac200*,iaudiox5,iaudiom5,iriverh10,iriverh10_5gb,gigabeat*,mrobe100,gogearsa9200: "" + + + + id: LANG_WEEKDAY_SUNDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Sun" + + + *: none + rtc: "Нед" + + + *: none + rtc: "" + + + + id: LANG_WEEKDAY_MONDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Mon" + + + *: none + rtc: "Пон" + + + *: none + rtc: "" + + + + id: LANG_WEEKDAY_TUESDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Tue" + + + *: none + rtc: "Вiв" + + + *: none + rtc: "" + + + + id: LANG_WEEKDAY_WEDNESDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Wed" + + + *: none + rtc: "Сер" + + + *: none + rtc: "" + + + + id: LANG_WEEKDAY_THURSDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Thu" + + + *: none + rtc: "Чет" + + + *: none + rtc: "" + + + + id: LANG_WEEKDAY_FRIDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Fri" + + + *: none + rtc: "Пят" + + + *: none + rtc: "" + + + + id: LANG_WEEKDAY_SATURDAY + desc: Maximum 3-letter abbreviation for weekday + user: core + + *: none + rtc: "Sat" + + + *: none + rtc: "Суб" + + + *: none + rtc: "" + + + + id: LANG_MONTH_JANUARY + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Jan" + + + *: none + rtc: "Сiч" + + + *: none + rtc: "Сiчень" + + + + id: LANG_MONTH_FEBRUARY + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Feb" + + + *: none + rtc: "Лют" + + + *: none + rtc: "Лютий" + + + + id: LANG_MONTH_MARCH + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Mar" + + + *: none + rtc: "Бер" + + + *: none + rtc: "Березень" + + + + id: LANG_MONTH_APRIL + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Apr" + + + *: none + rtc: "Квi" + + + *: none + rtc: "Квiтень" + + + + id: LANG_MONTH_MAY + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "May" + + + *: none + rtc: "Тра" + + + *: none + rtc: "Травень" + + + + id: LANG_MONTH_JUNE + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Jun" + + + *: none + rtc: "Чер" + + + *: none + rtc: "Червень" + + + + id: LANG_MONTH_JULY + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Jul" + + + *: none + rtc: "Лип" + + + *: none + rtc: "Липень" + + + + id: LANG_MONTH_AUGUST + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Aug" + + + *: none + rtc: "Сер" + + + *: none + rtc: "Серпень" + + + + id: LANG_MONTH_SEPTEMBER + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Sep" + + + *: none + rtc: "Вер" + + + *: none + rtc: "Вересень" + + + + id: LANG_MONTH_OCTOBER + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Oct" + + + *: none + rtc: "Жов" + + + *: none + rtc: "Жовтень" + + + + id: LANG_MONTH_NOVEMBER + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Nov" + + + *: none + rtc: "Лис" + + + *: none + rtc: "Листопад" + + + + id: LANG_MONTH_DECEMBER + desc: Maximum 3-letter abbreviation for monthname + user: core + + *: none + rtc: "Dec" + + + *: none + rtc: "Гру" + + + *: none + rtc: "Грудень" + + + + id: LANG_POWEROFF_IDLE + desc: in settings_menu + user: core + + *: "Idle Poweroff" + + + *: "Вимкнення при Неактивностi" + + + *: "Вимкнення при Неактивностi" + + + + id: LANG_SLEEP_TIMER + desc: sleep timer setting + user: core + + *: "Sleep Timer" + + + *: "Таймер Сну Пристрою" + + + *: "Таймер Сну Пристрою" + + + + id: LANG_LIMITS_MENU + desc: in the system sub menu + user: core + + *: "Limits" + + + *: "Обмеження" + + + *: "Обмеження" + + + + id: LANG_MAX_FILES_IN_DIR + desc: in settings_menu + user: core + + *: "Max Entries in File Browser" + + + *: "Максимум Файлiв у Папцi" + + + *: "Максимум Файлiв у Папцi" + + + + id: LANG_MAX_FILES_IN_PLAYLIST + desc: in settings_menu + user: core + + *: "Max Playlist Size" + + + *: "Найбiльший Розмiр Списку Вiдтворення" + + + *: "Найбiльший Розмiр Списку Вiдтворення" + + + + id: LANG_CAR_ADAPTER_MODE + desc: Displayed for setting car adapter mode to on/off + user: core + + *: none + charging: "Car Adapter Mode" + + + *: none + charging: "Режим Автомобiльного Адаптеру" + + + *: none + charging: "Режим Автомобiльного Адаптеру" + + + + id: LANG_ALARM_MOD_ALARM_MENU + desc: The name of the additional entry in the main menu for the RTC alarm mod. + user: core + + *: none + alarm: "Wake-Up Alarm" + + + *: none + alarm: "Будильник" + + + *: none + alarm: "Будильник" + + + + id: LANG_ALARM_WAKEUP_SCREEN + desc: in alarm menu setting + user: core + + *: none + alarm: "Alarm Wake up Screen" + + + *: none + alarm: "Екран Будильнику" + + + *: none + alarm: "Екран Будильнику" + + + + id: LANG_ALARM_MOD_TIME + desc: The current alarm time shown in the alarm menu for the RTC alarm mod. + user: core + + *: none + alarm: "Alarm Time:" + + + *: none + alarm: "Час Будильнику:" + + + *: none + alarm: "" + + + + id: LANG_ALARM_MOD_TIME_TO_GO + desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod. + user: core + + *: none + alarm: "Waking Up In %d:%02d" + + + *: none + alarm: "Прокинутись у %d:%02d" + + + *: none + alarm: "Прокинутись у" + + + + id: LANG_ALARM_MOD_SHUTDOWN + desc: The text that tells the user that the alarm time is ok and the device shuts off (for the RTC alarm mod). + user: core + + *: none + alarm: "Alarm Set" + + + *: none + alarm: "Встановити Будильник" + + + *: none + alarm: "Встановити Будильник" + + + + id: LANG_ALARM_MOD_ERROR + desc: The text that tells that the time is incorrect (for the RTC alarm mod). + user: core + + *: none + alarm: "Alarm Time Is Too Soon!" + + + *: none + alarm: "Час Будильнику Дуже Скоро!" + + + *: none + alarm: "Час Будильнику Дуже Скоро!" + + + + id: LANG_ALARM_MOD_KEYS + desc: Shown key functions in alarm menu (for the RTC alarm mod). + user: core + + *: none + alarm: "PLAY=Set OFF=Cancel" + ipod*: "SELECT=Set MENU=Cancel" + iriverh10,iriverh10_5gb: "SELECT=Set PREV=Cancel" + gigabeats: "SELECT=Set POWER=Cancel" + vibe500: "OK=Set C=Cancel" + + + *: none + alarm: "ВIДТВОР.=Встановити ВИМК.=Вiдмiнити" + ipod*: "ВИБIР=Встановити МЕНЮ=Вiдмiнити" + iriverh10,iriverh10_5gb: "ВИБIР=Встановити ПОПЕРЕД.=Вiдмiнити" + gigabeats: "ВИБIР=Встановити ЖИВЛ.=Вiдмiнити" + vibe500: "OK=Встановити C=Вiдмiнити" + + + *: none + alarm,ipod*: "" + + + + id: LANG_ALARM_MOD_DISABLE + desc: Announce that the RTC alarm has been turned off + user: core + + *: none + alarm: "Alarm Disabled" + + + *: none + alarm: "Будильник Вимкнено" + + + *: none + alarm: "Будильник Вимкнено" + + + + id: LANG_BOOKMARK_SETTINGS + desc: in general settings + user: core + + *: "Bookmarking" + + + *: "Закладки" + + + *: "Закладки" + + + + id: LANG_BOOKMARK_SETTINGS_AUTOCREATE + desc: prompt for user to decide to create an bookmark + user: core + + *: "Bookmark on Stop" + + + *: "Створення Закладки при Зупинцi" + + + *: "Створення Закладки при Зупинцi" + + + + id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES + desc: Save in recent bookmarks only + user: core + + *: "Yes - Recent only" + + + *: "Так - Тiльки Новi" + + + *: "Так - Тiльки Новi" + + + + id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK + desc: Save in recent bookmarks only + user: core + + *: "Ask - Recent only" + + + *: "Спитати - Тiльки Новi" + + + *: "Спитати - Тiльки Новi" + + + + id: LANG_BOOKMARK_SETTINGS_AUTOLOAD + desc: prompt for user to decide to create a bookmark + user: core + + *: "Load Last Bookmark" + + + *: "Завантажити Останню Закладку" + + + *: "Завантажити Останню Закладку" + + + + id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS + desc: Configuration option to maintain a list of recent bookmarks + user: core + + *: "Maintain a List of Recent Bookmarks?" + + + *: "Вести Список Останнiх Закладок?" + + + *: "Вести Список Останнiх Закладок?" + + + + id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY + desc: Save only on bookmark for each playlist in recent bookmarks + user: core + + *: "Unique only" + + + *: "Тiльки Унiкальнi" + + + *: "Тiльки Унiкальнi" + + + + id: LANG_LANGUAGE + desc: in settings_menu + user: core + + *: "Language" + + + *: "Мова" + + + *: "Мова" + + + + id: LANG_LANGUAGE_LOADED + desc: shown when a language has been loaded from the dir browser + user: core + + *: "New Language" + + + *: "Нова Мова" + + + *: "Нова Мова" + + + + id: LANG_VOICE + desc: root of voice menu + user: core + + *: "Voice" + + + *: "Голос" + + + *: "Голос" + + + + id: LANG_VOICE_MENU + desc: item of voice menu, enable/disable the voice UI + user: core + + *: "Voice Menus" + + + *: "Озвучувати Меню" + + + *: "Озвучувати Меню" + + + + id: LANG_VOICE_DIR + desc: item of voice menu, set the voice mode for directories + user: core + + *: "Voice Directories" + + + *: "Озвучувати Папки" + + + *: "Озвучувати Папки" + + + + id: LANG_VOICE_DIR_TALK + desc: Item of voice menu, whether to use directory .talk clips + user: core + + *: "Use Directory .talk Clips" + + + *: "Використовувати Файли .talk для озвучення Папок" + + + *: "Використовувати Файли talk для озвучення Папок" + + + + id: LANG_VOICE_FILE + desc: item of voice menu, set the voice mode for files + user: core + + *: "Voice Filenames" + + + *: "Озвучувати Iмена Файлiв" + + + *: "Озвучувати Iмена Файлiв" + + + + id: LANG_VOICE_FILE_TALK + desc: Item of voice menu, whether to use file .talk clips + user: core + + *: "Use File .talk Clips" + + + *: "Використовувати Файли .talk для озвучення Файлiв" + + + *: "Використовувати Файли talk для озвучення Файлiв" + + + + id: LANG_VOICE_NUMBER + desc: "talkbox" mode for files+directories + user: core + + *: "Numbers" + + + *: "Числа" + + + *: "Числа" + + + + id: LANG_VOICE_SPELL + desc: "talkbox" mode for files+directories + user: core + + *: "Spell" + + + *: "Вимовляти" + + + *: "Вимовляти" + + + + id: LANG_VOICE_DIR_HOVER + desc: "talkbox" mode for directories + files + user: core + + *: ".talk mp3 clip" + + + *: "Використовувати файли .talk для промовляння назви mp3" + + + *: "Використовувати файли talk для промовляння назви mp3" + + + + id: LANG_MANAGE_MENU + desc: in the main menu + user: core + + *: "Manage Settings" + + + *: "Керування Налаштуваннями" + + + *: "Керування Налаштуваннями" + + + + id: LANG_CUSTOM_CFG + desc: in setting_menu() + user: core + + *: "Browse .cfg Files" + + + *: "Вибiр файлiв .cfg" + + + *: "Вибiр файлiв конфiгурацii" + + + + id: LANG_SETTINGS_LOADED + desc: Feedback shown when a .cfg file is loaded + user: core + + *: "Settings Loaded" + + + *: "Завантаження Налаштувань" + + + *: "Завантаження Налаштувань" + + + + id: LANG_RESET + desc: in system_settings_menu() + user: core + + *: "Reset Settings" + + + *: "Скидання Налаштувань" + + + *: "Скидання Налаштувань" + + + + id: LANG_RESET_DONE_CLEAR + desc: visual confirmation after settings reset + user: core + + *: "Cleared" + + + *: "Налаштування Скинутi" + + + *: "Налаштування Скинутi" + + + + id: LANG_SAVE_SETTINGS + desc: in system_settings_menu() + user: core + + *: "Save .cfg File" + + + *: "Зберегти файл .cfg" + + + *: "Зберегти файл конфiгурацii" + + + + id: LANG_SETTINGS_SAVED + desc: Feedback shown when a .cfg file is saved + user: core + + *: "Settings Saved" + + + *: "Налаштування Збережено" + + + *: "Налаштування Збережено" + + + + id: LANG_SAVE_THEME + desc: save a theme file + user: core + + *: "Save Theme Settings" + + + *: "Зберегти Налаштування Тем" + + + *: "Зберегти Налаштування Тем" + + + + id: LANG_CUSTOM_THEME + desc: in the main menu + user: core + + *: "Browse Theme Files" + + + *: "Перегляд Файлiв Тем" + + + *: "Перегляд Файлiв Тем" + + + + id: LANG_RECORDING_SETTINGS + desc: in the main menu + user: core + + *: none + recording: "Recording Settings" + + + *: none + recording: "Налаштування Запису" + + + *: none + recording: "Налаштування Запису" + + + + id: LANG_FM_MENU + desc: fm menu title + user: core + + *: none + radio: "FM Radio Menu" + + + *: none + radio: "Меню ФМ-радiо" + + + *: none + radio: "Меню ФМ-радiо" + + + + id: LANG_FM_NO_PRESETS + desc: error when preset list is empty + user: core + + *: none + radio: "No presets" + + + *: none + radio: "Вiдсутнi пресети" + + + *: none + radio: "Вiдсутнi пресети" + + + + id: LANG_FM_ADD_PRESET + desc: in radio menu + user: core + + *: none + radio: "Add Preset" + + + *: none + radio: "Додати Пресет" + + + *: none + radio: "Додати Пресет" + + + + id: LANG_FM_EDIT_PRESET + desc: in radio screen + user: core + + *: none + radio: "Edit Preset" + + + *: none + radio: "Редагувати Пресет" + + + *: none + radio: "Редагувати Пресет" + + + + id: LANG_FM_DELETE_PRESET + desc: in radio screen + user: core + + *: none + radio: "Remove Preset" + + + *: none + radio: "Видалити Пресет" + + + *: none + radio: "Видалити Пресет" + + + + id: LANG_FM_PRESET_SAVE_FAILED + desc: in radio screen + user: core + + *: none + radio: "Preset Save Failed" + + + *: none + radio: "Не вдалося зберегти Пресет" + + + *: none + radio: "Не вдалося зберегти Пресет" + + + + id: LANG_FM_NO_FREE_PRESETS + desc: in radio screen + user: core + + *: none + radio: "The Preset List is Full" + + + *: none + radio: "Список Пресетiв Повний" + + + *: none + radio: "Список Пресетiв Повний" + + + + id: LANG_BUTTONBAR_MENU + desc: in button bar + user: core + + *: none + radio_screen_button_bar: "Menu" + + + *: none + radio_screen_button_bar: "Меню" + + + *: none + radio_screen_button_bar: "" + + + + id: LANG_FM_BUTTONBAR_EXIT + desc: in radio screen + user: core + + *: none + radio_screen_button_bar: "Exit" + + + *: none + radio_screen_button_bar: "Вихiд" + + + *: none + radio_screen_button_bar: "" + + + + id: LANG_FM_BUTTONBAR_ACTION + desc: in radio screen + user: core + + *: none + radio_screen_button_bar: "Action" + + + *: none + radio_screen_button_bar: "Дiя" + + + *: none + radio_screen_button_bar: "" + + + + id: LANG_PRESET + desc: in button bar and radio screen / menu + user: core + + *: none + radio: "Preset" + + + *: none + radio: "Пресет" + + + *: none + radio: "Пресет" + + + + id: LANG_FM_BUTTONBAR_ADD + desc: in radio screen + user: core + + *: none + radio_screen_button_bar: "Add" + + + *: none + radio_screen_button_bar: "Додати" + + + *: none + radio_screen_button_bar: "" + + + + id: LANG_FM_BUTTONBAR_RECORD + desc: in radio screen + user: core + + *: none + radio_screen_button_bar: "Record" + + + *: none + radio_screen_button_bar: "Запис" + + + *: none + radio_screen_button_bar: "" + + + + id: LANG_FM_MONO_MODE + desc: in radio screen + user: core + + *: none + radio: "Force Mono" + + + *: none + radio: "Примусове Моно" + + + *: none + radio: "Примусове Моно" + + + + id: LANG_FM_FREEZE + desc: splash screen during freeze in radio mode + user: core + + *: none + radio: "Screen frozen!" + + + *: none + radio: "Екран заморожено!" + + + *: none + radio: "" + + + + id: LANG_FM_SCAN_PRESETS + desc: in radio menu + user: core + + *: none + radio: "Auto-Scan Presets" + + + *: none + radio: "Автоматичне Сканування Пресетiв" + + + *: none + radio: "Автоматичне Сканування Пресетiв" + + + + id: LANG_FM_CLEAR_PRESETS + desc: confirmation if presets can be cleared + user: core + + *: none + radio: "Clear Current Presets?" + + + *: none + radio: "Очистити Поточнi Пресети?" + + + *: none + radio: "Очистити Поточнi Пресети?" + + + + id: LANG_FM_SCANNING + desc: during auto scan + user: core + + *: none + radio: "Scanning %d.%02d MHz" + + + *: none + radio: "Сканування %d.%02d MHz" + + + *: none + radio: "" + + + + id: LANG_FM_DEFAULT_PRESET_NAME + desc: default preset name for auto scan mode + user: core + + *: none + radio: "%d.%02d MHz" + + + *: none + radio: "%d.%02d MHz" + + + *: none + radio: "" + + + + id: LANG_RADIO_SCAN_MODE + desc: in radio screen / menu + user: core + + *: none + radio: "Scan" + + + *: none + radio: "Сканування" + + + *: none + radio: "Сканування" + + + + id: LANG_FM_PRESET_LOAD + desc: load preset list in fm radio + user: core + + *: none + radio: "Load Preset List" + + + *: none + radio: "Завантажити Список Пресетiв" + + + *: none + radio: "Завантажити Список Пресетiв" + + + + id: LANG_FM_PRESET_SAVE + desc: Save preset list in fm radio + user: core + + *: none + radio: "Save Preset List" + + + *: none + radio: "Зберегти Список Пресетiв" + + + *: none + radio: "Зберегти Список Пресетiв" + + + + id: LANG_FM_PRESET_CLEAR + desc: clear preset list in fm radio + user: core + + *: none + radio: "Clear Preset List" + + + *: none + radio: "Очистити Список Пресетiв" + + + *: none + radio: "Очистити Список Пресетiв" + + + + id: LANG_FMR + desc: Used when you need to say Preset List, also voiced + user: core + + *: none + radio: "Preset List" + + + *: none + radio: "Список Пресетiв" + + + *: none + radio: "Список Пресетiв" + + + + id: LANG_FM_FIRST_AUTOSCAN + desc: When you run the radio without an fmr file in settings + user: core + + *: none + radio: "No settings found. Autoscan?" + + + *: none + radio: "Не знайдено налаштувань. Провести Автосканування?" + + + *: none + radio: "Не знайдено налаштувань. Провести Автосканування?" + + + + id: LANG_FM_SAVE_CHANGES + desc: When you try to exit radio to confirm save + user: core + + *: none + radio: "Save Changes?" + + + *: none + radio: "Зберегти Змiни?" + + + *: none + radio: "Зберегти Змiни?" + + + + id: LANG_FM_REGION + desc: fm tuner region setting + user: core + + *: none + radio: "Region" + + + *: none + radio: "Регiон" + + + *: none + radio: "Регiон" + + + + id: LANG_FM_EUROPE + desc: fm tuner region europe + user: core + + *: none + radio: "Europe" + + + *: none + radio: "Европа" + + + *: none + radio: "Европа" + + + + id: LANG_FM_US + desc: fm region us / canada + user: core + + *: none + radio: "US / Canada" + + + *: none + radio: "США / Канада" + + + *: none + radio: "США / Канада" + + + + id: LANG_FM_JAPAN + desc: fm region japan + user: core + + *: none + radio: "Japan" + + + *: none + radio: "Японiя" + + + *: none + radio: "Японiя" + + + + id: LANG_FM_KOREA + desc: fm region korea + user: core + + *: none + radio: "Korea" + + + *: none + radio: "Корея" + + + *: none + radio: "Корея" + + + + id: LANG_RECORDING_FORMAT + desc: audio format item in recording menu + user: core + + *: none + recording: "Format" + + + *: none + recording: "Формат" + + + *: none + recording: "Формат" + + + + id: LANG_AFMT_MPA_L3 + desc: audio format description + user: core + + *: none + recording: "MPEG Layer 3" + + + *: none + recording: "MPEG Layer 3" + + + *: none + recording: "MPEG Layer 3" + + + + id: LANG_AFMT_PCM_WAV + desc: audio format description + user: core + + *: none + recording: "PCM Wave" + + + *: none + recording: "PCM Wave" + + + *: none + recording: "PCM Wave" + + + + id: LANG_AFMT_WAVPACK + desc: audio format description + user: core + + *: none + recording_swcodec: "WavPack" + + + *: none + recording_swcodec: "WavPack" + + + *: none + recording_swcodec: "WavPack" + + + + id: LANG_AFMT_AIFF + desc: audio format description + user: core + + *: none + recording: "AIFF" + + + *: none + recording: "AIFF" + + + *: none + recording: "AIFF" + + + + id: LANG_ENCODER_SETTINGS + desc: encoder settings + user: core + + *: none + recording: "Encoder Settings" + + + *: none + recording: "Налаштування Кодеку" + + + *: none + recording: "Налаштування Кодеку" + + + + id: LANG_BITRATE + desc: bits-kilobits per unit time + user: core + + *: none + recording_swcodec: "Bitrate" + + + *: none + recording_swcodec: "Бiтрейт" + + + *: none + recording_swcodec: "Бiтрейт" + + + + id: LANG_NO_SETTINGS + desc: when something has settings in a certain context + user: core + + *: none + recording: "(No Settings)" + + + *: none + recording: "(Налаштування Вiдсутнi)" + + + *: none + recording: "Налаштування Вiдсутнi" + + + + id: LANG_RECORDING_QUALITY + desc: in the recording settings + user: core + + *: none + recording_hwcodec: "Quality" + + + *: none + recording_hwcodec: "Якiсть" + + + *: none + recording_hwcodec: "Якiсть" + + + + id: LANG_RECORDING_FREQUENCY + desc: in the recording settings + user: core + + *: none + recording: "Frequency" + + + *: none + recording: "Частота" + + + *: none + recording: "Частота" + + + + id: LANG_SOURCE_FREQUENCY + desc: when recording source frequency setting must follow source + user: core + + *: none + recording: "(Same As Source)" + + + *: none + recording: "(Як В Джерелi)" + + + *: none + recording: "Як В Джерелi" + + + + id: LANG_RECORDING_SOURCE + desc: in the recording settings + user: core + + *: none + recording: "Source" + + + *: none + recording: "Джерело" + + + *: none + recording: "Джерело" + + + + id: LANG_RECORDING_SRC_MIC + desc: in the recording settings + user: core + + *: none + recording: "Microphone" + iriverh100,iriverh120,iriverh300: "Internal Microphone" + + + *: none + recording: "Мiкрофон" + iriverh100,iriverh120,iriverh300: "Вбудований Мiкрофон" + + + *: none + recording: "Мiкрофон" + iriverh100,iriverh120,iriverh300: "Вбудований Мiкрофон" + + + + id: LANG_RECORDING_SRC_DIGITAL + desc: in the recording settings + user: core + + *: none + recording: "Digital" + + + *: none + recording: "Цифровий" + + + *: none + recording: "Цифровий" + + + + id: LANG_LINE_IN + desc: in the recording settings + user: core + + *: none + recording,archosplayer: "Line In" + + + *: none + recording,archosplayer: "Лiнiйний Вхiд" + + + *: none + recording,archosplayer: "Лiнiйний Вхiд" + + + + id: LANG_RECORDING_EDITABLE + desc: Editable recordings setting + user: core + + *: none + recording_hwcodec: "Independent Frames" + + + *: none + recording_hwcodec: "Незалежнi Вiдрiзки" + + + *: none + recording_hwcodec: "Незалежнi Вiдрiзки" + + + + id: LANG_RECORD_TIMESPLIT + desc: Record split menu + user: core + + *: none + recording: "File Split Options" + + + *: none + recording: "Властивостi Роздiлення Файлу" + + + *: none + recording: "Властивостi Роздiлення Файлу" + + + + id: LANG_SPLIT_MEASURE + desc: in record timesplit options + user: core + + *: none + recording: "Split Measure" + + + *: none + recording: "Межа Роздiлення" + + + *: none + recording: "Межа Роздiлення" + + + + id: LANG_SPLIT_TYPE + desc: in record timesplit options + user: core + + *: none + recording: "What to do when Splitting" + + + *: none + recording: "Що робити пiд час Роздiлення" + + + *: none + recording: "Що робити пiд час Роздiлення" + + + + id: LANG_START_NEW_FILE + desc: in record timesplit options + user: core + + *: none + recording: "Start new file" + + + *: none + recording: "Почати новий файл" + + + *: none + recording: "Почати новий файл" + + + + id: LANG_STOP_RECORDING + desc: in record timesplit options + user: core + + *: none + recording: "Stop recording" + + + *: none + recording: "Зупинити запис" + + + *: none + recording: "Зупинити запис" + + + + id: LANG_SPLIT_TIME + desc: in record timesplit options + user: core + + *: none + recording: "Split Time" + + + *: none + recording: "Час роздiлення" + + + *: none + recording: "Час роздiлення" + + + + id: LANG_SPLIT_SIZE + desc: in record timesplit options + user: core + + *: none + recording: "Split Filesize" + + + *: none + recording: "Розмiр Файлу при Роздiленнi" + + + *: none + recording: "Розмiр Файлу при Роздiленнi" + + + + id: LANG_REC_SIZE + desc: in record timesplit options + user: core + + *: none + recording: "Filesize" + + + *: none + recording: "Розмiр Файлу" + + + *: none + recording: "Розмiр Файлу" + + + + id: LANG_RECORD_PRERECORD_TIME + desc: in recording settings_menu + user: core + + *: none + recording: "Prerecord Time" + + + *: none + recording: "Час попереднього запису" + + + *: none + recording: "Час попереднього запису" + + + + id: LANG_RECORD_DIRECTORY + desc: in recording settings_menu + user: core + + *: none + recording: "Directory" + + + *: none + recording: "Папка" + + + *: none + recording: "Папка" + + + + id: LANG_SET_AS_REC_DIR + desc: used in the onplay menu to set a recording dir + user: core + + *: none + recording: "Set As Recording Directory" + + + *: none + recording: "Встановити як Папку для Запису" + + + *: none + recording: "Встановити як Папку для Запису" + + + + id: LANG_CLEAR_REC_DIR + desc: + user: core + + *: none + recording: "Clear Recording Directory" + + + *: none + recording: "Очистити Папку Запису" + + + *: none + recording: "Очистити Папку Запису" + + + + id: LANG_REC_DIR_NOT_WRITABLE + desc: + user: core + + *: none + recording: "Can't write to recording directory" + + + *: none + recording: "Неможливо зберегти в папку записiв" + + + *: none + recording: "Неможливо зберегти в папку записiв" + + + + id: LANG_CLIP_LIGHT + desc: in record settings menu. + user: core + + *: none + recording: "Clipping Light" + + + *: none + recording: "Пiдсвiтка Перевантаження" + + + *: none + recording: "Пiдсвiтка Перевантаження" + + + + id: LANG_MAIN_UNIT + desc: in record settings menu. + user: core + + *: none + remote: "Main Unit Only" + + + *: none + remote: "Тiльки на Програвачi" + + + *: none + remote: "Тiльки на Програвачi" + + + + id: LANG_REMOTE_UNIT + desc: in record settings menu. + user: core + + *: none + remote: "Remote Unit Only" + + + *: none + remote: "Тiльки на Пультi" + + + *: none + remote: "Тiльки на Пультi" + + + + id: LANG_REMOTE_MAIN + desc: in record settings menu. + user: core + + *: none + remote: "Main and Remote Unit" + + + *: none + remote: "На Програвачi i на Пультi" + + + *: none + remote: "На Програвачi i на Пультi" + + + + id: LANG_RECORD_TRIGGER + desc: in recording settings_menu + user: core + + *: none + recording: "Trigger" + + + *: none + recording: "Тригер" + + + *: none + recording: "Тригер" + + + + id: LANG_RECORD_TRIG_NOREARM + desc: in recording settings_menu + user: core + + *: none + recording: "Once" + + + *: none + recording: "Один раз" + + + *: none + recording: "Один раз" + + + + id: LANG_RECORD_TRIGGER_TYPE + desc: in recording trigger menu + user: core + + *: none + recording: "Trigtype" + + + *: none + recording: "Тип Тригеру" + + + *: none + recording: "Тип Тригеру" + + + + id: LANG_RECORD_TRIGGER_NEWFILESTP + desc: trigger types + user: core + + *: none + recording: "New file" + + + *: none + recording: "Новий файл" + + + *: none + recording: "Новий файл" + + + + id: LANG_RECORD_TRIGGER_STOP + desc: trigger types + user: core + + *: none + recording: "Stop" + + + *: none + recording: "Стоп" + + + *: none + recording: "Стоп" + + + + id: LANG_RECORD_START_THRESHOLD + desc: in recording settings_menu + user: core + + *: none + recording: "Start Above" + + + *: none + recording: "Почати пiсля" + + + *: none + recording: "Почати пiсля" + + + + id: LANG_MIN_DURATION + desc: in recording settings_menu + user: core + + *: none + recording: "for at least" + + + *: none + recording: "як мiнiмум" + + + *: none + recording: "як мiнiмум" + + + + id: LANG_RECORD_STOP_THRESHOLD + desc: in recording settings_menu + user: core + + *: none + recording: "Stop Below" + + + *: none + recording: "Зупинити Пiсля" + + + *: none + recording: "Зупинити Пiсля" + + + + id: LANG_RECORD_STOP_GAP + desc: in recording settings_menu + user: core + + *: none + recording: "Presplit Gap" + + + *: none + recording: "Промiжок Попереднього Роздiлення" + + + *: none + recording: "Промiжок Попереднього Роздiлення" + + + + id: LANG_RECORD_PRERECORD + desc: in recording and radio screen + user: core + + *: none + recording: "Pre-Recording" + + + *: none + recording: "Попереднiй Запис" + + + *: none + recording: "" + + + + id: LANG_AGC_SAFETY + desc: AGC preset + user: core + + *: none + agc: "Safety (clip)" + + + *: none + agc: "Безпечний (клiп)" + + + *: none + agc: "Безпечний (клiп)" + + + + id: LANG_AGC_LIVE + desc: AGC preset + user: core + + *: none + agc: "Live (slow)" + + + *: none + agc: "Живий Звук (повiльний)" + + + *: none + agc: "Живий Звук (повiльний)" + + + + id: LANG_AGC_DJSET + desc: AGC preset + user: core + + *: none + agc: "DJ-Set (slow)" + + + *: none + agc: "DJ-сет (повiльний)" + + + *: none + agc: "DJ сет (повiльний)" + + + + id: LANG_AGC_MEDIUM + desc: AGC preset + user: core + + *: none + agc: "Medium" + + + *: none + agc: "Середнiй" + + + *: none + agc: "Середнiй" + + + + id: LANG_AGC_VOICE + desc: AGC preset + user: core + + *: none + agc: "Voice (fast)" + + + *: none + agc: "Голос (швидкий)" + + + *: none + agc: "Голос (швидкий)" + + + + id: LANG_REMOTE_LCD_OFF + desc: Remote lcd off splash in recording screen + user: core + + *: none + remote: "Remote Display OFF" + + + *: none + remote: "Вимкнути Екран Пульту" + + + *: none + remote: "Вимкнути Екран Пульту" + + + + id: LANG_REMOTE_LCD_ON + desc: Remote lcd off splash in recording screen + user: core + + *: none + remote: "(Vol- : Re-enable)" + + + *: none + remote: "(Гучнiсть- : Переiнiцiалiзацiя)" + + + *: none + remote: "(Гучнiсть- : Переiнiцiалiзацiя)" + + + + id: LANG_CREATE_PLAYLIST + desc: Menu option for creating a playlist + user: core + + *: "Create Playlist" + + + *: "Створити Список Вiдтворення" + + + *: "Створити Список Вiдтворення" + + + + id: LANG_PLAYLISTVIEWER_SETTINGS + desc: title for the playlist viewer settings menus + user: core + + *: "Playlist Viewer Settings" + + + *: "Налаштування Перегляду Списку Вiдтворення" + + + *: "Налаштування Перегляду Списку Вiдтворення" + + + + id: LANG_VIEW_DYNAMIC_PLAYLIST + desc: in playlist menu. + user: core + + *: "View Current Playlist" + + + *: "Переглянути Поточний Список Вiдтвореня" + + + *: "Переглянути Поточний Список Вiдтвореня" + + + + id: LANG_MOVE + desc: The verb/action Move + user: core + + *: "Move" + + + *: "Перенести" + + + *: "Перенести" + + + + id: LANG_SHOW_INDICES + desc: in playlist viewer menu + user: core + + *: "Show Indices" + + + *: "Показати Iндекси" + + + *: "Показати Iндекси" + + + + id: LANG_TRACK_DISPLAY + desc: in playlist viewer on+play menu + user: core + + *: "Track Display" + + + *: "Екран Треку" + + + *: "Екран Треку" + + + + id: LANG_DISPLAY_TRACK_NAME_ONLY + desc: track display options + user: core + + *: "Track Name Only" + + + *: "Тiльки Iм'я Треку" + + + *: "Тiльки Iм'я Треку" + + + + id: LANG_REMOVE + desc: in playlist viewer on+play menu + user: core + + *: "Remove" + + + *: "Видалити" + + + *: "Видалити" + + + + id: LANG_SAVE_DYNAMIC_PLAYLIST + desc: in playlist menu. + user: core + + *: "Save Current Playlist" + + + *: "Зберегти Поточний Список Вiдтворення" + + + *: "Зберегти Поточний Список Вiдтворення" + + + + id: LANG_PLAYLIST_SAVE_COUNT + desc: splash number of tracks saved + user: core + + *: "Saved %d tracks (%s)" + + + *: "Збережено %d треки (%s)" + + + *: "треки збережено" + + + + id: LANG_CATALOG + desc: in onplay menu + user: core + + *: "Playlist Catalog" + + + *: "Каталог Спискiв Вiдтвореня" + + + *: "Каталог Спискiв Вiдтвореня" + + + + id: LANG_RECURSE_DIRECTORY + desc: In playlist menu + user: core + + *: "Recursively Insert Directories" + + + *: "Рекрусивна Вставка Папок" + + + *: "Рекрусивна Вставка Папок" + + + + id: LANG_RECURSE_DIRECTORY_QUESTION + desc: Asked from onplay screen + user: core + + *: "Recursively?" + + + *: "Рекрусивно?" + + + *: "Рекрусивно?" + + + + id: LANG_WARN_ERASEDYNPLAYLIST_MENU + desc: in playlist options menu, option to warn when erasing dynamic playlist + user: core + + *: "Warn When Erasing Dynamic Playlist" + + + *: "Пiдтверджувати Очистку Динамiчного Списку Вiдтворення" + + + *: "Пiдтверджувати Очистку Динамiчного Списку Вiдтворення" + + + + id: LANG_WARN_ERASEDYNPLAYLIST_PROMPT + desc: prompt shown when about to erase a modified dynamic playlist + user: core + + *: "Erase dynamic playlist?" + + + *: "Очистити динамiчний вписок вiдтворення?" + + + *: "Очистити динамiчний вписок вiдтворення?" + + + + id: LANG_SHUTDOWN + desc: in main menu + user: core + + *: none + soft_shutdown: "Shut down" + + + *: none + soft_shutdown: "Вимкнути" + + + *: none + soft_shutdown: "Вимкнути" + + + + id: LANG_ROCKBOX_INFO + desc: displayed topmost on the info screen and in the info menu + user: core + + *: "Rockbox Info" + + + *: "Iнформацiя про Рокбокс" + + + *: "Iнформацiя про Рокбокс" + + + + id: LANG_BUFFER_STAT + desc: the buffer size, %d MB %d fraction of MB + user: core + + *: "Buffer:" + archosplayer: "Buf:" + + + *: "Буфер:" + archosplayer: "Буф:" + + + *: "Розмiр буферу" + + + + id: LANG_BATTERY_TIME + desc: battery level in % and estimated time remaining + user: core + + *: "Battery: %d%% %dh %dm" + archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" + iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" + + + *: "Акумулятор: %d%% %dh %dm" + archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" + iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" + + + *: "Рiвень Заряду Акумулятору" + + + + id: LANG_DISK_SIZE_INFO + desc: disk size info + user: core + + *: "Disk:" + + + *: "Диск:" + + + *: "Розмiр диску" + + + + id: LANG_DISK_FREE_INFO + desc: disk size info + user: core + + *: "Free:" + + + *: "Вiльно:" + + + *: "Вiльно на диску:" + + + + id: LANG_DISK_NAME_INTERNAL + desc: in info menu; name for internal disk with multivolume (keep short!) + user: core + + *: none + multivolume: "Int:" + + + *: none + multivolume: "Пам'ять:" + + + *: none + multivolume: "Память" + + + + id: LANG_DISK_NAME_MMC + desc: in info menu; name for external disk with multivolume (Ondio; keep short!) + user: core + + *: none + multivolume: "HD1" + sansae200*,sansac200*,sansafuze*: "mSD:" + archosondio*: "MMC:" + + + *: none + multivolume: "HD1" + sansae200*,sansac200*,sansafuze*: "microSD:" + archosondio*: "MMC:" + + + *: none + multivolume: "H D 1" + sansae200*,sansac200*,sansafuze*: "micro S D" + archosondio*: "M M C" + + + + id: LANG_VERSION + desc: in the Rockbox Info screen + user: core + + *: "Version" + + + *: "Версiя" + + + *: "Версiя" + + + + id: LANG_RUNNING_TIME + desc: in run time screen + user: core + + *: "Running Time" + + + *: "Тривалiсть роботи" + + + *: "Тривалiсть роботи" + + + + id: LANG_TOP_TIME + desc: in run time screen + user: core + + *: "Top Time" + + + *: "Кращий Час" + + + *: "Кращий Час" + + + + id: LANG_CLEAR_TIME + desc: in run time screen + user: core + + *: "Clear Time?" + + + *: "Очистити час?" + + + *: "Очистити час?" + + + + id: LANG_DEBUG + desc: in the info menu + user: core + + *: "Debug (Keep Out!)" + + + *: "Дебаг (Не чiпати!)" + + + *: "Дебаг, Не чiпати!" + + + + id: LANG_PLAYLIST + desc: Used when you need to say playlist, also voiced + user: core + + *: "Playlist" + + + *: "Список Вiдтворення" + + + *: "Список Вiдтворення" + + + + id: LANG_INSERT + desc: in onplay menu. insert a track/playlist into dynamic playlist. + user: core + + *: "Insert" + + + *: "Вставити" + + + *: "Вставити" + + + + id: LANG_INSERT_FIRST + desc: in onplay menu. insert a track/playlist into dynamic playlist. + user: core + + *: "Insert Next" + + + *: "Вставити Наступним" + + + *: "Вставити Наступним" + + + + id: LANG_INSERT_LAST + desc: in onplay menu. append a track/playlist into dynamic playlist. + user: core + + *: "Insert Last" + + + *: "Вставити Останнiм" + + + *: "Вставити Останнiм" + + + + id: LANG_INSERT_SHUFFLED + desc: in onplay menu. insert a track/playlist randomly into dynamic playlist + user: core + + *: "Insert Shuffled" + + + *: "Вставити у випадкове мiсце" + + + *: "Вставити у випадкове мiсце" + + + + id: LANG_QUEUE + desc: The verb/action Queue + user: core + + *: "Queue" + + + *: "Черга" + + + *: "Черга" + + + + id: LANG_QUEUE_FIRST + desc: in onplay menu. queue a track/playlist into dynamic playlist. + user: core + + *: "Queue Next" + + + *: "В Чергу Наступним" + + + *: "В Чергу Наступним" + + + + id: LANG_QUEUE_LAST + desc: in onplay menu. queue a track/playlist at end of playlist. + user: core + + *: "Queue Last" + + + *: "В Чергу Останнiм" + + + *: "В Чергу Останнiм" + + + + id: LANG_QUEUE_SHUFFLED + desc: in onplay menu. queue a track/playlist randomly into dynamic playlist + user: core + + *: "Queue Shuffled" + + + *: "В Чергу у Випадкове Мiсце" + + + *: "В Чергу у Випадкове Мiсце" + + + + id: LANG_REPLACE + desc: in onplay menu. Replace the current playlist with a new one. + user: core + + *: "Play Next" + + + *: "Вiдтворити Наступне" + + + *: "Вiдтворити Наступне" + + + + id: LANG_PLAYLIST_INSERT_COUNT + desc: splash number of tracks inserted + user: core + + *: "Inserted %d tracks (%s)" + + + *: "Вставлено %d трекiв (%s)" + + + *: "треки вставлено" + + + + id: LANG_PLAYLIST_QUEUE_COUNT + desc: splash number of tracks queued + user: core + + *: "Queued %d tracks (%s)" + + + *: "Черга %d трекiв (%s)" + + + *: "треки у черзi" + + + + id: LANG_VIEW + desc: in on+play menu + user: core + + *: "View" + + + *: "Перегляд" + + + *: "Перегляд" + + + + id: LANG_SEARCH_IN_PLAYLIST + desc: in playlist menu. + user: core + + *: "Search In Playlist" + + + *: "Пошук у Списку Вiдтворення" + + + *: "Пошук у Списку Вiдтворення" + + + + id: LANG_PLAYLIST_SEARCH_MSG + desc: splash number of tracks inserted + user: core + + *: "Searching... %d found (%s)" + + + *: "Пошук... %d знайдено (%s)" + + + *: "" + + + + id: LANG_SHUFFLE_PLAYLIST + desc: in playlist menu, reshuffles the order in which songs are played + user: core + + *: "Reshuffle" + + + *: "Перемiшати" + + + *: "Перемiшати" + + + + id: LANG_CATALOG_VIEW + desc: in onplay playlist catalog submenu + user: core + + *: "View Catalog" + + + *: "Переглянути Каталог" + + + *: "Переглянути Каталог" + + + + id: LANG_CATALOG_ADD_TO + desc: in onplay playlist catalog submenu + user: core + + *: "Add to Playlist" + + + *: "Додатти до Списку Вiдтворення" + + + *: "Додатти до Списку Вiдтворення" + + + + id: LANG_CATALOG_ADD_TO_NEW + desc: in onplay playlist catalog submenu + user: core + + *: "Add to New Playlist" + + + *: "Додати до Нового Списку Вiдтворення" + + + *: "Додати до Нового Списку Вiдтворення" + + + + id: LANG_CATALOG_NO_DIRECTORY + desc: error message when playlist catalog directory doesn't exist + user: core + + *: "%s doesn't exist" + + + *: "%s вiдсутня" + + + *: "Папка Списку Вiдтворення Вiдсутня" + + + + id: LANG_CATALOG_NO_PLAYLISTS + desc: error message when no playlists for playlist catalog + user: core + + *: "No Playlists" + + + *: "Вiдсутнiй Список Вiдтворення" + + + *: "Вiдсутнiй Список Вiдтворення" + + + + id: LANG_BOOKMARK_MENU + desc: Text on main menu to get to bookmark commands + user: core + + *: "Bookmarks" + + + *: "Закладки" + + + *: "Закладки" + + + + id: LANG_BOOKMARK_MENU_CREATE + desc: Used off of the bookmark menu to create a bookmark + user: core + + *: "Create Bookmark" + + + *: "Створити Закладку" + + + *: "Створити Закладку" + + + + id: LANG_BOOKMARK_MENU_LIST + desc: Used off of the bookmark menu to list available bookmarks for the currently playing directory or M3U + user: core + + *: "List Bookmarks" + + + *: "Список Закладок" + + + *: "Список Закладок" + + + + id: LANG_ONPLAY_MENU_TITLE + desc: title for the onplay menus + user: core + + *: "Context Menu" + + + *: "Контекстне Меню" + + + *: "Контекстне Меню" + + + + id: LANG_MENU_SET_RATING + desc: Set the rating of a file in the wps context menu + user: core + + *: "Set Song Rating" + + + *: "Встановити Рейтинг Пiснi" + + + *: "Встановити Рейтинг Пiснi" + + + + id: LANG_BROWSE_CUESHEET + desc: + user: core + + *: "Browse Cuesheet" + + + *: "Перегляд Cuesheet" + + + *: "Перегляд Cuesheet" + + + + id: LANG_MENU_SHOW_ID3_INFO + desc: Menu option to start tag viewer + user: core + + *: "Show Track Info" + + + *: "Iнформацiя про Трек" + + + *: "Iнформацiя про Трек" + + + + id: LANG_ID3_TITLE + desc: in tag viewer + user: core + + *: "Title" + + + *: "Назва" + + + *: "" + + + + id: LANG_ID3_ARTIST + desc: in tag viewer + user: core + + *: "Artist" + + + *: "Виконавець" + + + *: "" + + + + id: LANG_ID3_ALBUM + desc: in tag viewer + user: core + + *: "Album" + + + *: "Альбом" + + + *: "" + + + + id: LANG_ID3_TRACKNUM + desc: in tag viewer + user: core + + *: "Tracknum" + + + *: "Номер треку" + + + *: "" + + + + id: LANG_ID3_GENRE + desc: in tag viewer + user: core + + *: "Genre" + + + *: "Жанр" + + + *: "" + + + + id: LANG_ID3_YEAR + desc: in tag viewer + user: core + + *: "Year" + + + *: "Рiк" + + + *: "" + + + + id: LANG_ID3_LENGTH + desc: in tag viewer + user: core + + *: "Length" + + + *: "Тривалiсть" + + + *: "" + + + + id: LANG_ID3_PLAYLIST + desc: in tag viewer + user: core + + *: "Playlist" + + + *: "Список вiдтворення" + + + *: "" + + + + id: LANG_ID3_BITRATE + desc: in tag viewer + user: core + + *: "Bitrate" + + + *: "Бiтрейт" + + + *: "" + + + + id: LANG_ID3_ALBUMARTIST + desc: in tag viewer + user: core + + *: "Album Artist" + + + *: "Обкладинка Альбому" + + + *: "" + + + + id: LANG_ID3_DISCNUM + desc: in tag viewer + user: core + + *: "Discnum" + + + *: "Номер диску" + + + *: "" + + + + id: LANG_ID3_COMMENT + desc: in tag viewer + user: core + + *: "Comment" + + + *: "Коментар" + + + *: "" + + + + id: LANG_ID3_VBR + desc: in browse_id3 + user: core + + *: " (VBR)" + + + *: " (VBR)" + + + *: "" + + + + id: LANG_ID3_FREQUENCY + desc: in tag viewer + user: core + + *: "Frequency" + + + *: "Частота" + + + *: "" + + + + id: LANG_ID3_TRACK_GAIN + desc: in tag viewer + user: core + + *: "Track Gain" + + + *: "Пiдсилення Треку" + + + *: "" + + + + id: LANG_ID3_ALBUM_GAIN + desc: in tag viewer + user: core + + *: "Album Gain" + + + *: "Пiдсилення Альбому" + + + *: "" + + + + id: LANG_ID3_PATH + desc: in tag viewer + user: core + + *: "Path" + + + *: "Шлях" + + + *: "" + + + + id: LANG_ID3_NO_INFO + desc: in tag viewer + user: core + + *: "" + + + *: "" + + + *: "" + + + + id: LANG_RENAME + desc: The verb/action Rename + user: core + + *: "Rename" + + + *: "Переiменувати" + + + *: "Переiменувати" + + + + id: LANG_CUT + desc: The verb/action Cut + user: core + + *: "Cut" + + + *: "Вирiзати" + + + *: "Вирiзати" + + + + id: LANG_COPY + desc: The verb/action Copy + user: core + + *: "Copy" + + + *: "Копiювати" + + + *: "Копiювати" + + + + id: LANG_PASTE + desc: The verb/action Paste + user: core + + *: "Paste" + + + *: "Вставити" + + + *: "Вставити" + + + + id: LANG_REALLY_OVERWRITE + desc: The verb/action Paste + user: core + + *: "File/directory exists. Overwrite?" + + + *: "Файл/папка вже присутня. Замiнити?" + + + *: "Файл чи папка вже присутня. Замiнити?" + + + + id: LANG_DELETE + desc: The verb/action Delete + user: core + + *: "Delete" + + + *: "Видалити" + + + *: "Видалити" + + + + id: LANG_DELETE_DIR + desc: in on+play menu + user: core + + *: "Delete Directory" + + + *: "Видалити Папку" + + + *: "Видалити Папку" + + + + id: LANG_REALLY_DELETE + desc: Really Delete? + user: core + + *: "Delete?" + + + *: "Видалити?" + + + *: "Дiйсно видалити?" + + + + id: LANG_COPYING + desc: + user: core + + *: "Copying..." + + + *: "Копiювання..." + + + *: "Копiювання" + + + + id: LANG_DELETING + desc: + user: core + + *: "Deleting..." + + + *: "Видалення..." + + + *: "Вдалення" + + + + id: LANG_MOVING + desc: + user: core + + *: "Moving..." + + + *: "Перемiщеня..." + + + *: "Перемiщеня" + + + + id: LANG_DELETED + desc: A file has beed deleted + user: core + + *: "Deleted" + + + *: "Видалено" + + + *: "Видалено" + + + + id: LANG_SET_AS_BACKDROP + desc: text for onplay menu entry + user: core + + *: none + lcd_non-mono: "Set As Backdrop" + + + *: none + lcd_non-mono: "Встановити Як Фон" + + + *: none + lcd_non-mono: "Встановити Як Фон" + + + + id: LANG_BACKDROP_LOADED + desc: text for splash to indicate a new backdrop has been loaded successfully + user: core + + *: none + lcd_non-mono: "Backdrop Loaded" + + + *: none + lcd_non-mono: "Фон Завантажено" + + + *: none + lcd_non-mono: "" + + + + id: LANG_BACKDROP_FAILED + desc: text for splash to indicate a failure to load a bitmap as backdrop + user: core + + *: none + lcd_non-mono: "Backdrop Failed" + + + *: none + lcd_non-mono: "Помилка Завантаження Фону" + + + *: none + lcd_non-mono: "" + + + + id: LANG_ONPLAY_OPEN_WITH + desc: Onplay open with + user: core + + *: "Open With..." + + + *: "Вiдкрити за допомогою..." + + + *: "Вiдкрити за допомогою" + + + + id: LANG_CREATE_DIR + desc: in main menu + user: core + + *: "Create Directory" + + + *: "Створити Папку" + + + *: "Створити Папку" + + + + id: LANG_PROPERTIES + desc: browser file/dir properties + user: core + + *: "Properties" + + + *: "Властивостi" + + + *: "Властивостi" + + + + id: LANG_ADD_TO_FAVES + desc: + user: core + + *: "Add to Shortcuts" + + + *: "Додати до Ярликiв" + + + *: "Додати до Ярликiв" + + + + id: LANG_PITCH + desc: "pitch" in the pitch screen + user: core + + *: none + pitchscreen: "Pitch" + + + *: none + pitchscreen: "Прискорення" + + + *: none + pitchscreen: "Прискорення" + + + + id: LANG_PITCH_UP + desc: in wps + user: core + + *: none + pitchscreen: "Pitch Up" + + + *: none + pitchscreen: "Швидше" + + + *: none + pitchscreen: "" + + + + id: LANG_PITCH_DOWN + desc: in wps + user: core + + *: none + pitchscreen: "Pitch Down" + + + *: none + pitchscreen: "Повiльнiше" + + + *: none + pitchscreen: "" + + + + id: LANG_PITCH_UP_SEMITONE + desc: in wps + user: core + + *: none + pitchscreen: "Semitone Up" + + + *: none + pitchscreen: "Збiльшити напiвтони" + + + *: none + pitchscreen: "" + + + + id: LANG_PITCH_DOWN_SEMITONE + desc: in wps + user: core + + *: none + pitchscreen: "Semitone Down" + + + *: none + pitchscreen: "Зменшити напiвтони" + + + *: none + pitchscreen: "" + + + + id: LANG_PLAYLIST_BUFFER_FULL + desc: in playlist.indices() when playlist is full + user: core + + *: "Playlist Buffer Full" + + + *: "Буфер Списку Вiдтворення Переповнено" + + + *: "Буфер Списку Вiдтворення Переповнено" + + + + id: LANG_END_PLAYLIST + desc: when playlist has finished + user: core + + *: "End of Song List" + archosplayer: "End of List" + + + *: "Кiнець Списку Пiсень" + archosplayer: "Кiнець Списку" + + + *: "Кiнець Списку Пiсень" + + + + id: LANG_CREATING + desc: Screen feedback during playlist creation + user: core + + *: "Creating" + + + *: "Створення" + + + *: "" + + + + id: LANG_NOTHING_TO_RESUME + desc: Error message displayed when resume button pressed but no playlist + user: core + + *: "Nothing to resume" + + + *: "Нiчого продовжувати" + + + *: "Нiчого продовжувати" + + + + id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR + desc: Playlist error + user: core + + *: "Error updating playlist control file" + + + *: "Помилка оновлення файлу списку вiдтворення" + + + *: "Помилка оновлення файлу списку вiдтворення" + + + + id: LANG_PLAYLIST_ACCESS_ERROR + desc: Playlist error + user: core + + *: "Error accessing playlist file" + + + *: "Помилка доступу до файлу списку вiдтворення" + + + *: "Помилка доступу до файлу списку вiдтворення" + + + + id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR + desc: Playlist error + user: core + + *: "Error accessing playlist control file" + + + *: "Помилка доступу до файлу контролю списку вiдтворення" + + + *: "Помилка доступу до файлу контролю списку вiдтворення" + + + + id: LANG_PLAYLIST_DIRECTORY_ACCESS_ERROR + desc: Playlist error + user: core + + *: "Error accessing directory" + + + *: "Помилка доступу до папки" + + + *: "Помилка доступу до папки" + + + + id: LANG_PLAYLIST_CONTROL_INVALID + desc: Playlist resume error + user: core + + *: "Playlist control file is invalid" + + + *: "Файл контролю списку вiдтворення пошкоджено" + + + *: "Файл контролю списку вiдтворення пошкоджено" + + + + id: LANG_PAUSE + desc: in wps and recording trigger menu + user: core + + *: "Pause" + + + *: "Пауза" + + + *: "Пауза" + + + + id: LANG_MODE + desc: in wps F2 pressed and radio screen + user: core + + *: "Mode:" + + + *: "Режим:" + + + *: "" + + + + id: LANG_TIME + desc: Used on the bookmark select window to label elapsed time + user: core + + *: "Time" + + + *: "Час" + + + *: "Час" + + +/* TODO: cleanup LANG_USB_CHARGING unless HAVE_USB_CHARGING_ENABLE defined, + * the selector should probably be usb_charging_enable_enable as well. */ + + id: LANG_USB_CHARGING + desc: in Battery menu + user: core + + *: none + usb_charging_enable: "Charge During USB Connection" + + + *: none + usb_charging_enable: "Заряджати, при пiдключенню по USB" + + + *: none + usb_charging_enable: "Заряджати при пiдключенню по USB" + + + + id: LANG_KEYLOCK_ON + desc: displayed when key lock is on + user: core + + *: "Buttons Locked" + + + *: "Кнопки Заблоковано" + + + *: "" + + + + id: LANG_KEYLOCK_OFF + desc: displayed when key lock is turned off + user: core + + *: "Buttons Unlocked" + + + *: "Кнопки Розблоковано" + + + *: "" + + + + id: LANG_RECORDING_TIME + desc: Display of recorded time + user: core + + *: none + recording: "Time:" + + + *: none + recording: "Час:" + + + *: none + recording: "" + + + + id: LANG_DISK_FULL + desc: in recording screen + user: core + + *: none + recording: "The disk is full. Press OFF to continue." + iriverh100,iriverh120,iriverh300: "The disk is full. Press STOP to continue." + iaudiom5,iaudiox5: "The disk is full. Press POWER to continue." + sansae200*,sansac200*,vibe500: "The disk is full. Press PREV to continue." + + + *: none + recording: "Диск повний. Натичнiть OFF для продовження." + iriverh100,iriverh120,iriverh300: "Диск повний. Натичнiть STOP для продовження." + iaudiom5,iaudiox5: "Диск повний. Натичнiть POWER для продовження." + sansae200*,sansac200*,vibe500: "Диск повний. Натичнiть PREV для продовження." + + + *: none + recording,iriverh100,iriverh120,iriverh300,iaudiom5,iaudiox5,sansae200*,sansac200*: "" + + + + id: LANG_DB_INF + desc: -inf db for values below measurement + user: core + + *: none + recording: "-inf" + + + *: none + recording: "-inf" + + + *: none + recording: "minus infinity" + + + + id: LANG_CONFIRM_SHUTDOWN + desc: in shutdown screen + user: core + + *: none + soft_shutdown: "Press OFF to shut down" + + + *: none + soft_shutdown: "Натиснiть OFF для вимкнення" + + + *: none + soft_shutdown: "" + + + + id: LANG_REMOVE_MMC + desc: before acknowledging usb in case an MMC is inserted (Ondio) + user: core + + *: none + archosondio*: "Please remove inserted MMC" + + + *: none + archosondio*: "Будьласк витягнiть вставлену MMC" + + + *: none + archosondio*: "Будьласк витягнiть вставлену multimedia card" + + + + id: LANG_BOOT_CHANGED + desc: File browser discovered the boot file was changed + user: core + + *: "Boot changed" + + + *: "Файл завантаження змiнено" + + + *: "Файл завантаження змiнено" + + + + id: LANG_REBOOT_NOW + desc: Do you want to reboot? + user: core + + *: "Reboot now?" + + + *: "Перезавантажити зараз?" + + + *: "Перезавантажити зараз?" + + + + id: LANG_OFF_ABORT + desc: Used on archosrecorder models + user: core + + *: "OFF to abort" + archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" + ipod*: "PLAY/PAUSE to abort" + iaudiox5,iaudiom5: "Long PLAY to abort" + iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" + gigabeats: "BACK to abort" + gigabeatfx: "POWER to abort" + + + *: "OFF для вiдмiни" + archosplayer,iriverh100,iriverh120,iriverh300: "STOP для вiдмiни" + ipod*: "PLAY/PAUSE для вiдмiни" + iaudiox5,iaudiom5: "Довге натискання PLAY для вiдмiни" + iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV для вiдмiни" + gigabeats: "BACK для вiдмiни" + gigabeatfx: "POWER для вiдмiни" + + + *: "" + + + + id: LANG_NO_FILES + desc: in settings_menu + user: core + + *: "No files" + + + *: "Файли Вiдсутнi" + + + *: "Файли Вiдсутнi" + + + + id: LANG_KEYBOARD_LOADED + desc: shown when a keyboard has been loaded from the dir browser + user: core + + *: "New Keyboard" + + + *: "Нова Клавiатура" + + + *: "Нова Клавiатура" + + + + id: LANG_PLUGIN_CANT_OPEN + desc: Plugin open error message + user: core + + *: "Can't open %s" + + + *: "Неможливо вiдкрити %s" + + + *: "" + + + + id: LANG_READ_FAILED + desc: There was an error reading a file + user: core + + *: "Failed reading %s" + + + *: "Помилка читання %s" + + + *: "" + + + + id: LANG_PLUGIN_WRONG_MODEL + desc: The plugin is not compatible with the archos model trying to run it + user: core + + *: "Incompatible model" + + + *: "Несумiсний режим" + + + *: "" + + + + id: LANG_PLUGIN_WRONG_VERSION + desc: The plugin is not compatible with the rockbox version trying to run it + user: core + + *: "Incompatible version" + + + *: "Несумiсна версiя" + + + *: "" + + + + id: LANG_PLUGIN_ERROR + desc: The plugin return an error code + user: core + + *: "Plugin returned error" + + + *: "Плагiн повернув помилку" + + + *: "" + + + + id: LANG_FILETYPES_FULL + desc: Filetype array full + user: core + + *: "Filetype array full" + + + *: "Масив типiв файлiв повний" + + + *: "Масив типiв файлiв повний" + + + + id: LANG_SHOWDIR_BUFFER_FULL + desc: in showdir(), displayed on screen when you reach buffer limit + user: core + + *: "Dir Buffer is Full!" + + + *: "Буфер Папок Повний!" + + + *: "Буфер Папок Повний!" + + + + id: LANG_INVALID_FILENAME + desc: "invalid filename entered" error message + user: core + + *: "Invalid Filename!" + + + *: "Невiрне Iм'я Файлу!" + + + *: "Невiрне Iм'я Файлу" + + + + id: LANG_PLEASE_REBOOT + desc: when activating an option that requires a reboot + user: core + + *: "Please reboot to enable" + + + *: "Перезавантажте для прийняття змiн" + + + *: "Перезавантажте для прийняття змiн" + + + + id: LANG_BATTERY_CHARGE + desc: tells that the battery is charging, instead of battery level + user: core + + *: none + charging: "Battery: Charging" + + + *: none + charging: "Акумулятор: Зарядка" + + + *: none + charging: "Акумулятор Зарядка" + + + + id: LANG_BATTERY_TOPOFF_CHARGE + desc: in info display, shows that top off charge is running Only for V1 archosrecorder + user: core + + *: none + archosrecorder: "Battery: Top-Off Chg" + + + *: none + archosrecorder: "Акумулятор: Більше Можливого" + + + *: none + archosrecorder: "Акумулятор: Більше Можливого" + + + + id: LANG_BATTERY_TRICKLE_CHARGE + desc: in info display, shows that trickle charge is running + user: core + + *: none + charging: "Battery: Trickle Chg" + + + *: none + charging: "Акумулятор: Iмульс. Заряд" + + + *: none + charging: "TАкумулятор Iмульс. Заряд" + + + + id: LANG_WARNING_BATTERY_LOW + desc: general warning + user: core + + *: "WARNING! Low Battery!" + + + *: "УВАГА! Низький рiвень заряду акумулятора!" + + + *: "УВАГА! Низький рiвень заряду акумулятора!" + + + + id: LANG_WARNING_BATTERY_EMPTY + desc: general warning + user: core + + *: "Battery empty! RECHARGE!" + + + *: "Акумулятор на межi! ЗАРЯДIТЬ!" + + + *: "Акумулятор на межi! ЗАРЯДIТЬ!" + + + + id: LANG_BYTE + desc: a unit postfix + user: core + + *: "B" + + + *: "B" + + + *: "" + + + + id: LANG_KILOBYTE + desc: a unit postfix, also voiced + user: core + + *: "KB" + + + *: "KB" + + + *: "kilobyte" + + + + id: LANG_MEGABYTE + desc: a unit postfix, also voiced + user: core + + *: "MB" + + + *: "MB" + + + *: "megabyte" + + + + id: LANG_GIGABYTE + desc: a unit postfix, also voiced + user: core + + *: "GB" + + + *: "GB" + + + *: "gigabyte" + + + + id: LANG_POINT + desc: decimal separator for composing numbers + user: core + + *: "." + + + *: "." + + + *: "точка" + + + + id: VOICE_ZERO + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "0" + + + + id: VOICE_ONE + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "1" + + + + id: VOICE_TWO + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "2" + + + + id: VOICE_THREE + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "3" + + + + id: VOICE_FOUR + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "4" + + + + id: VOICE_FIVE + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "5" + + + + id: VOICE_SIX + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "6" + + + + id: VOICE_SEVEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "7" + + + + id: VOICE_EIGHT + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "8" + + + + id: VOICE_NINE + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "9" + + + + id: VOICE_TEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "10" + + + + id: VOICE_ELEVEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "11" + + + + id: VOICE_TWELVE + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "12" + + + + id: VOICE_THIRTEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "13" + + + + id: VOICE_FOURTEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "14" + + + + id: VOICE_FIFTEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "15" + + + + id: VOICE_SIXTEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "16" + + + + id: VOICE_SEVENTEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "17" + + + + id: VOICE_EIGHTEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "18" + + + + id: VOICE_NINETEEN + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "19" + + + + id: VOICE_TWENTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "20" + + + + id: VOICE_THIRTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "30" + + + + id: VOICE_FORTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "40" + + + + id: VOICE_FIFTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "50" + + + + id: VOICE_SIXTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "60" + + + + id: VOICE_SEVENTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "70" + + + + id: VOICE_EIGHTY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "80" + + + + id: VOICE_NINETY + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "90" + + + + id: VOICE_HUNDRED + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "сто" + + + + id: VOICE_THOUSAND + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "тисяча" + + + + id: VOICE_MILLION + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "мiльйон" + + + + id: VOICE_BILLION + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "мiльярд" + + + + id: VOICE_MINUS + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "мiнус" + + + + id: VOICE_PLUS + desc: spoken only, for composing numbers + user: core + + *: "" + + + *: "" + + + *: "плюс" + + + + id: VOICE_MILLISECONDS + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "мiлiсекунд" + + + + id: VOICE_SECOND + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "секунда" + + + + id: VOICE_SECONDS + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "секунд" + + + + id: VOICE_MINUTE + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "хвилина" + + + + id: VOICE_MINUTES + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "чвилин" + + + + id: VOICE_HOUR + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "година" + + + + id: VOICE_HOURS + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "година" + + + + id: VOICE_KHZ + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "кiлогерц" + + + + id: VOICE_DB + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "децибел" + + + + id: VOICE_PERCENT + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "вiдсоток" + + + + id: VOICE_MILLIAMPHOURS + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "мiлiампер годин" + + + + id: VOICE_PIXEL + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "пiксель" + + + + id: VOICE_PER_SEC + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "за секунду" + + + + id: VOICE_HERTZ + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "герц" + + + + id: VOICE_KBIT_PER_SEC + desc: spoken only, a unit postfix + user: core + + *: "" + + + *: "" + + + *: "кiлобiт за секунду" + + + + id: VOICE_CHAR_A + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "A" + + + + + id: VOICE_CHAR_B + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "B" + + + + id: VOICE_CHAR_C + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "C" + + + + id: VOICE_CHAR_D + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "D" + + + + id: VOICE_CHAR_E + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "E" + + + + id: VOICE_CHAR_F + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "F" + + + + id: VOICE_CHAR_G + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "G" + + + + id: VOICE_CHAR_H + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "H" + + + + id: VOICE_CHAR_I + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "I" + + + + id: VOICE_CHAR_J + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "J" + + + + id: VOICE_CHAR_K + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "K" + + + + id: VOICE_CHAR_L + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "L" + + + + id: VOICE_CHAR_M + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "M" + + + + id: VOICE_CHAR_N + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "N" + + + + id: VOICE_CHAR_O + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "O" + + + + id: VOICE_CHAR_P + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "P" + + + + id: VOICE_CHAR_Q + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "Q" + + + + id: VOICE_CHAR_R + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "R" + + + + id: VOICE_CHAR_S + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "S" + + + + id: VOICE_CHAR_T + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "T" + + + + id: VOICE_CHAR_U + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "U" + + + + id: VOICE_CHAR_V + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "V" + + + + id: VOICE_CHAR_W + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "W" + + + + id: VOICE_CHAR_X + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "X" + + + + id: VOICE_CHAR_Y + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "Y" + + + + id: VOICE_CHAR_Z + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "Z" + + + + id: VOICE_DOT + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "крапка" + + + + id: VOICE_PAUSE + desc: spoken only, for spelling, a split second of silence (difficult to author) + user: core + + *: "" + + + *: "" + + + *: " " + + + + id: VOICE_FILE + desc: spoken only, prefix for file number + user: core + + *: "" + + + *: "" + + + *: "файл" + + + + id: VOICE_DIR + desc: spoken only, prefix for directory number + user: core + + *: "" + + + *: "" + + + *: "папка" + + + + id: VOICE_EXT_MPA + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "аудiо" + + + + id: VOICE_EXT_CFG + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "конфiгурацiя" + + + + id: VOICE_EXT_WPS + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "while-playing-screen" + + + + id: VOICE_EXT_ROCK + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "плагiн" + + + + id: VOICE_EXT_FONT + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "шрифт" + + + + id: VOICE_EXT_BMARK + desc: spoken only, for file extension and the word in general + user: core + + *: "" + + + *: "" + + + *: "закладка" + + + + id: VOICE_EXT_AJZ + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "прошивка" + + + + id: VOICE_EXT_RWPS + desc: spoken only, for file extension + user: core + + *: none + remote: "" + + + *: none + remote: "" + + + *: none + remote: "на пультi while-playing-screen" + + + + id: VOICE_EXT_KBD + desc: spoken only, for file extension + user: core + + *: "" + + + *: "" + + + *: "Клавiатура" + + + + id: VOICE_EXT_CUESHEET + desc: + user: core + + *: "" + + + *: "" + + + *: "cuesheet" + + + + id: VOICE_BOOKMARK_SELECT_INDEX_TEXT + desc: voice only, used in the bookmark list to label index number + user: core + + *: "" + + + *: "" + + + *: "Index" + + + + id: VOICE_CURRENT_TIME + desc: spoken only, for wall clock announce + user: core + + *: none + rtc: "" + + + *: none + rtc: "" + + + *: none + rtc: "Поточний час:" + + + + id: LANG_SYSFONT_EQUALIZER_EDIT_MODE + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Edit mode: %s %s" + + + *: none + swcodec: "Режим редагування: %s %s" + + + *: none + swcodec: "" + + + + id: LANG_SYSFONT_EQUALIZER_BAND_CUTOFF + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Cutoff" + + + *: none + swcodec: "Зрiзання" + + + *: none + swcodec: "Частота Зрiзання" + + + + id: LANG_SYSFONT_GAIN + desc: in the equalizer settings menu + user: core + + *: none + swcodec: "Gain" + + + *: none + swcodec: "Пiдсилення" + + + *: none + swcodec: "Пiдсилення" + + + + id: LANG_SYSFONT_MODE + desc: in wps F2 pressed + user: core + + *: none + lcd_bitmap: "Mode:" + + + *: none + lcd_bitmap: "Режим:" + + + *: none + lcd_bitmap: "" + + + + id: LANG_SYSFONT_DIRBROWSE_F1 + desc: in dir browser, F1 button bar text + user: core + + *: none + recorder_pad: "Menu" + + + *: none + recorder_pad: "Меню" + + + *: none + recorder_pad: "" + + + + id: LANG_SYSFONT_DIRBROWSE_F2 + desc: in dir browser, F2 button bar text + user: core + + *: none + recorder_pad: "Option" + + + *: none + recorder_pad: "Властивостi" + + + *: none + recorder_pad: "" + + + + id: LANG_SYSFONT_DIRBROWSE_F3 + desc: in dir browser, F3 button bar text + user: core + + *: none + recorder_pad: "LCD" + + + *: none + recorder_pad: "РКД" + + + *: none + recorder_pad: "" + + + + id: LANG_SYSFONT_CHANNEL_STEREO + desc: in sound_settings + user: core + + *: none + recording: "Stereo" + + + *: none + recording: "Стерео" + + + *: none + recording: "Стерео" + + + + id: LANG_SYSFONT_CHANNEL_MONO + desc: in sound_settings + user: core + + *: none + recording: "Mono" + + + *: none + recording: "Моно" + + + *: none + recording: "Моно" + + + + id: LANG_SYSFONT_RECORDING_QUALITY + desc: in the recording settings + user: core + + *: none + recording_hwcodec: "Quality" + + + *: none + recording_hwcodec: "Якiсть" + + + *: none + recording_hwcodec: "Якiсть" + + + + id: LANG_SYSFONT_RECORDING_FREQUENCY + desc: in the recording settings + user: core + + *: none + recording: "Frequency" + + + *: none + recording: "Частота" + + + *: none + recording: "Частота" + + + + id: LANG_SYSFONT_RECORDING_SOURCE + desc: in the recording settings + user: core + + *: none + recording: "Source" + + + *: none + recording: "Джерело" + + + *: none + recording: "Джерело" + + + + id: LANG_SYSFONT_RECORDING_SRC_MIC + desc: in the recording settings + user: core + + *: none + recording: "Int. Mic" + + + *: none + recording: "Вбуд. Мiкрофон" + + + *: none + recording: "Вбудований Мiкрофон" + + + + id: LANG_SYSFONT_LINE_IN + desc: in the recording settings + user: core + + *: none + recording: "Line In" + + + *: none + recording: "Лiнiйний вхiд" + + + *: none + recording: "Лiнiйний вхiд" + + + + id: LANG_SYSFONT_RECORDING_SRC_DIGITAL + desc: in the recording settings + user: core + + *: none + recording: "Digital" + + + *: none + recording: "Цифровий" + + + *: none + recording: "Цифровий" + + + + id: LANG_SYSFONT_CHANNELS + desc: in the recording settings + user: core + + *: none + recording: "Channels" + + + *: none + recording: "Канали" + + + *: none + recording: "Канали" + + + + id: LANG_SYSFONT_RECORD_TRIGGER + desc: in recording settings_menu + user: core + + *: none + recording: "Trigger" + + + *: none + recording: "Тригер" + + + *: none + recording: "Тригер" + + + + id: VOICE_OF + desc: spoken only, as in 3/8 => 3 of 8 + user: core + + *: "" + + + *: "" + + + *: "вимкнути" + + + + id: LANG_PLUGIN_GAMES + desc: in the main menu + user: core + + *: "Games" + + + *: "Iгри" + + + *: "Iгри" + + + + id: LANG_PLUGIN_APPS + desc: in the main menu + user: core + + *: "Applications" + + + *: "Програми" + + + *: "Програми" + + + + id: LANG_PLUGIN_DEMOS + desc: in the main menu + user: core + + *: "Demos" + + + *: "Демонстрацiя" + + + *: "Демонстрацiя" + + + + id: LANG_ID3_GROUPING + desc: in tag viewer + user: core + + *: "Work" + + + *: "Робота" + + + *: "" + + + + id: LANG_SHOW_FILENAME_EXT + desc: in settings_menu + user: core + + *: "Show Filename Extensions" + + + *: "Показувати Розширення Файлiв" + + + *: "Показувати Розширення Файлiв" + + + + id: LANG_UNKNOWN_TYPES + desc: in settings_menu + user: core + + *: "Only Unknown Types" + + + *: "Тiльки Невiдомi Типи" + + + *: "Тiльки Невiдомi Типи" + + + + id: LANG_EXT_ONLY_VIEW_ALL + desc: in settings_menu + user: core + + *: "Only When Viewing All Types" + + + *: "Тiльки, якшо переглядаются Всi Типи" + + + *: "Тiльки, якшо переглядаются Всi Типи" + + + + id: VOICE_PM_UNITS_PER_TICK + desc: spoken only, peak meter release unit + user: core + + *: "" + + + *: "" + + + *: "кадрiв за секунду" + + + + id: VOICE_OCLOCK + desc: spoken only, for wall clock announce + user: core + + *: none + rtc: "" + + + *: none + rtc: "" + + + *: none + rtc: "час" + + + + id: VOICE_PM + desc: spoken only, for wall clock announce + user: core + + *: none + rtc: "" + + + *: none + rtc: "" + + + *: none + rtc: "P M" + + + + id: VOICE_AM + desc: spoken only, for wall clock announce + user: core + + *: none + rtc: "" + + + *: none + rtc: "" + + + *: none + rtc: "A M" + + + + id: VOICE_OH + desc: spoken only, for wall clock announce + user: core + + *: none + rtc: "" + + + *: none + rtc: "" + + + *: none + rtc: "ох" + + + + id: LANG_PM_CLIPCOUNTER + desc: in settings, for recording peak meter + user: core + + *: none + recording: "Clip Counter" + + + *: none + recording: "Лiчильник Перевантажень" + + + *: none + recording: "Лiчильник Перевантажень" + + + + id: LANG_SELECTOR_START_COLOR + desc: line selector color option + user: core + + *: none + lcd_color: "Primary Colour" + + + *: none + lcd_color: "Основний Колiр" + + + *: none + lcd_color: "Основний Колiр" + + + + id: LANG_SELECTOR_END_COLOR + desc: line selector color option + user: core + + *: none + lcd_color: "Secondary Colour" + + + *: none + lcd_color: "Другорядний Колiр" + + + *: none + lcd_color: "Другорядний Колiр" + + + + id: LANG_SELECTOR_TEXT_COLOR + desc: line selector text color option + user: core + + *: none + lcd_color: "Text Colour" + + + *: none + lcd_color: "Колiр Тексту" + + + *: none + lcd_color: "Колiр Тексту" + + + + id: LANG_INVERT_CURSOR_COLOR + desc: in settings_menu + user: core + + *: none + lcd_color: "Bar (Solid Colour)" + + + *: none + lcd_color: "Смужка (Одним Кольором)" + + + *: none + lcd_color: "Смужка (Одним Кольором)" + + + + id: LANG_INVERT_CURSOR_GRADIENT + desc: in settings_menu + user: core + + *: none + lcd_color: "Bar (Gradient Colour)" + + + *: none + lcd_color: "Смужка (Подвiйний Колiр)" + + + *: none + lcd_color: "Смужка (Подвiйний Колiр)" + + + + id: LANG_CODEPAGE_CENTRAL_EUROPEAN + desc: in codepage setting menu + user: core + + *: "Central European (CP1250)" + + + *: "Центрально Европейська (CP1250)" + + + *: "Центрально Европейська" + + + + id: LANG_THEME_MENU + desc: in the settings menu + user: core + + *: "Theme Settings" + + + *: "Налаштування Тем" + + + *: "Налаштування Тем" + + + + id: LANG_COLORS_MENU + desc: colours menu under theme settings + user: core + + *: none + lcd_color: "Colours" + + + *: none + lcd_color: "Кольори" + + + *: none + lcd_color: "Кольори" + + + + id: LANG_SELECTOR_COLOR_MENU + desc: line selector color menu title + user: core + + *: none + lcd_color: "Line Selector Colours" + + + *: none + lcd_color: "Колiр Смужки Вибору" + + + *: none + lcd_color: "Колiр Смужки Вибору" + + + + id: VOICE_EDIT + desc: keyboard + user: core + + *: "" + + + *: "" + + + *: "Редагувати" + + + + id: VOICE_BLANK + desc: keyboard + user: core + + *: "" + + + *: "" + + + *: "Пусто" + + + + id: VOICE_EMPTY_LIST + desc: spoken only, when a list dialog contains no elements + user: core + + *: "" + + + *: "" + + + *: "Порожнiй список" + + + + id: LANG_NOT_PRESENT + desc: when external memory is not present + user: core + + *: none + multivolume: "Not present" + + + *: none + multivolume: "Не присутнiй" + + + *: none + multivolume: "Не присутнiй" + + + + id: LANG_TALK_BATTERY_LEVEL + desc: Setting for spontaneous battery level announcement + user: core + + *: "Announce Battery Level" + + + *: "Повiдомляти Заряд Акумулятора" + + + *: "Повiдомляти Заряд Акумулятора" + + + + id: LANG_VOICE_FILETYPE + desc: voice settings menu + user: core + + *: "Say File Type" + + + *: "Сказати Тип Файлу" + + + *: "Сказати Тип Файлу" + + + + id: LANG_BASS_CUTOFF + desc: Bass setting cut-off frequency + user: core + + *: none + ipodvideo: "Bass Cutoff" + + + *: none + ipodvideo: "Вiдсiкання Басу" + + + *: none + ipodvideo: "Вiдсiкання Басу" + + + + id: LANG_TREBLE_CUTOFF + desc: Treble setting cut-off frequency + user: core + + *: none + ipodvideo: "Treble Cutoff" + + + *: none + ipodvideo: "Вiдсiкання Високих Частот" + + + *: none + ipodvideo: "Вiдсiкання Високих Частот" + + + + id: LANG_TAGNAVI_RANDOM + desc: "" entry in tag browser + user: core + + *: "" + + + *: "<Випадково>" + + + *: "Випадково" + + + + id: LANG_SAVE_SOUND + desc: save a sound config file + user: core + + *: "Save Sound Settings" + + + *: "Зберегти Налаштування Звуку" + + + *: "Зберегти Налаштування Звуку" + + + + id: LANG_KEYCLICK + desc: in keyclick settings menu + user: core + + *: none + swcodec: "Keyclick" + + + *: none + swcodec: "Озвучення Натискання Кнопок" + + + *: none + swcodec: "Озвучення Натискання Кнопок" + + + + id: LANG_KEYCLICK_REPEATS + desc: in keyclick settings menu + user: core + + *: none + swcodec: "Keyclick Repeats" + + + *: none + swcodec: "Повторення Сигналу Натискання" + + + *: none + swcodec: "Повторення Сигналу Натискання" + + + + id: LANG_ACCESSORY_SUPPLY + desc: in system settings menu + user: core + + *: none + accessory_supply: "Accessory Power Supply" + + + *: none + accessory_supply: "Додатковi Джерела Живлення" + + + *: none + accessory_supply: "Додатковi Джерела Живлення" + + + + id: LANG_UNKNOWN + desc: generic string for unknown states, such as an unset clock + user: core + + *: "Unknown" + + + *: "Невiдомо" + + + *: "Невiдомо" + + + + id: VOICE_QUICKSCREEN + desc: spoken only, Announces entering the "quick screen" + user: core + + *: "" + + + *: "" + + + *: "Швидкий екран" + + + + id: VOICE_OK + desc: spoken only, On exiting a context, specifically the quick screen + user: core + + *: "" + + + *: "" + + + *: "OK" + + + + id: LANG_STOP_RECORDING_AND_SHUTDOWN + desc: in record timesplit options + user: core + + *: none + recording: "Stop Recording And Shutdown" + + + *: none + recording: "Зупинити Запис i Вимкнути" + + + *: none + recording: "Зупинити Запис i Вимкнути" + + + + id: LANG_TOUCHPAD_SENSITIVITY + desc: touchpad sensitivity setting + user: core + + *: none + gigabeatfx: "Touchpad Sensitivity" + + + *: none + gigabeatfx: "Чутливiсть Тачпаду" + + + *: none + gigabeatfx: "Чутливiсть Тачпаду" + + + + id: LANG_HIGH + desc: in settings_menu + user: core + + *: none + gigabeatfx: "High" + + + *: none + gigabeatfx: "Висока" + + + *: none + gigabeatfx: "Висока" + + + + id: LANG_SERIAL_BITRATE + desc: in system settings menu + user: core + + *: none + serial_port: "Serial Bitrate" + + + *: none + serial_port: "Швидкiсть Послiдовного Порту" + + + *: none + serial_port: "Швидкiсть Послiдовного Порту" + + + + id: LANG_SERIAL_BITRATE_AUTO + desc: in system settings menu + user: core + + *: none + serial_port: "Auto" + + + *: none + serial_port: "Авто" + + + *: none + serial_port: "Автоматично" + + + + id: LANG_SERIAL_BITRATE_9600 + desc: in system settings menu + user: core + + *: none + serial_port: "9600" + + + *: none + serial_port: "9600" + + + *: none + serial_port: "9600" + + + + id: LANG_SERIAL_BITRATE_19200 + desc: in system settings menu + user: core + + *: none + serial_port: "19200" + + + *: none + serial_port: "19200" + + + *: none + serial_port: "19200" + + + + id: LANG_SERIAL_BITRATE_38400 + desc: in system settings menu + user: core + + *: none + serial_port: "38400" + + + *: none + serial_port: "38400" + + + *: none + serial_port: "38400" + + + + id: LANG_SERIAL_BITRATE_57600 + desc: in system settings menu + user: core + + *: none + serial_port: "57600" + + + *: none + serial_port: "57600" + + + *: none + serial_port: "57600" + + + + id: LANG_VERY_SLOW + desc: in settings_menu + user: core + + *: "Very slow" + + + *: "Дуже повiльно" + + + *: "Дуже повiльно" + + + + id: LANG_SLOW + desc: in settings_menu + user: core + + *: "Slow" + + + *: "Повiльно" + + + *: "Повiльно" + + + + id: LANG_VERY_FAST + desc: in settings_menu + user: core + + *: "Very fast" + + + *: "Дуже швидко" + + + *: "Дуже швидко" + + + + id: LANG_FAST + desc: in settings_menu + user: core + + *: "Fast" + + + *: "Швидко" + + + *: "Швидко" + + + + id: LANG_SKIP_LENGTH + desc: playback settings menu + user: core + + *: "Skip Length" + + + *: "Пропустити Довжину" + + + *: "Пропустити Довжину" + + + + id: LANG_SKIP_TRACK + desc: skip length setting entry 0 + user: core + + *: "Skip Track" + + + *: "Пропустити Трек" + + + *: "Пропустити Трек" + + + + id: VOICE_CHAR_SLASH + desc: spoken only, for spelling + user: core + + *: "" + + + *: "" + + + *: "слеш" + + + + id: LANG_GAIN_LEFT + desc: in the recording screen + user: core + + *: none + recording: "Gain L" + + + *: none + recording: "Пiдсилення Лiв." + + + *: none + recording: "Пiдсилення Лiвого" + + + + id: LANG_GAIN_RIGHT + desc: in the recording screen + user: core + + *: none + recording: "Gain R" + + + *: none + recording: "Пiдсилення Прав." + + + *: none + recording: "Пiдсилення Правого" + + + + id: LANG_RECORDING_AGC_PRESET + desc: automatic gain control in record settings and screen + user: core + + *: none + agc: "AGC" + + + *: none + agc: "АКП" + + + *: none + agc: "Автоматичний контроль пiдсилення" + + + + id: LANG_RECORDING_AGC_CLIPTIME + desc: in record settings + user: core + + *: none + agc: "AGC clip time" + + + *: none + agc: "АКП часу клiпу" + + + *: none + agc: "АКП часу клiпу" + + + + id: LANG_RECORDING_AGC_MAXGAIN + desc: AGC maximum gain in recording screen + user: core + + *: none + agc: "AGC max. gain" + + + *: none + agc: "АКП макс. пiдсилення" + + + *: none + agc: "АКП максимальне пiдсилення" + + + + id: LANG_RECORDING_FILENAME + desc: Filename header in recording screen + user: core + + *: none + recording: "Filename:" + + + *: none + recording: "Iм'я Файлу:" + + + *: none + recording: "" + + + + id: LANG_PM_CLIPCOUNT + desc: in recording GUI, for recording peak meter. MAX 5 characters! + user: core + + *: none + recording: "CLIP:" + + + *: none + recording: "Клiп:" + + + *: none + recording: "" + + + + id: LANG_RECORDING_TIMESPLIT_REC + desc: Display of record timer interval setting, on the record screen + user: core + + *: none + recording: "Split Time:" + + + *: none + recording: "Час Роздiлення:" + + + *: none + recording: "" + + + + id: LANG_RECORDING_SIZE + desc: Display of recorded file size + user: core + + *: none + recording: "Size:" + + + *: none + recording: "Розмiр:" + + + *: none + recording: "" + + + + id: LANG_RECORDING_MONO_MODE + desc: in the recording settings + user: core + + *: none + recording_swcodec: "Mono mode" + + + *: none + recording_swcodec: "Режим моно" + + + *: none + recording_swcodec: "Режим моно" + + + + id: LANG_SEARCH_RESULTS + desc: title for the list of results displayed after searching in a playlist + user: core + + *: "Search Results" + + + *: "Пошук Результатiв" + + + *: "Пошук Результатiв" + + + + id: LANG_RESET_SETTING + desc: used in the settings context menu + user: core + + *: "Reset Setting" + + + *: "Скинути Налаштування" + + + *: "Скинути Налаштування" + + + + id: LANG_LEFT_QS_ITEM + desc: used for the submenu name for the quickscreen items + user: core + + *: none + quickscreen: "Set as Left Quickscreen Item" + + + *: none + quickscreen: "Встановити як Лiву Кнопку на Швидкому Екранi" + + + *: none + quickscreen: "Встановити як Лiву Кнопку на Швидкому Екранi" + + + + id: LANG_RIGHT_QS_ITEM + desc: used for the submenu name for the quickscreen items + user: core + + *: none + quickscreen: "Set as Right Quickscreen Item" + + + *: none + quickscreen: "Встановити як Праву Кнопку на Швидкому Екранi" + + + *: none + quickscreen: "Встановити як Праву Кнопку на Швидкому Екранi" + + + + id: LANG_BOTTOM_QS_ITEM + desc: used for the submenu name for the quickscreen items + user: core + + *: none + quickscreen: "Set as Bottom Quickscreen Item" + + + *: none + quickscreen: "Встановити як Кнопку Вниз на Швидкому Екранi" + + + *: none + quickscreen: "Встановити як Кнопку Вниз на Швидкому Екранi" + + + + id: LANG_CREDITS + desc: in the Main Menu -> System screen + user: core + + *: "Credits" + + + *: "Подяки" + + + *: "Подяки" + + + + id: LANG_SORT_INTERPRET_NUMBERS + desc: in Settings -> File view + user: core + + *: "Interpret numbers when sorting" + + + *: "Як враховувати числа при сортуваннi" + + + *: "Як враховувати числа при сортуваннi" + + + + id: LANG_SORT_INTERPRET_AS_DIGIT + desc: in Settings -> File view + user: core + + *: "As digits" + + + *: "Як цифри" + + + *: "Як цифри" + + + + id: LANG_SORT_INTERPRET_AS_NUMBERS + desc: in Settings -> File view + user: core + + *: "As whole numbers" + + + *: "Як числа" + + + *: "Як числа" + + + + id: LANG_ENABLE_SPEAKER + desc: in Settings -> Sound Settings + user: core + + *: none + speaker: "Enable Speaker" + + + *: none + speaker: "Ввiмкнути Динамiк" + + + *: none + speaker: "Ввiмкнути Динамiк" + + + + id: LANG_TOUCHSCREEN_MODE + desc: in Settings -> General -> Display -> Touchscreen Settings + user: core + + *: none + touchscreen: "Touchscreen Mode" + + + *: none + touchscreen: "Режим Тачскрiну" + + + *: none + touchscreen: "Режим Тачскрiну" + + + + id: LANG_TOUCHSCREEN_GRID + desc: in Settings -> General -> Display -> Touchscreen Settings + user: core + + *: none + touchscreen: "3x3 Grid" + + + *: none + touchscreen: "3x3 Сiтка" + + + *: none + touchscreen: "3 на 3 сiтка" + + + + id: LANG_TOUCHSCREEN_POINT + desc: in Settings -> General -> Display -> Touchscreen Settings + user: core + + *: none + touchscreen: "Absolute Point" + + + *: none + touchscreen: "Абсолютний Центр" + + + *: none + touchscreen: "Абсолютний Центр" + + + + id: LANG_PREVENT_SKIPPING + desc: in Settings -> Playback Settings + user: core + + *: "Prevent Track Skipping" + + + *: "Заборонити пропуск треку" + + + *: "Заборонити пропуск треку" + + + + id: LANG_TIMESTRETCH + desc: timestretch enable + user: core + + *: none + swcodec: "Timestretch" + + + *: none + swcodec: "Розтягування Часу" + + + *: none + swcodec: "Розтягування Часу" + + + + id: LANG_SPEED + desc: timestretch speed + user: core + + *: none + swcodec: "Speed" + + + *: none + swcodec: "Швидкiсть" + + + *: none + swcodec: "Швидкiсть" + + + + id: LANG_TOUCHSCREEN_SETTINGS + desc: in Settings -> General -> Display menu + user: core + + *: none + touchscreen: "Touchscreen Settings" + + + *: none + touchscreen: "Налаштування Тачскрiну" + + + *: none + touchscreen: "Налаштування Тачскрiну" + + + + id: LANG_TOUCHSCREEN_CALIBRATE + desc: in Settings -> General -> Display -> Touchscreen Settings + user: core + + *: none + touchscreen: "Calibrate" + + + *: none + touchscreen: "Калiбрування" + + + *: none + touchscreen: "Калiбрування" + + + + id: LANG_TOUCHSCREEN_RESET_CALIBRATION + desc: in Settings -> General -> Display -> Touchscreen Settings + user: core + + *: none + touchscreen: "Reset Calibration" + + + *: none + touchscreen: "Скинути Калiбрування" + + + *: none + touchscreen: "Скинути Калiбрування" + + + + id: LANG_STATUSBAR_TOP + desc: in Settings -> General -> Display -> statusbar + user: core + + *: "Top" + + + *: "Верх" + + + *: "Верх" + + + + id: LANG_STATUSBAR_BOTTOM + desc: in Settings -> General -> Display -> statusbar + user: core + + *: "Bottom" + + + *: "Низ" + + + *: "Низ" + + + + id: LANG_REMOTE_STATUSBAR + desc: in Settings -> General -> Display -> statusbar + user: core + + *: none + remote: "Remote Statusbar" + + + *: none + remote: "Панель Статусу Пульту" + + + *: none + remote: "Панель Статусу Пульту" + + + + id: LANG_SEMITONE + desc: + user: core + + *: none + pitchscreen: "Semitone" + + + *: none + pitchscreen: "Напiвтон" + + + *: none + pitchscreen: "Напiвтон" + + + + id: LANG_STRETCH_LIMIT + desc: "limit" in pitch screen + user: core + + *: none + pitchscreen: "Limit" + + + *: none + pitchscreen: "Межа" + + + *: none + pitchscreen: "Межа" + + + + id: LANG_PLAYBACK_RATE + desc: "rate" in pitch screen + user: core + + *: none + pitchscreen: "Rate" + + + *: none + pitchscreen: "Оцiнка" + + + *: none + pitchscreen: "Оцiнка" + + diff --git a/docs/profontdoc.txt b/docs/profontdoc.txt index 93b990691c..884b400adf 100644 --- a/docs/profontdoc.txt +++ b/docs/profontdoc.txt @@ -1,174 +1,174 @@ -########################################################################## -# IMPORTANT NOTE # -# # -# This is the readme file of the ProFont distribution for # -# Apple Macintosh. I've added it because it felt wrong to distribute # -# a Windows version of ProFont without the words of the original # -# authors. # -# !! Please note that some of the information provided below is # -# NOT valid for ProFont/Windows !! Just figure it out ... ;-) # -# The Windows version was created using the files from the # -# “ProFontWindows 2.2 ƒ” folder mentioned below. # -# # -# Comparing Mac + Win version, you'll see that all font sizes are # -# off by 1. This means that Win 8pt version displays like Mac 9pt # -# version. # -# # -# For questions about the windows version of ProFont, contact: # -# mail@tobias-jung.de (please write in english or german language) # -# Tobias Jung, August 2002 # -########################################################################## -# For version information, # -# PLEASE READ v1_vs_v2.txt ! # -########################################################################## - -ProFont Distribution 2.2 -21 July 1997 -SQ Software -  - - - - - - -• What is ProFont? - - ProFont began life as a better version of “Monaco 9” which is especially good for programmers. It was created circa 1987 by Andrew Welch. - - In version 1.1 of the ProFont distribution, ProFont ceased being just a 9 point bitmap font. Carl Osterwald contributed bitmaps at several larger sizes and an outline version of ProFont in both TrueType and Adobe Type 1 (ATM) formats. - - In version 1.2 of the ProFont distribution, Carl extended ProFont to include the entire Macintosh character set including accented characters with ASCII codes from 0x80 to 0xFF. - - In version 2.0 of the ProFont distribution, Carl provided an ISOLatin1 encoded version of ProFont. The shapes of several of the characters have been modified for improved readability, and a 7 pt bitmap version of ProFont is included. - - In version 2.2 of the ProFont distribution, Carl produced a version of ProFont that uses the Windows character set. Once again the shapes of several of the characters have been modified for improved readability--especially when the fonts are anti-aliased. - -• What is the ProFont Distribution? - - ProFont was originally released as shareware by Andrew Welch. At that time, it was distributed inside an installer application which could replace Apple’s Monaco 9 with ProFont 9. This made using ProFont as a substitute for Monaco 9 very easy. When the Mac II and SE came out, the magic used by the original installer became ineffective. Over the years I (Steve Gilardi) have figured out how to install ProFont 9 in place of Monaco 9 through the various releases of the System Software. After a time I asked Andrew for permission to distribute ProFont along with my instructions and he agreed and also decided to change ProFont’s status from shareware to freeware. - - The methods for accomplishing the substitution for Monaco 9 have gone through significant changes over the years as the Macintosh font architecture has evolved. The various releases of what has become the “ProFont Distribution” have been my effort to share my knowledge of how to use ProFont as a replacement for Monaco 9. - - Since Carl Osterwald became involved with the project, ProFont has blossomed into a full-fledged font in its own right and most recently into a suite of related fonts. ProFont is unusual among fonts in that the outline version was designed to closely follow the original 9 pt bitmap version. More often, fonts are conceived as outlines and then rendered at the various point sizes. - - Earlier versions of the ProFont Distribution have included very involved instructions and utility programs to allow installation of ProFont as a replacement for Monaco 9. Release 2.2 contains none of those instructions. Instead, I have developed a control panel called “Monaco Tuner” which allows you to substitute a font of your choosing for Monaco. The substitution can be just for Monaco 9 or for all sizes of Monaco. Of course, I think the best substitute font to use is ProFont! See the information in the “Monaco Tuner 1.1.1 ƒ” folder for details. - -• What does ProFont 2.2 look like? - -Here’s a sample: -[ see "provsmonaco.gif" and "profomac.gif" ] - - -Also, each font folder in the ProFont distribution contains a file showing the font’s character set at 9 and 18 point sizes. You don’t need to install the corresponding font to see the character set. - -• What is included in this distribution? - -The distribution includes 7 items: - -+ “About ProFont Distribution 2.2” SimpleText document - This is the file you are reading now. - -+ “ProFont Quick Start” SimpleText document - Quick instructions for installing ProFont and Monaco Tuner. - -+ “ProFont 2.2 ƒ” folder - Version 2.2 of the “ProFont” font. This includes both TrueType and ATM versions of ProFont. - -+ “ProFontISOLatin1 2.2 ƒ” folder - Version 2.2 of the “ProFontISOLatin1” font. TrueType and ATM versions of ProFontISOLatin1 are included. - -+ “ProFontClassic 1.2 ƒ” folder - ProFontClassic 1.2 is the 9 pt size of ProFont from the 1.2 release of the ProFont distribution. It’s included mainly for those who prefer the look of ProFont 1.2 to that of ProFont 2.2 and who are only interested in substituting ProFontClassic for Monaco 9 using Monaco Tuner. - -+ “ProFontWindows 2.2 ƒ” folder - Version 2.2 of the “ProFontWindows” font. This is the first release of this font, but it is version 2.2 to keep its version number in sync with that of the “ProFont” font. TrueType and ATM versions of ProFontWindows are included. This font can be useful for viewing files that originate on Windows machines. - -+ “Monaco Tuner 1.1.1 ƒ” folder - “Monaco Tuner” is a control panel which replaces the complicated instructions for installing “ProFont(Monaco)” included in previous releases. It lets you pick a font (such as ProFont) to be substituted for Monaco in all applications. See the file “About Monaco Tuner” inside this folder for details. - -• What kind of Macintosh and System Software do I need to use ProFont? - - The family of ProFont fonts are standard Macintosh fonts and should work on any Macintosh (or compatible) running any version of System 7 or Mac OS 8. The fonts may be compatible with System 6.0.8, but that has not been tested. Monaco Tuner requires System 7 or better and has been tested on several machines including a PowerBook 100 running System 7.0.1 and a PowerMac 8100/100 running System 7.5.3 and Mac OS 8 with and without QuickDraw GX. - -• What happens if I have problems with ProFont Distribution? - - “ProFont Distribution” is provided in the hope that it will be useful. However, it is provided AS IS and carries NO WARRANTY that it will do anything good and NO WARRANTY that it will not do anything bad. Your use of the fonts and software that make up “ProFont Distribution” is ENTIRELY AT YOUR OWN RISK. SQ Software, Stephen C. Gilardi, Carl R. Osterwald and Tobias Jung hereby disclaim any and all liability for any difficulty you may have as a result of using any part of “ProFont Distribution”. If these terms are not acceptable to you, then you must not use any part of “ProFont Distribution”. - -That being said, if you do have any difficulties or any suggestions, I’ll be very appreciative if you let me know about them so I can attempt to improve future releases of ProFont Distribution. - -• How do I install the various versions of ProFont? - - The various versions of ProFont included in this release are standard Macintosh fonts. You install them into any version of System 7 or Mac OS 8 by dragging the font suitcase containing the font you want to install onto the System Folder icon on your startup disk. - - “ProFont 2.2”, “ProFontISOLatin1 2.2”, and “ProFontWindows 2.2” also include ATM versions. Since the System Software prefers TrueType fonts to ATM fonts, special suitcases are included in the distribution which do not contain the TrueType outline version of the font. These suitcases and the corresponding PostScript font files are inside a folder called “ATM Version” within each font’s folder. To install the ATM version of one of these fonts, drag the two files contained in its “ATM Version” folder onto the System Folder icon on your startup disk. - -Note: During testing it was discovered that some internal tables in “ProFontISOLatin1” suitcase can be damaged if you use the Finder to remove the TrueType version by dragging it out of the suitcase. Fortunately, you don’t need to do that because ProFont Distribution includes the suitcase called “ProFontISOLatin1 Bitmaps” which is does not contain the TrueType version. As the instructions above indicate, please use the “ProFontISOLatin1 Bitmaps” suitcase if you want to use ProFontISOLatin1 with ATM. - -• Can I redistribute ProFont Distribution? - -“ProFont Distribution” is Copyright © 1997, SQ Software. The ProFont fonts are Copyright © 1997, Carl R. Osterwald. It is our intention that “ProFont Distribution” get the widest possible distribution. You may redistribute unmodified copies of “ProFont Distriubtion” as long as it is accompanied by an unmodified copy of “About ProFont Distribution 2.2” (this file). You may not charge anyone money for the “ProFont Distribution” package itself. The “ProFont Distribution” package can be distributed for free along with products for which you do charge money. The “ProFont Distribution” package can also be distributed for free as part of collections of more than 10 third party products sold as a collection (such as on the Apprentice CD series). If you do distribute “ProFont Distribution” along with another product or as part of a collection, Stephen C. Gilardi and Carl R. Osterwald would appreciate very much each receiving a complimentary copy of the whole distribution (e.g., any CD-ROM it appears on), but this is not a requirement. If you have questions about redistribution, please contact Stephen C. Gilardi at squeegee@usa.net. - -• Who is responsible for ProFont? - -+ Andrew Welch - The original “ProFont” was created by Andrew Welch. It was originally shareware. Andrew generously gave his permission for it to be distributed freely: “let’s make it free though [...] just credit me for making the font in the first place, and you’re good to go!” Andrew’s ProFont 9 font is no longer distributed in the ProFont Distribution, but the fonts included in ProFont Distribution 2.2 are based on it. - - Thanks Andrew! - -+ Carl Osterwald - The fonts included in ProFont Distribution 2.2 were created by Carl Osterwald. Carl created the outline versions of ProFont and implemented the Macintosh Extended ASCII Character Set for all versions of ProFont. Most recently Carl created the ProFontWindows font and did the modifications of the character shapes for ProFont 2.2. Please send praise, comments, etc., about the fonts in “ProFont Distribution 2.2” to him. - - Thanks Carl! - - Carl can be reached at “carl_osterwald@usa.net”. - -+ Steve Gilardi - I am the author of the “modern” (post Mac II/Mac SE era) ProFont distributions. I have gotten ProFont to work with successive System releases for my personal use, and have shared the methods with other folks from time to time through these distributions. Most recently I developed the “Monaco Tuner” control panel to ease the use of ProFont as a replacement for Monaco 9. Please send comments, suggestions, and questions about Monaco Tuner, ProFont in general, or the ProFont Distribution as a whole to me. - - I can be reached at “squeegee@usa.net”. - -Enjoy ProFont! - ---Steve - -Stephen C. Gilardi -SQ Software -21 July 1997 - -• Version History: - - Version 2.2: - + ProFont 2.2 and ProFontISOLatin1 2.2 include modifications to several characters - for improved readability especially when anti-aliased. - + Several small bugs fixed in the fonts. - + Improved QuickDraw GX compatibility - + ProFontWindows 2.2 introduced. - + Monaco Tuner version bumped to 1.1.1 for minor documentation updates. - - Version 2.1: - + Monaco Tuner 1.1 adds “Resizing of Monaco 9” and works around a bug which - affected desk accessories on Power Macs. - - Version 2.0: - + ProFont 2.0 includes modifications to several characters - + ProFont 2.0 includes a 7 pt bitmap version - + ProFontISOLatin1 2.0 released in response to requests from international users - + Monaco Tuner 1.0 replaces far-too-complicated “ProFont(Monaco)” installation - instructions - + ProFontClassic 1.2 is the 9 pt size of ProFont from the version 1.2 release - - Version 1.2: - + Both versions of ProFont now implement the full Macintosh Extended ASCII - character set. - - Version 1.1.1: - + “ProFont Info” (this file) now actually prints on LaserWriters. Sorry! - + Added item labeled “What about Monaco 12?” - + Minor editing of “ProFont Info” - - Version 1.1: - + “ProFont (ProFont)” now includes TrueType and Type 1 Outline Fonts! - + Includes instructions for installation under System 7.5.1. - + I think ProFont needs an installer. If you agree, please read the bullet item labeled - “Aren’t those instructions a little bit too complicated?”. +########################################################################## +# IMPORTANT NOTE # +# # +# This is the readme file of the ProFont distribution for # +# Apple Macintosh. I've added it because it felt wrong to distribute # +# a Windows version of ProFont without the words of the original # +# authors. # +# !! Please note that some of the information provided below is # +# NOT valid for ProFont/Windows !! Just figure it out ... ;-) # +# The Windows version was created using the files from the # +# “ProFontWindows 2.2 ƒ” folder mentioned below. # +# # +# Comparing Mac + Win version, you'll see that all font sizes are # +# off by 1. This means that Win 8pt version displays like Mac 9pt # +# version. # +# # +# For questions about the windows version of ProFont, contact: # +# mail@tobias-jung.de (please write in english or german language) # +# Tobias Jung, August 2002 # +########################################################################## +# For version information, # +# PLEASE READ v1_vs_v2.txt ! # +########################################################################## + +ProFont Distribution 2.2 +21 July 1997 +SQ Software +  + + + + + + +• What is ProFont? + + ProFont began life as a better version of “Monaco 9” which is especially good for programmers. It was created circa 1987 by Andrew Welch. + + In version 1.1 of the ProFont distribution, ProFont ceased being just a 9 point bitmap font. Carl Osterwald contributed bitmaps at several larger sizes and an outline version of ProFont in both TrueType and Adobe Type 1 (ATM) formats. + + In version 1.2 of the ProFont distribution, Carl extended ProFont to include the entire Macintosh character set including accented characters with ASCII codes from 0x80 to 0xFF. + + In version 2.0 of the ProFont distribution, Carl provided an ISOLatin1 encoded version of ProFont. The shapes of several of the characters have been modified for improved readability, and a 7 pt bitmap version of ProFont is included. + + In version 2.2 of the ProFont distribution, Carl produced a version of ProFont that uses the Windows character set. Once again the shapes of several of the characters have been modified for improved readability--especially when the fonts are anti-aliased. + +• What is the ProFont Distribution? + + ProFont was originally released as shareware by Andrew Welch. At that time, it was distributed inside an installer application which could replace Apple’s Monaco 9 with ProFont 9. This made using ProFont as a substitute for Monaco 9 very easy. When the Mac II and SE came out, the magic used by the original installer became ineffective. Over the years I (Steve Gilardi) have figured out how to install ProFont 9 in place of Monaco 9 through the various releases of the System Software. After a time I asked Andrew for permission to distribute ProFont along with my instructions and he agreed and also decided to change ProFont’s status from shareware to freeware. + + The methods for accomplishing the substitution for Monaco 9 have gone through significant changes over the years as the Macintosh font architecture has evolved. The various releases of what has become the “ProFont Distribution” have been my effort to share my knowledge of how to use ProFont as a replacement for Monaco 9. + + Since Carl Osterwald became involved with the project, ProFont has blossomed into a full-fledged font in its own right and most recently into a suite of related fonts. ProFont is unusual among fonts in that the outline version was designed to closely follow the original 9 pt bitmap version. More often, fonts are conceived as outlines and then rendered at the various point sizes. + + Earlier versions of the ProFont Distribution have included very involved instructions and utility programs to allow installation of ProFont as a replacement for Monaco 9. Release 2.2 contains none of those instructions. Instead, I have developed a control panel called “Monaco Tuner” which allows you to substitute a font of your choosing for Monaco. The substitution can be just for Monaco 9 or for all sizes of Monaco. Of course, I think the best substitute font to use is ProFont! See the information in the “Monaco Tuner 1.1.1 ƒ” folder for details. + +• What does ProFont 2.2 look like? + +Here’s a sample: +[ see "provsmonaco.gif" and "profomac.gif" ] + + +Also, each font folder in the ProFont distribution contains a file showing the font’s character set at 9 and 18 point sizes. You don’t need to install the corresponding font to see the character set. + +• What is included in this distribution? + +The distribution includes 7 items: + ++ “About ProFont Distribution 2.2” SimpleText document + This is the file you are reading now. + ++ “ProFont Quick Start” SimpleText document + Quick instructions for installing ProFont and Monaco Tuner. + ++ “ProFont 2.2 ƒ” folder + Version 2.2 of the “ProFont” font. This includes both TrueType and ATM versions of ProFont. + ++ “ProFontISOLatin1 2.2 ƒ” folder + Version 2.2 of the “ProFontISOLatin1” font. TrueType and ATM versions of ProFontISOLatin1 are included. + ++ “ProFontClassic 1.2 ƒ” folder + ProFontClassic 1.2 is the 9 pt size of ProFont from the 1.2 release of the ProFont distribution. It’s included mainly for those who prefer the look of ProFont 1.2 to that of ProFont 2.2 and who are only interested in substituting ProFontClassic for Monaco 9 using Monaco Tuner. + ++ “ProFontWindows 2.2 ƒ” folder + Version 2.2 of the “ProFontWindows” font. This is the first release of this font, but it is version 2.2 to keep its version number in sync with that of the “ProFont” font. TrueType and ATM versions of ProFontWindows are included. This font can be useful for viewing files that originate on Windows machines. + ++ “Monaco Tuner 1.1.1 ƒ” folder + “Monaco Tuner” is a control panel which replaces the complicated instructions for installing “ProFont(Monaco)” included in previous releases. It lets you pick a font (such as ProFont) to be substituted for Monaco in all applications. See the file “About Monaco Tuner” inside this folder for details. + +• What kind of Macintosh and System Software do I need to use ProFont? + + The family of ProFont fonts are standard Macintosh fonts and should work on any Macintosh (or compatible) running any version of System 7 or Mac OS 8. The fonts may be compatible with System 6.0.8, but that has not been tested. Monaco Tuner requires System 7 or better and has been tested on several machines including a PowerBook 100 running System 7.0.1 and a PowerMac 8100/100 running System 7.5.3 and Mac OS 8 with and without QuickDraw GX. + +• What happens if I have problems with ProFont Distribution? + + “ProFont Distribution” is provided in the hope that it will be useful. However, it is provided AS IS and carries NO WARRANTY that it will do anything good and NO WARRANTY that it will not do anything bad. Your use of the fonts and software that make up “ProFont Distribution” is ENTIRELY AT YOUR OWN RISK. SQ Software, Stephen C. Gilardi, Carl R. Osterwald and Tobias Jung hereby disclaim any and all liability for any difficulty you may have as a result of using any part of “ProFont Distribution”. If these terms are not acceptable to you, then you must not use any part of “ProFont Distribution”. + +That being said, if you do have any difficulties or any suggestions, I’ll be very appreciative if you let me know about them so I can attempt to improve future releases of ProFont Distribution. + +• How do I install the various versions of ProFont? + + The various versions of ProFont included in this release are standard Macintosh fonts. You install them into any version of System 7 or Mac OS 8 by dragging the font suitcase containing the font you want to install onto the System Folder icon on your startup disk. + + “ProFont 2.2”, “ProFontISOLatin1 2.2”, and “ProFontWindows 2.2” also include ATM versions. Since the System Software prefers TrueType fonts to ATM fonts, special suitcases are included in the distribution which do not contain the TrueType outline version of the font. These suitcases and the corresponding PostScript font files are inside a folder called “ATM Version” within each font’s folder. To install the ATM version of one of these fonts, drag the two files contained in its “ATM Version” folder onto the System Folder icon on your startup disk. + +Note: During testing it was discovered that some internal tables in “ProFontISOLatin1” suitcase can be damaged if you use the Finder to remove the TrueType version by dragging it out of the suitcase. Fortunately, you don’t need to do that because ProFont Distribution includes the suitcase called “ProFontISOLatin1 Bitmaps” which is does not contain the TrueType version. As the instructions above indicate, please use the “ProFontISOLatin1 Bitmaps” suitcase if you want to use ProFontISOLatin1 with ATM. + +• Can I redistribute ProFont Distribution? + +“ProFont Distribution” is Copyright © 1997, SQ Software. The ProFont fonts are Copyright © 1997, Carl R. Osterwald. It is our intention that “ProFont Distribution” get the widest possible distribution. You may redistribute unmodified copies of “ProFont Distriubtion” as long as it is accompanied by an unmodified copy of “About ProFont Distribution 2.2” (this file). You may not charge anyone money for the “ProFont Distribution” package itself. The “ProFont Distribution” package can be distributed for free along with products for which you do charge money. The “ProFont Distribution” package can also be distributed for free as part of collections of more than 10 third party products sold as a collection (such as on the Apprentice CD series). If you do distribute “ProFont Distribution” along with another product or as part of a collection, Stephen C. Gilardi and Carl R. Osterwald would appreciate very much each receiving a complimentary copy of the whole distribution (e.g., any CD-ROM it appears on), but this is not a requirement. If you have questions about redistribution, please contact Stephen C. Gilardi at squeegee@usa.net. + +• Who is responsible for ProFont? + ++ Andrew Welch + The original “ProFont” was created by Andrew Welch. It was originally shareware. Andrew generously gave his permission for it to be distributed freely: “let’s make it free though [...] just credit me for making the font in the first place, and you’re good to go!” Andrew’s ProFont 9 font is no longer distributed in the ProFont Distribution, but the fonts included in ProFont Distribution 2.2 are based on it. + + Thanks Andrew! + ++ Carl Osterwald + The fonts included in ProFont Distribution 2.2 were created by Carl Osterwald. Carl created the outline versions of ProFont and implemented the Macintosh Extended ASCII Character Set for all versions of ProFont. Most recently Carl created the ProFontWindows font and did the modifications of the character shapes for ProFont 2.2. Please send praise, comments, etc., about the fonts in “ProFont Distribution 2.2” to him. + + Thanks Carl! + + Carl can be reached at “carl_osterwald@usa.net”. + ++ Steve Gilardi + I am the author of the “modern” (post Mac II/Mac SE era) ProFont distributions. I have gotten ProFont to work with successive System releases for my personal use, and have shared the methods with other folks from time to time through these distributions. Most recently I developed the “Monaco Tuner” control panel to ease the use of ProFont as a replacement for Monaco 9. Please send comments, suggestions, and questions about Monaco Tuner, ProFont in general, or the ProFont Distribution as a whole to me. + + I can be reached at “squeegee@usa.net”. + +Enjoy ProFont! + +--Steve + +Stephen C. Gilardi +SQ Software +21 July 1997 + +• Version History: + + Version 2.2: + + ProFont 2.2 and ProFontISOLatin1 2.2 include modifications to several characters + for improved readability especially when anti-aliased. + + Several small bugs fixed in the fonts. + + Improved QuickDraw GX compatibility + + ProFontWindows 2.2 introduced. + + Monaco Tuner version bumped to 1.1.1 for minor documentation updates. + + Version 2.1: + + Monaco Tuner 1.1 adds “Resizing of Monaco 9” and works around a bug which + affected desk accessories on Power Macs. + + Version 2.0: + + ProFont 2.0 includes modifications to several characters + + ProFont 2.0 includes a 7 pt bitmap version + + ProFontISOLatin1 2.0 released in response to requests from international users + + Monaco Tuner 1.0 replaces far-too-complicated “ProFont(Monaco)” installation + instructions + + ProFontClassic 1.2 is the 9 pt size of ProFont from the version 1.2 release + + Version 1.2: + + Both versions of ProFont now implement the full Macintosh Extended ASCII + character set. + + Version 1.1.1: + + “ProFont Info” (this file) now actually prints on LaserWriters. Sorry! + + Added item labeled “What about Monaco 12?” + + Minor editing of “ProFont Info” + + Version 1.1: + + “ProFont (ProFont)” now includes TrueType and Type 1 Outline Fonts! + + Includes instructions for installation under System 7.5.1. + + I think ProFont needs an installer. If you agree, please read the bullet item labeled + “Aren’t those instructions a little bit too complicated?”. diff --git a/docs/sample.colours b/docs/sample.colours index 930a34e8dd..ae56e8784c 100644 --- a/docs/sample.colours +++ b/docs/sample.colours @@ -1,7 +1,7 @@ -folder:808080 -ipod:00B0B0 -mp3:00FF00 -flac:00FF00 -ogg:00FF00 -txt:FF0000 -cfg:D00000 +folder:808080 +ipod:00B0B0 +mp3:00FF00 +flac:00FF00 +ogg:00FF00 +txt:FF0000 +cfg:D00000 diff --git a/firmware/target/arm/tms320dm320/dsp-target.h b/firmware/target/arm/tms320dm320/dsp-target.h index f2c70826e8..eba611b174 100644 --- a/firmware/target/arm/tms320dm320/dsp-target.h +++ b/firmware/target/arm/tms320dm320/dsp-target.h @@ -1,27 +1,27 @@ -/* - * (C) Copyright 2007 Catalin Patulea - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ -#ifndef DSP_H +/* + * (C) Copyright 2007 Catalin Patulea + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ +#ifndef DSP_H #define DSP_H - -/* DSP memory is mapped into ARM space via HPIB. */ -#define DSP_(addr) (*(volatile unsigned short *)(0x40000 + ((addr) << 1))) + +/* DSP memory is mapped into ARM space via HPIB. */ +#define DSP_(addr) (*(volatile unsigned short *)(0x40000 + ((addr) << 1))) /* A "DSP image" is an array of these, terminated by raw_data_size_half = 0. */ struct dsp_section { @@ -34,9 +34,9 @@ struct dsp_section { /* Must define struct dsp_section before including the image. */ #include "dsp/dsp-image.h" - + void dsp_wake(void); -void dsp_load(const struct dsp_section *im); +void dsp_load(const struct dsp_section *im); void dsp_reset(void); - -#endif + +#endif diff --git a/firmware/target/arm/tms320dm320/dsp/aic23.c b/firmware/target/arm/tms320dm320/dsp/aic23.c index 72b9dfe069..8ffa5d4e70 100644 --- a/firmware/target/arm/tms320dm320/dsp/aic23.c +++ b/firmware/target/arm/tms320dm320/dsp/aic23.c @@ -1,60 +1,60 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Maurus Cuelenaere - * +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Maurus Cuelenaere + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU 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 "audio.h" -#include "registers.h" - -/* based on http://archopen.svn.sourceforge.net/viewvc/archopen/ArchOpen/trunk/libdsp/aic23.c?revision=213&view=markup */ -void audiohw_init(void) -{ - /* port config */ -#if 0 - SPCR10 = 0; /* DLB = 0 ** RJUST = 0 ** CLKSTP = 0 ** DXENA = 0 ** ABIS = 0 ** RINTM = 0 ** RSYNCER = 0 ** RFULL = 0 ** RRDY = 0 ** RRST = 0 */ - SPCR20 = (1 << 9); /* FREE = 1 ** SOFT = 0 ** FRST = 0 ** GRST = 0 ** XINTM = 0 ** XSYNCER = 0 ** XEMPTY = 0 ** XRDY = 0 ** XRST = 0 */ - RCR10 = (1 << 8) | (2 << 5); /* RFRLEN1 = 1 ** RWDLEN1 = 2 */ - RCR20 = 0; /* RPHASE = 0 ** RFRLEN2 = 0 ** RWDLEN2 = 0 ** RCOMPAND = 0 ** RFIG = 0 ** RDATDLY = 0 */ - XCR10 = (1 << 8) | (2 << 5); /* XFRLEN1 = 1 ** XWDLEN1 = 2 */ - XCR20 = 0; /* XPHASE = 0 ** XFRLEN2 = 0 ** XWDLEN2 = 0 ** XCOMPAND = 0 ** XFIG = 0 ** XDATDLY = 0 */ - SRGR10 = 0; /* FWID = 0 ** CLKGDV = 0 */ - SRGR20 = 0; /* FREE = 0 ** CLKSP = 0 ** CLKSM = 0 ** FSGM = 0 ** FPER = 0 */ - PCR0 = (1 << 1) | 1; /* IDLEEN = 0 ** XIOEN = 0 ** RIOEN = 0 ** FSXM = 0 ** FSRM = 0 ** SCLKME = 0 ** CLKSSTAT = 0 ** DXSTAT = 0 ** DRSTAT = 0 ** CLKXM = 0 ** CLKRM = 0 ** FSXP = 0 ** FSRP = 0 ** CLKXP = 1 ** CLKRP = 1 */ -#else - SPCR10 = 0; - SPCR20 = 0x0200; /* SPCR : free running mode */ - - RCR10 = 0x00A0; - RCR20 = 0x00A1; /* RCR : 32 bit receive data length */ - - XCR10 = 0x00A0; - XCR20 = 0x00A0; /* XCR : 32 bit transmit data length */ - - SRGR10 = 0; - SRGR20 = 0x3000; /* SRGR 1 & 2 */ - - PCR0 = 0x000E - 8; /* PCR : FSX, FSR active low, external FS/CLK source */ -#endif -} - -void audiohw_postinit(void) -{ - /* Trigger first XEVT0 */ - SPCR20 |= 1; -} + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "audio.h" +#include "registers.h" + +/* based on http://archopen.svn.sourceforge.net/viewvc/archopen/ArchOpen/trunk/libdsp/aic23.c?revision=213&view=markup */ +void audiohw_init(void) +{ + /* port config */ +#if 0 + SPCR10 = 0; /* DLB = 0 ** RJUST = 0 ** CLKSTP = 0 ** DXENA = 0 ** ABIS = 0 ** RINTM = 0 ** RSYNCER = 0 ** RFULL = 0 ** RRDY = 0 ** RRST = 0 */ + SPCR20 = (1 << 9); /* FREE = 1 ** SOFT = 0 ** FRST = 0 ** GRST = 0 ** XINTM = 0 ** XSYNCER = 0 ** XEMPTY = 0 ** XRDY = 0 ** XRST = 0 */ + RCR10 = (1 << 8) | (2 << 5); /* RFRLEN1 = 1 ** RWDLEN1 = 2 */ + RCR20 = 0; /* RPHASE = 0 ** RFRLEN2 = 0 ** RWDLEN2 = 0 ** RCOMPAND = 0 ** RFIG = 0 ** RDATDLY = 0 */ + XCR10 = (1 << 8) | (2 << 5); /* XFRLEN1 = 1 ** XWDLEN1 = 2 */ + XCR20 = 0; /* XPHASE = 0 ** XFRLEN2 = 0 ** XWDLEN2 = 0 ** XCOMPAND = 0 ** XFIG = 0 ** XDATDLY = 0 */ + SRGR10 = 0; /* FWID = 0 ** CLKGDV = 0 */ + SRGR20 = 0; /* FREE = 0 ** CLKSP = 0 ** CLKSM = 0 ** FSGM = 0 ** FPER = 0 */ + PCR0 = (1 << 1) | 1; /* IDLEEN = 0 ** XIOEN = 0 ** RIOEN = 0 ** FSXM = 0 ** FSRM = 0 ** SCLKME = 0 ** CLKSSTAT = 0 ** DXSTAT = 0 ** DRSTAT = 0 ** CLKXM = 0 ** CLKRM = 0 ** FSXP = 0 ** FSRP = 0 ** CLKXP = 1 ** CLKRP = 1 */ +#else + SPCR10 = 0; + SPCR20 = 0x0200; /* SPCR : free running mode */ + + RCR10 = 0x00A0; + RCR20 = 0x00A1; /* RCR : 32 bit receive data length */ + + XCR10 = 0x00A0; + XCR20 = 0x00A0; /* XCR : 32 bit transmit data length */ + + SRGR10 = 0; + SRGR20 = 0x3000; /* SRGR 1 & 2 */ + + PCR0 = 0x000E - 8; /* PCR : FSX, FSR active low, external FS/CLK source */ +#endif +} + +void audiohw_postinit(void) +{ + /* Trigger first XEVT0 */ + SPCR20 |= 1; +} diff --git a/firmware/target/arm/tms320dm320/dsp/audio.h b/firmware/target/arm/tms320dm320/dsp/audio.h index 7de2682d5d..93bc0e9c3c 100644 --- a/firmware/target/arm/tms320dm320/dsp/audio.h +++ b/firmware/target/arm/tms320dm320/dsp/audio.h @@ -1,28 +1,28 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Maurus Cuelenaere - * +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Maurus Cuelenaere + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU 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 AUDIO_H -#define AUDIO_H - -void audiohw_init(void); -void audiohw_postinit(void); - -#endif + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef AUDIO_H +#define AUDIO_H + +void audiohw_init(void); +void audiohw_postinit(void); + +#endif diff --git a/firmware/target/arm/tms320dm320/dsp/dma.c b/firmware/target/arm/tms320dm320/dsp/dma.c index 3048d294b1..6e5cb71c2b 100644 --- a/firmware/target/arm/tms320dm320/dsp/dma.c +++ b/firmware/target/arm/tms320dm320/dsp/dma.c @@ -1,233 +1,233 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Catalin Patulea - * Copyright (C) 2008 by Maurus Cuelenaere - * Copyright (C) 2009 by Karl Kurbjun - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 "registers.h" -#include "arm.h" -#include "ipc.h" - -/* Size of data buffer in words (16 bit) */ -#define DSP_BUFFER_SIZE (0x1000) - -/* Put the "data" buffer in it's own .dma section so that it can - * be handled in the linker.cmd. */ -#pragma DATA_SECTION (data, ".dma") - -/* This is the "data" buffer on the DSP side used for SARAM to McBSP (IIS) */ -static signed short data[DSP_BUFFER_SIZE]; - -/* These two describe the location of the buffer on the ARM (set in DSPHINT) */ -volatile unsigned short sdem_addrh; -volatile unsigned short sdem_addrl; - -/* This is the size of the ARM buffer (set in DSPHINT) */ -volatile unsigned short sdem_dsp_size; - -/* These two variables keep track of the buffer level in the DSP, dsp_level, - * (SARAM to McBSP) and the level on the ARM buffer (sdem_level). - * sdem_level is used in the main firmware to keep track of the current - * playback status. dsp_level is only used in this function. */ -static unsigned short dsp_level; -volatile unsigned short sdem_level; - -/* This is used to keep track of the last SDRAM to SARAM transfer */ -static unsigned short last_size; - -/* This tells us which half of the DSP buffer (data) is free */ -static unsigned short dma0_unlocked; - -/* This is used by the ARM to flag playback status and start/stop the DMA - * transfers. */ -volatile unsigned short dma0_stopped; - -/* This is used to effectively flag whether the ARM has new data ready or not */ -short waiting; - - -/* rebuffer sets up the next SDRAM to SARAM transfer and tells the ARM when DMA - * needs a new buffer. - * - * Note: The upper limit on larger buffers is the size of a short. If larger - * buffer sizes are needed the code on the ARM side needs to be changed to - * update a full long. - */ -void rebuffer(void) -{ - unsigned long sdem_addr; - - if(dma0_stopped==1 || dma0_stopped==2) /* Stop / Pause */ - { - /* Stop MCBSP DMA0 */ - DMPREC &= 0xFFFE; - /* Shut the transmitter down */ - audiohw_stop(); - - /* Stop the HPIB transfer if it is running */ - DMA_TRG = 0; - - /* Reset the following variables for DMA restart */ - sdem_level = 0; - dsp_level = 0; - last_size = 0; - - return; - } - - /* If the sdem_level is equal to the buffer size the ARM code gave - * (sdem_dsp_size) then reset the size and ask the arm for another buffer - */ - if(sdem_level == sdem_dsp_size) - { - sdem_level=0; - - /* Get a new buffer (location and size) from ARM */ - status.msg = MSG_REFILL; - waiting=1; - - /* trigger DSPHINT on the ARM */ - int_arm(); - } - - if(!waiting) - { - /* Size is in bytes (but forced 32 bit transfers). Comparison is - * against DSP_BUFFER_SIZE because it is in words and this needs to - * compare against half the total size in bytes. */ - if( dsp_level + sdem_dsp_size - sdem_level > DSP_BUFFER_SIZE) - { - last_size = DSP_BUFFER_SIZE - dsp_level; - } - else - { - last_size = sdem_dsp_size - sdem_level; - } - - /* DSP addresses are 16 bit (word). dsp_level is in bytes so it needs to - * be converted to words. */ - DSP_ADDRL = (unsigned short)data + dma0_unlocked + (dsp_level >> 1); - DSP_ADDRH = 0; - - /* SDRAM addresses are 8 bit (byte) - * Warning: These addresses are forced to 32 bit alignment! - */ - sdem_addr = ((unsigned long)sdem_addrh << 16 | sdem_addrl) + sdem_level; - SDEM_ADDRL = sdem_addr & 0xffff; - SDEM_ADDRH = sdem_addr >> 16; - - /* Set the size of the SDRAM to SARAM transfer (demac transfer) */ - DMA_SIZE = last_size; - - DMA_CTRL = 0; - - /* These are just debug signals that are not used/needed right now */ - status.payload.refill._DMA_TRG = DMA_TRG; - status.payload.refill._SDEM_ADDRH = SDEM_ADDRH; - status.payload.refill._SDEM_ADDRL = SDEM_ADDRL; - status.payload.refill._DSP_ADDRH = DSP_ADDRH; - status.payload.refill._DSP_ADDRL = DSP_ADDRL; - - /* Start the demac transfer */ - DMA_TRG = 1; - } -} - -/* This interupt handler is for the SARAM (on DSP) to McBSP IIS DMA transfer. - * It interupts at 1/2 empty and empty so that we can start filling a new buffer - * from SDRAM when a half is free. dsp_level should always be full when this - * interupt occurs except for the initial start. */ -interrupt void handle_dma0(void) -{ - /* Byte offset to half-buffer locked by DMA0. - 0 for top, DSP_BUFFER_SIZE/2 for bottom */ - unsigned short dma0_locked; - - IFR = 1 << 6; - - /* DMSRC0 is the beginning of the DMA0-locked SARAM half-buffer. */ - DMSA = 0x00 /* DMSRC0 (banked register, see page 133 of SPRU302B */; - - /* Note that these address offsets (dma0_locked and dma0_unlocked are in - * words. */ - dma0_locked = DMSDN & (DSP_BUFFER_SIZE>>1); - dma0_unlocked = dma0_locked ^ (DSP_BUFFER_SIZE>>1); - - dsp_level = 0; - - /* Start the SDRAM to SARAM copy */ - rebuffer(); -} - -/* This interupt handler runs every time a DMA transfer is complete from SDRAM - * to the SARAM buffer. It is used to update the SARAM buffer level - * (dsp_level), the SDRAM buffer level (sdem_level) and to rebuffer if the dsp - * buffer is not full. */ -interrupt void handle_dmac(void) { - IFR = 1 << 11; /* Clear interrupt */ - - /* dsp_level and sdem_level are in bytes */ - dsp_level += last_size; - sdem_level += last_size; - - /* compare to DSP_BUFFER_SIZE without a divide because it is in words and - * we want half the total size in bytes. */ - if(dsp_level < DSP_BUFFER_SIZE) - { - rebuffer(); - } -} - -void dma_init(void) { - /* Initialize some of the global variables to known values avoiding the - * .cinit section. */ - dsp_level = 0; - sdem_level = 0; - - last_size = 0; - dma0_unlocked = 0; - dma0_stopped = 1; - - waiting = 0; - - /* Configure SARAM to McBSP DMA */ - - /* Event XEVT0, 32-bit transfers, 0 frame count */ - DMSFC0 = 2 << 12 | 1 << 11; - - /* Interrupts generated, Half and full buffer. - * ABU mode, From data space with postincrement, to data space with no - * change - */ - DMMCR0 = 1 << 14 | 1 << 13 | - 1 << 12 | 1 << 8 | 1 << 6 | 1; - - /* Set the source (incrementing) location */ - DMSRC0 = (unsigned short)&data; - - /* Set the destination (static) location to the McBSP IIS interface */ - DMDST0 = (unsigned short)&DXR20; - - /* Set the size of the buffer */ - DMCTR0 = sizeof(data); - - /* Setup DMA0 interrupts and start the transfer */ - DMPREC = 2 << 6; -} +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Catalin Patulea + * Copyright (C) 2008 by Maurus Cuelenaere + * Copyright (C) 2009 by Karl Kurbjun + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 "registers.h" +#include "arm.h" +#include "ipc.h" + +/* Size of data buffer in words (16 bit) */ +#define DSP_BUFFER_SIZE (0x1000) + +/* Put the "data" buffer in it's own .dma section so that it can + * be handled in the linker.cmd. */ +#pragma DATA_SECTION (data, ".dma") + +/* This is the "data" buffer on the DSP side used for SARAM to McBSP (IIS) */ +static signed short data[DSP_BUFFER_SIZE]; + +/* These two describe the location of the buffer on the ARM (set in DSPHINT) */ +volatile unsigned short sdem_addrh; +volatile unsigned short sdem_addrl; + +/* This is the size of the ARM buffer (set in DSPHINT) */ +volatile unsigned short sdem_dsp_size; + +/* These two variables keep track of the buffer level in the DSP, dsp_level, + * (SARAM to McBSP) and the level on the ARM buffer (sdem_level). + * sdem_level is used in the main firmware to keep track of the current + * playback status. dsp_level is only used in this function. */ +static unsigned short dsp_level; +volatile unsigned short sdem_level; + +/* This is used to keep track of the last SDRAM to SARAM transfer */ +static unsigned short last_size; + +/* This tells us which half of the DSP buffer (data) is free */ +static unsigned short dma0_unlocked; + +/* This is used by the ARM to flag playback status and start/stop the DMA + * transfers. */ +volatile unsigned short dma0_stopped; + +/* This is used to effectively flag whether the ARM has new data ready or not */ +short waiting; + + +/* rebuffer sets up the next SDRAM to SARAM transfer and tells the ARM when DMA + * needs a new buffer. + * + * Note: The upper limit on larger buffers is the size of a short. If larger + * buffer sizes are needed the code on the ARM side needs to be changed to + * update a full long. + */ +void rebuffer(void) +{ + unsigned long sdem_addr; + + if(dma0_stopped==1 || dma0_stopped==2) /* Stop / Pause */ + { + /* Stop MCBSP DMA0 */ + DMPREC &= 0xFFFE; + /* Shut the transmitter down */ + audiohw_stop(); + + /* Stop the HPIB transfer if it is running */ + DMA_TRG = 0; + + /* Reset the following variables for DMA restart */ + sdem_level = 0; + dsp_level = 0; + last_size = 0; + + return; + } + + /* If the sdem_level is equal to the buffer size the ARM code gave + * (sdem_dsp_size) then reset the size and ask the arm for another buffer + */ + if(sdem_level == sdem_dsp_size) + { + sdem_level=0; + + /* Get a new buffer (location and size) from ARM */ + status.msg = MSG_REFILL; + waiting=1; + + /* trigger DSPHINT on the ARM */ + int_arm(); + } + + if(!waiting) + { + /* Size is in bytes (but forced 32 bit transfers). Comparison is + * against DSP_BUFFER_SIZE because it is in words and this needs to + * compare against half the total size in bytes. */ + if( dsp_level + sdem_dsp_size - sdem_level > DSP_BUFFER_SIZE) + { + last_size = DSP_BUFFER_SIZE - dsp_level; + } + else + { + last_size = sdem_dsp_size - sdem_level; + } + + /* DSP addresses are 16 bit (word). dsp_level is in bytes so it needs to + * be converted to words. */ + DSP_ADDRL = (unsigned short)data + dma0_unlocked + (dsp_level >> 1); + DSP_ADDRH = 0; + + /* SDRAM addresses are 8 bit (byte) + * Warning: These addresses are forced to 32 bit alignment! + */ + sdem_addr = ((unsigned long)sdem_addrh << 16 | sdem_addrl) + sdem_level; + SDEM_ADDRL = sdem_addr & 0xffff; + SDEM_ADDRH = sdem_addr >> 16; + + /* Set the size of the SDRAM to SARAM transfer (demac transfer) */ + DMA_SIZE = last_size; + + DMA_CTRL = 0; + + /* These are just debug signals that are not used/needed right now */ + status.payload.refill._DMA_TRG = DMA_TRG; + status.payload.refill._SDEM_ADDRH = SDEM_ADDRH; + status.payload.refill._SDEM_ADDRL = SDEM_ADDRL; + status.payload.refill._DSP_ADDRH = DSP_ADDRH; + status.payload.refill._DSP_ADDRL = DSP_ADDRL; + + /* Start the demac transfer */ + DMA_TRG = 1; + } +} + +/* This interupt handler is for the SARAM (on DSP) to McBSP IIS DMA transfer. + * It interupts at 1/2 empty and empty so that we can start filling a new buffer + * from SDRAM when a half is free. dsp_level should always be full when this + * interupt occurs except for the initial start. */ +interrupt void handle_dma0(void) +{ + /* Byte offset to half-buffer locked by DMA0. + 0 for top, DSP_BUFFER_SIZE/2 for bottom */ + unsigned short dma0_locked; + + IFR = 1 << 6; + + /* DMSRC0 is the beginning of the DMA0-locked SARAM half-buffer. */ + DMSA = 0x00 /* DMSRC0 (banked register, see page 133 of SPRU302B */; + + /* Note that these address offsets (dma0_locked and dma0_unlocked are in + * words. */ + dma0_locked = DMSDN & (DSP_BUFFER_SIZE>>1); + dma0_unlocked = dma0_locked ^ (DSP_BUFFER_SIZE>>1); + + dsp_level = 0; + + /* Start the SDRAM to SARAM copy */ + rebuffer(); +} + +/* This interupt handler runs every time a DMA transfer is complete from SDRAM + * to the SARAM buffer. It is used to update the SARAM buffer level + * (dsp_level), the SDRAM buffer level (sdem_level) and to rebuffer if the dsp + * buffer is not full. */ +interrupt void handle_dmac(void) { + IFR = 1 << 11; /* Clear interrupt */ + + /* dsp_level and sdem_level are in bytes */ + dsp_level += last_size; + sdem_level += last_size; + + /* compare to DSP_BUFFER_SIZE without a divide because it is in words and + * we want half the total size in bytes. */ + if(dsp_level < DSP_BUFFER_SIZE) + { + rebuffer(); + } +} + +void dma_init(void) { + /* Initialize some of the global variables to known values avoiding the + * .cinit section. */ + dsp_level = 0; + sdem_level = 0; + + last_size = 0; + dma0_unlocked = 0; + dma0_stopped = 1; + + waiting = 0; + + /* Configure SARAM to McBSP DMA */ + + /* Event XEVT0, 32-bit transfers, 0 frame count */ + DMSFC0 = 2 << 12 | 1 << 11; + + /* Interrupts generated, Half and full buffer. + * ABU mode, From data space with postincrement, to data space with no + * change + */ + DMMCR0 = 1 << 14 | 1 << 13 | + 1 << 12 | 1 << 8 | 1 << 6 | 1; + + /* Set the source (incrementing) location */ + DMSRC0 = (unsigned short)&data; + + /* Set the destination (static) location to the McBSP IIS interface */ + DMDST0 = (unsigned short)&DXR20; + + /* Set the size of the buffer */ + DMCTR0 = sizeof(data); + + /* Setup DMA0 interrupts and start the transfer */ + DMPREC = 2 << 6; +} diff --git a/firmware/target/arm/tms320dm320/dsp/dma.h b/firmware/target/arm/tms320dm320/dsp/dma.h index c55fc1507b..97ac44f8d5 100644 --- a/firmware/target/arm/tms320dm320/dsp/dma.h +++ b/firmware/target/arm/tms320dm320/dsp/dma.h @@ -1,32 +1,32 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Maurus Cuelenaere - * +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Maurus Cuelenaere + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU 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 DMA_H -#define DMA_H - + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef DMA_H +#define DMA_H + void dma_init(void); void rebuffer(void); extern int waiting; -extern volatile unsigned short dma0_stopped; - -#endif +extern volatile unsigned short dma0_stopped; + +#endif diff --git a/firmware/target/arm/tms320dm320/dsp/tsc2100.c b/firmware/target/arm/tms320dm320/dsp/tsc2100.c index 3a02eb92b4..51b09a8e94 100644 --- a/firmware/target/arm/tms320dm320/dsp/tsc2100.c +++ b/firmware/target/arm/tms320dm320/dsp/tsc2100.c @@ -1,46 +1,46 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Catalin Patulea - * +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Catalin Patulea + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU 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 "audio.h" -#include "registers.h" - -void audiohw_init(void) -{ - /* Configure McBSP */ - SPCR10 = 0; /* Receiver reset */ - SPCR20 = 3 << 4; /* Rate gen disabled, RINT=XSYNCERR, TX disabled for now */ - PCR0 = 1 << 1; /* Serial port pins, external frame sync, external clock, - frame sync FSX is active-high, - TX data sampled on falling clock */ - XCR10 = 0x00a0; /* 1 word per frame, 32 bits per word */ - XCR20 = 0; /* Single-phase, unexpected frame pulse restarts xfer, - 0-bit data delay */ -} - -void audiohw_start(void) -{ - /* Trigger first XEVT0 */ - SPCR20 |= 1; + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "audio.h" +#include "registers.h" + +void audiohw_init(void) +{ + /* Configure McBSP */ + SPCR10 = 0; /* Receiver reset */ + SPCR20 = 3 << 4; /* Rate gen disabled, RINT=XSYNCERR, TX disabled for now */ + PCR0 = 1 << 1; /* Serial port pins, external frame sync, external clock, + frame sync FSX is active-high, + TX data sampled on falling clock */ + XCR10 = 0x00a0; /* 1 word per frame, 32 bits per word */ + XCR20 = 0; /* Single-phase, unexpected frame pulse restarts xfer, + 0-bit data delay */ } - + +void audiohw_start(void) +{ + /* Trigger first XEVT0 */ + SPCR20 |= 1; +} + void audiohw_stop(void) { /* Reset the transmitter */ diff --git a/firmware/target/arm/tms320dm320/dsp_image_helloworld.h b/firmware/target/arm/tms320dm320/dsp_image_helloworld.h index b98efc85d1..f266d2a38b 100644 --- a/firmware/target/arm/tms320dm320/dsp_image_helloworld.h +++ b/firmware/target/arm/tms320dm320/dsp_image_helloworld.h @@ -1,31 +1,31 @@ -#ifndef DSP_IMAGE_HELLOWORLD -#define DSP_IMAGE_HELLOWORLD -/* - * This is just a dummy DSP image so that dsp-dm320.c compiles. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ - -static const struct dsp_section dsp_image_helloworld[] = { - {NULL, 0, 0} -}; - -/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */ -#define _status 0x0000 -#define _acked 0x0000 - -#endif +#ifndef DSP_IMAGE_HELLOWORLD +#define DSP_IMAGE_HELLOWORLD +/* + * This is just a dummy DSP image so that dsp-dm320.c compiles. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + +static const struct dsp_section dsp_image_helloworld[] = { + {NULL, 0, 0} +}; + +/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */ +#define _status 0x0000 +#define _acked 0x0000 + +#endif diff --git a/firmware/target/arm/tms320dm320/uart-target.h b/firmware/target/arm/tms320dm320/uart-target.h index 9be9ba51fe..b065442da6 100644 --- a/firmware/target/arm/tms320dm320/uart-target.h +++ b/firmware/target/arm/tms320dm320/uart-target.h @@ -1,32 +1,32 @@ -/* - * (C) Copyright 2007 Catalin Patulea - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ -#ifndef UART_H -#define UART_H - -void uart_init(void); -bool uart1_available(void); - -int uart1_gets_queue(char *, int); -void uart1_puts(const char *str, int size); -void uart1_gets(char *str, int size); -void uart1_putc(char ch); - -void uart1_clear_queue(void); -#endif +/* + * (C) Copyright 2007 Catalin Patulea + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ +#ifndef UART_H +#define UART_H + +void uart_init(void); +bool uart1_available(void); + +int uart1_gets_queue(char *, int); +void uart1_puts(const char *str, int size); +void uart1_gets(char *str, int size); +void uart1_putc(char ch); + +void uart1_clear_queue(void); +#endif diff --git a/manual/frontpage/rockboxlogo.svg b/manual/frontpage/rockboxlogo.svg index fbe8a9dbed..a33189cefb 100644 --- a/manual/frontpage/rockboxlogo.svg +++ b/manual/frontpage/rockboxlogo.svg @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rbutil/rbutil.pro b/rbutil/rbutil.pro index ebee93caa3..7e8f422402 100644 --- a/rbutil/rbutil.pro +++ b/rbutil/rbutil.pro @@ -1,2 +1,2 @@ -SUBDIRS = rbutilqt +SUBDIRS = rbutilqt TEMPLATE = subdirs \ No newline at end of file diff --git a/rbutil/tools/Makefile b/rbutil/tools/Makefile index baafdf84be..f22b9b6f8b 100644 --- a/rbutil/tools/Makefile +++ b/rbutil/tools/Makefile @@ -1,25 +1,25 @@ -CFLAGS=-Wall -W -D_LARGEFILE64_SOURCE - -ifeq ($(findstring CYGWIN,$(shell uname)),CYGWIN) -CROSS= -CFLAGS+=-mno-cygwin -else -ifeq ($(findstring MINGW,$(shell uname)),MINGW) -CROSS= -else -CROSS=i586-mingw32msvc- -endif -endif - -NATIVECC = gcc -CC = $(CROSS)gcc -WINDRES = $(CROSS)windres - - -all: bin2c - -bin2c: bin2c.c - $(NATIVECC) $(CFLAGS) -o bin2c bin2c.c - -clean: - $(RM) bin2c bin2c.exe +CFLAGS=-Wall -W -D_LARGEFILE64_SOURCE + +ifeq ($(findstring CYGWIN,$(shell uname)),CYGWIN) +CROSS= +CFLAGS+=-mno-cygwin +else +ifeq ($(findstring MINGW,$(shell uname)),MINGW) +CROSS= +else +CROSS=i586-mingw32msvc- +endif +endif + +NATIVECC = gcc +CC = $(CROSS)gcc +WINDRES = $(CROSS)windres + + +all: bin2c + +bin2c: bin2c.c + $(NATIVECC) $(CFLAGS) -o bin2c bin2c.c + +clean: + $(RM) bin2c bin2c.exe diff --git a/utils/MTP/beastpatcher/mtp_win32.c b/utils/MTP/beastpatcher/mtp_win32.c index 7a7c6db769..15d0d705e2 100644 --- a/utils/MTP/beastpatcher/mtp_win32.c +++ b/utils/MTP/beastpatcher/mtp_win32.c @@ -1,232 +1,232 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * - * $Id$ - * - * Copyright (c) 2009, Dave Chapman - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * - ****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mtp_common.h" - -#include "../MTP_DLL/MTP_DLL.h" - - -static int filesize(const char* filename); - - -int mtp_init(struct mtp_info_t* mtp_info) -{ - /* Fill the info struct with zeros - mainly for the strings */ - memset(mtp_info, 0, sizeof(struct mtp_info_t)); - - return 0; - -} - -int mtp_finished(struct mtp_info_t* mtp_info) -{ - (void)mtp_info; - - return 0; -} - -int mtp_scan(struct mtp_info_t* mtp_info) -{ - wchar_t name[256]; - wchar_t manufacturer[256]; - DWORD version; - int num = 0; - - num = mtp_description(name, manufacturer, &version); - - wcstombs(mtp_info->manufacturer, manufacturer, 200); - wcstombs(mtp_info->modelname, name, 200); - - sprintf(mtp_info->version, "%x", (unsigned int)version); - return (num > 0) ? num : -1; - -} - -static void callback(unsigned int progress, unsigned int max) -{ - int percent = (progress * 100) / max; - - printf("[INFO] Progress: %u of %u (%d%%)\r", progress, max, percent); - fflush(stdout); -} - - -int mtp_send_firmware(struct mtp_info_t* mtp_info, unsigned char* fwbuf, - int fwsize) -{ - HANDLE hTempFile; - DWORD dwRetVal; - DWORD dwBytesWritten; - UINT uRetVal; - TCHAR szTempName[1024]; - TCHAR lpPathBuffer[1024]; - BOOL fSuccess; - wchar_t *tmp; - int ret; - - (void)mtp_info; - - /* Get the path for temporary files */ - dwRetVal = GetTempPath(sizeof(lpPathBuffer), lpPathBuffer); - if (dwRetVal > sizeof(lpPathBuffer) || (dwRetVal == 0)) - { - fprintf(stderr, "[ERR] GetTempPath failed (%d)\n", (int)GetLastError()); - return -1; - } - - /* Create the temporary file */ - uRetVal = GetTempFileName(lpPathBuffer, TEXT("NKBIN"), 0, szTempName); - if (uRetVal == 0) - { - fprintf(stderr, "[ERR] GetTempFileName failed (%d)\n", (int)GetLastError()); - return -1; - } - - /* Now create the file */ - hTempFile = CreateFile((LPTSTR) szTempName, // file name - GENERIC_READ | GENERIC_WRITE, // open r-w - 0, // do not share - NULL, // default security - CREATE_ALWAYS, // overwrite existing - FILE_ATTRIBUTE_NORMAL,// normal file - NULL); // no template - if (hTempFile == INVALID_HANDLE_VALUE) - { - fprintf(stderr, "[ERR] Could not create %s\n", szTempName); - return -1; - } - - fSuccess = WriteFile(hTempFile, fwbuf, fwsize, &dwBytesWritten, NULL); - if (!fSuccess) - { - fprintf(stderr, "[ERR] WriteFile failed (%d)\n", (int)GetLastError()); - return -1; - } - - fSuccess = CloseHandle (hTempFile); - if (!fSuccess) - { - fprintf(stderr, "[ERR] CloseHandle failed (%d)\n", (int)GetLastError()); - return -1; - } - - tmp = (LPWSTR)malloc(_tcslen(szTempName)*2+1); - mbstowcs(tmp, (char*)szTempName, _tcslen(szTempName)*2+1); - - fprintf(stderr, "[INFO] Sending firmware...\n"); - if (mtp_sendnk(tmp, fwsize, &callback)) - { - fprintf(stderr, "\n"); - fprintf(stderr, "[INFO] Firmware sent successfully\n"); - ret = 0; - } - else - { - fprintf(stderr, "\n"); - fprintf(stderr, "[ERR] Error occured during sending.\n"); - ret = -1; - } - free(tmp); - - if (!DeleteFile(szTempName)) - fprintf(stderr,"[WARN] Could not remove temporary file %s\n",szTempName); - - return ret; -} - - -int mtp_send_file(struct mtp_info_t* mtp_info, const char* filename) -{ - wchar_t *fn; - - fn = (LPWSTR)malloc(strlen(filename)*2+1); - mbstowcs(fn, filename, strlen(filename)*2+1); - - if (mtp_init(mtp_info) < 0) { - fprintf(stderr,"[ERR] Can not init MTP\n"); - return 1; - } - /* Scan for attached MTP devices. */ - if (mtp_scan(mtp_info) < 0) - { - fprintf(stderr,"[ERR] No devices found\n"); - return 1; - } - - fprintf(stderr, "[INFO] Sending firmware...\n"); - if (mtp_sendnk(fn, filesize(filename), &callback)) - { - /* keep progress on screen */ - printf("\n"); - fprintf(stderr, "[INFO] Firmware sent successfully\n"); - return 0; - } - else - { - fprintf(stderr, "[ERR] Error occured during sending.\n"); - return -1; - } - mtp_finished(mtp_info); -} - - -static int filesize(const char* filename) -{ - struct _stat sb; - int res; - - res = _stat(filename, &sb); - if(res == -1) { - fprintf(stderr, "Error getting filesize!\n"); - return -1; - } - return sb.st_size; -} - +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * $Id$ + * + * Copyright (c) 2009, Dave Chapman + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + ****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mtp_common.h" + +#include "../MTP_DLL/MTP_DLL.h" + + +static int filesize(const char* filename); + + +int mtp_init(struct mtp_info_t* mtp_info) +{ + /* Fill the info struct with zeros - mainly for the strings */ + memset(mtp_info, 0, sizeof(struct mtp_info_t)); + + return 0; + +} + +int mtp_finished(struct mtp_info_t* mtp_info) +{ + (void)mtp_info; + + return 0; +} + +int mtp_scan(struct mtp_info_t* mtp_info) +{ + wchar_t name[256]; + wchar_t manufacturer[256]; + DWORD version; + int num = 0; + + num = mtp_description(name, manufacturer, &version); + + wcstombs(mtp_info->manufacturer, manufacturer, 200); + wcstombs(mtp_info->modelname, name, 200); + + sprintf(mtp_info->version, "%x", (unsigned int)version); + return (num > 0) ? num : -1; + +} + +static void callback(unsigned int progress, unsigned int max) +{ + int percent = (progress * 100) / max; + + printf("[INFO] Progress: %u of %u (%d%%)\r", progress, max, percent); + fflush(stdout); +} + + +int mtp_send_firmware(struct mtp_info_t* mtp_info, unsigned char* fwbuf, + int fwsize) +{ + HANDLE hTempFile; + DWORD dwRetVal; + DWORD dwBytesWritten; + UINT uRetVal; + TCHAR szTempName[1024]; + TCHAR lpPathBuffer[1024]; + BOOL fSuccess; + wchar_t *tmp; + int ret; + + (void)mtp_info; + + /* Get the path for temporary files */ + dwRetVal = GetTempPath(sizeof(lpPathBuffer), lpPathBuffer); + if (dwRetVal > sizeof(lpPathBuffer) || (dwRetVal == 0)) + { + fprintf(stderr, "[ERR] GetTempPath failed (%d)\n", (int)GetLastError()); + return -1; + } + + /* Create the temporary file */ + uRetVal = GetTempFileName(lpPathBuffer, TEXT("NKBIN"), 0, szTempName); + if (uRetVal == 0) + { + fprintf(stderr, "[ERR] GetTempFileName failed (%d)\n", (int)GetLastError()); + return -1; + } + + /* Now create the file */ + hTempFile = CreateFile((LPTSTR) szTempName, // file name + GENERIC_READ | GENERIC_WRITE, // open r-w + 0, // do not share + NULL, // default security + CREATE_ALWAYS, // overwrite existing + FILE_ATTRIBUTE_NORMAL,// normal file + NULL); // no template + if (hTempFile == INVALID_HANDLE_VALUE) + { + fprintf(stderr, "[ERR] Could not create %s\n", szTempName); + return -1; + } + + fSuccess = WriteFile(hTempFile, fwbuf, fwsize, &dwBytesWritten, NULL); + if (!fSuccess) + { + fprintf(stderr, "[ERR] WriteFile failed (%d)\n", (int)GetLastError()); + return -1; + } + + fSuccess = CloseHandle (hTempFile); + if (!fSuccess) + { + fprintf(stderr, "[ERR] CloseHandle failed (%d)\n", (int)GetLastError()); + return -1; + } + + tmp = (LPWSTR)malloc(_tcslen(szTempName)*2+1); + mbstowcs(tmp, (char*)szTempName, _tcslen(szTempName)*2+1); + + fprintf(stderr, "[INFO] Sending firmware...\n"); + if (mtp_sendnk(tmp, fwsize, &callback)) + { + fprintf(stderr, "\n"); + fprintf(stderr, "[INFO] Firmware sent successfully\n"); + ret = 0; + } + else + { + fprintf(stderr, "\n"); + fprintf(stderr, "[ERR] Error occured during sending.\n"); + ret = -1; + } + free(tmp); + + if (!DeleteFile(szTempName)) + fprintf(stderr,"[WARN] Could not remove temporary file %s\n",szTempName); + + return ret; +} + + +int mtp_send_file(struct mtp_info_t* mtp_info, const char* filename) +{ + wchar_t *fn; + + fn = (LPWSTR)malloc(strlen(filename)*2+1); + mbstowcs(fn, filename, strlen(filename)*2+1); + + if (mtp_init(mtp_info) < 0) { + fprintf(stderr,"[ERR] Can not init MTP\n"); + return 1; + } + /* Scan for attached MTP devices. */ + if (mtp_scan(mtp_info) < 0) + { + fprintf(stderr,"[ERR] No devices found\n"); + return 1; + } + + fprintf(stderr, "[INFO] Sending firmware...\n"); + if (mtp_sendnk(fn, filesize(filename), &callback)) + { + /* keep progress on screen */ + printf("\n"); + fprintf(stderr, "[INFO] Firmware sent successfully\n"); + return 0; + } + else + { + fprintf(stderr, "[ERR] Error occured during sending.\n"); + return -1; + } + mtp_finished(mtp_info); +} + + +static int filesize(const char* filename) +{ + struct _stat sb; + int res; + + res = _stat(filename, &sb); + if(res == -1) { + fprintf(stderr, "Error getting filesize!\n"); + return -1; + } + return sb.st_size; +} + diff --git a/utils/MTP/sendfirm_win.c b/utils/MTP/sendfirm_win.c index 3c45aa6ae7..c74b93bb37 100644 --- a/utils/MTP/sendfirm_win.c +++ b/utils/MTP/sendfirm_win.c @@ -1,87 +1,87 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 Maurus Cuelenaere - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 -#include -#include -#include -#include -#include -#include - -#include "MTP_DLL/MTP_DLL.h" - -void usage(void) -{ - fprintf(stderr, "usage: sendfirm \n"); -} - -int filesize(char* filename) -{ - FILE* fd; - int tmp; - fd = fopen(filename, "r"); - if(fd == NULL) - { - fprintf(stderr, "Error while opening %s!\n", filename); - return -1; - } - fseek(fd, 0, SEEK_END); - tmp = ftell(fd); - fclose(fd); - return tmp; -} - -void callback(unsigned int progress, unsigned int max) -{ - unsigned int normalized = progress*1000/max; - printf("Progress: %d.%d%%\r", normalized/10, normalized%10); - fflush(stdout); -} - -int main(int argc, char **argv) -{ - if (argc < 2) - { - usage(); - return 1; - } - - wchar_t *tmp; - - tmp = (LPWSTR)malloc(strlen(argv[1])*2+1); - mbstowcs(tmp, argv[1], strlen(argv[1])*2+1); - - wprintf(tmp); - printf("\n"); - - fprintf(stdout, "Sending firmware...\n"); - - if(mtp_sendnk(tmp, filesize(argv[1]), &callback)) - fprintf(stdout, "Firmware sent successfully!\n"); - else - fprintf(stdout, "Error occured during sending!\n"); - - free(tmp); - - exit(0); -} +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 Maurus Cuelenaere + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 +#include +#include +#include +#include +#include +#include + +#include "MTP_DLL/MTP_DLL.h" + +void usage(void) +{ + fprintf(stderr, "usage: sendfirm \n"); +} + +int filesize(char* filename) +{ + FILE* fd; + int tmp; + fd = fopen(filename, "r"); + if(fd == NULL) + { + fprintf(stderr, "Error while opening %s!\n", filename); + return -1; + } + fseek(fd, 0, SEEK_END); + tmp = ftell(fd); + fclose(fd); + return tmp; +} + +void callback(unsigned int progress, unsigned int max) +{ + unsigned int normalized = progress*1000/max; + printf("Progress: %d.%d%%\r", normalized/10, normalized%10); + fflush(stdout); +} + +int main(int argc, char **argv) +{ + if (argc < 2) + { + usage(); + return 1; + } + + wchar_t *tmp; + + tmp = (LPWSTR)malloc(strlen(argv[1])*2+1); + mbstowcs(tmp, argv[1], strlen(argv[1])*2+1); + + wprintf(tmp); + printf("\n"); + + fprintf(stdout, "Sending firmware...\n"); + + if(mtp_sendnk(tmp, filesize(argv[1]), &callback)) + fprintf(stdout, "Firmware sent successfully!\n"); + else + fprintf(stdout, "Error occured during sending!\n"); + + free(tmp); + + exit(0); +} diff --git a/utils/disassembler/arm/disasm_arm.c b/utils/disassembler/arm/disasm_arm.c index b23c6b0355..14e72d9583 100644 --- a/utils/disassembler/arm/disasm_arm.c +++ b/utils/disassembler/arm/disasm_arm.c @@ -1,423 +1,423 @@ -#include -#include -#include - -#define ULONG uint32_t -#define UCHAR uint8_t - -#define FRMT "0x%x" // "0x%x" -#define SHFTFRMC "%s %s #%d" // "%s %s %d" -#define SHFTFRMR "%s %s %s" // "%s %s %s" -//#define FRMT "0x%x" -//#define SHFTFRMC "%s %s %d" -//#define SHFTFRMR "%s %s %s" - -char *cond[16] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", "", "nv" }; -char *cnd1[16] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", " ", "nv" }; -char *opcd[16] = {"and","eor","sub","rsb","add","adc","sbc","rsc","tst","teq","cmp","cmn","orr","mov","bic","mvn" }; -char setc[32] = {0,115,0,115,0,115,0,115,0,115,0,115,0,115,0,115,0, 0 ,0, 0 ,0, 0 ,0, 0 ,0,115,0,115,0,115,0,115 }; -char *regs[16] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc" }; - -char *shfts[4] = { "lsl", "lsr", "asr", "ror" }; - -/* -31-28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -Cond 0 0 I ---Opcode--- S |----Rn----- ----Rd----- --------Operand 2-------- Data Processing /PSR Transfer -Cond 0 0 0 0 | 0 0 A S |----Rd----- ----Rn----- ---Rs---- 1 0 0 1 --Rm--- Multiply -Cond 0 0 0 0 | 1 U A S |---RdHi---- ---RdLo---- ---Rn---- 1 0 0 1 --Rm--- Multiply Long -Cond 0 0 0 1 | 0 B 0 0 |----Rn----- ----Rd----- 0 0 0 0 1 0 0 1 --Rm--- Single Data Swap -Cond 0 0 0 1 | 0 0 1 0 |1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 --Rn--- Branch and Exchange -Cond 0 0 0 P | U 0 W L |----Rn----- ----Rd----- 0 0 0 0 1 S H 1 --Rm--- Halfword Data Transfer: register offset -Cond 0 0 0 P | U 1 W L |----Rn----- ----Rd----- --Offset- 1 S H 1 -Offset Halfword Data Transfer: immediate offset -Cond 0 1 I P | U B W L |----Rn----- ----Rd----- --------Offset----------- Single Data Transfer -Cond 0 1 1 1 | x x x x |x x x x x x x x x x x x x x x 1 x x x x Undefined -Cond 1 0 0 P | U S W L |----Rn----- -----------Register List------------- Block Data Transfer -Cond 1 0 1 L | -------------------------Offset------------------------------ Branch -Cond 1 1 0 P | U N W L |----Rn----- ----CRd---- ---CP#--- -----Offset---- Coprocessor Data Transfer -Cond 1 1 1 0 | --CP Opc---|----CRn---- ----CRd---- ---CP#--- -CP-- 0 --CRm-- Coprocessor Data Operation -Cond 1 1 1 0 | CP Opc L |----CRn---- ----Rd----- ---CP#--- -CP-- 1 --CRm-- Coprocessor Register Transfer -Cond 1 1 1 1 | x x x x |x x x x x x x x x x x x x x x x x x x x Software Interrupt - -0x04200000 -0001 0 0 0 0 0 1 1 0 6 e 1 1 1 0 1 8 -================================================================================ -Cond 0 1 I P | U B W L |----Rn----- ----Rd----- --------Offset----------- Single Data Transfer - - -EQ 0 Z set equal -NE 1 Z clear not equal -CS 2 C set unsigned higher or same -CC 3 C clear unsigned lower -MI 4 N set negative -PL 5 N clear positive or zero -VS 6 V set overflow -VC 7 V clear no overflow -HI 8 C set and Z clear unsigned higher -LS 9 C clear or Z set unsigned lower or same -GE A N equals V greater or equal -LT B N not equal to V less than -GT C Z clear AND (N equals V) greater than -LE D Z set OR (N not equal to V) less than or equal -AL E (ignored) always - -AND 0 operand1 AND operand2 -EOR 1 operand1 EOR operand2 -SUB 2 operand1 - operand2 -RSB 3 operand2 - operand1 -ADD 4 operand1 + operand2 -ADC 5 operand1 + operand2 + carry -SBC 6 operand1 - operand2 + carry - 1 -RSC 7 operand2 - operand1 + carry - 1 -TST 8 AND, but result is not written -TEQ 9 as EOR, but result is not written -CMP A as SUB, but result is not written -CMN B as ADD, but result is not written -ORR C operand1 OR operand2 -MOV D operand2 (operand1 is ignored) -BIC E operand1 AND NOT operand2 (Bit clear) -MVN F NOT operand2 (operand1 is ignored) -*/ - -void multiply_stg(char *stg, ULONG val) -{ - if((val&0xc00000) == 0) // simple mul - { - if(val & 0x100000) // set condition flags - if(val & 0x200000) sprintf(stg+strlen(stg), "mla%ss ", cond[val>>28]); - else sprintf(stg+strlen(stg), "mul%ss ", cond[val>>28]); - else - if(val & 0x200000) sprintf(stg+strlen(stg), "mla%s ", cnd1[val>>28]); - else sprintf(stg+strlen(stg), "mul%s ", cnd1[val>>28]); - - if(val & 0x200000) // accumulate - sprintf(stg+strlen(stg), "%s, %s, %s, %s", regs[(val>>16)&15], regs[(val>>0)&15], regs[(val>>8)&15], regs[(val>>12)&15]); - else - sprintf(stg+strlen(stg), "%s, %s, %s", regs[(val>>16)&15], regs[(val>>0)&15], regs[(val>>8)&15]); - } - else - { - if(val & 0x100000) // set condition flags - if(val & 0x200000) // accumulate - if(val & 0x400000) sprintf(stg+strlen(stg), "smlal%ss ", cond[val>>28]); - else sprintf(stg+strlen(stg), "umlal%ss ", cond[val>>28]); - else - if(val & 0x400000) sprintf(stg+strlen(stg), "smull%ss ", cond[val>>28]); - else sprintf(stg+strlen(stg), "umull%ss ", cond[val>>28]); - else - if(val & 0x200000) - if(val & 0x400000) sprintf(stg+strlen(stg), "smlal%s ", cond[val>>28]); - else sprintf(stg+strlen(stg), "umlal%s ", cond[val>>28]); - else - if(val & 0x400000) sprintf(stg+strlen(stg), "smull%s ", cond[val>>28]); - else sprintf(stg+strlen(stg), "umull%s ", cond[val>>28]); - - sprintf(stg+strlen(stg), "%s, %s, %s, %s", regs[(val>>12)&15], regs[(val>>16)&15], regs[(val>>0)&15], regs[(val>>8)&15]); - } -} - -void halfword_stg(char *stg, ULONG val) -{ - ULONG off = ((val>>4) & 0xf0) + (val & 0x0f); - - if(val & 0x100000) sprintf(stg+strlen(stg), "ldr%s", cond[val>>28]); - else sprintf(stg+strlen(stg), "str%s", cond[val>>28]); - - switch((val>>5) & 3) // SWP, HW, SB, SH - { - case 0: sprintf(stg+strlen(stg), "error: SWP"); break; - case 1: sprintf(stg+strlen(stg), "h "); break; - case 2: sprintf(stg+strlen(stg), "sb "); break; - case 3: sprintf(stg+strlen(stg), "sh "); break; - } - - if(val & 0x400000) // immidiate offset - if(val & 0x1000000) // pre index - if(val & 0x200000) // write back - if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], off); - else sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], off); - else - if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], off); - else sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], off); - else - if(val & 0x200000) // write back - sprintf(stg+strlen(stg), "error 'write back' on post indexed"); - else - if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s], "FRMT, regs[(val>>12)&15], regs[(val>>16)&15], off); - else sprintf(stg+strlen(stg), "%s, [%s], -"FRMT, regs[(val>>12)&15], regs[(val>>16)&15], off); - else - if(val & 0x1000000) // pre index - if(val & 0x200000) // write back - if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, %s]!", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); - else sprintf(stg+strlen(stg), "%s, [%s, -%s]!", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); - else - if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, %s]", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); - else sprintf(stg+strlen(stg), "%s, [%s, -%s]", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); - else - if(val & 0x200000) // write back - sprintf(stg+strlen(stg), "error 'write back' on post indexed"); - else - if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s], %s", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); - else sprintf(stg+strlen(stg), "%s, [%s], -%s", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); -} - -void branch_stg(char *stg, ULONG val, ULONG pos) -{ - ULONG off = pos + (((int32_t)val << 8) >> 6) + 8; - - if((val & 0x0ffffff0) == 0x012fff10) // bx instruction - { sprintf(stg+strlen(stg), "bx%s %s", cond[val>>28], regs[val&15]); } - else - { - if(((val>>24)&15) == 10) sprintf(stg+strlen(stg), "b%s ", cond[val>>28]); - else sprintf(stg+strlen(stg), "bl%s ", cond[val>>28]); - - sprintf(stg+strlen(stg), "0x%x", off); - } -} - -void opcode_stg(char *stg, ULONG val, ULONG off) -{ - ULONG des, op1; - char op2[80]; - char *st = stg + strlen(stg); - - if(((val & 0x0ffffff0) == 0x012fff10) && (val & 16)) - { branch_stg(stg, val, off); return; } - else if(((val & 0x0f000000) == 0x00000000) && ((val & 0xf0) == 0x90)) - { multiply_stg(stg, val); return; } - else if(((val & 0x0f000000) <= 0x01000000) && ((val & 0x90) == 0x90) && ((val & 0xf0) > 0x90) && ((val & 0x01200000) != 0x00200000)) - { halfword_stg(stg, val); return; } - - sprintf(stg+strlen(stg), "%s%s%s ", opcd[(val>>21) & 15], cond[val>>28], setc[(val>>20) & 31]?"s":" "); - - des = (val>>12) & 15; - op1 = (val>>16) & 15; - - if(val & 0x2000000) // immidiate - { - off = (ULONG)((uint64_t)(val&0xff) << (32 - 2 * ((val >> 8) & 15))) | ((val&0xff) >> 2 * ((val >> 8) & 15)); - sprintf(op2, FRMT" ", off); - } - else - { - if(val & 16) // shift type - sprintf(op2, SHFTFRMR, regs[val&15], shfts[(val>>5)&3], regs[(val>>8)&15]); - else - if((val>>7) & 31) - sprintf(op2, SHFTFRMC, regs[val&15], shfts[(val>>5)&3], (val>>7) & 31); - else - sprintf(op2, "%s ", regs[val&15]); - } - - switch((val>>21) & 15) - { - case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 12: - case 14: sprintf(stg+strlen(stg), "%s, %s, %s", regs[des], regs[op1], op2); break; - - case 8: case 9: case 10: - case 11: if(val & 0x100000) // set status - sprintf(stg+strlen(stg), "%s, %s", regs[op1], op2); // standard TEQ,TST,CMP,CMN - else - { //special MRS/MSR opcodes - if((((val>>23) & 31) == 2) && ((val & 0x3f0fff) == 0x0f0000)) - { sprintf(st, "mrs%s %s, %s", cnd1[val>>28], regs[des], val&0x400000?"SPSR_xx":"CPSR"); } - else - if((((val>>23) & 31) == 2) && ((val & 0x30fff0) == 0x20f000)) - { sprintf(st, "msr%s %s, %s", cnd1[val>>28], val&0x400000?"SPSR_xx":"CPSR", regs[val&15]); } - else - if((((val>>23) & 31) == 6) && ((val & 0x30f000) == 0x20f000)) - { sprintf(st, "msr%s %s, %s", cnd1[val>>28], val&0x400000?"SPSR_xx":"CPSR_cf", op2); } - else - if((((val>>23) & 31) == 2) && ((val & 0x300ff0) == 0x000090)) - { sprintf(st, "swp%s%s %s, %s, [%s]", val&0x400000?"b":"", cnd1[val>>28], regs[(val>>12)&15], regs[val&15], regs[(val>>16)&15]); } - else - { sprintf(stg+strlen(stg), "??????????????"); } - } break; - case 13: - case 15: sprintf(stg+strlen(stg), "%s, %s", regs[des], op2); break; - } -} - -void opcode_cop(char *stg, ULONG val, ULONG off) -{ - char* op; - int opcode1 = (val >> 21) & 0x7; - int CRn = (val >> 16) & 0xf; - int Rd = (val >> 12) & 0xf; - int cp_num = (val >> 8) & 0xf; - int opcode2 = (val >> 5) & 0x7; - int CRm = val & 0xf; - - -// ee073f5e mcr 15, 0, r3, cr7, cr14, {2} - - if (val & (1<<4)) { - if (val & (1<<20)) { - op = "mrc"; - } else { - op = "mcr"; - } - opcode1 = (val >> 21) & 0x7; - CRn = (val >> 16) & 0xf; - Rd = (val >> 12) & 0xf; - cp_num = (val >> 8) & 0xf; - opcode2 = (val >> 5) & 0x7; - CRm = val & 0xf; - - sprintf(stg+strlen(stg), "%s%s %d, %d, r%d, cr%d, cr%d, {%d}", op, cnd1[val>>28], cp_num, opcode1, Rd, CRn, CRm, opcode2); - } else { - op = "cdp"; - - opcode1 = (val >> 20) & 0xf; - CRn = (val >> 16) & 0xf; - Rd = (val >> 12) & 0xf; - cp_num = (val >> 8) & 0xf; - opcode2 = (val >> 5) & 0x7; - CRm = val & 0xf; - - sprintf(stg+strlen(stg), "%s%s %d, %d, cr%d, cr%d, cr%d, {%d}", op, cnd1[val>>28], cp_num, opcode1, Rd, CRn, CRm, opcode2); - } - -} - - -void single_data(char *stg, ULONG val) -{ - char op2[80]; - - if(((val & 0x0e000000) == 0x06000000) && (val & 16)) - { sprintf(stg+strlen(stg), "undef%s", cond[val>>28]); - return; - } - - if(val & 0x400000) - if(val & 0x100000) sprintf(stg+strlen(stg), "ldr%sb ", cond[val>>28]); - else sprintf(stg+strlen(stg), "str%sb ", cond[val>>28]); - else - if(val & 0x100000) sprintf(stg+strlen(stg), "ldr%s ", cnd1[val>>28]); - else sprintf(stg+strlen(stg), "str%s ", cnd1[val>>28]); - - if(val & 0x2000000) {// reg offset - if(val & 16) // shift type - sprintf(op2, "error: reg defined shift"); - else - if((val>>7) & 31) - sprintf(op2, SHFTFRMC, regs[val&15], shfts[(val>>5)&3], (val>>7) & 31); - else - sprintf(op2, "%s", regs[val&15]); - } - - if(val & 0x2000000) // reg offset - if(val & 0x1000000) // pre index - if(val & 0x800000) // up offset (+) - if(val & 0x200000) // write back - sprintf(stg+strlen(stg), "%s, [%s, %s]!", regs[(val>>12)&15], regs[(val>>16)&15], op2); - else - sprintf(stg+strlen(stg), "%s, [%s, %s]", regs[(val>>12)&15], regs[(val>>16)&15], op2); - else - if(val & 0x200000) // write back - sprintf(stg+strlen(stg), "%s, [%s, -%s]!", regs[(val>>12)&15], regs[(val>>16)&15], op2); - else - sprintf(stg+strlen(stg), "%s, [%s, -%s]", regs[(val>>12)&15], regs[(val>>16)&15], op2); - else - if(val & 0x200000) // write back - sprintf(stg+strlen(stg), "error 'write back' set"); - else - if(val & 0x800000) // up offset (+) - sprintf(stg+strlen(stg), "%s, [%s], %s", regs[(val>>12)&15], regs[(val>>16)&15], op2); - else - sprintf(stg+strlen(stg), "%s, [%s], -%s", regs[(val>>12)&15], regs[(val>>16)&15], op2); - else - if(val & 0x1000000) // pre index - if(val & 0x800000) // up offset (+) - if(val & 0x200000) // write back - if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); - else sprintf(stg+strlen(stg), "%s, [%s]!", regs[(val>>12)&15], regs[(val>>16)&15]); - else - if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); - else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); - else - if(val & 0x200000) // write back - if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); - else sprintf(stg+strlen(stg), "%s, [%s]!", regs[(val>>12)&15], regs[(val>>16)&15]); - else - if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); - else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); - else - if(val & 0x200000) // write back - sprintf(stg+strlen(stg), "error 'write back' set"); - else - if(val & 0x800000) // up offset (+) - if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s], "FRMT, regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); - else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); - else - if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s], -"FRMT, regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); - else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); -} - -void block_data(char *stg, ULONG val) -{ - char lst[80]; - int i; - - strcpy(lst, "{"); - for(i=0; i<16; i++) - if(val & (1<2) - strcpy(lst+strlen(lst)-2, "}"); - else - strcpy(lst+strlen(lst), "}"); - - if(val & 0x400000) // load psr or force user mode - strcpy(lst+strlen(lst), "^"); - - - if(val & 0x100000) // load - if(val & 0x1000000) // pre offset - if(val & 0x800000) sprintf(stg+strlen(stg), "ldm%sib ", cond[val>>28]); - else sprintf(stg+strlen(stg), "ldm%sdb ", cond[val>>28]); - else - if(val & 0x800000) sprintf(stg+strlen(stg), "ldm%sia ", cond[val>>28]); - else sprintf(stg+strlen(stg), "ldm%sda ", cond[val>>28]); - else - if(val & 0x1000000) - if(val & 0x800000) sprintf(stg+strlen(stg), "stm%sib ", cond[val>>28]); - else sprintf(stg+strlen(stg), "stm%sdb ", cond[val>>28]); - else - if(val & 0x800000) sprintf(stg+strlen(stg), "stm%sia ", cond[val>>28]); - else sprintf(stg+strlen(stg), "stm%sda ", cond[val>>28]); - - switch((val>>21)&3) - { - case 0: sprintf(stg+strlen(stg), "%s, %s", regs[(val>>16)&15], lst); break; - case 1: sprintf(stg+strlen(stg), "%s!, %s", regs[(val>>16)&15], lst); break; - case 2: sprintf(stg+strlen(stg), "%s, %s", regs[(val>>16)&15], lst); break; - case 3: sprintf(stg+strlen(stg), "%s!, %s", regs[(val>>16)&15], lst); break; - } -} - -void dis_asm(ULONG off, ULONG val, char *stg) -{ - sprintf(stg, "%6x: %08x ", off, val); - - switch((val >> 24) & 15) - { - case 0: - case 1: - case 2: - case 3: opcode_stg(stg, val, off); break; - case 4: - case 5: - case 6: - case 7: single_data(stg, val); break; - case 8: - case 9: block_data(stg, val); break; - case 10: - case 11: branch_stg(stg, val, off); break; - case 12: - case 13: sprintf(stg+strlen(stg), "cop%s", cnd1[val>>28]); break; - case 14: opcode_cop(stg, val, off); break; - case 15: sprintf(stg+strlen(stg), "swi%s", cnd1[val>>28]); break; - } -} +#include +#include +#include + +#define ULONG uint32_t +#define UCHAR uint8_t + +#define FRMT "0x%x" // "0x%x" +#define SHFTFRMC "%s %s #%d" // "%s %s %d" +#define SHFTFRMR "%s %s %s" // "%s %s %s" +//#define FRMT "0x%x" +//#define SHFTFRMC "%s %s %d" +//#define SHFTFRMR "%s %s %s" + +char *cond[16] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", "", "nv" }; +char *cnd1[16] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", " ", "nv" }; +char *opcd[16] = {"and","eor","sub","rsb","add","adc","sbc","rsc","tst","teq","cmp","cmn","orr","mov","bic","mvn" }; +char setc[32] = {0,115,0,115,0,115,0,115,0,115,0,115,0,115,0,115,0, 0 ,0, 0 ,0, 0 ,0, 0 ,0,115,0,115,0,115,0,115 }; +char *regs[16] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc" }; + +char *shfts[4] = { "lsl", "lsr", "asr", "ror" }; + +/* +31-28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +Cond 0 0 I ---Opcode--- S |----Rn----- ----Rd----- --------Operand 2-------- Data Processing /PSR Transfer +Cond 0 0 0 0 | 0 0 A S |----Rd----- ----Rn----- ---Rs---- 1 0 0 1 --Rm--- Multiply +Cond 0 0 0 0 | 1 U A S |---RdHi---- ---RdLo---- ---Rn---- 1 0 0 1 --Rm--- Multiply Long +Cond 0 0 0 1 | 0 B 0 0 |----Rn----- ----Rd----- 0 0 0 0 1 0 0 1 --Rm--- Single Data Swap +Cond 0 0 0 1 | 0 0 1 0 |1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 --Rn--- Branch and Exchange +Cond 0 0 0 P | U 0 W L |----Rn----- ----Rd----- 0 0 0 0 1 S H 1 --Rm--- Halfword Data Transfer: register offset +Cond 0 0 0 P | U 1 W L |----Rn----- ----Rd----- --Offset- 1 S H 1 -Offset Halfword Data Transfer: immediate offset +Cond 0 1 I P | U B W L |----Rn----- ----Rd----- --------Offset----------- Single Data Transfer +Cond 0 1 1 1 | x x x x |x x x x x x x x x x x x x x x 1 x x x x Undefined +Cond 1 0 0 P | U S W L |----Rn----- -----------Register List------------- Block Data Transfer +Cond 1 0 1 L | -------------------------Offset------------------------------ Branch +Cond 1 1 0 P | U N W L |----Rn----- ----CRd---- ---CP#--- -----Offset---- Coprocessor Data Transfer +Cond 1 1 1 0 | --CP Opc---|----CRn---- ----CRd---- ---CP#--- -CP-- 0 --CRm-- Coprocessor Data Operation +Cond 1 1 1 0 | CP Opc L |----CRn---- ----Rd----- ---CP#--- -CP-- 1 --CRm-- Coprocessor Register Transfer +Cond 1 1 1 1 | x x x x |x x x x x x x x x x x x x x x x x x x x Software Interrupt + +0x04200000 +0001 0 0 0 0 0 1 1 0 6 e 1 1 1 0 1 8 +================================================================================ +Cond 0 1 I P | U B W L |----Rn----- ----Rd----- --------Offset----------- Single Data Transfer + + +EQ 0 Z set equal +NE 1 Z clear not equal +CS 2 C set unsigned higher or same +CC 3 C clear unsigned lower +MI 4 N set negative +PL 5 N clear positive or zero +VS 6 V set overflow +VC 7 V clear no overflow +HI 8 C set and Z clear unsigned higher +LS 9 C clear or Z set unsigned lower or same +GE A N equals V greater or equal +LT B N not equal to V less than +GT C Z clear AND (N equals V) greater than +LE D Z set OR (N not equal to V) less than or equal +AL E (ignored) always + +AND 0 operand1 AND operand2 +EOR 1 operand1 EOR operand2 +SUB 2 operand1 - operand2 +RSB 3 operand2 - operand1 +ADD 4 operand1 + operand2 +ADC 5 operand1 + operand2 + carry +SBC 6 operand1 - operand2 + carry - 1 +RSC 7 operand2 - operand1 + carry - 1 +TST 8 AND, but result is not written +TEQ 9 as EOR, but result is not written +CMP A as SUB, but result is not written +CMN B as ADD, but result is not written +ORR C operand1 OR operand2 +MOV D operand2 (operand1 is ignored) +BIC E operand1 AND NOT operand2 (Bit clear) +MVN F NOT operand2 (operand1 is ignored) +*/ + +void multiply_stg(char *stg, ULONG val) +{ + if((val&0xc00000) == 0) // simple mul + { + if(val & 0x100000) // set condition flags + if(val & 0x200000) sprintf(stg+strlen(stg), "mla%ss ", cond[val>>28]); + else sprintf(stg+strlen(stg), "mul%ss ", cond[val>>28]); + else + if(val & 0x200000) sprintf(stg+strlen(stg), "mla%s ", cnd1[val>>28]); + else sprintf(stg+strlen(stg), "mul%s ", cnd1[val>>28]); + + if(val & 0x200000) // accumulate + sprintf(stg+strlen(stg), "%s, %s, %s, %s", regs[(val>>16)&15], regs[(val>>0)&15], regs[(val>>8)&15], regs[(val>>12)&15]); + else + sprintf(stg+strlen(stg), "%s, %s, %s", regs[(val>>16)&15], regs[(val>>0)&15], regs[(val>>8)&15]); + } + else + { + if(val & 0x100000) // set condition flags + if(val & 0x200000) // accumulate + if(val & 0x400000) sprintf(stg+strlen(stg), "smlal%ss ", cond[val>>28]); + else sprintf(stg+strlen(stg), "umlal%ss ", cond[val>>28]); + else + if(val & 0x400000) sprintf(stg+strlen(stg), "smull%ss ", cond[val>>28]); + else sprintf(stg+strlen(stg), "umull%ss ", cond[val>>28]); + else + if(val & 0x200000) + if(val & 0x400000) sprintf(stg+strlen(stg), "smlal%s ", cond[val>>28]); + else sprintf(stg+strlen(stg), "umlal%s ", cond[val>>28]); + else + if(val & 0x400000) sprintf(stg+strlen(stg), "smull%s ", cond[val>>28]); + else sprintf(stg+strlen(stg), "umull%s ", cond[val>>28]); + + sprintf(stg+strlen(stg), "%s, %s, %s, %s", regs[(val>>12)&15], regs[(val>>16)&15], regs[(val>>0)&15], regs[(val>>8)&15]); + } +} + +void halfword_stg(char *stg, ULONG val) +{ + ULONG off = ((val>>4) & 0xf0) + (val & 0x0f); + + if(val & 0x100000) sprintf(stg+strlen(stg), "ldr%s", cond[val>>28]); + else sprintf(stg+strlen(stg), "str%s", cond[val>>28]); + + switch((val>>5) & 3) // SWP, HW, SB, SH + { + case 0: sprintf(stg+strlen(stg), "error: SWP"); break; + case 1: sprintf(stg+strlen(stg), "h "); break; + case 2: sprintf(stg+strlen(stg), "sb "); break; + case 3: sprintf(stg+strlen(stg), "sh "); break; + } + + if(val & 0x400000) // immidiate offset + if(val & 0x1000000) // pre index + if(val & 0x200000) // write back + if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], off); + else sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], off); + else + if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], off); + else sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], off); + else + if(val & 0x200000) // write back + sprintf(stg+strlen(stg), "error 'write back' on post indexed"); + else + if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s], "FRMT, regs[(val>>12)&15], regs[(val>>16)&15], off); + else sprintf(stg+strlen(stg), "%s, [%s], -"FRMT, regs[(val>>12)&15], regs[(val>>16)&15], off); + else + if(val & 0x1000000) // pre index + if(val & 0x200000) // write back + if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, %s]!", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); + else sprintf(stg+strlen(stg), "%s, [%s, -%s]!", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); + else + if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s, %s]", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); + else sprintf(stg+strlen(stg), "%s, [%s, -%s]", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); + else + if(val & 0x200000) // write back + sprintf(stg+strlen(stg), "error 'write back' on post indexed"); + else + if(val & 0x800000) sprintf(stg+strlen(stg), "%s, [%s], %s", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); + else sprintf(stg+strlen(stg), "%s, [%s], -%s", regs[(val>>12)&15], regs[(val>>16)&15], regs[val&15]); +} + +void branch_stg(char *stg, ULONG val, ULONG pos) +{ + ULONG off = pos + (((int32_t)val << 8) >> 6) + 8; + + if((val & 0x0ffffff0) == 0x012fff10) // bx instruction + { sprintf(stg+strlen(stg), "bx%s %s", cond[val>>28], regs[val&15]); } + else + { + if(((val>>24)&15) == 10) sprintf(stg+strlen(stg), "b%s ", cond[val>>28]); + else sprintf(stg+strlen(stg), "bl%s ", cond[val>>28]); + + sprintf(stg+strlen(stg), "0x%x", off); + } +} + +void opcode_stg(char *stg, ULONG val, ULONG off) +{ + ULONG des, op1; + char op2[80]; + char *st = stg + strlen(stg); + + if(((val & 0x0ffffff0) == 0x012fff10) && (val & 16)) + { branch_stg(stg, val, off); return; } + else if(((val & 0x0f000000) == 0x00000000) && ((val & 0xf0) == 0x90)) + { multiply_stg(stg, val); return; } + else if(((val & 0x0f000000) <= 0x01000000) && ((val & 0x90) == 0x90) && ((val & 0xf0) > 0x90) && ((val & 0x01200000) != 0x00200000)) + { halfword_stg(stg, val); return; } + + sprintf(stg+strlen(stg), "%s%s%s ", opcd[(val>>21) & 15], cond[val>>28], setc[(val>>20) & 31]?"s":" "); + + des = (val>>12) & 15; + op1 = (val>>16) & 15; + + if(val & 0x2000000) // immidiate + { + off = (ULONG)((uint64_t)(val&0xff) << (32 - 2 * ((val >> 8) & 15))) | ((val&0xff) >> 2 * ((val >> 8) & 15)); + sprintf(op2, FRMT" ", off); + } + else + { + if(val & 16) // shift type + sprintf(op2, SHFTFRMR, regs[val&15], shfts[(val>>5)&3], regs[(val>>8)&15]); + else + if((val>>7) & 31) + sprintf(op2, SHFTFRMC, regs[val&15], shfts[(val>>5)&3], (val>>7) & 31); + else + sprintf(op2, "%s ", regs[val&15]); + } + + switch((val>>21) & 15) + { + case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 12: + case 14: sprintf(stg+strlen(stg), "%s, %s, %s", regs[des], regs[op1], op2); break; + + case 8: case 9: case 10: + case 11: if(val & 0x100000) // set status + sprintf(stg+strlen(stg), "%s, %s", regs[op1], op2); // standard TEQ,TST,CMP,CMN + else + { //special MRS/MSR opcodes + if((((val>>23) & 31) == 2) && ((val & 0x3f0fff) == 0x0f0000)) + { sprintf(st, "mrs%s %s, %s", cnd1[val>>28], regs[des], val&0x400000?"SPSR_xx":"CPSR"); } + else + if((((val>>23) & 31) == 2) && ((val & 0x30fff0) == 0x20f000)) + { sprintf(st, "msr%s %s, %s", cnd1[val>>28], val&0x400000?"SPSR_xx":"CPSR", regs[val&15]); } + else + if((((val>>23) & 31) == 6) && ((val & 0x30f000) == 0x20f000)) + { sprintf(st, "msr%s %s, %s", cnd1[val>>28], val&0x400000?"SPSR_xx":"CPSR_cf", op2); } + else + if((((val>>23) & 31) == 2) && ((val & 0x300ff0) == 0x000090)) + { sprintf(st, "swp%s%s %s, %s, [%s]", val&0x400000?"b":"", cnd1[val>>28], regs[(val>>12)&15], regs[val&15], regs[(val>>16)&15]); } + else + { sprintf(stg+strlen(stg), "??????????????"); } + } break; + case 13: + case 15: sprintf(stg+strlen(stg), "%s, %s", regs[des], op2); break; + } +} + +void opcode_cop(char *stg, ULONG val, ULONG off) +{ + char* op; + int opcode1 = (val >> 21) & 0x7; + int CRn = (val >> 16) & 0xf; + int Rd = (val >> 12) & 0xf; + int cp_num = (val >> 8) & 0xf; + int opcode2 = (val >> 5) & 0x7; + int CRm = val & 0xf; + + +// ee073f5e mcr 15, 0, r3, cr7, cr14, {2} + + if (val & (1<<4)) { + if (val & (1<<20)) { + op = "mrc"; + } else { + op = "mcr"; + } + opcode1 = (val >> 21) & 0x7; + CRn = (val >> 16) & 0xf; + Rd = (val >> 12) & 0xf; + cp_num = (val >> 8) & 0xf; + opcode2 = (val >> 5) & 0x7; + CRm = val & 0xf; + + sprintf(stg+strlen(stg), "%s%s %d, %d, r%d, cr%d, cr%d, {%d}", op, cnd1[val>>28], cp_num, opcode1, Rd, CRn, CRm, opcode2); + } else { + op = "cdp"; + + opcode1 = (val >> 20) & 0xf; + CRn = (val >> 16) & 0xf; + Rd = (val >> 12) & 0xf; + cp_num = (val >> 8) & 0xf; + opcode2 = (val >> 5) & 0x7; + CRm = val & 0xf; + + sprintf(stg+strlen(stg), "%s%s %d, %d, cr%d, cr%d, cr%d, {%d}", op, cnd1[val>>28], cp_num, opcode1, Rd, CRn, CRm, opcode2); + } + +} + + +void single_data(char *stg, ULONG val) +{ + char op2[80]; + + if(((val & 0x0e000000) == 0x06000000) && (val & 16)) + { sprintf(stg+strlen(stg), "undef%s", cond[val>>28]); + return; + } + + if(val & 0x400000) + if(val & 0x100000) sprintf(stg+strlen(stg), "ldr%sb ", cond[val>>28]); + else sprintf(stg+strlen(stg), "str%sb ", cond[val>>28]); + else + if(val & 0x100000) sprintf(stg+strlen(stg), "ldr%s ", cnd1[val>>28]); + else sprintf(stg+strlen(stg), "str%s ", cnd1[val>>28]); + + if(val & 0x2000000) {// reg offset + if(val & 16) // shift type + sprintf(op2, "error: reg defined shift"); + else + if((val>>7) & 31) + sprintf(op2, SHFTFRMC, regs[val&15], shfts[(val>>5)&3], (val>>7) & 31); + else + sprintf(op2, "%s", regs[val&15]); + } + + if(val & 0x2000000) // reg offset + if(val & 0x1000000) // pre index + if(val & 0x800000) // up offset (+) + if(val & 0x200000) // write back + sprintf(stg+strlen(stg), "%s, [%s, %s]!", regs[(val>>12)&15], regs[(val>>16)&15], op2); + else + sprintf(stg+strlen(stg), "%s, [%s, %s]", regs[(val>>12)&15], regs[(val>>16)&15], op2); + else + if(val & 0x200000) // write back + sprintf(stg+strlen(stg), "%s, [%s, -%s]!", regs[(val>>12)&15], regs[(val>>16)&15], op2); + else + sprintf(stg+strlen(stg), "%s, [%s, -%s]", regs[(val>>12)&15], regs[(val>>16)&15], op2); + else + if(val & 0x200000) // write back + sprintf(stg+strlen(stg), "error 'write back' set"); + else + if(val & 0x800000) // up offset (+) + sprintf(stg+strlen(stg), "%s, [%s], %s", regs[(val>>12)&15], regs[(val>>16)&15], op2); + else + sprintf(stg+strlen(stg), "%s, [%s], -%s", regs[(val>>12)&15], regs[(val>>16)&15], op2); + else + if(val & 0x1000000) // pre index + if(val & 0x800000) // up offset (+) + if(val & 0x200000) // write back + if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); + else sprintf(stg+strlen(stg), "%s, [%s]!", regs[(val>>12)&15], regs[(val>>16)&15]); + else + if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, "FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); + else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); + else + if(val & 0x200000) // write back + if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]!", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); + else sprintf(stg+strlen(stg), "%s, [%s]!", regs[(val>>12)&15], regs[(val>>16)&15]); + else + if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s, -"FRMT"]", regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); + else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); + else + if(val & 0x200000) // write back + sprintf(stg+strlen(stg), "error 'write back' set"); + else + if(val & 0x800000) // up offset (+) + if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s], "FRMT, regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); + else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); + else + if(val & 0xfff) sprintf(stg+strlen(stg), "%s, [%s], -"FRMT, regs[(val>>12)&15], regs[(val>>16)&15], val & 0xfff); + else sprintf(stg+strlen(stg), "%s, [%s]", regs[(val>>12)&15], regs[(val>>16)&15]); +} + +void block_data(char *stg, ULONG val) +{ + char lst[80]; + int i; + + strcpy(lst, "{"); + for(i=0; i<16; i++) + if(val & (1<2) + strcpy(lst+strlen(lst)-2, "}"); + else + strcpy(lst+strlen(lst), "}"); + + if(val & 0x400000) // load psr or force user mode + strcpy(lst+strlen(lst), "^"); + + + if(val & 0x100000) // load + if(val & 0x1000000) // pre offset + if(val & 0x800000) sprintf(stg+strlen(stg), "ldm%sib ", cond[val>>28]); + else sprintf(stg+strlen(stg), "ldm%sdb ", cond[val>>28]); + else + if(val & 0x800000) sprintf(stg+strlen(stg), "ldm%sia ", cond[val>>28]); + else sprintf(stg+strlen(stg), "ldm%sda ", cond[val>>28]); + else + if(val & 0x1000000) + if(val & 0x800000) sprintf(stg+strlen(stg), "stm%sib ", cond[val>>28]); + else sprintf(stg+strlen(stg), "stm%sdb ", cond[val>>28]); + else + if(val & 0x800000) sprintf(stg+strlen(stg), "stm%sia ", cond[val>>28]); + else sprintf(stg+strlen(stg), "stm%sda ", cond[val>>28]); + + switch((val>>21)&3) + { + case 0: sprintf(stg+strlen(stg), "%s, %s", regs[(val>>16)&15], lst); break; + case 1: sprintf(stg+strlen(stg), "%s!, %s", regs[(val>>16)&15], lst); break; + case 2: sprintf(stg+strlen(stg), "%s, %s", regs[(val>>16)&15], lst); break; + case 3: sprintf(stg+strlen(stg), "%s!, %s", regs[(val>>16)&15], lst); break; + } +} + +void dis_asm(ULONG off, ULONG val, char *stg) +{ + sprintf(stg, "%6x: %08x ", off, val); + + switch((val >> 24) & 15) + { + case 0: + case 1: + case 2: + case 3: opcode_stg(stg, val, off); break; + case 4: + case 5: + case 6: + case 7: single_data(stg, val); break; + case 8: + case 9: block_data(stg, val); break; + case 10: + case 11: branch_stg(stg, val, off); break; + case 12: + case 13: sprintf(stg+strlen(stg), "cop%s", cnd1[val>>28]); break; + case 14: opcode_cop(stg, val, off); break; + case 15: sprintf(stg+strlen(stg), "swi%s", cnd1[val>>28]); break; + } +} diff --git a/utils/disassembler/arm/main.c b/utils/disassembler/arm/main.c index 0edc633785..674696405c 100644 --- a/utils/disassembler/arm/main.c +++ b/utils/disassembler/arm/main.c @@ -1,132 +1,132 @@ -#include -#include -#include -#include - -#define ULONG uint32_t -#define USHORT uint16_t -#define UCHAR uint8_t - -ULONG isdata[1000000]; /* each bit defines one byte as: code=0, data=1 */ - -extern void dis_asm(ULONG off, ULONG val, char *stg); - -int static inline le2int(unsigned char* buf) -{ - int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; - - return res; -} - -int main(int argc, char **argv) -{ - FILE *in, *out; - char *ptr, stg[256]; - unsigned char buf[4]; - ULONG pos, sz, val, loop; - int offset, offset1; - USHORT regid; - - if(argc == 1 || strcmp(argv[1], "--help") == 0) - { printf("Usage: arm_disass [input file]\n"); - printf(" disassembles input file to 'disasm.txt'\n"); - exit(-1); - } - - in = fopen(argv[1], "rb"); - if(in == NULL) - { printf("Cannot open %s", argv[1]); - exit(-1); - } - - out = fopen("disasm.txt", "w"); - if(out == NULL) exit(-1); - - fseek(in, 0, SEEK_END); - sz = ftell(in); - - /* first loop only sets data/code tags */ - for(loop=0; loop<2; loop++) - { - for(pos=0; pos assume data */ - if((isdata[pos>>5] & (0xf << (pos & 31))) || (val & 0xffff0000) == 0) - { - sprintf(stg, "%6x: %08x", pos, val); - } - else - { - dis_asm(pos, val, stg); - - /* check for instant mov operation */ - if(memcmp(stg+17, "mov ", 4) == 0 && (ptr=strstr(stg, "0x")) != NULL) - { - regid = *(USHORT*)(stg+22); - - sscanf(ptr+2, "%x", &offset); - if(ptr[-1] == '-') - offset = -offset; - } - else - /* check for add/sub operation */ - if((ptr=strstr(stg, "0x")) != NULL - && (memcmp(stg+17, "add ", 4) == 0 || memcmp(stg+17, "sub ", 4) == 0)) - { - if(regid == *(USHORT*)(stg+22) && regid == *(USHORT*)(stg+26)) - { - sscanf(ptr+2, "%x", &offset1); - if(ptr[-1] == '-') - offset1 = -offset1; - - if(memcmp(stg+17, "add ", 4) == 0) offset += offset1; - else offset -= offset1; - - /* add result to disassembler string */ - sprintf(stg+strlen(stg), " <- 0x%x", offset); - } - else - regid = 0; - } - else - regid = 0; - - /* check for const data */ - if(memcmp(stg+26, "[pc, ", 5) == 0 && (ptr=strstr(stg, "0x")) != NULL) - { - sscanf(ptr+2, "%x", &offset); - if(ptr[-1] == '-') - offset = -offset; - - /* add data tag */ - isdata[(pos+offset+8)>>5] |= 1 << ((pos+offset+8) & 31); - - /* add const data to disassembler string */ - fseek(in, pos+offset+8, SEEK_SET); - fread(&buf, 1, 4, in); - offset = le2int(buf); - - sprintf(stg+strlen(stg), " <- 0x%x", offset); - } - } - - /* remove trailing spaces */ - while(stg[strlen(stg)-1] == 32) - stg[strlen(stg)-1] = 0; - - if(loop == 1) - fprintf(out, "%s\n", stg); - } - } - - fclose(in); - return 0; -} +#include +#include +#include +#include + +#define ULONG uint32_t +#define USHORT uint16_t +#define UCHAR uint8_t + +ULONG isdata[1000000]; /* each bit defines one byte as: code=0, data=1 */ + +extern void dis_asm(ULONG off, ULONG val, char *stg); + +int static inline le2int(unsigned char* buf) +{ + int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; + + return res; +} + +int main(int argc, char **argv) +{ + FILE *in, *out; + char *ptr, stg[256]; + unsigned char buf[4]; + ULONG pos, sz, val, loop; + int offset, offset1; + USHORT regid; + + if(argc == 1 || strcmp(argv[1], "--help") == 0) + { printf("Usage: arm_disass [input file]\n"); + printf(" disassembles input file to 'disasm.txt'\n"); + exit(-1); + } + + in = fopen(argv[1], "rb"); + if(in == NULL) + { printf("Cannot open %s", argv[1]); + exit(-1); + } + + out = fopen("disasm.txt", "w"); + if(out == NULL) exit(-1); + + fseek(in, 0, SEEK_END); + sz = ftell(in); + + /* first loop only sets data/code tags */ + for(loop=0; loop<2; loop++) + { + for(pos=0; pos assume data */ + if((isdata[pos>>5] & (0xf << (pos & 31))) || (val & 0xffff0000) == 0) + { + sprintf(stg, "%6x: %08x", pos, val); + } + else + { + dis_asm(pos, val, stg); + + /* check for instant mov operation */ + if(memcmp(stg+17, "mov ", 4) == 0 && (ptr=strstr(stg, "0x")) != NULL) + { + regid = *(USHORT*)(stg+22); + + sscanf(ptr+2, "%x", &offset); + if(ptr[-1] == '-') + offset = -offset; + } + else + /* check for add/sub operation */ + if((ptr=strstr(stg, "0x")) != NULL + && (memcmp(stg+17, "add ", 4) == 0 || memcmp(stg+17, "sub ", 4) == 0)) + { + if(regid == *(USHORT*)(stg+22) && regid == *(USHORT*)(stg+26)) + { + sscanf(ptr+2, "%x", &offset1); + if(ptr[-1] == '-') + offset1 = -offset1; + + if(memcmp(stg+17, "add ", 4) == 0) offset += offset1; + else offset -= offset1; + + /* add result to disassembler string */ + sprintf(stg+strlen(stg), " <- 0x%x", offset); + } + else + regid = 0; + } + else + regid = 0; + + /* check for const data */ + if(memcmp(stg+26, "[pc, ", 5) == 0 && (ptr=strstr(stg, "0x")) != NULL) + { + sscanf(ptr+2, "%x", &offset); + if(ptr[-1] == '-') + offset = -offset; + + /* add data tag */ + isdata[(pos+offset+8)>>5] |= 1 << ((pos+offset+8) & 31); + + /* add const data to disassembler string */ + fseek(in, pos+offset+8, SEEK_SET); + fread(&buf, 1, 4, in); + offset = le2int(buf); + + sprintf(stg+strlen(stg), " <- 0x%x", offset); + } + } + + /* remove trailing spaces */ + while(stg[strlen(stg)-1] == 32) + stg[strlen(stg)-1] = 0; + + if(loop == 1) + fprintf(out, "%s\n", stg); + } + } + + fclose(in); + return 0; +} diff --git a/utils/jz4740_tools/HXFmerge.c b/utils/jz4740_tools/HXFmerge.c index 6b6c62505e..fdd81b8445 100644 --- a/utils/jz4740_tools/HXFmerge.c +++ b/utils/jz4740_tools/HXFmerge.c @@ -1,321 +1,321 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Maurus Cuelenaere - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#define VERSION "0.2" - -static unsigned char* int2le(unsigned int val) -{ - static unsigned char addr[4]; - addr[0] = val & 0xff; - addr[1] = (val >> 8) & 0xff; - addr[2] = (val >> 16) & 0xff; - addr[3] = (val >> 24) & 0xff; - return addr; -} - -static unsigned int le2int(unsigned char* buf) -{ - unsigned int res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; - - return res; -} - -#ifdef _WIN32 - #define PATH_SEPARATOR "\\" -#else - #define PATH_SEPARATOR "/" -#endif - -#ifndef _WIN32 - -#define MIN(a, b) (a > b ? b : a) -static char* replace(char* str) -{ - static char tmp[255]; - memcpy(tmp, str, MIN(strlen(str), 255)); - char *ptr = tmp; - while(*ptr != 0) - { - if(*ptr == 0x2F) /* /*/ - *ptr = 0x5C; /* \ */ - ptr++; - } - return tmp; -} -#endif - -static bool is_dir(const char* name1, const char* name2) -{ - char *name; - DIR *directory; - name = (char*)malloc(strlen(name1)+strlen(name2)+1); - strcpy(name, name1); - strcat(name, name2); - directory = opendir(name); - free(name); - if(directory) - { - closedir(directory); - return true; - } - else - return false; -} - -unsigned int _filesize(FILE* fd) -{ - unsigned int tmp, oldpos; - oldpos = ftell(fd); - fseek(fd, 0, SEEK_END); - tmp = ftell(fd); - fseek(fd, oldpos, SEEK_SET); - return tmp; -} -#define WRITE(x, len) if(fwrite(x, len, 1, outfile) != 1) \ - { \ - closedir(indir_handle); \ - if(filesize > 0) \ - free(buffer); \ - fprintf(stderr, "[ERR] Error writing to file\n"); \ - return; \ - } -static void merge_hxf(const char* indir, FILE* outfile, const char* add) -{ - DIR *indir_handle; - struct dirent *dirs; - char dir[255]; - strcpy(dir, indir); - strcat(dir, add); - - if((indir_handle = opendir(dir)) == NULL) - { - fprintf(stderr, "[ERR] Error opening dir %s\n", indir); - return; - } - - while((dirs = readdir(indir_handle)) != NULL) - { - if(strcmp(dirs->d_name, "..") != 0 && - strcmp(dirs->d_name, ".") != 0) - { - fprintf(stderr, "[INFO] %s\%s\n", add, dirs->d_name); - if(is_dir(dir, dirs->d_name)) - { - char dir2[255]; - strcpy(dir2, add); - strcat(dir2, dirs->d_name); - strcat(dir2, PATH_SEPARATOR); - merge_hxf(indir, outfile, dir2); - } - else - { - FILE *filehandle; - unsigned char *buffer; - char file[255]; - unsigned int filesize; - strcpy(file, dir); - strcat(file, dirs->d_name); - if((filehandle = fopen(file, "rb")) == NULL) - { - fprintf(stderr, "[ERR] Cannot open %s\n", file); - closedir(indir_handle); - return; - } - filesize = _filesize(filehandle); - if(filesize > 0) - { - buffer = (unsigned char*)malloc(filesize); - if(buffer == NULL) - { - fclose(filehandle); - closedir(indir_handle); - fprintf(stderr, "[ERR] Cannot allocate memory\n"); - return; - } - if(fread(buffer, filesize, 1, filehandle) != 1) - { - fclose(filehandle); - closedir(indir_handle); - free(buffer); - fprintf(stderr, "[ERR] Cannot read from %s%s%s\n", add, PATH_SEPARATOR, dirs->d_name); - return; - } - } - fclose(filehandle); - - if(strlen(add)>0) - { -#ifdef _DIRENT_HAVE_D_NAMLEN - WRITE(int2le(dirs->d_namlen+strlen(add)), 4); -#else - WRITE(int2le(strlen(dirs->d_name)+strlen(add)), 4); -#endif -#ifndef _WIN32 - WRITE(replace((char*)add), strlen(add)-1); -#else - WRITE(add, strlen(add)-1); -#endif - WRITE(PATH_SEPARATOR, 1); -#ifdef _DIRENT_HAVE_D_NAMLEN - WRITE(dirs->d_name, dirs->d_namlen); -#else - WRITE(dirs->d_name, strlen(dirs->d_name)); -#endif - } - else - { -#ifdef _DIRENT_HAVE_D_NAMLEN - WRITE(int2le(dirs->d_namlen), 4); - WRITE(dirs->d_name, dirs->d_namlen); -#else - WRITE(int2le(strlen(dirs->d_name)), 4); - WRITE(dirs->d_name, strlen(dirs->d_name)); -#endif - } - WRITE(int2le(filesize), 4); - if(filesize>0) - { - WRITE(buffer, filesize); - free(buffer); - } - } - } - } - closedir(indir_handle); -} - -static void print_usage(void) -{ -#ifdef _WIN32 - fprintf(stderr, "Usage: hxfmerge.exe [INPUT_DIR] [FW]\n\n"); - fprintf(stderr, "Example: hxfmerge.exe VX747_extracted\\ VX747.HXF\n\n"); -#else - fprintf(stderr, "Usage: HXFmerge [INPUT_DIR] [FW]\n\n"); - fprintf(stderr, "Example: HXFmerge VX747_extracted/ VX747.HXF\n\n"); -#endif -} - -static int checksum(FILE *file) -{ - int oldpos = ftell(file); - int ret=0, i, filesize = _filesize(file)-0x40; - unsigned char *buf; - - buf = (unsigned char*)malloc(filesize); - - if(buf == NULL) - { - fseek(file, oldpos, SEEK_SET); - fprintf(stderr, "[ERR] Error while allocating memory\n"); - return 0; - } - - fseek(file, 0x40, SEEK_SET); - if(fread(buf, filesize, 1, file) != 1) - { - free(buf); - fseek(file, oldpos, SEEK_SET); - fprintf(stderr, "[ERR] Error while reading from file\n"); - return 0; - } - - fprintf(stderr, "[INFO] Computing checksum..."); - - for(i = 0; i < filesize; i+=4) - ret += le2int(&buf[i]); - - free(buf); - fseek(file, oldpos, SEEK_SET); - - fprintf(stderr, " Done!\n"); - return ret; -} - -int main(int argc, char *argv[]) -{ - FILE *outfile; - - fprintf(stderr, "HXFmerge v" VERSION " - (C) 2008 Maurus Cuelenaere\n"); - fprintf(stderr, "This is free software; see the source for copying conditions. There is NO\n"); - fprintf(stderr, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); - - if(argc != 3) - { - print_usage(); - return 1; - } - -#ifdef _WIN32 - if(strcmp((char*)(argv[1]+strlen(argv[1])-1), "\\") != 0) - { - fprintf(stderr, "[ERR] Input path must end with a \\\n"); -#else - if(strcmp((char*)(argv[1]+strlen(argv[1])-1), "/") != 0) - { - fprintf(stderr, "[ERR] Input path must end with a /\n"); -#endif - return 2; - } - - if((outfile = fopen(argv[2], "wb+")) == NULL) - { - fprintf(stderr, "[ERR] Cannot open %s\n", argv[2]); - return 3; - } - - fseek(outfile, 0x40, SEEK_SET); - - merge_hxf(argv[1], outfile, ""); - - fflush(outfile); - - fprintf(stderr, "[INFO] Filling header...\n"); - -#undef WRITE -#define WRITE(x, len) if(fwrite(x, len, 1, outfile) != 1) \ - { \ - fprintf(stderr, "[ERR] Cannot write to %s\n", argv[1]); \ - fclose(outfile); \ - return 4; \ - } - fflush(outfile); - fseek(outfile, 0, SEEK_SET); - WRITE("WADF0100200804111437", 20); - WRITE(int2le(_filesize(outfile)), 4); - WRITE(int2le(checksum(outfile)), 4); - WRITE(int2le(0), 4); - WRITE("Chinachip PMP firmware V1.0\0\0\0\0\0", 32); - fclose(outfile); - - fprintf(stderr, "[INFO] Done!\n"); - - return 0; -} +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Maurus Cuelenaere + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#define VERSION "0.2" + +static unsigned char* int2le(unsigned int val) +{ + static unsigned char addr[4]; + addr[0] = val & 0xff; + addr[1] = (val >> 8) & 0xff; + addr[2] = (val >> 16) & 0xff; + addr[3] = (val >> 24) & 0xff; + return addr; +} + +static unsigned int le2int(unsigned char* buf) +{ + unsigned int res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; + + return res; +} + +#ifdef _WIN32 + #define PATH_SEPARATOR "\\" +#else + #define PATH_SEPARATOR "/" +#endif + +#ifndef _WIN32 + +#define MIN(a, b) (a > b ? b : a) +static char* replace(char* str) +{ + static char tmp[255]; + memcpy(tmp, str, MIN(strlen(str), 255)); + char *ptr = tmp; + while(*ptr != 0) + { + if(*ptr == 0x2F) /* /*/ + *ptr = 0x5C; /* \ */ + ptr++; + } + return tmp; +} +#endif + +static bool is_dir(const char* name1, const char* name2) +{ + char *name; + DIR *directory; + name = (char*)malloc(strlen(name1)+strlen(name2)+1); + strcpy(name, name1); + strcat(name, name2); + directory = opendir(name); + free(name); + if(directory) + { + closedir(directory); + return true; + } + else + return false; +} + +unsigned int _filesize(FILE* fd) +{ + unsigned int tmp, oldpos; + oldpos = ftell(fd); + fseek(fd, 0, SEEK_END); + tmp = ftell(fd); + fseek(fd, oldpos, SEEK_SET); + return tmp; +} +#define WRITE(x, len) if(fwrite(x, len, 1, outfile) != 1) \ + { \ + closedir(indir_handle); \ + if(filesize > 0) \ + free(buffer); \ + fprintf(stderr, "[ERR] Error writing to file\n"); \ + return; \ + } +static void merge_hxf(const char* indir, FILE* outfile, const char* add) +{ + DIR *indir_handle; + struct dirent *dirs; + char dir[255]; + strcpy(dir, indir); + strcat(dir, add); + + if((indir_handle = opendir(dir)) == NULL) + { + fprintf(stderr, "[ERR] Error opening dir %s\n", indir); + return; + } + + while((dirs = readdir(indir_handle)) != NULL) + { + if(strcmp(dirs->d_name, "..") != 0 && + strcmp(dirs->d_name, ".") != 0) + { + fprintf(stderr, "[INFO] %s\%s\n", add, dirs->d_name); + if(is_dir(dir, dirs->d_name)) + { + char dir2[255]; + strcpy(dir2, add); + strcat(dir2, dirs->d_name); + strcat(dir2, PATH_SEPARATOR); + merge_hxf(indir, outfile, dir2); + } + else + { + FILE *filehandle; + unsigned char *buffer; + char file[255]; + unsigned int filesize; + strcpy(file, dir); + strcat(file, dirs->d_name); + if((filehandle = fopen(file, "rb")) == NULL) + { + fprintf(stderr, "[ERR] Cannot open %s\n", file); + closedir(indir_handle); + return; + } + filesize = _filesize(filehandle); + if(filesize > 0) + { + buffer = (unsigned char*)malloc(filesize); + if(buffer == NULL) + { + fclose(filehandle); + closedir(indir_handle); + fprintf(stderr, "[ERR] Cannot allocate memory\n"); + return; + } + if(fread(buffer, filesize, 1, filehandle) != 1) + { + fclose(filehandle); + closedir(indir_handle); + free(buffer); + fprintf(stderr, "[ERR] Cannot read from %s%s%s\n", add, PATH_SEPARATOR, dirs->d_name); + return; + } + } + fclose(filehandle); + + if(strlen(add)>0) + { +#ifdef _DIRENT_HAVE_D_NAMLEN + WRITE(int2le(dirs->d_namlen+strlen(add)), 4); +#else + WRITE(int2le(strlen(dirs->d_name)+strlen(add)), 4); +#endif +#ifndef _WIN32 + WRITE(replace((char*)add), strlen(add)-1); +#else + WRITE(add, strlen(add)-1); +#endif + WRITE(PATH_SEPARATOR, 1); +#ifdef _DIRENT_HAVE_D_NAMLEN + WRITE(dirs->d_name, dirs->d_namlen); +#else + WRITE(dirs->d_name, strlen(dirs->d_name)); +#endif + } + else + { +#ifdef _DIRENT_HAVE_D_NAMLEN + WRITE(int2le(dirs->d_namlen), 4); + WRITE(dirs->d_name, dirs->d_namlen); +#else + WRITE(int2le(strlen(dirs->d_name)), 4); + WRITE(dirs->d_name, strlen(dirs->d_name)); +#endif + } + WRITE(int2le(filesize), 4); + if(filesize>0) + { + WRITE(buffer, filesize); + free(buffer); + } + } + } + } + closedir(indir_handle); +} + +static void print_usage(void) +{ +#ifdef _WIN32 + fprintf(stderr, "Usage: hxfmerge.exe [INPUT_DIR] [FW]\n\n"); + fprintf(stderr, "Example: hxfmerge.exe VX747_extracted\\ VX747.HXF\n\n"); +#else + fprintf(stderr, "Usage: HXFmerge [INPUT_DIR] [FW]\n\n"); + fprintf(stderr, "Example: HXFmerge VX747_extracted/ VX747.HXF\n\n"); +#endif +} + +static int checksum(FILE *file) +{ + int oldpos = ftell(file); + int ret=0, i, filesize = _filesize(file)-0x40; + unsigned char *buf; + + buf = (unsigned char*)malloc(filesize); + + if(buf == NULL) + { + fseek(file, oldpos, SEEK_SET); + fprintf(stderr, "[ERR] Error while allocating memory\n"); + return 0; + } + + fseek(file, 0x40, SEEK_SET); + if(fread(buf, filesize, 1, file) != 1) + { + free(buf); + fseek(file, oldpos, SEEK_SET); + fprintf(stderr, "[ERR] Error while reading from file\n"); + return 0; + } + + fprintf(stderr, "[INFO] Computing checksum..."); + + for(i = 0; i < filesize; i+=4) + ret += le2int(&buf[i]); + + free(buf); + fseek(file, oldpos, SEEK_SET); + + fprintf(stderr, " Done!\n"); + return ret; +} + +int main(int argc, char *argv[]) +{ + FILE *outfile; + + fprintf(stderr, "HXFmerge v" VERSION " - (C) 2008 Maurus Cuelenaere\n"); + fprintf(stderr, "This is free software; see the source for copying conditions. There is NO\n"); + fprintf(stderr, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); + + if(argc != 3) + { + print_usage(); + return 1; + } + +#ifdef _WIN32 + if(strcmp((char*)(argv[1]+strlen(argv[1])-1), "\\") != 0) + { + fprintf(stderr, "[ERR] Input path must end with a \\\n"); +#else + if(strcmp((char*)(argv[1]+strlen(argv[1])-1), "/") != 0) + { + fprintf(stderr, "[ERR] Input path must end with a /\n"); +#endif + return 2; + } + + if((outfile = fopen(argv[2], "wb+")) == NULL) + { + fprintf(stderr, "[ERR] Cannot open %s\n", argv[2]); + return 3; + } + + fseek(outfile, 0x40, SEEK_SET); + + merge_hxf(argv[1], outfile, ""); + + fflush(outfile); + + fprintf(stderr, "[INFO] Filling header...\n"); + +#undef WRITE +#define WRITE(x, len) if(fwrite(x, len, 1, outfile) != 1) \ + { \ + fprintf(stderr, "[ERR] Cannot write to %s\n", argv[1]); \ + fclose(outfile); \ + return 4; \ + } + fflush(outfile); + fseek(outfile, 0, SEEK_SET); + WRITE("WADF0100200804111437", 20); + WRITE(int2le(_filesize(outfile)), 4); + WRITE(int2le(checksum(outfile)), 4); + WRITE(int2le(0), 4); + WRITE("Chinachip PMP firmware V1.0\0\0\0\0\0", 32); + fclose(outfile); + + fprintf(stderr, "[INFO] Done!\n"); + + return 0; +} diff --git a/utils/jz4740_tools/HXFreplace.c b/utils/jz4740_tools/HXFreplace.c index 989a59dd61..bcfff82540 100644 --- a/utils/jz4740_tools/HXFreplace.c +++ b/utils/jz4740_tools/HXFreplace.c @@ -1,242 +1,242 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Maurus Cuelenaere - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#define VERSION "0.1" - -static unsigned char* int2le(unsigned int val) -{ - static unsigned char addr[4]; - addr[0] = val & 0xff; - addr[1] = (val >> 8) & 0xff; - addr[2] = (val >> 16) & 0xff; - addr[3] = (val >> 24) & 0xff; - return addr; -} - -static unsigned int le2int(unsigned char* buf) -{ - unsigned int res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; - - return res; -} - -unsigned int _filesize(FILE* fd) -{ - unsigned int tmp, oldpos; - oldpos = ftell(fd); - fseek(fd, 0, SEEK_END); - tmp = ftell(fd); - fseek(fd, oldpos, SEEK_SET); - return tmp; -} - -static void print_usage(void) -{ -#ifdef _WIN32 - fprintf(stderr, "Usage: hxfreplace.exe [IN_FW] [OUT_FW] [BIN_FILE]\n\n"); - fprintf(stderr, "Example: hxfreplace.exe VX747.HXF out.hxf ccpmp.bin\n\n"); -#else - fprintf(stderr, "Usage: HXFreplace [IN_FW] [OUT_FW] [BIN_FILE]\n\n"); - fprintf(stderr, "Example: HXFreplace VX747.HXF out.hxf ccpmp.bin\n\n"); -#endif -} - -static int checksum(FILE *file) -{ - int oldpos = ftell(file); - int ret=0, i, filesize = _filesize(file)-0x40; - unsigned char *buf; - - buf = (unsigned char*)malloc(filesize); - - if(buf == NULL) - { - fseek(file, oldpos, SEEK_SET); - fprintf(stderr, "[ERR] Error while allocating memory\n"); - return 0; - } - - fseek(file, 0x40, SEEK_SET); - if(fread(buf, filesize, 1, file) != 1) - { - free(buf); - fseek(file, oldpos, SEEK_SET); - fprintf(stderr, "[ERR] Error while reading from file\n"); - return 0; - } - - fprintf(stderr, "[INFO] Computing checksum..."); - - for(i = 0; i < filesize; i+=4) - ret += le2int(&buf[i]); - - free(buf); - fseek(file, oldpos, SEEK_SET); - - fprintf(stderr, " Done!\n"); - return ret; -} - -int main(int argc, char *argv[]) -{ - FILE *infile, *outfile, *fw; - - fprintf(stderr, "HXFreplace v" VERSION " - (C) 2008 Maurus Cuelenaere\n"); - fprintf(stderr, "This is free software; see the source for copying conditions. There is NO\n"); - fprintf(stderr, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); - - if(argc != 4) - { - print_usage(); - return 1; - } - - if((infile = fopen(argv[1], "rb")) == NULL) - { - fprintf(stderr, "[ERR] Cannot open %s\n", argv[1]); - return 2; - } - - if(fseek(infile, 0x40, SEEK_SET) != 0) - { - fprintf(stderr, "[ERR] Cannot seek to 0x40\n"); - fclose(infile); - return 3; - } - - fprintf(stderr, "[INFO] Searching for ccpmp.bin...\n"); - - int found = -1; - int filenamesize; - char *filename; - unsigned char tmp[4]; - -#define READ(x, len) if(fread(x, len, 1, infile) != 1) \ - { \ - fprintf(stderr, "[ERR] Cannot read from %s\n", argv[1]); \ - fclose(infile); \ - return 4; \ - } - while(found < 0) - { - READ(&tmp[0], 4); - filenamesize = le2int(tmp); - filename = (char*)malloc(filenamesize); - READ(filename, filenamesize); - if(strcmp(filename, "ccpmp.bin") == 0) - found = ftell(infile); - else - { - READ(&tmp[0], 4); - fseek(infile, le2int(tmp), SEEK_CUR); - } - free(filename); - } - - fprintf(stderr, "[INFO] Found ccpmp.bin at 0x%x\n", found); - - if((outfile = fopen(argv[2], "wb+")) == NULL) - { - fclose(infile); - fprintf(stderr, "[ERR] Cannot open %s\n", argv[2]); - return 5; - } - -#define WRITE(x, len) if(fwrite(x, len, 1, outfile) != 1) \ - { \ - fprintf(stderr, "[ERR] Cannot write to %s\n", argv[2]); \ - fclose(outfile); \ - if(fw != NULL) \ - fclose(fw); \ - return 5; \ - } - - unsigned char* buffer; - - buffer = (unsigned char*)malloc(found); - fseek(infile, 0, SEEK_SET); - READ(buffer, found); - WRITE(buffer, found); - free(buffer); - - if((fw = fopen(argv[3], "rb")) == NULL) - { - fclose(infile); - fclose(outfile); - fprintf(stderr, "[ERR] Cannot open %s\n", argv[3]); - } - - int fw_filesize = _filesize(fw); - -#define READ2(x, len) if(fread(x, len, 1, fw) != 1) \ - { \ - fprintf(stderr, "[ERR] Cannot read from %s\n", argv[3]); \ - fclose(infile); \ - fclose(outfile); \ - return 6; \ - } - buffer = (unsigned char*)malloc(fw_filesize); - READ2(buffer, fw_filesize); - fputc(0x20, outfile); /* Padding */ - WRITE(int2le(fw_filesize), 4); - WRITE(buffer, fw_filesize); - free(buffer); - fclose(fw); - fw = NULL; - - fseek(infile, found+1, SEEK_SET); - READ(&tmp, 4); - if(fseek(infile, le2int(&tmp[0]), SEEK_CUR) != 0) - { - fprintf(stderr, "[INFO] Cannot seek into %s\n", argv[1]); - fclose(infile); - fclose(outfile); - return 7; - } - found = ftell(infile); - - int other_size = _filesize(infile) - found; - buffer = (unsigned char*)malloc(other_size); - READ(buffer, other_size); - WRITE(buffer, other_size); - free(buffer); - fclose(infile); - - fflush(outfile); - fseek(outfile, 0x14, SEEK_SET); - WRITE(int2le(_filesize(outfile)), 4); - WRITE(int2le(checksum(outfile)), 4); - fclose(outfile); - - fprintf(stderr, "[INFO] Done!\n"); - - return 0; -} +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Maurus Cuelenaere + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#define VERSION "0.1" + +static unsigned char* int2le(unsigned int val) +{ + static unsigned char addr[4]; + addr[0] = val & 0xff; + addr[1] = (val >> 8) & 0xff; + addr[2] = (val >> 16) & 0xff; + addr[3] = (val >> 24) & 0xff; + return addr; +} + +static unsigned int le2int(unsigned char* buf) +{ + unsigned int res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; + + return res; +} + +unsigned int _filesize(FILE* fd) +{ + unsigned int tmp, oldpos; + oldpos = ftell(fd); + fseek(fd, 0, SEEK_END); + tmp = ftell(fd); + fseek(fd, oldpos, SEEK_SET); + return tmp; +} + +static void print_usage(void) +{ +#ifdef _WIN32 + fprintf(stderr, "Usage: hxfreplace.exe [IN_FW] [OUT_FW] [BIN_FILE]\n\n"); + fprintf(stderr, "Example: hxfreplace.exe VX747.HXF out.hxf ccpmp.bin\n\n"); +#else + fprintf(stderr, "Usage: HXFreplace [IN_FW] [OUT_FW] [BIN_FILE]\n\n"); + fprintf(stderr, "Example: HXFreplace VX747.HXF out.hxf ccpmp.bin\n\n"); +#endif +} + +static int checksum(FILE *file) +{ + int oldpos = ftell(file); + int ret=0, i, filesize = _filesize(file)-0x40; + unsigned char *buf; + + buf = (unsigned char*)malloc(filesize); + + if(buf == NULL) + { + fseek(file, oldpos, SEEK_SET); + fprintf(stderr, "[ERR] Error while allocating memory\n"); + return 0; + } + + fseek(file, 0x40, SEEK_SET); + if(fread(buf, filesize, 1, file) != 1) + { + free(buf); + fseek(file, oldpos, SEEK_SET); + fprintf(stderr, "[ERR] Error while reading from file\n"); + return 0; + } + + fprintf(stderr, "[INFO] Computing checksum..."); + + for(i = 0; i < filesize; i+=4) + ret += le2int(&buf[i]); + + free(buf); + fseek(file, oldpos, SEEK_SET); + + fprintf(stderr, " Done!\n"); + return ret; +} + +int main(int argc, char *argv[]) +{ + FILE *infile, *outfile, *fw; + + fprintf(stderr, "HXFreplace v" VERSION " - (C) 2008 Maurus Cuelenaere\n"); + fprintf(stderr, "This is free software; see the source for copying conditions. There is NO\n"); + fprintf(stderr, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); + + if(argc != 4) + { + print_usage(); + return 1; + } + + if((infile = fopen(argv[1], "rb")) == NULL) + { + fprintf(stderr, "[ERR] Cannot open %s\n", argv[1]); + return 2; + } + + if(fseek(infile, 0x40, SEEK_SET) != 0) + { + fprintf(stderr, "[ERR] Cannot seek to 0x40\n"); + fclose(infile); + return 3; + } + + fprintf(stderr, "[INFO] Searching for ccpmp.bin...\n"); + + int found = -1; + int filenamesize; + char *filename; + unsigned char tmp[4]; + +#define READ(x, len) if(fread(x, len, 1, infile) != 1) \ + { \ + fprintf(stderr, "[ERR] Cannot read from %s\n", argv[1]); \ + fclose(infile); \ + return 4; \ + } + while(found < 0) + { + READ(&tmp[0], 4); + filenamesize = le2int(tmp); + filename = (char*)malloc(filenamesize); + READ(filename, filenamesize); + if(strcmp(filename, "ccpmp.bin") == 0) + found = ftell(infile); + else + { + READ(&tmp[0], 4); + fseek(infile, le2int(tmp), SEEK_CUR); + } + free(filename); + } + + fprintf(stderr, "[INFO] Found ccpmp.bin at 0x%x\n", found); + + if((outfile = fopen(argv[2], "wb+")) == NULL) + { + fclose(infile); + fprintf(stderr, "[ERR] Cannot open %s\n", argv[2]); + return 5; + } + +#define WRITE(x, len) if(fwrite(x, len, 1, outfile) != 1) \ + { \ + fprintf(stderr, "[ERR] Cannot write to %s\n", argv[2]); \ + fclose(outfile); \ + if(fw != NULL) \ + fclose(fw); \ + return 5; \ + } + + unsigned char* buffer; + + buffer = (unsigned char*)malloc(found); + fseek(infile, 0, SEEK_SET); + READ(buffer, found); + WRITE(buffer, found); + free(buffer); + + if((fw = fopen(argv[3], "rb")) == NULL) + { + fclose(infile); + fclose(outfile); + fprintf(stderr, "[ERR] Cannot open %s\n", argv[3]); + } + + int fw_filesize = _filesize(fw); + +#define READ2(x, len) if(fread(x, len, 1, fw) != 1) \ + { \ + fprintf(stderr, "[ERR] Cannot read from %s\n", argv[3]); \ + fclose(infile); \ + fclose(outfile); \ + return 6; \ + } + buffer = (unsigned char*)malloc(fw_filesize); + READ2(buffer, fw_filesize); + fputc(0x20, outfile); /* Padding */ + WRITE(int2le(fw_filesize), 4); + WRITE(buffer, fw_filesize); + free(buffer); + fclose(fw); + fw = NULL; + + fseek(infile, found+1, SEEK_SET); + READ(&tmp, 4); + if(fseek(infile, le2int(&tmp[0]), SEEK_CUR) != 0) + { + fprintf(stderr, "[INFO] Cannot seek into %s\n", argv[1]); + fclose(infile); + fclose(outfile); + return 7; + } + found = ftell(infile); + + int other_size = _filesize(infile) - found; + buffer = (unsigned char*)malloc(other_size); + READ(buffer, other_size); + WRITE(buffer, other_size); + free(buffer); + fclose(infile); + + fflush(outfile); + fseek(outfile, 0x14, SEEK_SET); + WRITE(int2le(_filesize(outfile)), 4); + WRITE(int2le(checksum(outfile)), 4); + fclose(outfile); + + fprintf(stderr, "[INFO] Done!\n"); + + return 0; +} diff --git a/utils/jz4740_tools/HXFsplit.c b/utils/jz4740_tools/HXFsplit.c index 6e945b067a..dbeace8a20 100644 --- a/utils/jz4740_tools/HXFsplit.c +++ b/utils/jz4740_tools/HXFsplit.c @@ -1,321 +1,321 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2008 by Maurus Cuelenaere - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 -#include -#include -#include -#include -#include -#include -#include - -#define VERSION "0.2" - -struct header{ - char main_header[20]; - unsigned int size; - unsigned int checksum; - unsigned int unknown; - char other_header[32]; -}; - -static char* basepath(char* path) -{ - static char tmp[255]; - char *ptr, *ptr2, *ptr3; - ptr = path; - ptr2 = (char*)tmp; -#ifdef _WIN32 - ptr3 = strrchr(path, 0x5C); -#else - ptr3 = strrchr(path, 0x2F); -#endif - while((int)ptr < (int)ptr3) - { - *ptr2 = *ptr; - ptr++; - ptr2++; - } -#ifdef _WIN32 - *ptr2 = 0x5C; -#else - *ptr2 = 0x2F; -#endif - ptr2++; - *ptr2 = 0; - return (char*)tmp; -} - -#ifndef _WIN32 -static void replace(char* str) -{ - char *ptr = str; - while(*ptr != 0) - { - if(*ptr == 0x5C) /* \ */ - *ptr = 0x2F; /* / */ - ptr++; - } -} -#endif - -static unsigned int le2int(unsigned char* buf) -{ - unsigned int res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; - - return res; -} - -#ifdef _WIN32 - #define PATH_SEPARATOR '\\' -#else - #define PATH_SEPARATOR '/' -#endif - -static unsigned int __mkdir(const char *path) -{ - char opath[256]; - char *p; - size_t len; - - strncpy(opath, path, sizeof(opath)); - len = strlen(opath); - if(opath[len - 1] == PATH_SEPARATOR) - opath[len - 1] = '\0'; - for(p = opath; *p; p++) - if(*p == PATH_SEPARATOR) - { - *p = '\0'; - if(access(opath, F_OK)) -#ifdef _WIN32 - mkdir(opath); -#else - mkdir(opath, S_IRWXU); -#endif - *p = PATH_SEPARATOR; - } - if(access(opath, F_OK)) -#ifdef _WIN32 - return mkdir(opath); -#else - return mkdir(opath, S_IRWXU); -#endif - else - return -1; -} - -#if 0 -static bool dir_exists(const char *dir) -{ - struct stat buf; - memset(&buf, 0, sizeof(struct stat)); - printf("start: %s\n", dir); - char *dir_cpy = (char*)malloc(strlen(dir)); - strcpy(dir_cpy, dir); - printf("%s\n", dir_cpy); - int tmp = (int)dir_cpy; - while(*dir_cpy != 0) - { - dir_cpy++; - if(*dir_cpy == PATH_SEPARATOR && *(dir_cpy+1) == 0) - *dir_cpy = 0; - } - printf("while_done\n"); - dir_cpy = (char*)tmp; - printf("statting %s...\n", dir_cpy); - tmp = stat(dir_cpy, &buf); - printf("chk_dir(%s) = %d\n", dir_cpy, tmp); - free(dir_cpy); - return tmp == 0; -} -#endif - -static bool file_exists(const char *file) -{ - struct stat buf; - return stat(file, &buf) == 0; -} - - -static int split_hxf(const unsigned char* infile, unsigned int size, const char* outpath) -{ - FILE *outfile; - char *filename; - unsigned int filenamesize, filesize; - while(size > 0) - { - filenamesize = le2int((unsigned char*)infile); - infile += 4; - size -= 4; - if(size > 0) - { - filename = (char*)calloc(1, filenamesize+1+strlen(outpath)); - memcpy(filename, outpath, strlen(outpath)); - memcpy(&filename[strlen(outpath)], infile, filenamesize); -#ifndef _WIN32 - replace(filename); -#endif - infile += filenamesize + 1; /* + padding */ - size -= filenamesize + 1; - - filesize = le2int((unsigned char*)infile); - infile += 4; - size -= 4; -#if 0 - if(!dir_exists(basepath(filename))) -#endif - { - printf("[INFO] %s\n", basepath(filename)); - if(__mkdir(basepath(filename)) != 0) - { -#if 0 - fprintf(stderr, "[ERR] Error creating directory %s\n", basepath(filename)); - return -3; -#endif - } - } - - if(!file_exists(filename)) - { - printf("[INFO] %s: %d bytes\n", filename, filesize); - if((outfile = fopen(filename, "wb")) == NULL) - { - fprintf(stderr, "[ERR] Error opening file %s\n", filename); - return -1; - } - if(filesize>0) - { - if(fwrite(infile, filesize, 1, outfile) != 1) - { - fclose(outfile); - fprintf(stderr, "[ERR] Error writing to file %s\n", filename); - return -2; - } - } - fclose(outfile); - } - - infile += filesize; - size -= filesize; - } - } - return 0; -} - -static void print_usage(void) -{ -#ifdef _WIN32 - fprintf(stderr, "Usage: hxfsplit.exe [FW] [OUTPUT_DIR]\n\n"); - fprintf(stderr, "Example: hxfsplit.exe VX747.HXF VX747_extracted\\\n\n"); -#else - fprintf(stderr, "Usage: HXFsplit [FW] [OUTPUT_DIR]\n\n"); - fprintf(stderr, "Example: HXFsplit VX747.HXF VX747_extracted/\n\n"); -#endif -} - -int main(int argc, char *argv[]) -{ - FILE *infile; - struct header hdr; - unsigned char *inbuffer; - - fprintf(stderr, "HXFsplit v" VERSION " - (C) 2008 Maurus Cuelenaere\n"); - fprintf(stderr, "This is free software; see the source for copying conditions. There is NO\n"); - fprintf(stderr, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); - - if(argc != 3) - { - print_usage(); - return 1; - } - -#ifdef _WIN32 - if(strcmp((char*)(argv[2]+strlen(argv[2])-1), "\\") != 0) - { - fprintf(stderr, "[ERR] Output path must end with a \\\n"); -#else - if(strcmp((char*)(argv[2]+strlen(argv[2])-1), "/") != 0) - { - fprintf(stderr, "[ERR] Output path must end with a /\n"); -#endif - return 2; - } - - if((infile = fopen(argv[1], "rb")) == NULL) - { - fprintf(stderr, "[ERR] Cannot open %s\n", argv[1]); - return 3; - } - - if((inbuffer = (unsigned char*)malloc(sizeof(struct header))) == NULL) - { - fclose(infile); - fprintf(stderr, "[ERR] Error allocating %d bytes buffer\n", sizeof(struct header)); - return 4; - } - - if(fread(inbuffer, sizeof(struct header), 1, infile) != 1) - { - fclose(infile); - fprintf(stderr, "Cannot read header of %s\n", argv[1]); - return 5; - } - - memcpy(hdr.main_header, inbuffer, 20); - hdr.size = le2int(&inbuffer[20]); - hdr.checksum = le2int(&inbuffer[24]); - hdr.unknown = le2int(&inbuffer[28]); - memcpy(hdr.other_header, &inbuffer[32], 32); - free(inbuffer); - - if(strcmp(hdr.other_header, "Chinachip PMP firmware V1.0") != 0) - { - fclose(infile); - fprintf(stderr, "[ERR] Header doesn't match\n"); - return 6; - } - - if((inbuffer = (unsigned char*)malloc(hdr.size)) == NULL) - { - fclose(infile); - fprintf(stderr, "[ERR] Error allocating %d bytes buffer\n", hdr.size); - return 7; - } - - fseek(infile, sizeof(struct header), SEEK_SET); - - if(fread(inbuffer, hdr.size-sizeof(struct header), 1, infile) != 1) - { - fclose(infile); - free(inbuffer); - fprintf(stderr, "[ERR] Cannot read file in buffer\n"); - return 8; - } - - fclose(infile); - - split_hxf(inbuffer, hdr.size-sizeof(struct header), argv[2]); - - free(inbuffer); - - return 0; -} +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Maurus Cuelenaere + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 +#include +#include +#include +#include +#include +#include +#include + +#define VERSION "0.2" + +struct header{ + char main_header[20]; + unsigned int size; + unsigned int checksum; + unsigned int unknown; + char other_header[32]; +}; + +static char* basepath(char* path) +{ + static char tmp[255]; + char *ptr, *ptr2, *ptr3; + ptr = path; + ptr2 = (char*)tmp; +#ifdef _WIN32 + ptr3 = strrchr(path, 0x5C); +#else + ptr3 = strrchr(path, 0x2F); +#endif + while((int)ptr < (int)ptr3) + { + *ptr2 = *ptr; + ptr++; + ptr2++; + } +#ifdef _WIN32 + *ptr2 = 0x5C; +#else + *ptr2 = 0x2F; +#endif + ptr2++; + *ptr2 = 0; + return (char*)tmp; +} + +#ifndef _WIN32 +static void replace(char* str) +{ + char *ptr = str; + while(*ptr != 0) + { + if(*ptr == 0x5C) /* \ */ + *ptr = 0x2F; /* / */ + ptr++; + } +} +#endif + +static unsigned int le2int(unsigned char* buf) +{ + unsigned int res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; + + return res; +} + +#ifdef _WIN32 + #define PATH_SEPARATOR '\\' +#else + #define PATH_SEPARATOR '/' +#endif + +static unsigned int __mkdir(const char *path) +{ + char opath[256]; + char *p; + size_t len; + + strncpy(opath, path, sizeof(opath)); + len = strlen(opath); + if(opath[len - 1] == PATH_SEPARATOR) + opath[len - 1] = '\0'; + for(p = opath; *p; p++) + if(*p == PATH_SEPARATOR) + { + *p = '\0'; + if(access(opath, F_OK)) +#ifdef _WIN32 + mkdir(opath); +#else + mkdir(opath, S_IRWXU); +#endif + *p = PATH_SEPARATOR; + } + if(access(opath, F_OK)) +#ifdef _WIN32 + return mkdir(opath); +#else + return mkdir(opath, S_IRWXU); +#endif + else + return -1; +} + +#if 0 +static bool dir_exists(const char *dir) +{ + struct stat buf; + memset(&buf, 0, sizeof(struct stat)); + printf("start: %s\n", dir); + char *dir_cpy = (char*)malloc(strlen(dir)); + strcpy(dir_cpy, dir); + printf("%s\n", dir_cpy); + int tmp = (int)dir_cpy; + while(*dir_cpy != 0) + { + dir_cpy++; + if(*dir_cpy == PATH_SEPARATOR && *(dir_cpy+1) == 0) + *dir_cpy = 0; + } + printf("while_done\n"); + dir_cpy = (char*)tmp; + printf("statting %s...\n", dir_cpy); + tmp = stat(dir_cpy, &buf); + printf("chk_dir(%s) = %d\n", dir_cpy, tmp); + free(dir_cpy); + return tmp == 0; +} +#endif + +static bool file_exists(const char *file) +{ + struct stat buf; + return stat(file, &buf) == 0; +} + + +static int split_hxf(const unsigned char* infile, unsigned int size, const char* outpath) +{ + FILE *outfile; + char *filename; + unsigned int filenamesize, filesize; + while(size > 0) + { + filenamesize = le2int((unsigned char*)infile); + infile += 4; + size -= 4; + if(size > 0) + { + filename = (char*)calloc(1, filenamesize+1+strlen(outpath)); + memcpy(filename, outpath, strlen(outpath)); + memcpy(&filename[strlen(outpath)], infile, filenamesize); +#ifndef _WIN32 + replace(filename); +#endif + infile += filenamesize + 1; /* + padding */ + size -= filenamesize + 1; + + filesize = le2int((unsigned char*)infile); + infile += 4; + size -= 4; +#if 0 + if(!dir_exists(basepath(filename))) +#endif + { + printf("[INFO] %s\n", basepath(filename)); + if(__mkdir(basepath(filename)) != 0) + { +#if 0 + fprintf(stderr, "[ERR] Error creating directory %s\n", basepath(filename)); + return -3; +#endif + } + } + + if(!file_exists(filename)) + { + printf("[INFO] %s: %d bytes\n", filename, filesize); + if((outfile = fopen(filename, "wb")) == NULL) + { + fprintf(stderr, "[ERR] Error opening file %s\n", filename); + return -1; + } + if(filesize>0) + { + if(fwrite(infile, filesize, 1, outfile) != 1) + { + fclose(outfile); + fprintf(stderr, "[ERR] Error writing to file %s\n", filename); + return -2; + } + } + fclose(outfile); + } + + infile += filesize; + size -= filesize; + } + } + return 0; +} + +static void print_usage(void) +{ +#ifdef _WIN32 + fprintf(stderr, "Usage: hxfsplit.exe [FW] [OUTPUT_DIR]\n\n"); + fprintf(stderr, "Example: hxfsplit.exe VX747.HXF VX747_extracted\\\n\n"); +#else + fprintf(stderr, "Usage: HXFsplit [FW] [OUTPUT_DIR]\n\n"); + fprintf(stderr, "Example: HXFsplit VX747.HXF VX747_extracted/\n\n"); +#endif +} + +int main(int argc, char *argv[]) +{ + FILE *infile; + struct header hdr; + unsigned char *inbuffer; + + fprintf(stderr, "HXFsplit v" VERSION " - (C) 2008 Maurus Cuelenaere\n"); + fprintf(stderr, "This is free software; see the source for copying conditions. There is NO\n"); + fprintf(stderr, "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); + + if(argc != 3) + { + print_usage(); + return 1; + } + +#ifdef _WIN32 + if(strcmp((char*)(argv[2]+strlen(argv[2])-1), "\\") != 0) + { + fprintf(stderr, "[ERR] Output path must end with a \\\n"); +#else + if(strcmp((char*)(argv[2]+strlen(argv[2])-1), "/") != 0) + { + fprintf(stderr, "[ERR] Output path must end with a /\n"); +#endif + return 2; + } + + if((infile = fopen(argv[1], "rb")) == NULL) + { + fprintf(stderr, "[ERR] Cannot open %s\n", argv[1]); + return 3; + } + + if((inbuffer = (unsigned char*)malloc(sizeof(struct header))) == NULL) + { + fclose(infile); + fprintf(stderr, "[ERR] Error allocating %d bytes buffer\n", sizeof(struct header)); + return 4; + } + + if(fread(inbuffer, sizeof(struct header), 1, infile) != 1) + { + fclose(infile); + fprintf(stderr, "Cannot read header of %s\n", argv[1]); + return 5; + } + + memcpy(hdr.main_header, inbuffer, 20); + hdr.size = le2int(&inbuffer[20]); + hdr.checksum = le2int(&inbuffer[24]); + hdr.unknown = le2int(&inbuffer[28]); + memcpy(hdr.other_header, &inbuffer[32], 32); + free(inbuffer); + + if(strcmp(hdr.other_header, "Chinachip PMP firmware V1.0") != 0) + { + fclose(infile); + fprintf(stderr, "[ERR] Header doesn't match\n"); + return 6; + } + + if((inbuffer = (unsigned char*)malloc(hdr.size)) == NULL) + { + fclose(infile); + fprintf(stderr, "[ERR] Error allocating %d bytes buffer\n", hdr.size); + return 7; + } + + fseek(infile, sizeof(struct header), SEEK_SET); + + if(fread(inbuffer, hdr.size-sizeof(struct header), 1, infile) != 1) + { + fclose(infile); + free(inbuffer); + fprintf(stderr, "[ERR] Cannot read file in buffer\n"); + return 8; + } + + fclose(infile); + + split_hxf(inbuffer, hdr.size-sizeof(struct header), argv[2]); + + free(inbuffer); + + return 0; +} -- cgit v1.2.3