diff options
68 files changed, 3916 insertions, 509 deletions
diff --git a/.gitignore b/.gitignore index 5db3eaed58..b0d692c5d0 100644 --- a/.gitignore +++ b/.gitignore | |||
@@ -110,6 +110,7 @@ __pycache__ | |||
110 | /tools/codepages | 110 | /tools/codepages |
111 | /tools/rdf2binary | 111 | /tools/rdf2binary |
112 | /tools/mkboot | 112 | /tools/mkboot |
113 | /tools/mk500boot | ||
113 | /tools/uclpack | 114 | /tools/uclpack |
114 | /tools/ipod_fw | 115 | /tools/ipod_fw |
115 | /tools/wavtrim | 116 | /tools/wavtrim |
diff --git a/apps/filetree.c b/apps/filetree.c index b5f5dece5a..9550adbac2 100644 --- a/apps/filetree.c +++ b/apps/filetree.c | |||
@@ -224,7 +224,11 @@ static int compare(const void* p1, const void* p2) | |||
224 | struct entry* e2 = (struct entry*)p2; | 224 | struct entry* e2 = (struct entry*)p2; |
225 | int criteria; | 225 | int criteria; |
226 | 226 | ||
227 | if (e1->attr & ATTR_DIRECTORY && e2->attr & ATTR_DIRECTORY) | 227 | if (cmp_data.sort_dir == SORT_AS_FILE) |
228 | { /* treat as two files */ | ||
229 | criteria = global_settings.sort_file; | ||
230 | } | ||
231 | else if (e1->attr & ATTR_DIRECTORY && e2->attr & ATTR_DIRECTORY) | ||
228 | { /* two directories */ | 232 | { /* two directories */ |
229 | criteria = cmp_data.sort_dir; | 233 | criteria = cmp_data.sort_dir; |
230 | 234 | ||
@@ -326,18 +330,17 @@ int ft_load(struct tree_context* c, const char* tempdir) | |||
326 | info = dir_get_info(dir, entry); | 330 | info = dir_get_info(dir, entry); |
327 | len = strlen((char *)entry->d_name); | 331 | len = strlen((char *)entry->d_name); |
328 | 332 | ||
329 | /* skip directories . and .. */ | ||
330 | if ((info.attribute & ATTR_DIRECTORY) && | ||
331 | (((len == 1) && (!strncmp((char *)entry->d_name, ".", 1))) || | ||
332 | ((len == 2) && (!strncmp((char *)entry->d_name, "..", 2))))) { | ||
333 | continue; | ||
334 | } | ||
335 | |||
336 | /* Skip FAT volume ID */ | 333 | /* Skip FAT volume ID */ |
337 | if (info.attribute & ATTR_VOLUME_ID) { | 334 | if (info.attribute & ATTR_VOLUME_ID) { |
338 | continue; | 335 | continue; |
339 | } | 336 | } |
340 | 337 | ||
338 | dptr->attr = info.attribute; | ||
339 | int dir_attr = (dptr->attr & ATTR_DIRECTORY); | ||
340 | /* skip directories . and .. */ | ||
341 | if (dir_attr && is_dotdir_name(entry->d_name)) | ||
342 | continue; | ||
343 | |||
341 | /* filter out dotfiles and hidden files */ | 344 | /* filter out dotfiles and hidden files */ |
342 | if (*c->dirfilter != SHOW_ALL && | 345 | if (*c->dirfilter != SHOW_ALL && |
343 | ((entry->d_name[0]=='.') || | 346 | ((entry->d_name[0]=='.') || |
@@ -345,48 +348,45 @@ int ft_load(struct tree_context* c, const char* tempdir) | |||
345 | continue; | 348 | continue; |
346 | } | 349 | } |
347 | 350 | ||
348 | dptr->attr = info.attribute; | ||
349 | int dir_attr = (dptr->attr & ATTR_DIRECTORY); | ||
350 | |||
351 | /* check for known file types */ | 351 | /* check for known file types */ |
352 | if ( !(dir_attr) ) | 352 | if ( !(dir_attr) ) |
353 | dptr->attr |= filetype_get_attr((char *)entry->d_name); | 353 | dptr->attr |= filetype_get_attr((char *)entry->d_name); |
354 | 354 | ||
355 | int file_attr = (dptr->attr & FILE_ATTR_MASK); | 355 | int file_attr = (dptr->attr & FILE_ATTR_MASK); |
356 | 356 | ||
357 | #define CHK_FT(show,attr) (*c->dirfilter == (show) && file_attr != (attr)) | ||
357 | /* filter out non-visible files */ | 358 | /* filter out non-visible files */ |
358 | if ((!(dir_attr) && ((*c->dirfilter == SHOW_PLAYLIST && | 359 | if ((!(dir_attr) && (CHK_FT(SHOW_PLAYLIST, FILE_ATTR_M3U) || |
359 | file_attr != FILE_ATTR_M3U) || | 360 | (CHK_FT(SHOW_MUSIC, FILE_ATTR_AUDIO) && file_attr != FILE_ATTR_M3U) || |
360 | ((*c->dirfilter == SHOW_MUSIC && file_attr != FILE_ATTR_AUDIO) && | ||
361 | file_attr != FILE_ATTR_M3U) || | ||
362 | (*c->dirfilter == SHOW_SUPPORTED && !filetype_supported(dptr->attr)))) || | 361 | (*c->dirfilter == SHOW_SUPPORTED && !filetype_supported(dptr->attr)))) || |
363 | (*c->dirfilter == SHOW_WPS && file_attr != FILE_ATTR_WPS) || | 362 | CHK_FT(SHOW_WPS, FILE_ATTR_WPS) || |
364 | (*c->dirfilter == SHOW_FONT && file_attr != FILE_ATTR_FONT) || | 363 | CHK_FT(SHOW_FONT, FILE_ATTR_FONT) || |
365 | (*c->dirfilter == SHOW_SBS && file_attr != FILE_ATTR_SBS) || | 364 | CHK_FT(SHOW_SBS, FILE_ATTR_SBS) || |
366 | #if CONFIG_TUNER | 365 | #if CONFIG_TUNER |
367 | (*c->dirfilter == SHOW_FMS && file_attr != FILE_ATTR_FMS) || | 366 | CHK_FT(SHOW_FMS, FILE_ATTR_FMS) || |
367 | CHK_FT(SHOW_FMR, FILE_ATTR_FMR) || | ||
368 | #endif | 368 | #endif |
369 | #ifdef HAVE_REMOTE_LCD | 369 | #ifdef HAVE_REMOTE_LCD |
370 | (*c->dirfilter == SHOW_RWPS && file_attr != FILE_ATTR_RWPS) || | 370 | CHK_FT(SHOW_RWPS, FILE_ATTR_RWPS) || |
371 | (*c->dirfilter == SHOW_RSBS && file_attr != FILE_ATTR_RSBS) || | 371 | CHK_FT(SHOW_RSBS, FILE_ATTR_RSBS) || |
372 | #if CONFIG_TUNER | 372 | #if CONFIG_TUNER |
373 | (*c->dirfilter == SHOW_RFMS && file_attr != FILE_ATTR_RFMS) || | 373 | CHK_FT(SHOW_RFMS, FILE_ATTR_RFMS) || |
374 | #endif | ||
375 | #endif | 374 | #endif |
376 | #if CONFIG_TUNER | ||
377 | (*c->dirfilter == SHOW_FMR && file_attr != FILE_ATTR_FMR) || | ||
378 | #endif | 375 | #endif |
379 | (*c->dirfilter == SHOW_M3U && file_attr != FILE_ATTR_M3U) || | 376 | CHK_FT(SHOW_M3U, FILE_ATTR_M3U) || |
380 | (*c->dirfilter == SHOW_CFG && file_attr != FILE_ATTR_CFG) || | 377 | CHK_FT(SHOW_CFG, FILE_ATTR_CFG) || |
381 | (*c->dirfilter == SHOW_LNG && file_attr != FILE_ATTR_LNG) || | 378 | CHK_FT(SHOW_LNG, FILE_ATTR_LNG) || |
382 | (*c->dirfilter == SHOW_MOD && file_attr != FILE_ATTR_MOD) || | 379 | CHK_FT(SHOW_MOD, FILE_ATTR_MOD) || |
383 | (*c->dirfilter == SHOW_PLUGINS && file_attr != FILE_ATTR_ROCK && | 380 | /* show first level directories */ |
384 | file_attr != FILE_ATTR_LUA && | 381 | ((!(dir_attr) || c->dirlevel > 0) && |
385 | file_attr != FILE_ATTR_OPX) || | 382 | CHK_FT(SHOW_PLUGINS, FILE_ATTR_ROCK) && |
383 | file_attr != FILE_ATTR_LUA && | ||
384 | file_attr != FILE_ATTR_OPX) || | ||
386 | (callback_show_item && !callback_show_item(entry->d_name, dptr->attr, c))) | 385 | (callback_show_item && !callback_show_item(entry->d_name, dptr->attr, c))) |
387 | { | 386 | { |
388 | continue; | 387 | continue; |
389 | } | 388 | } |
389 | #undef CHK_FT | ||
390 | 390 | ||
391 | if (len > c->cache.name_buffer_size - name_buffer_used - 1) { | 391 | if (len > c->cache.name_buffer_size - name_buffer_used - 1) { |
392 | /* Tell the world that we ran out of buffer space */ | 392 | /* Tell the world that we ran out of buffer space */ |
@@ -408,7 +408,9 @@ int ft_load(struct tree_context* c, const char* tempdir) | |||
408 | c->dirlength = files_in_dir; | 408 | c->dirlength = files_in_dir; |
409 | closedir(dir); | 409 | closedir(dir); |
410 | 410 | ||
411 | cmp_data.sort_dir = c->sort_dir; | 411 | /* allow directories to be sorted into file list */ |
412 | cmp_data.sort_dir = (*c->dirfilter == SHOW_PLUGINS) ? SORT_AS_FILE : c->sort_dir; | ||
413 | |||
412 | if (global_settings.sort_case) | 414 | if (global_settings.sort_case) |
413 | { | 415 | { |
414 | if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) | 416 | if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) |
@@ -753,7 +755,7 @@ int ft_enter(struct tree_context* c) | |||
753 | return rc; | 755 | return rc; |
754 | } | 756 | } |
755 | 757 | ||
756 | plugin = filetype_get_plugin(file, plugin_path, sizeof(plugin_path)); | 758 | plugin = filetype_get_plugin(file->attr, plugin_path, sizeof(plugin_path)); |
757 | if (plugin) | 759 | if (plugin) |
758 | { | 760 | { |
759 | #ifdef PLUGINS_RUN_IN_BROWSER /* Stay in the filetree to run a plugin */ | 761 | #ifdef PLUGINS_RUN_IN_BROWSER /* Stay in the filetree to run a plugin */ |
diff --git a/apps/filetypes.c b/apps/filetypes.c index bda7018381..38ed7650e3 100644 --- a/apps/filetypes.c +++ b/apps/filetypes.c | |||
@@ -604,11 +604,11 @@ int filetype_get_icon(int attr) | |||
604 | return filetypes[index].icon; | 604 | return filetypes[index].icon; |
605 | } | 605 | } |
606 | 606 | ||
607 | char* filetype_get_plugin(const struct entry* file, char *buffer, size_t buffer_len) | 607 | static int filetype_get_plugin_index(int attr) |
608 | { | 608 | { |
609 | int index = find_attr(file->attr); | 609 | int index = find_attr(attr); |
610 | if (index < 0 || !buffer) | 610 | if (index < 0) |
611 | return NULL; | 611 | return -1; |
612 | struct file_type *ft_indexed = &filetypes[index]; | 612 | struct file_type *ft_indexed = &filetypes[index]; |
613 | 613 | ||
614 | /* attempt to find a suitable viewer by file extension */ | 614 | /* attempt to find a suitable viewer by file extension */ |
@@ -621,17 +621,27 @@ char* filetype_get_plugin(const struct entry* file, char *buffer, size_t buffer_ | |||
621 | ft = &filetypes[i]; | 621 | ft = &filetypes[i]; |
622 | if (ft->plugin == NULL || ft->extension == NULL) | 622 | if (ft->plugin == NULL || ft->extension == NULL) |
623 | continue; | 623 | continue; |
624 | else if (strcmp(ft->extension, ft_indexed->extension) == 0) | 624 | else if (ft->plugin != NULL && |
625 | strcmp(ft->extension, ft_indexed->extension) == 0) | ||
625 | { | 626 | { |
626 | /*splashf(HZ*3, "Found %d %s %s", i, ft->extension, ft->plugin);*/ | 627 | /*splashf(HZ*3, "Found %d %s %s", i, ft->extension, ft->plugin);*/ |
627 | ft_indexed = ft; | 628 | return i; |
628 | break; | ||
629 | } | 629 | } |
630 | } | 630 | } |
631 | } | 631 | } |
632 | if (ft_indexed->plugin == NULL) | 632 | if (ft_indexed->plugin == NULL) |
633 | index = -1; | ||
634 | return index; /* Not Found */ | ||
635 | } | ||
636 | |||
637 | char* filetype_get_plugin(int attr, char *buffer, size_t buffer_len) | ||
638 | { | ||
639 | int index = filetype_get_plugin_index(attr); | ||
640 | if (index < 0 || !buffer) | ||
633 | return NULL; | 641 | return NULL; |
634 | 642 | ||
643 | struct file_type *ft_indexed = &filetypes[index]; | ||
644 | |||
635 | snprintf(buffer, buffer_len, "%s/%s." ROCK_EXTENSION, | 645 | snprintf(buffer, buffer_len, "%s/%s." ROCK_EXTENSION, |
636 | PLUGIN_DIR, ft_indexed->plugin); | 646 | PLUGIN_DIR, ft_indexed->plugin); |
637 | return buffer; | 647 | return buffer; |
@@ -674,24 +684,48 @@ static int openwith_get_talk(int selected_item, void * data) | |||
674 | return 0; | 684 | return 0; |
675 | } | 685 | } |
676 | 686 | ||
677 | int filetype_list_viewers(const char* current_file) | 687 | char* filetype_get_viewer(char *buffer, size_t buffer_len, const char* current_file) |
678 | { | 688 | { |
689 | int attr = filetype_get_attr(current_file); | ||
690 | |||
679 | struct simplelist_info info; | 691 | struct simplelist_info info; |
680 | simplelist_info_init(&info, str(LANG_ONPLAY_OPEN_WITH), viewer_count, NULL); | 692 | simplelist_info_init(&info, str(LANG_ONPLAY_OPEN_WITH), viewer_count, NULL); |
693 | |||
694 | int default_index = filetype_get_plugin_index(attr); | ||
695 | |||
696 | if (default_index >= 0) | ||
697 | { | ||
698 | for (int i = 0; i < viewer_count; i++) | ||
699 | if (viewers[i] == default_index) | ||
700 | { | ||
701 | info.selection = i; | ||
702 | break; | ||
703 | } | ||
704 | } | ||
705 | |||
681 | info.get_name = openwith_get_name; | 706 | info.get_name = openwith_get_name; |
682 | info.get_icon = global_settings.show_icons?openwith_get_icon:NULL; | 707 | info.get_icon = global_settings.show_icons?openwith_get_icon:NULL; |
683 | info.get_talk = openwith_get_talk; | 708 | info.get_talk = openwith_get_talk; |
684 | 709 | ||
685 | int ret = simplelist_show_list(&info); | 710 | simplelist_show_list(&info); |
686 | 711 | ||
687 | if (info.selection >= 0) /* run user selected viewer */ | 712 | if (info.selection >= 0) /* run user selected viewer */ |
688 | { | 713 | { |
689 | char plugin[MAX_PATH]; | ||
690 | int i = viewers[info.selection]; | 714 | int i = viewers[info.selection]; |
691 | snprintf(plugin, MAX_PATH, "%s/%s." ROCK_EXTENSION, | 715 | snprintf(buffer, buffer_len, "%s/%s." ROCK_EXTENSION, |
692 | PLUGIN_DIR, filetypes[i].plugin); | 716 | PLUGIN_DIR, filetypes[i].plugin); |
693 | ret = plugin_load(plugin, current_file); | 717 | return buffer; |
694 | } | 718 | } |
719 | return NULL; | ||
720 | |||
721 | } | ||
722 | |||
723 | int filetype_list_viewers(const char* current_file) | ||
724 | { | ||
725 | int ret = PLUGIN_ERROR; | ||
726 | char plugin[MAX_PATH]; | ||
727 | if (filetype_get_viewer(plugin, sizeof(plugin), current_file) != NULL) | ||
728 | ret = plugin_load(plugin, current_file); | ||
695 | return ret; | 729 | return ret; |
696 | } | 730 | } |
697 | 731 | ||
diff --git a/apps/filetypes.h b/apps/filetypes.h index 2886fa2850..4039daf497 100644 --- a/apps/filetypes.h +++ b/apps/filetypes.h | |||
@@ -74,14 +74,17 @@ int filetype_get_color(const char* name, int attr); | |||
74 | #endif | 74 | #endif |
75 | int filetype_get_icon(int attr); | 75 | int filetype_get_icon(int attr); |
76 | /* return the plugin filename associated with the file */ | 76 | /* return the plugin filename associated with the file */ |
77 | char* filetype_get_plugin(const struct entry* file, char *buffer, size_t buffer_len); | 77 | char* filetype_get_plugin(int attr, char *buffer, size_t buffer_len); |
78 | 78 | ||
79 | /* returns true if the attr is supported */ | 79 | /* returns true if the attr is supported */ |
80 | bool filetype_supported(int attr); | 80 | bool filetype_supported(int attr); |
81 | 81 | ||
82 | /* List avialable viewers */ | 82 | /* List avialable viewers and start selected plugin with current_file as argument */ |
83 | int filetype_list_viewers(const char* current_file); | 83 | int filetype_list_viewers(const char* current_file); |
84 | 84 | ||
85 | /* return the plugin filename the user selected for the file Returns NULL if canceled */ | ||
86 | char* filetype_get_viewer(char *buffer, size_t buffer_len, const char* current_file); | ||
87 | |||
85 | /* start a plugin with file as the argument (called from onplay.c) */ | 88 | /* start a plugin with file as the argument (called from onplay.c) */ |
86 | int filetype_load_plugin(const char* plugin, const char* file); | 89 | int filetype_load_plugin(const char* plugin, const char* file); |
87 | 90 | ||
diff --git a/apps/lang/english-us.lang b/apps/lang/english-us.lang index 8cd7dcd10d..387593d990 100644 --- a/apps/lang/english-us.lang +++ b/apps/lang/english-us.lang | |||
@@ -14137,7 +14137,7 @@ | |||
14137 | *: "No viewers found" | 14137 | *: "No viewers found" |
14138 | </source> | 14138 | </source> |
14139 | <dest> | 14139 | <dest> |
14140 | *: "No viewers found" | 14140 | *: "No viewers found" |
14141 | </dest> | 14141 | </dest> |
14142 | <voice> | 14142 | <voice> |
14143 | *: "No viewers found" | 14143 | *: "No viewers found" |
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 3a1f52c9b1..6bba65f6a9 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang | |||
@@ -12915,7 +12915,7 @@ | |||
12915 | *: "No viewers found" | 12915 | *: "No viewers found" |
12916 | </source> | 12916 | </source> |
12917 | <dest> | 12917 | <dest> |
12918 | *: "No viewers found" | 12918 | *: "No viewers found" |
12919 | </dest> | 12919 | </dest> |
12920 | <voice> | 12920 | <voice> |
12921 | *: "No viewers found" | 12921 | *: "No viewers found" |
diff --git a/apps/lang/italiano.lang b/apps/lang/italiano.lang index b6b97df22f..6174d6bb39 100644 --- a/apps/lang/italiano.lang +++ b/apps/lang/italiano.lang | |||
@@ -2260,15 +2260,15 @@ | |||
2260 | desc: in lcd settings | 2260 | desc: in lcd settings |
2261 | user: core | 2261 | user: core |
2262 | <source> | 2262 | <source> |
2263 | *: none | 2263 | *: "Backlight on Lock" |
2264 | hold_button: "Backlight on Hold" | 2264 | hold_button: "Backlight on Hold" |
2265 | </source> | 2265 | </source> |
2266 | <dest> | 2266 | <dest> |
2267 | *: none | 2267 | *: "Backlight on Lock" |
2268 | hold_button: "Retroilluminazione Sul tasto di blocco" | 2268 | hold_button: "Retroilluminazione Sul tasto di blocco" |
2269 | </dest> | 2269 | </dest> |
2270 | <voice> | 2270 | <voice> |
2271 | *: none | 2271 | *: "Backlight on Lock" |
2272 | hold_button: "RetroIlluminazione sul tasto di blocco" | 2272 | hold_button: "RetroIlluminazione sul tasto di blocco" |
2273 | </voice> | 2273 | </voice> |
2274 | </phrase> | 2274 | </phrase> |
@@ -6330,7 +6330,7 @@ | |||
6330 | *: "Searching... %d found (%s)" | 6330 | *: "Searching... %d found (%s)" |
6331 | </source> | 6331 | </source> |
6332 | <dest> | 6332 | <dest> |
6333 | *: "Ricerca... %d trovato (%i)" | 6333 | *: "Ricerca... %d trovato (%s)" |
6334 | </dest> | 6334 | </dest> |
6335 | <voice> | 6335 | <voice> |
6336 | *: "Trovato" | 6336 | *: "Trovato" |
@@ -15861,16 +15861,16 @@ | |||
15861 | </phrase> | 15861 | </phrase> |
15862 | <phrase> | 15862 | <phrase> |
15863 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE | 15863 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE |
15864 | desc: reload playlist after saving | 15864 | desc: deprecated |
15865 | user: core | 15865 | user: core |
15866 | <source> | 15866 | <source> |
15867 | *: "Reload After Saving" | 15867 | *: "" |
15868 | </source> | 15868 | </source> |
15869 | <dest> | 15869 | <dest> |
15870 | *: "Ricarica Dopo Il Salvataggio" | 15870 | *: "" |
15871 | </dest> | 15871 | </dest> |
15872 | <voice> | 15872 | <voice> |
15873 | *: "Ricarica Dopo Il Salvataggio" | 15873 | *: "" |
15874 | </voice> | 15874 | </voice> |
15875 | </phrase> | 15875 | </phrase> |
15876 | <phrase> | 15876 | <phrase> |
@@ -16105,10 +16105,10 @@ | |||
16105 | *: "Album Art" | 16105 | *: "Album Art" |
16106 | </source> | 16106 | </source> |
16107 | <dest> | 16107 | <dest> |
16108 | *: "Album Art" | 16108 | *: "Copertina Album" |
16109 | </dest> | 16109 | </dest> |
16110 | <voice> | 16110 | <voice> |
16111 | *: "Album Art" | 16111 | *: "Copertina Album" |
16112 | </voice> | 16112 | </voice> |
16113 | </phrase> | 16113 | </phrase> |
16114 | <phrase> | 16114 | <phrase> |
@@ -16566,3 +16566,297 @@ | |||
16566 | *: "Vai all'Ultimo Album" | 16566 | *: "Vai all'Ultimo Album" |
16567 | </voice> | 16567 | </voice> |
16568 | </phrase> | 16568 | </phrase> |
16569 | <phrase> | ||
16570 | id: LANG_DATABASE_DIR | ||
16571 | desc: in database settings menu | ||
16572 | user: core | ||
16573 | <source> | ||
16574 | *: "Database Directory" | ||
16575 | </source> | ||
16576 | <dest> | ||
16577 | *: "Directory Del Database" | ||
16578 | </dest> | ||
16579 | <voice> | ||
16580 | *: "Directory Del Database" | ||
16581 | </voice> | ||
16582 | </phrase> | ||
16583 | <phrase> | ||
16584 | id: LANG_REMOVE_QUEUED_TRACKS | ||
16585 | desc: Confirmation dialog | ||
16586 | user: core | ||
16587 | <source> | ||
16588 | *: "Remove Queued Tracks?" | ||
16589 | </source> | ||
16590 | <dest> | ||
16591 | *: "Rimuovere Le Tracce In Coda?" | ||
16592 | </dest> | ||
16593 | <voice> | ||
16594 | *: "Rimuovere Le Tracce In Coda?" | ||
16595 | </voice> | ||
16596 | </phrase> | ||
16597 | <phrase> | ||
16598 | id: LANG_QUICK_IGNORE_DIRACHE | ||
16599 | desc: in Settings | ||
16600 | user: core | ||
16601 | <source> | ||
16602 | *: "Quick (Ignore Directory Cache)" | ||
16603 | </source> | ||
16604 | <dest> | ||
16605 | *: "Veloce (Ignora Cache Della Directory)" | ||
16606 | </dest> | ||
16607 | <voice> | ||
16608 | *: "Veloce (Ignora Cache Della Directory)" | ||
16609 | </voice> | ||
16610 | </phrase> | ||
16611 | <phrase> | ||
16612 | id: LANG_WPS | ||
16613 | desc: in Settings | ||
16614 | user: core | ||
16615 | <source> | ||
16616 | *: "What's Playing Screen" | ||
16617 | </source> | ||
16618 | <dest> | ||
16619 | *: "Schermata Di Riproduzione" | ||
16620 | </dest> | ||
16621 | <voice> | ||
16622 | *: "Schermata Di Riproduzione" | ||
16623 | </voice> | ||
16624 | </phrase> | ||
16625 | <phrase> | ||
16626 | id: LANG_DEFAULT_BROWSER | ||
16627 | desc: in Settings | ||
16628 | user: core | ||
16629 | <source> | ||
16630 | *: "Default Browser" | ||
16631 | </source> | ||
16632 | <dest> | ||
16633 | *: "Browser Predefinito" | ||
16634 | </dest> | ||
16635 | <voice> | ||
16636 | *: "Browser Predefinito" | ||
16637 | </voice> | ||
16638 | </phrase> | ||
16639 | <phrase> | ||
16640 | id: LANG_AMAZE_MENU | ||
16641 | desc: Amaze game | ||
16642 | user: core | ||
16643 | <source> | ||
16644 | *: "Amaze Main Menu" | ||
16645 | </source> | ||
16646 | <dest> | ||
16647 | *: "Menu Principale Labirinto" | ||
16648 | </dest> | ||
16649 | <voice> | ||
16650 | *: "Menu Principale Labirinto" | ||
16651 | </voice> | ||
16652 | </phrase> | ||
16653 | <phrase> | ||
16654 | id: LANG_SET_MAZE_SIZE | ||
16655 | desc: Maze size in Amaze game | ||
16656 | user: core | ||
16657 | <source> | ||
16658 | *: "Set Maze Size" | ||
16659 | </source> | ||
16660 | <dest> | ||
16661 | *: "Imposta la dimensione del labirinto" | ||
16662 | </dest> | ||
16663 | <voice> | ||
16664 | *: "Imposta la dimensione del labirinto" | ||
16665 | </voice> | ||
16666 | </phrase> | ||
16667 | <phrase> | ||
16668 | id: LANG_VIEW_MAP | ||
16669 | desc: Map in Amaze game | ||
16670 | user: core | ||
16671 | <source> | ||
16672 | *: "View Map" | ||
16673 | </source> | ||
16674 | <dest> | ||
16675 | *: "Visualizza Mappa" | ||
16676 | </dest> | ||
16677 | <voice> | ||
16678 | *: "Visualizza Mappa" | ||
16679 | </voice> | ||
16680 | </phrase> | ||
16681 | <phrase> | ||
16682 | id: LANG_SHOW_COMPASS | ||
16683 | desc: Compass in Amaze game | ||
16684 | user: core | ||
16685 | <source> | ||
16686 | *: "Show Compass" | ||
16687 | </source> | ||
16688 | <dest> | ||
16689 | *: "Mostra la bussola" | ||
16690 | </dest> | ||
16691 | <voice> | ||
16692 | *: "Mostra la bussola" | ||
16693 | </voice> | ||
16694 | </phrase> | ||
16695 | <phrase> | ||
16696 | id: LANG_SHOW_MAP | ||
16697 | desc: Map in Amaze game | ||
16698 | user: core | ||
16699 | <source> | ||
16700 | *: "Show Map" | ||
16701 | </source> | ||
16702 | <dest> | ||
16703 | *: "Mostra la mappa" | ||
16704 | </dest> | ||
16705 | <voice> | ||
16706 | *: "Mostra la mappa" | ||
16707 | </voice> | ||
16708 | </phrase> | ||
16709 | <phrase> | ||
16710 | id: LANG_REMEMBER_PATH | ||
16711 | desc: Map in Amaze game | ||
16712 | user: core | ||
16713 | <source> | ||
16714 | *: "Remember Path" | ||
16715 | </source> | ||
16716 | <dest> | ||
16717 | *: "Ricorda il percorso" | ||
16718 | </dest> | ||
16719 | <voice> | ||
16720 | *: "Ricorda il percorso" | ||
16721 | </voice> | ||
16722 | </phrase> | ||
16723 | <phrase> | ||
16724 | id: LANG_USE_LARGE_TILES | ||
16725 | desc: Map in Amaze game | ||
16726 | user: core | ||
16727 | <source> | ||
16728 | *: "Use Large Tiles" | ||
16729 | </source> | ||
16730 | <dest> | ||
16731 | *: "Usa Piastrelle Grandi" | ||
16732 | </dest> | ||
16733 | <voice> | ||
16734 | *: "Usa Piastrelle Grandi" | ||
16735 | </voice> | ||
16736 | </phrase> | ||
16737 | <phrase> | ||
16738 | id: LANG_SHOW_SOLUTION | ||
16739 | desc: Map in Amaze game | ||
16740 | user: core | ||
16741 | <source> | ||
16742 | *: "Show Solution" | ||
16743 | </source> | ||
16744 | <dest> | ||
16745 | *: "Mostra la soluzione" | ||
16746 | </dest> | ||
16747 | <voice> | ||
16748 | *: "Mostra la soluzione" | ||
16749 | </voice> | ||
16750 | </phrase> | ||
16751 | <phrase> | ||
16752 | id: LANG_QUIT_WITHOUT_SAVING | ||
16753 | desc: | ||
16754 | user: core | ||
16755 | <source> | ||
16756 | *: "Quit without saving" | ||
16757 | </source> | ||
16758 | <dest> | ||
16759 | *: "Esci senza salvare" | ||
16760 | </dest> | ||
16761 | <voice> | ||
16762 | *: "Esci senza salvare" | ||
16763 | </voice> | ||
16764 | </phrase> | ||
16765 | <phrase> | ||
16766 | id: LANG_GENERATING_MAZE | ||
16767 | desc: Amaze game | ||
16768 | user: core | ||
16769 | <source> | ||
16770 | *: "Generating maze..." | ||
16771 | </source> | ||
16772 | <dest> | ||
16773 | *: "Generating maze..." | ||
16774 | </dest> | ||
16775 | <voice> | ||
16776 | *: "Generating maze..." | ||
16777 | </voice> | ||
16778 | </phrase> | ||
16779 | <phrase> | ||
16780 | id: LANG_YOU_WIN | ||
16781 | desc: Success in game | ||
16782 | user: core | ||
16783 | <source> | ||
16784 | *: "You win!" | ||
16785 | </source> | ||
16786 | <dest> | ||
16787 | *: "Hai vinto!" | ||
16788 | </dest> | ||
16789 | <voice> | ||
16790 | *: "Hai vinto!" | ||
16791 | </voice> | ||
16792 | </phrase> | ||
16793 | <phrase> | ||
16794 | id: LANG_YOU_CHEATED | ||
16795 | desc: Cheated in game | ||
16796 | user: core | ||
16797 | <source> | ||
16798 | *: "You cheated!" | ||
16799 | </source> | ||
16800 | <dest> | ||
16801 | *: "Hai barato!" | ||
16802 | </dest> | ||
16803 | <voice> | ||
16804 | *: "Hai barato!" | ||
16805 | </voice> | ||
16806 | </phrase> | ||
16807 | <phrase> | ||
16808 | id: LANG_DIFFICULTY_EASY | ||
16809 | desc: Game difficulty | ||
16810 | user: core | ||
16811 | <source> | ||
16812 | *: "Easy" | ||
16813 | </source> | ||
16814 | <dest> | ||
16815 | *: "Facile" | ||
16816 | </dest> | ||
16817 | <voice> | ||
16818 | *: "Facile" | ||
16819 | </voice> | ||
16820 | </phrase> | ||
16821 | <phrase> | ||
16822 | id: LANG_DIFFICULTY_MEDIUM | ||
16823 | desc: Game difficulty | ||
16824 | user: core | ||
16825 | <source> | ||
16826 | *: "Medium" | ||
16827 | </source> | ||
16828 | <dest> | ||
16829 | *: "Medio" | ||
16830 | </dest> | ||
16831 | <voice> | ||
16832 | *: "Medio" | ||
16833 | </voice> | ||
16834 | </phrase> | ||
16835 | <phrase> | ||
16836 | id: LANG_DIFFICULTY_HARD | ||
16837 | desc: Game difficulty | ||
16838 | user: core | ||
16839 | <source> | ||
16840 | *: "Hard" | ||
16841 | </source> | ||
16842 | <dest> | ||
16843 | *: "Impegnativo" | ||
16844 | </dest> | ||
16845 | <voice> | ||
16846 | *: "Impegnativo" | ||
16847 | </voice> | ||
16848 | </phrase> | ||
16849 | <phrase> | ||
16850 | id: LANG_DIFFICULTY_EXPERT | ||
16851 | desc: Game difficulty | ||
16852 | user: core | ||
16853 | <source> | ||
16854 | *: "Expert" | ||
16855 | </source> | ||
16856 | <dest> | ||
16857 | *: "Esperto" | ||
16858 | </dest> | ||
16859 | <voice> | ||
16860 | *: "Esperto" | ||
16861 | </voice> | ||
16862 | </phrase> | ||
diff --git a/apps/lang/nederlands.lang b/apps/lang/nederlands.lang index 83139cc6de..4cf1f99d3a 100644 --- a/apps/lang/nederlands.lang +++ b/apps/lang/nederlands.lang | |||
@@ -1171,10 +1171,10 @@ | |||
1171 | *: "Database" | 1171 | *: "Database" |
1172 | </source> | 1172 | </source> |
1173 | <dest> | 1173 | <dest> |
1174 | *: "Database" | 1174 | *: "Databank" |
1175 | </dest> | 1175 | </dest> |
1176 | <voice> | 1176 | <voice> |
1177 | *: "Database" | 1177 | *: "Databank" |
1178 | </voice> | 1178 | </voice> |
1179 | </phrase> | 1179 | </phrase> |
1180 | <phrase> | 1180 | <phrase> |
@@ -3182,7 +3182,7 @@ | |||
3182 | <voice> | 3182 | <voice> |
3183 | *: none | 3183 | *: none |
3184 | battery_types: "Nikkelmetaalhydride" | 3184 | battery_types: "Nikkelmetaalhydride" |
3185 | xduoox3: "Ouder 1500 milliampère per uur" | 3185 | xduoox3: "Ouder 1500 milliampère uur" |
3186 | </voice> | 3186 | </voice> |
3187 | </phrase> | 3187 | </phrase> |
3188 | <phrase> | 3188 | <phrase> |
@@ -3577,58 +3577,58 @@ | |||
3577 | </phrase> | 3577 | </phrase> |
3578 | <phrase> | 3578 | <phrase> |
3579 | id: LANG_INSERT | 3579 | id: LANG_INSERT |
3580 | desc: in onplay menu. insert a track/playlist into dynamic playlist. | 3580 | desc: deprecated |
3581 | user: core | 3581 | user: core |
3582 | <source> | 3582 | <source> |
3583 | *: "Insert" | 3583 | *: "" |
3584 | </source> | 3584 | </source> |
3585 | <dest> | 3585 | <dest> |
3586 | *: "Invoegen" | 3586 | *: "" |
3587 | </dest> | 3587 | </dest> |
3588 | <voice> | 3588 | <voice> |
3589 | *: "Invoegen" | 3589 | *: "" |
3590 | </voice> | 3590 | </voice> |
3591 | </phrase> | 3591 | </phrase> |
3592 | <phrase> | 3592 | <phrase> |
3593 | id: LANG_INSERT_FIRST | 3593 | id: LANG_INSERT_FIRST |
3594 | desc: in onplay menu. insert a track/playlist into dynamic playlist. | 3594 | desc: deprecated |
3595 | user: core | 3595 | user: core |
3596 | <source> | 3596 | <source> |
3597 | *: "Insert Next" | 3597 | *: "" |
3598 | </source> | 3598 | </source> |
3599 | <dest> | 3599 | <dest> |
3600 | *: "Invoegen als volgende" | 3600 | *: "" |
3601 | </dest> | 3601 | </dest> |
3602 | <voice> | 3602 | <voice> |
3603 | *: "Invoegen als volgende" | 3603 | *: "" |
3604 | </voice> | 3604 | </voice> |
3605 | </phrase> | 3605 | </phrase> |
3606 | <phrase> | 3606 | <phrase> |
3607 | id: LANG_INSERT_LAST | 3607 | id: LANG_INSERT_LAST |
3608 | desc: in onplay menu. append a track/playlist into dynamic playlist. | 3608 | desc: deprecated |
3609 | user: core | 3609 | user: core |
3610 | <source> | 3610 | <source> |
3611 | *: "Insert Last" | 3611 | *: "" |
3612 | </source> | 3612 | </source> |
3613 | <dest> | 3613 | <dest> |
3614 | *: "Invoegen als laatste" | 3614 | *: "" |
3615 | </dest> | 3615 | </dest> |
3616 | <voice> | 3616 | <voice> |
3617 | *: "Invoegen als laatste" | 3617 | *: "" |
3618 | </voice> | 3618 | </voice> |
3619 | </phrase> | 3619 | </phrase> |
3620 | <phrase> | 3620 | <phrase> |
3621 | id: LANG_INSERT_SHUFFLED | 3621 | id: LANG_INSERT_SHUFFLED |
3622 | desc: in onplay menu. insert a track/playlist randomly into dynamic playlist | 3622 | desc: deprecated |
3623 | user: core | 3623 | user: core |
3624 | <source> | 3624 | <source> |
3625 | *: "Insert Shuffled" | 3625 | *: "" |
3626 | </source> | 3626 | </source> |
3627 | <dest> | 3627 | <dest> |
3628 | *: "Geschud invoegen" | 3628 | *: "" |
3629 | </dest> | 3629 | </dest> |
3630 | <voice> | 3630 | <voice> |
3631 | *: "Geschud invoegen" | 3631 | *: "" |
3632 | </voice> | 3632 | </voice> |
3633 | </phrase> | 3633 | </phrase> |
3634 | <phrase> | 3634 | <phrase> |
@@ -3861,20 +3861,23 @@ | |||
3861 | user: core | 3861 | user: core |
3862 | <source> | 3862 | <source> |
3863 | *: none | 3863 | *: none |
3864 | multivolume: "HD1" | 3864 | hibylinux: "USB:" |
3865 | multivolume: "HD1:" | ||
3865 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" | 3866 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" |
3866 | xduoox3: "mSD2:" | 3867 | xduoox3: "mSD2:" |
3867 | </source> | 3868 | </source> |
3868 | <dest> | 3869 | <dest> |
3869 | *: none | 3870 | *: none |
3871 | hibylinux: "USB:" | ||
3870 | multivolume: "HD1" | 3872 | multivolume: "HD1" |
3871 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" | 3873 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" |
3872 | xduoox3: "mSD2:" | 3874 | xduoox3: "mSD2:" |
3873 | </dest> | 3875 | </dest> |
3874 | <voice> | 3876 | <voice> |
3875 | *: none | 3877 | *: none |
3878 | hibylinux: "U S B" | ||
3876 | multivolume: "HD1" | 3879 | multivolume: "HD1" |
3877 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" | 3880 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "micro S D" |
3878 | xduoox3: "micro S D 2" | 3881 | xduoox3: "micro S D 2" |
3879 | </voice> | 3882 | </voice> |
3880 | </phrase> | 3883 | </phrase> |
@@ -7043,16 +7046,16 @@ | |||
7043 | </phrase> | 7046 | </phrase> |
7044 | <phrase> | 7047 | <phrase> |
7045 | id: LANG_CATALOG_ADD_TO | 7048 | id: LANG_CATALOG_ADD_TO |
7046 | desc: in onplay playlist catalogue submenu | 7049 | desc: deprecated |
7047 | user: core | 7050 | user: core |
7048 | <source> | 7051 | <source> |
7049 | *: "Add to Playlist" | 7052 | *: "" |
7050 | </source> | 7053 | </source> |
7051 | <dest> | 7054 | <dest> |
7052 | *: "Toevoegen aan afspeellijst" | 7055 | *: "" |
7053 | </dest> | 7056 | </dest> |
7054 | <voice> | 7057 | <voice> |
7055 | *: "Toevoegen aan afspeellijst" | 7058 | *: "" |
7056 | </voice> | 7059 | </voice> |
7057 | </phrase> | 7060 | </phrase> |
7058 | <phrase> | 7061 | <phrase> |
@@ -7266,15 +7269,15 @@ | |||
7266 | desc: in lcd settings | 7269 | desc: in lcd settings |
7267 | user: core | 7270 | user: core |
7268 | <source> | 7271 | <source> |
7269 | *: none | 7272 | *: "Backlight on Lock" |
7270 | hold_button: "Backlight on Hold" | 7273 | hold_button: "Backlight on Hold" |
7271 | </source> | 7274 | </source> |
7272 | <dest> | 7275 | <dest> |
7273 | *: none | 7276 | *: "Verlichting met vergrendeling" |
7274 | hold_button: "Verlichting met Hold-knop" | 7277 | hold_button: "Verlichting met Hold-knop" |
7275 | </dest> | 7278 | </dest> |
7276 | <voice> | 7279 | <voice> |
7277 | *: none | 7280 | *: "Verlichting met vergrendeling" |
7278 | hold_button: "Verlichting met Hold-knop" | 7281 | hold_button: "Verlichting met Hold-knop" |
7279 | </voice> | 7282 | </voice> |
7280 | </phrase> | 7283 | </phrase> |
@@ -8479,19 +8482,17 @@ | |||
8479 | </phrase> | 8482 | </phrase> |
8480 | <phrase> | 8483 | <phrase> |
8481 | id: LANG_SET_AS_REC_DIR | 8484 | id: LANG_SET_AS_REC_DIR |
8482 | desc: used in the onplay menu to set a recording dir | 8485 | desc: deprecated |
8483 | user: core | 8486 | user: core |
8484 | <source> | 8487 | <source> |
8485 | *: none | 8488 | *: none |
8486 | recording: "Set As Recording Directory" | 8489 | recording: "" |
8487 | </source> | 8490 | </source> |
8488 | <dest> | 8491 | <dest> |
8489 | *: none | 8492 | *: "" |
8490 | recording: "Instellen Als Opnamemap" | ||
8491 | </dest> | 8493 | </dest> |
8492 | <voice> | 8494 | <voice> |
8493 | *: none | 8495 | *: "" |
8494 | recording: "Instellen Als Opnamemap" | ||
8495 | </voice> | 8496 | </voice> |
8496 | </phrase> | 8497 | </phrase> |
8497 | <phrase> | 8498 | <phrase> |
@@ -10562,16 +10563,16 @@ | |||
10562 | </phrase> | 10563 | </phrase> |
10563 | <phrase> | 10564 | <phrase> |
10564 | id: LANG_INSERT_LAST_SHUFFLED | 10565 | id: LANG_INSERT_LAST_SHUFFLED |
10565 | desc: in onplay menu. insert a playlist randomly at end of dynamic playlist | 10566 | desc: deprecated |
10566 | user: core | 10567 | user: core |
10567 | <source> | 10568 | <source> |
10568 | *: "Insert Last Shuffled" | 10569 | *: "" |
10569 | </source> | 10570 | </source> |
10570 | <dest> | 10571 | <dest> |
10571 | *: "Geschud onderaan wachtrij plaatsen" | 10572 | *: "" |
10572 | </dest> | 10573 | </dest> |
10573 | <voice> | 10574 | <voice> |
10574 | *: "Geschud onderaan wachtrij plaatsen" | 10575 | *: "" |
10575 | </voice> | 10576 | </voice> |
10576 | </phrase> | 10577 | </phrase> |
10577 | <phrase> | 10578 | <phrase> |
@@ -11476,16 +11477,16 @@ | |||
11476 | </phrase> | 11477 | </phrase> |
11477 | <phrase> | 11478 | <phrase> |
11478 | id: LANG_SET_AS_START_DIR | 11479 | id: LANG_SET_AS_START_DIR |
11479 | desc: used in the onplay menu to set a starting browser dir | 11480 | desc: deprecated |
11480 | user: core | 11481 | user: core |
11481 | <source> | 11482 | <source> |
11482 | *: "Start File Browser Here" | 11483 | *: "" |
11483 | </source> | 11484 | </source> |
11484 | <dest> | 11485 | <dest> |
11485 | *: "Bestandsbeheer hier starten" | 11486 | *: "" |
11486 | </dest> | 11487 | </dest> |
11487 | <voice> | 11488 | <voice> |
11488 | *: "Bestandsbeheer hier starten" | 11489 | *: "" |
11489 | </voice> | 11490 | </voice> |
11490 | </phrase> | 11491 | </phrase> |
11491 | <phrase> | 11492 | <phrase> |
@@ -11608,16 +11609,16 @@ | |||
11608 | </phrase> | 11609 | </phrase> |
11609 | <phrase> | 11610 | <phrase> |
11610 | id: LANG_SET_AS_PLAYLISTCAT_DIR | 11611 | id: LANG_SET_AS_PLAYLISTCAT_DIR |
11611 | desc: used in the onplay menu to set a playlist catalogue dir | 11612 | desc: deprecated |
11612 | user: core | 11613 | user: core |
11613 | <source> | 11614 | <source> |
11614 | *: "Set As Playlist Catalogue Directory" | 11615 | *: "" |
11615 | </source> | 11616 | </source> |
11616 | <dest> | 11617 | <dest> |
11617 | *: "Instellen als afspeellijstcatalogusmap" | 11618 | *: "" |
11618 | </dest> | 11619 | </dest> |
11619 | <voice> | 11620 | <voice> |
11620 | *: "Instellen als afspeellijstcatalogusmap" | 11621 | *: "" |
11621 | </voice> | 11622 | </voice> |
11622 | </phrase> | 11623 | </phrase> |
11623 | <phrase> | 11624 | <phrase> |
@@ -11667,16 +11668,16 @@ | |||
11667 | </phrase> | 11668 | </phrase> |
11668 | <phrase> | 11669 | <phrase> |
11669 | id: LANG_AUTOMATIC | 11670 | id: LANG_AUTOMATIC |
11670 | desc: generic automatic | 11671 | desc: deprecated |
11671 | user: core | 11672 | user: core |
11672 | <source> | 11673 | <source> |
11673 | *: "Automatic" | 11674 | *: "" |
11674 | </source> | 11675 | </source> |
11675 | <dest> | 11676 | <dest> |
11676 | *: "Automatisch" | 11677 | *: "" |
11677 | </dest> | 11678 | </dest> |
11678 | <voice> | 11679 | <voice> |
11679 | *: "Automatisch" | 11680 | *: "" |
11680 | </voice> | 11681 | </voice> |
11681 | </phrase> | 11682 | </phrase> |
11682 | <phrase> | 11683 | <phrase> |
@@ -14800,16 +14801,16 @@ | |||
14800 | </phrase> | 14801 | </phrase> |
14801 | <phrase> | 14802 | <phrase> |
14802 | id: LANG_CLEAR_PLAYLIST | 14803 | id: LANG_CLEAR_PLAYLIST |
14803 | desc: in the pictureflow main menu | 14804 | desc: deprecated |
14804 | user: core | 14805 | user: core |
14805 | <source> | 14806 | <source> |
14806 | *: "Clear playlist" | 14807 | *: "" |
14807 | </source> | 14808 | </source> |
14808 | <dest> | 14809 | <dest> |
14809 | *: "Afspeellijst wissen" | 14810 | *: "" |
14810 | </dest> | 14811 | </dest> |
14811 | <voice> | 14812 | <voice> |
14812 | *: "Afspeellijst wissen" | 14813 | *: "" |
14813 | </voice> | 14814 | </voice> |
14814 | </phrase> | 14815 | </phrase> |
14815 | <phrase> | 14816 | <phrase> |
@@ -14856,7 +14857,7 @@ | |||
14856 | </phrase> | 14857 | </phrase> |
14857 | <phrase> | 14858 | <phrase> |
14858 | id: LANG_DIRECT | 14859 | id: LANG_DIRECT |
14859 | desc: in the pictureflow settings | 14860 | desc: in the pictureflow settings, also a volume adjustment mode |
14860 | user: core | 14861 | user: core |
14861 | <source> | 14862 | <source> |
14862 | *: "Direct" | 14863 | *: "Direct" |
@@ -15855,16 +15856,16 @@ | |||
15855 | </phrase> | 15856 | </phrase> |
15856 | <phrase> | 15857 | <phrase> |
15857 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE | 15858 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE |
15858 | desc: reload playlist after saving | 15859 | desc: deprecated |
15859 | user: core | 15860 | user: core |
15860 | <source> | 15861 | <source> |
15861 | *: "Reload After Saving" | 15862 | *: "" |
15862 | </source> | 15863 | </source> |
15863 | <dest> | 15864 | <dest> |
15864 | *: "Herladen na Opslaan" | 15865 | *: "" |
15865 | </dest> | 15866 | </dest> |
15866 | <voice> | 15867 | <voice> |
15867 | *: "Herladen na Opslaan" | 15868 | *: "" |
15868 | </voice> | 15869 | </voice> |
15869 | </phrase> | 15870 | </phrase> |
15870 | <phrase> | 15871 | <phrase> |
@@ -16029,7 +16030,7 @@ | |||
16029 | *: "dAY" | 16030 | *: "dAY" |
16030 | </source> | 16031 | </source> |
16031 | <dest> | 16032 | <dest> |
16032 | *: "dAG" | 16033 | *: "dAY" |
16033 | </dest> | 16034 | </dest> |
16034 | <voice> | 16035 | <voice> |
16035 | *: "" | 16036 | *: "" |
@@ -16324,3 +16325,547 @@ | |||
16324 | ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Instellingen wissen wanneer de houd schakelaar aan staat tijdens het opstarten" | 16325 | ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Instellingen wissen wanneer de houd schakelaar aan staat tijdens het opstarten" |
16325 | </voice> | 16326 | </voice> |
16326 | </phrase> | 16327 | </phrase> |
16328 | <phrase> | ||
16329 | id: LANG_REWIND_ACROSS_TRACKS | ||
16330 | desc: in playback settings menu | ||
16331 | user: core | ||
16332 | <source> | ||
16333 | *: "Rewind Across Tracks" | ||
16334 | </source> | ||
16335 | <dest> | ||
16336 | *: "Terugspoelen Over Tracks" | ||
16337 | </dest> | ||
16338 | <voice> | ||
16339 | *: "Terugspoelen over tracks" | ||
16340 | </voice> | ||
16341 | </phrase> | ||
16342 | <phrase> | ||
16343 | id: LANG_SET_AS | ||
16344 | desc: used in the onplay menu | ||
16345 | user: core | ||
16346 | <source> | ||
16347 | *: "Set As..." | ||
16348 | </source> | ||
16349 | <dest> | ||
16350 | *: "Set As..." | ||
16351 | </dest> | ||
16352 | <voice> | ||
16353 | *: "Set As..." | ||
16354 | </voice> | ||
16355 | </phrase> | ||
16356 | <phrase> | ||
16357 | id: LANG_PLAYLIST_DIR | ||
16358 | desc: used in the onplay menu | ||
16359 | user: core | ||
16360 | <source> | ||
16361 | *: "Playlist Directory" | ||
16362 | </source> | ||
16363 | <dest> | ||
16364 | *: "Afspeellijstmap" | ||
16365 | </dest> | ||
16366 | <voice> | ||
16367 | *: "Afspeellijst map" | ||
16368 | </voice> | ||
16369 | </phrase> | ||
16370 | <phrase> | ||
16371 | id: LANG_START_DIR | ||
16372 | desc: used in the onplay menu | ||
16373 | user: core | ||
16374 | <source> | ||
16375 | *: "Start Directory" | ||
16376 | </source> | ||
16377 | <dest> | ||
16378 | *: "Startmap" | ||
16379 | </dest> | ||
16380 | <voice> | ||
16381 | *: "Start map" | ||
16382 | </voice> | ||
16383 | </phrase> | ||
16384 | <phrase> | ||
16385 | id: LANG_RECORDING_DIR | ||
16386 | desc: used in the onplay menu | ||
16387 | user: core | ||
16388 | <source> | ||
16389 | *: none | ||
16390 | recording: "Recording Directory" | ||
16391 | </source> | ||
16392 | <dest> | ||
16393 | *: none | ||
16394 | recording: "Opnamemap" | ||
16395 | </dest> | ||
16396 | <voice> | ||
16397 | *: none | ||
16398 | recording: "Opname map" | ||
16399 | </voice> | ||
16400 | </phrase> | ||
16401 | <phrase> | ||
16402 | id: LANG_ADD_TO_PL | ||
16403 | desc: used in the onplay menu | ||
16404 | user: core | ||
16405 | <source> | ||
16406 | *: "Add to Playlist..." | ||
16407 | </source> | ||
16408 | <dest> | ||
16409 | *: "Voeg toe aan Afspeellijst..." | ||
16410 | </dest> | ||
16411 | <voice> | ||
16412 | *: "Voeg toe aan Afspeellijst..." | ||
16413 | </voice> | ||
16414 | </phrase> | ||
16415 | <phrase> | ||
16416 | id: LANG_ADD_TO_EXISTING_PL | ||
16417 | desc: used in the onplay menu | ||
16418 | user: core | ||
16419 | <source> | ||
16420 | *: "Add to Existing Playlist" | ||
16421 | </source> | ||
16422 | <dest> | ||
16423 | *: "Voeg toe aan Bestaande Afspeellijst" | ||
16424 | </dest> | ||
16425 | <voice> | ||
16426 | *: "Voeg toe aan Bestaande Afspeellijst" | ||
16427 | </voice> | ||
16428 | </phrase> | ||
16429 | <phrase> | ||
16430 | id: LANG_PLAYING_NEXT | ||
16431 | desc: used in the onplay menu | ||
16432 | user: core | ||
16433 | <source> | ||
16434 | *: "Playing Next..." | ||
16435 | </source> | ||
16436 | <dest> | ||
16437 | *: "Hier Na..." | ||
16438 | </dest> | ||
16439 | <voice> | ||
16440 | *: "Hier na..." | ||
16441 | </voice> | ||
16442 | </phrase> | ||
16443 | <phrase> | ||
16444 | id: LANG_PLAY_NEXT | ||
16445 | desc: used in the onplay menu | ||
16446 | user: core | ||
16447 | <source> | ||
16448 | *: "Play Next" | ||
16449 | </source> | ||
16450 | <dest> | ||
16451 | *: "Speel volgende" | ||
16452 | </dest> | ||
16453 | <voice> | ||
16454 | *: "Speel volgende" | ||
16455 | </voice> | ||
16456 | </phrase> | ||
16457 | <phrase> | ||
16458 | id: LANG_ADD_SHUFFLED | ||
16459 | desc: used in the onplay menu | ||
16460 | user: core | ||
16461 | <source> | ||
16462 | *: "Add Shuffled" | ||
16463 | </source> | ||
16464 | <dest> | ||
16465 | *: "Voeg Shuffled toe" | ||
16466 | </dest> | ||
16467 | <voice> | ||
16468 | *: "Voeg Shuffled toe" | ||
16469 | </voice> | ||
16470 | </phrase> | ||
16471 | <phrase> | ||
16472 | id: LANG_PLAY_LAST | ||
16473 | desc: used in the onplay menu | ||
16474 | user: core | ||
16475 | <source> | ||
16476 | *: "Play Last" | ||
16477 | </source> | ||
16478 | <dest> | ||
16479 | *: "Laatste Afspelen" | ||
16480 | </dest> | ||
16481 | <voice> | ||
16482 | *: "Laatste Afspelen" | ||
16483 | </voice> | ||
16484 | </phrase> | ||
16485 | <phrase> | ||
16486 | id: LANG_PLAY_LAST_SHUFFLED | ||
16487 | desc: used in the onplay menu | ||
16488 | user: core | ||
16489 | <source> | ||
16490 | *: "Play Last Shuffled" | ||
16491 | </source> | ||
16492 | <dest> | ||
16493 | *: "Speel Laatst Geshuffled" | ||
16494 | </dest> | ||
16495 | <voice> | ||
16496 | *: "Speel Laatst Geshuffled" | ||
16497 | </voice> | ||
16498 | </phrase> | ||
16499 | <phrase> | ||
16500 | id: LANG_VOLUME_ADJUST_MODE | ||
16501 | desc: in system settings | ||
16502 | user: core | ||
16503 | <source> | ||
16504 | *: none | ||
16505 | perceptual_volume: "Volume Adjustment Mode" | ||
16506 | </source> | ||
16507 | <dest> | ||
16508 | *: none | ||
16509 | perceptual_volume: "Volume Aanpas Modus" | ||
16510 | </dest> | ||
16511 | <voice> | ||
16512 | *: none | ||
16513 | perceptual_volume: "Volume Aanpas Modus" | ||
16514 | </voice> | ||
16515 | </phrase> | ||
16516 | <phrase> | ||
16517 | id: LANG_VOLUME_ADJUST_NORM_STEPS | ||
16518 | desc: in system settings | ||
16519 | user: core | ||
16520 | <source> | ||
16521 | *: none | ||
16522 | perceptual_volume: "Number of Volume Steps" | ||
16523 | </source> | ||
16524 | <dest> | ||
16525 | *: none | ||
16526 | perceptual_volume: "Aantal Volumestappen" | ||
16527 | </dest> | ||
16528 | <voice> | ||
16529 | *: none | ||
16530 | perceptual_volume: "Aantal Volumestappen" | ||
16531 | </voice> | ||
16532 | </phrase> | ||
16533 | <phrase> | ||
16534 | id: LANG_PERCEPTUAL | ||
16535 | desc: in system settings -> volume adjustment mode | ||
16536 | user: core | ||
16537 | <source> | ||
16538 | *: none | ||
16539 | perceptual_volume: "Perceptual" | ||
16540 | </source> | ||
16541 | <dest> | ||
16542 | *: none | ||
16543 | perceptual_volume: "Perceptueel" | ||
16544 | </dest> | ||
16545 | <voice> | ||
16546 | *: none | ||
16547 | perceptual_volume: "Perceptueel" | ||
16548 | </voice> | ||
16549 | </phrase> | ||
16550 | <phrase> | ||
16551 | id: LANG_SHOW_TRACKS_WHILE_BROWSING | ||
16552 | desc: in PictureFlow Main Menu | ||
16553 | user: core | ||
16554 | <source> | ||
16555 | *: "Show Tracks While Browsing" | ||
16556 | </source> | ||
16557 | <dest> | ||
16558 | *: "Toon Tracks Tijdens Browsen" | ||
16559 | </dest> | ||
16560 | <voice> | ||
16561 | *: "Toon Tracks Tijdens Browsen" | ||
16562 | </voice> | ||
16563 | </phrase> | ||
16564 | <phrase> | ||
16565 | id: LANG_GOTO_LAST_ALBUM | ||
16566 | desc: in PictureFlow Main Menu | ||
16567 | user: core | ||
16568 | <source> | ||
16569 | *: "Go to Last Album" | ||
16570 | </source> | ||
16571 | <dest> | ||
16572 | *: "Ga naar Laatste Album" | ||
16573 | </dest> | ||
16574 | <voice> | ||
16575 | *: "Ga naar Laatste Album" | ||
16576 | </voice> | ||
16577 | </phrase> | ||
16578 | <phrase> | ||
16579 | id: LANG_DATABASE_DIR | ||
16580 | desc: in database settings menu | ||
16581 | user: core | ||
16582 | <source> | ||
16583 | *: "Database Directory" | ||
16584 | </source> | ||
16585 | <dest> | ||
16586 | *: "Databankmap" | ||
16587 | </dest> | ||
16588 | <voice> | ||
16589 | *: "Databank map" | ||
16590 | </voice> | ||
16591 | </phrase> | ||
16592 | <phrase> | ||
16593 | id: LANG_REMOVE_QUEUED_TRACKS | ||
16594 | desc: Confirmation dialog | ||
16595 | user: core | ||
16596 | <source> | ||
16597 | *: "Remove Queued Tracks?" | ||
16598 | </source> | ||
16599 | <dest> | ||
16600 | *: "Verwijder Queued Tracks?" | ||
16601 | </dest> | ||
16602 | <voice> | ||
16603 | *: "Verwijder Queued Tracks?" | ||
16604 | </voice> | ||
16605 | </phrase> | ||
16606 | <phrase> | ||
16607 | id: LANG_QUICK_IGNORE_DIRACHE | ||
16608 | desc: in Settings | ||
16609 | user: core | ||
16610 | <source> | ||
16611 | *: "Quick (Ignore Directory Cache)" | ||
16612 | </source> | ||
16613 | <dest> | ||
16614 | *: "Snel (Negeer Mapcache)" | ||
16615 | </dest> | ||
16616 | <voice> | ||
16617 | *: "Snel (Negeer Map cache)" | ||
16618 | </voice> | ||
16619 | </phrase> | ||
16620 | <phrase> | ||
16621 | id: LANG_WPS | ||
16622 | desc: in Settings | ||
16623 | user: core | ||
16624 | <source> | ||
16625 | *: "What's Playing Screen" | ||
16626 | </source> | ||
16627 | <dest> | ||
16628 | *: "Wat er nu Speelt Scherm" | ||
16629 | </dest> | ||
16630 | <voice> | ||
16631 | *: "Wat er nu Speelt Scherm" | ||
16632 | </voice> | ||
16633 | </phrase> | ||
16634 | <phrase> | ||
16635 | id: LANG_DEFAULT_BROWSER | ||
16636 | desc: in Settings | ||
16637 | user: core | ||
16638 | <source> | ||
16639 | *: "Default Browser" | ||
16640 | </source> | ||
16641 | <dest> | ||
16642 | *: "Standaard Browser" | ||
16643 | </dest> | ||
16644 | <voice> | ||
16645 | *: "Standaard Browser" | ||
16646 | </voice> | ||
16647 | </phrase> | ||
16648 | <phrase> | ||
16649 | id: LANG_AMAZE_MENU | ||
16650 | desc: Amaze game | ||
16651 | user: core | ||
16652 | <source> | ||
16653 | *: "Amaze Main Menu" | ||
16654 | </source> | ||
16655 | <dest> | ||
16656 | *: "Amaze Hoofdmenu" | ||
16657 | </dest> | ||
16658 | <voice> | ||
16659 | *: "Amaze Hoofdmenu" | ||
16660 | </voice> | ||
16661 | </phrase> | ||
16662 | <phrase> | ||
16663 | id: LANG_SET_MAZE_SIZE | ||
16664 | desc: Maze size in Amaze game | ||
16665 | user: core | ||
16666 | <source> | ||
16667 | *: "Set Maze Size" | ||
16668 | </source> | ||
16669 | <dest> | ||
16670 | *: "Stel Doolhofgrootte in" | ||
16671 | </dest> | ||
16672 | <voice> | ||
16673 | *: "Stel Doolhofgrootte in" | ||
16674 | </voice> | ||
16675 | </phrase> | ||
16676 | <phrase> | ||
16677 | id: LANG_VIEW_MAP | ||
16678 | desc: Map in Amaze game | ||
16679 | user: core | ||
16680 | <source> | ||
16681 | *: "View Map" | ||
16682 | </source> | ||
16683 | <dest> | ||
16684 | *: "Bekijk Kaart" | ||
16685 | </dest> | ||
16686 | <voice> | ||
16687 | *: "Bekijk Kaart" | ||
16688 | </voice> | ||
16689 | </phrase> | ||
16690 | <phrase> | ||
16691 | id: LANG_SHOW_COMPASS | ||
16692 | desc: Compass in Amaze game | ||
16693 | user: core | ||
16694 | <source> | ||
16695 | *: "Show Compass" | ||
16696 | </source> | ||
16697 | <dest> | ||
16698 | *: "Toon Kompas" | ||
16699 | </dest> | ||
16700 | <voice> | ||
16701 | *: "Toon Kompas" | ||
16702 | </voice> | ||
16703 | </phrase> | ||
16704 | <phrase> | ||
16705 | id: LANG_SHOW_MAP | ||
16706 | desc: Map in Amaze game | ||
16707 | user: core | ||
16708 | <source> | ||
16709 | *: "Show Map" | ||
16710 | </source> | ||
16711 | <dest> | ||
16712 | *: "Toon Kaart" | ||
16713 | </dest> | ||
16714 | <voice> | ||
16715 | *: "Toon Kaart" | ||
16716 | </voice> | ||
16717 | </phrase> | ||
16718 | <phrase> | ||
16719 | id: LANG_REMEMBER_PATH | ||
16720 | desc: Map in Amaze game | ||
16721 | user: core | ||
16722 | <source> | ||
16723 | *: "Remember Path" | ||
16724 | </source> | ||
16725 | <dest> | ||
16726 | *: "Onthoud Pad" | ||
16727 | </dest> | ||
16728 | <voice> | ||
16729 | *: "Onthoud Pad" | ||
16730 | </voice> | ||
16731 | </phrase> | ||
16732 | <phrase> | ||
16733 | id: LANG_USE_LARGE_TILES | ||
16734 | desc: Map in Amaze game | ||
16735 | user: core | ||
16736 | <source> | ||
16737 | *: "Use Large Tiles" | ||
16738 | </source> | ||
16739 | <dest> | ||
16740 | *: "Gebruik Grote Tegels" | ||
16741 | </dest> | ||
16742 | <voice> | ||
16743 | *: "Gebruik Grote Tegels" | ||
16744 | </voice> | ||
16745 | </phrase> | ||
16746 | <phrase> | ||
16747 | id: LANG_SHOW_SOLUTION | ||
16748 | desc: Map in Amaze game | ||
16749 | user: core | ||
16750 | <source> | ||
16751 | *: "Show Solution" | ||
16752 | </source> | ||
16753 | <dest> | ||
16754 | *: "Toon Oplossing" | ||
16755 | </dest> | ||
16756 | <voice> | ||
16757 | *: "Toon Oplossing" | ||
16758 | </voice> | ||
16759 | </phrase> | ||
16760 | <phrase> | ||
16761 | id: LANG_QUIT_WITHOUT_SAVING | ||
16762 | desc: | ||
16763 | user: core | ||
16764 | <source> | ||
16765 | *: "Quit without saving" | ||
16766 | </source> | ||
16767 | <dest> | ||
16768 | *: "Stoppen zonder op te slaan" | ||
16769 | </dest> | ||
16770 | <voice> | ||
16771 | *: "Stoppen zonder op te slaan" | ||
16772 | </voice> | ||
16773 | </phrase> | ||
16774 | <phrase> | ||
16775 | id: LANG_GENERATING_MAZE | ||
16776 | desc: Amaze game | ||
16777 | user: core | ||
16778 | <source> | ||
16779 | *: "Generating maze..." | ||
16780 | </source> | ||
16781 | <dest> | ||
16782 | *: "Doolhof maken..." | ||
16783 | </dest> | ||
16784 | <voice> | ||
16785 | *: "Doolhof maken..." | ||
16786 | </voice> | ||
16787 | </phrase> | ||
16788 | <phrase> | ||
16789 | id: LANG_YOU_WIN | ||
16790 | desc: Success in game | ||
16791 | user: core | ||
16792 | <source> | ||
16793 | *: "You win!" | ||
16794 | </source> | ||
16795 | <dest> | ||
16796 | *: "Jij wint!" | ||
16797 | </dest> | ||
16798 | <voice> | ||
16799 | *: "Jij wint!" | ||
16800 | </voice> | ||
16801 | </phrase> | ||
16802 | <phrase> | ||
16803 | id: LANG_YOU_CHEATED | ||
16804 | desc: Cheated in game | ||
16805 | user: core | ||
16806 | <source> | ||
16807 | *: "You cheated!" | ||
16808 | </source> | ||
16809 | <dest> | ||
16810 | *: "Je hebt valsgespeeld!" | ||
16811 | </dest> | ||
16812 | <voice> | ||
16813 | *: "Je hebt valsgespeeld!" | ||
16814 | </voice> | ||
16815 | </phrase> | ||
16816 | <phrase> | ||
16817 | id: LANG_DIFFICULTY_EASY | ||
16818 | desc: Game difficulty | ||
16819 | user: core | ||
16820 | <source> | ||
16821 | *: "Easy" | ||
16822 | </source> | ||
16823 | <dest> | ||
16824 | *: "Gemakkelijk" | ||
16825 | </dest> | ||
16826 | <voice> | ||
16827 | *: "Gemakkelijk" | ||
16828 | </voice> | ||
16829 | </phrase> | ||
16830 | <phrase> | ||
16831 | id: LANG_DIFFICULTY_MEDIUM | ||
16832 | desc: Game difficulty | ||
16833 | user: core | ||
16834 | <source> | ||
16835 | *: "Medium" | ||
16836 | </source> | ||
16837 | <dest> | ||
16838 | *: "Medium" | ||
16839 | </dest> | ||
16840 | <voice> | ||
16841 | *: "Medium" | ||
16842 | </voice> | ||
16843 | </phrase> | ||
16844 | <phrase> | ||
16845 | id: LANG_DIFFICULTY_HARD | ||
16846 | desc: Game difficulty | ||
16847 | user: core | ||
16848 | <source> | ||
16849 | *: "Hard" | ||
16850 | </source> | ||
16851 | <dest> | ||
16852 | *: "Moeilijk" | ||
16853 | </dest> | ||
16854 | <voice> | ||
16855 | *: "Moeilijk" | ||
16856 | </voice> | ||
16857 | </phrase> | ||
16858 | <phrase> | ||
16859 | id: LANG_DIFFICULTY_EXPERT | ||
16860 | desc: Game difficulty | ||
16861 | user: core | ||
16862 | <source> | ||
16863 | *: "Expert" | ||
16864 | </source> | ||
16865 | <dest> | ||
16866 | *: "Expert" | ||
16867 | </dest> | ||
16868 | <voice> | ||
16869 | *: "Expert" | ||
16870 | </voice> | ||
16871 | </phrase> | ||
diff --git a/apps/lang/norsk.lang b/apps/lang/norsk.lang index b823d962b1..d2d5730413 100644 --- a/apps/lang/norsk.lang +++ b/apps/lang/norsk.lang | |||
@@ -13547,7 +13547,7 @@ | |||
13547 | *: "No viewers found" | 13547 | *: "No viewers found" |
13548 | </source> | 13548 | </source> |
13549 | <dest> | 13549 | <dest> |
13550 | *: "No viewers found" | 13550 | *: "No viewers found" |
13551 | </dest> | 13551 | </dest> |
13552 | <voice> | 13552 | <voice> |
13553 | *: "No viewers found" | 13553 | *: "No viewers found" |
diff --git a/apps/lang/polski.lang b/apps/lang/polski.lang index a06124e82c..028cd5d758 100644 --- a/apps/lang/polski.lang +++ b/apps/lang/polski.lang | |||
@@ -16642,3 +16642,227 @@ | |||
16642 | *: "Przeglądarka domyślna" | 16642 | *: "Przeglądarka domyślna" |
16643 | </voice> | 16643 | </voice> |
16644 | </phrase> | 16644 | </phrase> |
16645 | <phrase> | ||
16646 | id: LANG_AMAZE_MENU | ||
16647 | desc: Amaze game | ||
16648 | user: core | ||
16649 | <source> | ||
16650 | *: "Amaze Main Menu" | ||
16651 | </source> | ||
16652 | <dest> | ||
16653 | *: "Menu główne Amaze" | ||
16654 | </dest> | ||
16655 | <voice> | ||
16656 | *: "Menu główne Amejz" | ||
16657 | </voice> | ||
16658 | </phrase> | ||
16659 | <phrase> | ||
16660 | id: LANG_SET_MAZE_SIZE | ||
16661 | desc: Maze size in Amaze game | ||
16662 | user: core | ||
16663 | <source> | ||
16664 | *: "Set Maze Size" | ||
16665 | </source> | ||
16666 | <dest> | ||
16667 | *: "Ustaw rozmiar labiryntu" | ||
16668 | </dest> | ||
16669 | <voice> | ||
16670 | *: "Ustaw rozmiar labiryntu" | ||
16671 | </voice> | ||
16672 | </phrase> | ||
16673 | <phrase> | ||
16674 | id: LANG_VIEW_MAP | ||
16675 | desc: Map in Amaze game | ||
16676 | user: core | ||
16677 | <source> | ||
16678 | *: "View Map" | ||
16679 | </source> | ||
16680 | <dest> | ||
16681 | *: "Wyświetl mapę" | ||
16682 | </dest> | ||
16683 | <voice> | ||
16684 | *: "Wyświetl mapę" | ||
16685 | </voice> | ||
16686 | </phrase> | ||
16687 | <phrase> | ||
16688 | id: LANG_SHOW_COMPASS | ||
16689 | desc: Compass in Amaze game | ||
16690 | user: core | ||
16691 | <source> | ||
16692 | *: "Show Compass" | ||
16693 | </source> | ||
16694 | <dest> | ||
16695 | *: "Pokaż kompas" | ||
16696 | </dest> | ||
16697 | <voice> | ||
16698 | *: "Pokaż kompas" | ||
16699 | </voice> | ||
16700 | </phrase> | ||
16701 | <phrase> | ||
16702 | id: LANG_SHOW_MAP | ||
16703 | desc: Map in Amaze game | ||
16704 | user: core | ||
16705 | <source> | ||
16706 | *: "Show Map" | ||
16707 | </source> | ||
16708 | <dest> | ||
16709 | *: "Pokaż mapę" | ||
16710 | </dest> | ||
16711 | <voice> | ||
16712 | *: "Pokaż mapę" | ||
16713 | </voice> | ||
16714 | </phrase> | ||
16715 | <phrase> | ||
16716 | id: LANG_REMEMBER_PATH | ||
16717 | desc: Map in Amaze game | ||
16718 | user: core | ||
16719 | <source> | ||
16720 | *: "Remember Path" | ||
16721 | </source> | ||
16722 | <dest> | ||
16723 | *: "Zapamiętuj ścieżkę" | ||
16724 | </dest> | ||
16725 | <voice> | ||
16726 | *: "Zapamiętuj ścieżkę" | ||
16727 | </voice> | ||
16728 | </phrase> | ||
16729 | <phrase> | ||
16730 | id: LANG_USE_LARGE_TILES | ||
16731 | desc: Map in Amaze game | ||
16732 | user: core | ||
16733 | <source> | ||
16734 | *: "Use Large Tiles" | ||
16735 | </source> | ||
16736 | <dest> | ||
16737 | *: "Używaj dużych płytek" | ||
16738 | </dest> | ||
16739 | <voice> | ||
16740 | *: "Używaj dużych płytek" | ||
16741 | </voice> | ||
16742 | </phrase> | ||
16743 | <phrase> | ||
16744 | id: LANG_SHOW_SOLUTION | ||
16745 | desc: Map in Amaze game | ||
16746 | user: core | ||
16747 | <source> | ||
16748 | *: "Show Solution" | ||
16749 | </source> | ||
16750 | <dest> | ||
16751 | *: "Pokaż rozwiązanie" | ||
16752 | </dest> | ||
16753 | <voice> | ||
16754 | *: "Pokaż rozwiązanie" | ||
16755 | </voice> | ||
16756 | </phrase> | ||
16757 | <phrase> | ||
16758 | id: LANG_QUIT_WITHOUT_SAVING | ||
16759 | desc: | ||
16760 | user: core | ||
16761 | <source> | ||
16762 | *: "Quit without saving" | ||
16763 | </source> | ||
16764 | <dest> | ||
16765 | *: "Wyjdź bez zapisywania" | ||
16766 | </dest> | ||
16767 | <voice> | ||
16768 | *: "Wyjdź bez zapisywania" | ||
16769 | </voice> | ||
16770 | </phrase> | ||
16771 | <phrase> | ||
16772 | id: LANG_GENERATING_MAZE | ||
16773 | desc: Amaze game | ||
16774 | user: core | ||
16775 | <source> | ||
16776 | *: "Generating maze..." | ||
16777 | </source> | ||
16778 | <dest> | ||
16779 | *: "Generowanie labiryntu..." | ||
16780 | </dest> | ||
16781 | <voice> | ||
16782 | *: "Generowanie labiryntu" | ||
16783 | </voice> | ||
16784 | </phrase> | ||
16785 | <phrase> | ||
16786 | id: LANG_YOU_WIN | ||
16787 | desc: Success in game | ||
16788 | user: core | ||
16789 | <source> | ||
16790 | *: "You win!" | ||
16791 | </source> | ||
16792 | <dest> | ||
16793 | *: "Wygrana!" | ||
16794 | </dest> | ||
16795 | <voice> | ||
16796 | *: "Wygrana!" | ||
16797 | </voice> | ||
16798 | </phrase> | ||
16799 | <phrase> | ||
16800 | id: LANG_YOU_CHEATED | ||
16801 | desc: Cheated in game | ||
16802 | user: core | ||
16803 | <source> | ||
16804 | *: "You cheated!" | ||
16805 | </source> | ||
16806 | <dest> | ||
16807 | *: "Oszustwo!" | ||
16808 | </dest> | ||
16809 | <voice> | ||
16810 | *: "Oszustwo!" | ||
16811 | </voice> | ||
16812 | </phrase> | ||
16813 | <phrase> | ||
16814 | id: LANG_DIFFICULTY_EASY | ||
16815 | desc: Game difficulty | ||
16816 | user: core | ||
16817 | <source> | ||
16818 | *: "Easy" | ||
16819 | </source> | ||
16820 | <dest> | ||
16821 | *: "Åatwa" | ||
16822 | </dest> | ||
16823 | <voice> | ||
16824 | *: "Åatwa" | ||
16825 | </voice> | ||
16826 | </phrase> | ||
16827 | <phrase> | ||
16828 | id: LANG_DIFFICULTY_MEDIUM | ||
16829 | desc: Game difficulty | ||
16830 | user: core | ||
16831 | <source> | ||
16832 | *: "Medium" | ||
16833 | </source> | ||
16834 | <dest> | ||
16835 | *: "Åšrednia" | ||
16836 | </dest> | ||
16837 | <voice> | ||
16838 | *: "Åšrednia" | ||
16839 | </voice> | ||
16840 | </phrase> | ||
16841 | <phrase> | ||
16842 | id: LANG_DIFFICULTY_HARD | ||
16843 | desc: Game difficulty | ||
16844 | user: core | ||
16845 | <source> | ||
16846 | *: "Hard" | ||
16847 | </source> | ||
16848 | <dest> | ||
16849 | *: "Trudna" | ||
16850 | </dest> | ||
16851 | <voice> | ||
16852 | *: "Trudna" | ||
16853 | </voice> | ||
16854 | </phrase> | ||
16855 | <phrase> | ||
16856 | id: LANG_DIFFICULTY_EXPERT | ||
16857 | desc: Game difficulty | ||
16858 | user: core | ||
16859 | <source> | ||
16860 | *: "Expert" | ||
16861 | </source> | ||
16862 | <dest> | ||
16863 | *: "Ekspercka" | ||
16864 | </dest> | ||
16865 | <voice> | ||
16866 | *: "Ekspercka" | ||
16867 | </voice> | ||
16868 | </phrase> | ||
diff --git a/apps/lang/srpski.lang b/apps/lang/srpski.lang index e9b97e9777..76f04d4d8f 100644 --- a/apps/lang/srpski.lang +++ b/apps/lang/srpski.lang | |||
@@ -2241,16 +2241,16 @@ | |||
2241 | desc: in lcd settings | 2241 | desc: in lcd settings |
2242 | user: core | 2242 | user: core |
2243 | <source> | 2243 | <source> |
2244 | *: none | 2244 | *: "Backlight on Lock" |
2245 | hold_button: "Backlight on Hold" | 2245 | hold_button: "Backlight on Hold" |
2246 | </source> | 2246 | </source> |
2247 | <dest> | 2247 | <dest> |
2248 | *: none | 2248 | *: "ПозадинÑко оÑветљење на Lock" |
2249 | hold_button: "ПозадинÑко оÑветљење на Hold" | 2249 | hold_button: "ПозадинÑко оÑветљење на Hold" |
2250 | </dest> | 2250 | </dest> |
2251 | <voice> | 2251 | <voice> |
2252 | *: none | 2252 | *: "ПозадинÑко оÑветљење на Лок" |
2253 | hold_button: "ПозадинÑко оÑветљење на Hold" | 2253 | hold_button: "ПозадинÑко оÑветљење на Холд" |
2254 | </voice> | 2254 | </voice> |
2255 | </phrase> | 2255 | </phrase> |
2256 | <phrase> | 2256 | <phrase> |
@@ -5312,12 +5312,10 @@ | |||
5312 | recording: "" | 5312 | recording: "" |
5313 | </source> | 5313 | </source> |
5314 | <dest> | 5314 | <dest> |
5315 | *: none | 5315 | *: "" |
5316 | recording: "" | ||
5317 | </dest> | 5316 | </dest> |
5318 | <voice> | 5317 | <voice> |
5319 | *: none | 5318 | *: "" |
5320 | recording: "" | ||
5321 | </voice> | 5319 | </voice> |
5322 | </phrase> | 5320 | </phrase> |
5323 | <phrase> | 5321 | <phrase> |
@@ -6019,18 +6017,21 @@ | |||
6019 | user: core | 6017 | user: core |
6020 | <source> | 6018 | <source> |
6021 | *: none | 6019 | *: none |
6022 | multivolume: "HD1" | 6020 | hibylinux: "USB:" |
6021 | multivolume: "HD1:" | ||
6023 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" | 6022 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" |
6024 | xduoox3: "mSD2:" | 6023 | xduoox3: "mSD2:" |
6025 | </source> | 6024 | </source> |
6026 | <dest> | 6025 | <dest> |
6027 | *: none | 6026 | *: none |
6027 | hibylinux: "USB:" | ||
6028 | multivolume: "HD1" | 6028 | multivolume: "HD1" |
6029 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" | 6029 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" |
6030 | xduoox3: "mSD2:" | 6030 | xduoox3: "mSD2:" |
6031 | </dest> | 6031 | </dest> |
6032 | <voice> | 6032 | <voice> |
6033 | *: none | 6033 | *: none |
6034 | hibylinux: "У Ð•Ñ Ð‘Ðµ" | ||
6034 | multivolume: "Ха Де један" | 6035 | multivolume: "Ха Де један" |
6035 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "мајкро Ð•Ñ Ð”Ðµ" | 6036 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "мајкро Ð•Ñ Ð”Ðµ" |
6036 | xduoox3: "мајкро Ð•Ñ Ð”Ðµ два" | 6037 | xduoox3: "мајкро Ð•Ñ Ð”Ðµ два" |
@@ -9581,7 +9582,7 @@ | |||
9581 | </dest> | 9582 | </dest> |
9582 | <voice> | 9583 | <voice> |
9583 | *: none | 9584 | *: none |
9584 | recording: "Величина" | 9585 | recording: "" |
9585 | </voice> | 9586 | </voice> |
9586 | </phrase> | 9587 | </phrase> |
9587 | <phrase> | 9588 | <phrase> |
@@ -9674,7 +9675,7 @@ | |||
9674 | </dest> | 9675 | </dest> |
9675 | <voice> | 9676 | <voice> |
9676 | *: none | 9677 | *: none |
9677 | recording: "Време дељења" | 9678 | recording: "" |
9678 | </voice> | 9679 | </voice> |
9679 | </phrase> | 9680 | </phrase> |
9680 | <phrase> | 9681 | <phrase> |
@@ -9705,7 +9706,7 @@ | |||
9705 | </dest> | 9706 | </dest> |
9706 | <voice> | 9707 | <voice> |
9707 | *: none | 9708 | *: none |
9708 | recording: "КЛИП" | 9709 | recording: "" |
9709 | </voice> | 9710 | </voice> |
9710 | </phrase> | 9711 | </phrase> |
9711 | <phrase> | 9712 | <phrase> |
@@ -9739,7 +9740,7 @@ | |||
9739 | </dest> | 9740 | </dest> |
9740 | <voice> | 9741 | <voice> |
9741 | *: none | 9742 | *: none |
9742 | recording: "Име фајла" | 9743 | recording: "" |
9743 | </voice> | 9744 | </voice> |
9744 | </phrase> | 9745 | </phrase> |
9745 | <phrase> | 9746 | <phrase> |
@@ -11692,16 +11693,16 @@ | |||
11692 | </phrase> | 11693 | </phrase> |
11693 | <phrase> | 11694 | <phrase> |
11694 | id: LANG_AUTOMATIC | 11695 | id: LANG_AUTOMATIC |
11695 | desc: generic automatic | 11696 | desc: deprecated |
11696 | user: core | 11697 | user: core |
11697 | <source> | 11698 | <source> |
11698 | *: "Automatic" | 11699 | *: "" |
11699 | </source> | 11700 | </source> |
11700 | <dest> | 11701 | <dest> |
11701 | *: "ÐутоматÑки" | 11702 | *: "" |
11702 | </dest> | 11703 | </dest> |
11703 | <voice> | 11704 | <voice> |
11704 | *: "ÐутоматÑки" | 11705 | *: "" |
11705 | </voice> | 11706 | </voice> |
11706 | </phrase> | 11707 | </phrase> |
11707 | <phrase> | 11708 | <phrase> |
@@ -12899,7 +12900,7 @@ | |||
12899 | *: "ОÑобине директоријума" | 12900 | *: "ОÑобине директоријума" |
12900 | </dest> | 12901 | </dest> |
12901 | <voice> | 12902 | <voice> |
12902 | *: "ОÑобине директоријума" | 12903 | *: "" |
12903 | </voice> | 12904 | </voice> |
12904 | </phrase> | 12905 | </phrase> |
12905 | <phrase> | 12906 | <phrase> |
@@ -13118,7 +13119,7 @@ | |||
13118 | *: "РедоÑлед Rockbox главног менија" | 13119 | *: "РедоÑлед Rockbox главног менија" |
13119 | </dest> | 13120 | </dest> |
13120 | <voice> | 13121 | <voice> |
13121 | *: "РедоÑлед Ð Ð¾ÐºÐ±Ð¾ÐºÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³ менија" | 13122 | *: "" |
13122 | </voice> | 13123 | </voice> |
13123 | </phrase> | 13124 | </phrase> |
13124 | <phrase> | 13125 | <phrase> |
@@ -13132,7 +13133,7 @@ | |||
13132 | *: "ОÑобине фајла" | 13133 | *: "ОÑобине фајла" |
13133 | </dest> | 13134 | </dest> |
13134 | <voice> | 13135 | <voice> |
13135 | *: "ОÑобине фајла" | 13136 | *: "" |
13136 | </voice> | 13137 | </voice> |
13137 | </phrase> | 13138 | </phrase> |
13138 | <phrase> | 13139 | <phrase> |
@@ -13280,16 +13281,16 @@ | |||
13280 | </phrase> | 13281 | </phrase> |
13281 | <phrase> | 13282 | <phrase> |
13282 | id: LANG_CLEAR_PLAYLIST | 13283 | id: LANG_CLEAR_PLAYLIST |
13283 | desc: in the pictureflow main menu | 13284 | desc: deprecated |
13284 | user: core | 13285 | user: core |
13285 | <source> | 13286 | <source> |
13286 | *: "Clear playlist" | 13287 | *: "" |
13287 | </source> | 13288 | </source> |
13288 | <dest> | 13289 | <dest> |
13289 | *: "ОчиÑти плејлиÑту" | 13290 | *: "" |
13290 | </dest> | 13291 | </dest> |
13291 | <voice> | 13292 | <voice> |
13292 | *: "ОчиÑти плејлиÑту" | 13293 | *: "" |
13293 | </voice> | 13294 | </voice> |
13294 | </phrase> | 13295 | </phrase> |
13295 | <phrase> | 13296 | <phrase> |
@@ -15858,16 +15859,16 @@ | |||
15858 | </phrase> | 15859 | </phrase> |
15859 | <phrase> | 15860 | <phrase> |
15860 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE | 15861 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE |
15861 | desc: reload playlist after saving | 15862 | desc: deprecated |
15862 | user: core | 15863 | user: core |
15863 | <source> | 15864 | <source> |
15864 | *: "Reload After Saving" | 15865 | *: "" |
15865 | </source> | 15866 | </source> |
15866 | <dest> | 15867 | <dest> |
15867 | *: "Поново учитај након чувања" | 15868 | *: "" |
15868 | </dest> | 15869 | </dest> |
15869 | <voice> | 15870 | <voice> |
15870 | *: "Поново учитај након чувања" | 15871 | *: "" |
15871 | </voice> | 15872 | </voice> |
15872 | </phrase> | 15873 | </phrase> |
15873 | <phrase> | 15874 | <phrase> |
@@ -16535,3 +16536,325 @@ | |||
16535 | perceptual_volume: "Перцептуално" | 16536 | perceptual_volume: "Перцептуално" |
16536 | </voice> | 16537 | </voice> |
16537 | </phrase> | 16538 | </phrase> |
16539 | <phrase> | ||
16540 | id: LANG_SHOW_TRACKS_WHILE_BROWSING | ||
16541 | desc: in PictureFlow Main Menu | ||
16542 | user: core | ||
16543 | <source> | ||
16544 | *: "Show Tracks While Browsing" | ||
16545 | </source> | ||
16546 | <dest> | ||
16547 | *: "Прикажи нумере током прегледа" | ||
16548 | </dest> | ||
16549 | <voice> | ||
16550 | *: "Прикажи нумере током прегледа" | ||
16551 | </voice> | ||
16552 | </phrase> | ||
16553 | <phrase> | ||
16554 | id: LANG_GOTO_LAST_ALBUM | ||
16555 | desc: in PictureFlow Main Menu | ||
16556 | user: core | ||
16557 | <source> | ||
16558 | *: "Go to Last Album" | ||
16559 | </source> | ||
16560 | <dest> | ||
16561 | *: "Иди на поÑледњи албум" | ||
16562 | </dest> | ||
16563 | <voice> | ||
16564 | *: "Иди на поÑледњи албум" | ||
16565 | </voice> | ||
16566 | </phrase> | ||
16567 | <phrase> | ||
16568 | id: LANG_DATABASE_DIR | ||
16569 | desc: in database settings menu | ||
16570 | user: core | ||
16571 | <source> | ||
16572 | *: "Database Directory" | ||
16573 | </source> | ||
16574 | <dest> | ||
16575 | *: "Директоријум базе података" | ||
16576 | </dest> | ||
16577 | <voice> | ||
16578 | *: "Директоријум базе података" | ||
16579 | </voice> | ||
16580 | </phrase> | ||
16581 | <phrase> | ||
16582 | id: LANG_REMOVE_QUEUED_TRACKS | ||
16583 | desc: Confirmation dialog | ||
16584 | user: core | ||
16585 | <source> | ||
16586 | *: "Remove Queued Tracks?" | ||
16587 | </source> | ||
16588 | <dest> | ||
16589 | *: "Да уклоним нумере из реда?" | ||
16590 | </dest> | ||
16591 | <voice> | ||
16592 | *: "Да уклоним нумере из реда?" | ||
16593 | </voice> | ||
16594 | </phrase> | ||
16595 | <phrase> | ||
16596 | id: LANG_QUICK_IGNORE_DIRACHE | ||
16597 | desc: in Settings | ||
16598 | user: core | ||
16599 | <source> | ||
16600 | *: "Quick (Ignore Directory Cache)" | ||
16601 | </source> | ||
16602 | <dest> | ||
16603 | *: "Брзо (игнориши кеш директоријума)" | ||
16604 | </dest> | ||
16605 | <voice> | ||
16606 | *: "Брзо (игнориши кеш директоријума)" | ||
16607 | </voice> | ||
16608 | </phrase> | ||
16609 | <phrase> | ||
16610 | id: LANG_WPS | ||
16611 | desc: in Settings | ||
16612 | user: core | ||
16613 | <source> | ||
16614 | *: "What's Playing Screen" | ||
16615 | </source> | ||
16616 | <dest> | ||
16617 | *: "Екран шта Ñе пушта" | ||
16618 | </dest> | ||
16619 | <voice> | ||
16620 | *: "Екран шта Ñе пушта" | ||
16621 | </voice> | ||
16622 | </phrase> | ||
16623 | <phrase> | ||
16624 | id: LANG_DEFAULT_BROWSER | ||
16625 | desc: in Settings | ||
16626 | user: core | ||
16627 | <source> | ||
16628 | *: "Default Browser" | ||
16629 | </source> | ||
16630 | <dest> | ||
16631 | *: "Подраз. прегледач" | ||
16632 | </dest> | ||
16633 | <voice> | ||
16634 | *: "Подраз. прегледач" | ||
16635 | </voice> | ||
16636 | </phrase> | ||
16637 | <phrase> | ||
16638 | id: LANG_AMAZE_MENU | ||
16639 | desc: Amaze game | ||
16640 | user: core | ||
16641 | <source> | ||
16642 | *: "Amaze Main Menu" | ||
16643 | </source> | ||
16644 | <dest> | ||
16645 | *: "Amaze главни мени" | ||
16646 | </dest> | ||
16647 | <voice> | ||
16648 | *: "Ðмејз главни мени" | ||
16649 | </voice> | ||
16650 | </phrase> | ||
16651 | <phrase> | ||
16652 | id: LANG_SET_MAZE_SIZE | ||
16653 | desc: Maze size in Amaze game | ||
16654 | user: core | ||
16655 | <source> | ||
16656 | *: "Set Maze Size" | ||
16657 | </source> | ||
16658 | <dest> | ||
16659 | *: "ПоÑтави величину лавиринта" | ||
16660 | </dest> | ||
16661 | <voice> | ||
16662 | *: "ПоÑтави величину лавиринта" | ||
16663 | </voice> | ||
16664 | </phrase> | ||
16665 | <phrase> | ||
16666 | id: LANG_VIEW_MAP | ||
16667 | desc: Map in Amaze game | ||
16668 | user: core | ||
16669 | <source> | ||
16670 | *: "View Map" | ||
16671 | </source> | ||
16672 | <dest> | ||
16673 | *: "Погледај мапу" | ||
16674 | </dest> | ||
16675 | <voice> | ||
16676 | *: "Погледај мапу" | ||
16677 | </voice> | ||
16678 | </phrase> | ||
16679 | <phrase> | ||
16680 | id: LANG_SHOW_COMPASS | ||
16681 | desc: Compass in Amaze game | ||
16682 | user: core | ||
16683 | <source> | ||
16684 | *: "Show Compass" | ||
16685 | </source> | ||
16686 | <dest> | ||
16687 | *: "Прикажи компаÑ" | ||
16688 | </dest> | ||
16689 | <voice> | ||
16690 | *: "Прикажи компаÑ" | ||
16691 | </voice> | ||
16692 | </phrase> | ||
16693 | <phrase> | ||
16694 | id: LANG_SHOW_MAP | ||
16695 | desc: Map in Amaze game | ||
16696 | user: core | ||
16697 | <source> | ||
16698 | *: "Show Map" | ||
16699 | </source> | ||
16700 | <dest> | ||
16701 | *: "Прикажи мапу" | ||
16702 | </dest> | ||
16703 | <voice> | ||
16704 | *: "Прикажи мапу" | ||
16705 | </voice> | ||
16706 | </phrase> | ||
16707 | <phrase> | ||
16708 | id: LANG_REMEMBER_PATH | ||
16709 | desc: Map in Amaze game | ||
16710 | user: core | ||
16711 | <source> | ||
16712 | *: "Remember Path" | ||
16713 | </source> | ||
16714 | <dest> | ||
16715 | *: "Запамти путању" | ||
16716 | </dest> | ||
16717 | <voice> | ||
16718 | *: "Запамти путању" | ||
16719 | </voice> | ||
16720 | </phrase> | ||
16721 | <phrase> | ||
16722 | id: LANG_USE_LARGE_TILES | ||
16723 | desc: Map in Amaze game | ||
16724 | user: core | ||
16725 | <source> | ||
16726 | *: "Use Large Tiles" | ||
16727 | </source> | ||
16728 | <dest> | ||
16729 | *: "КориÑти велике плочице" | ||
16730 | </dest> | ||
16731 | <voice> | ||
16732 | *: "КориÑти велике плочице" | ||
16733 | </voice> | ||
16734 | </phrase> | ||
16735 | <phrase> | ||
16736 | id: LANG_SHOW_SOLUTION | ||
16737 | desc: Map in Amaze game | ||
16738 | user: core | ||
16739 | <source> | ||
16740 | *: "Show Solution" | ||
16741 | </source> | ||
16742 | <dest> | ||
16743 | *: "Прикажи решење" | ||
16744 | </dest> | ||
16745 | <voice> | ||
16746 | *: "Прикажи решење" | ||
16747 | </voice> | ||
16748 | </phrase> | ||
16749 | <phrase> | ||
16750 | id: LANG_QUIT_WITHOUT_SAVING | ||
16751 | desc: | ||
16752 | user: core | ||
16753 | <source> | ||
16754 | *: "Quit without saving" | ||
16755 | </source> | ||
16756 | <dest> | ||
16757 | *: "ÐапуÑти без чувања" | ||
16758 | </dest> | ||
16759 | <voice> | ||
16760 | *: "ÐапуÑти без чувања" | ||
16761 | </voice> | ||
16762 | </phrase> | ||
16763 | <phrase> | ||
16764 | id: LANG_GENERATING_MAZE | ||
16765 | desc: Amaze game | ||
16766 | user: core | ||
16767 | <source> | ||
16768 | *: "Generating maze..." | ||
16769 | </source> | ||
16770 | <dest> | ||
16771 | *: "Лавиринт Ñе генерише..." | ||
16772 | </dest> | ||
16773 | <voice> | ||
16774 | *: "Лавиринт Ñе генерише..." | ||
16775 | </voice> | ||
16776 | </phrase> | ||
16777 | <phrase> | ||
16778 | id: LANG_YOU_WIN | ||
16779 | desc: Success in game | ||
16780 | user: core | ||
16781 | <source> | ||
16782 | *: "You win!" | ||
16783 | </source> | ||
16784 | <dest> | ||
16785 | *: "Победили Ñте!" | ||
16786 | </dest> | ||
16787 | <voice> | ||
16788 | *: "Победили Ñте!" | ||
16789 | </voice> | ||
16790 | </phrase> | ||
16791 | <phrase> | ||
16792 | id: LANG_YOU_CHEATED | ||
16793 | desc: Cheated in game | ||
16794 | user: core | ||
16795 | <source> | ||
16796 | *: "You cheated!" | ||
16797 | </source> | ||
16798 | <dest> | ||
16799 | *: "Варали Ñте!" | ||
16800 | </dest> | ||
16801 | <voice> | ||
16802 | *: "Варали Ñте!" | ||
16803 | </voice> | ||
16804 | </phrase> | ||
16805 | <phrase> | ||
16806 | id: LANG_DIFFICULTY_EASY | ||
16807 | desc: Game difficulty | ||
16808 | user: core | ||
16809 | <source> | ||
16810 | *: "Easy" | ||
16811 | </source> | ||
16812 | <dest> | ||
16813 | *: "Лако" | ||
16814 | </dest> | ||
16815 | <voice> | ||
16816 | *: "Лако" | ||
16817 | </voice> | ||
16818 | </phrase> | ||
16819 | <phrase> | ||
16820 | id: LANG_DIFFICULTY_MEDIUM | ||
16821 | desc: Game difficulty | ||
16822 | user: core | ||
16823 | <source> | ||
16824 | *: "Medium" | ||
16825 | </source> | ||
16826 | <dest> | ||
16827 | *: "Средње" | ||
16828 | </dest> | ||
16829 | <voice> | ||
16830 | *: "Средње" | ||
16831 | </voice> | ||
16832 | </phrase> | ||
16833 | <phrase> | ||
16834 | id: LANG_DIFFICULTY_HARD | ||
16835 | desc: Game difficulty | ||
16836 | user: core | ||
16837 | <source> | ||
16838 | *: "Hard" | ||
16839 | </source> | ||
16840 | <dest> | ||
16841 | *: "Тешко" | ||
16842 | </dest> | ||
16843 | <voice> | ||
16844 | *: "Тешко" | ||
16845 | </voice> | ||
16846 | </phrase> | ||
16847 | <phrase> | ||
16848 | id: LANG_DIFFICULTY_EXPERT | ||
16849 | desc: Game difficulty | ||
16850 | user: core | ||
16851 | <source> | ||
16852 | *: "Expert" | ||
16853 | </source> | ||
16854 | <dest> | ||
16855 | *: "Стручњак" | ||
16856 | </dest> | ||
16857 | <voice> | ||
16858 | *: "Стручњак" | ||
16859 | </voice> | ||
16860 | </phrase> | ||
diff --git a/apps/lang/turkce.lang b/apps/lang/turkce.lang index 5b1688eed3..b9c30d8d5a 100644 --- a/apps/lang/turkce.lang +++ b/apps/lang/turkce.lang | |||
@@ -139,10 +139,10 @@ | |||
139 | *: "Loading... %d%% done (%s)" | 139 | *: "Loading... %d%% done (%s)" |
140 | </source> | 140 | </source> |
141 | <dest> | 141 | <dest> |
142 | *: "Yükleniyor... %%%d bitti (%s)" | 142 | *: "Yükleniyor... %d%% bitti (%s)" |
143 | </dest> | 143 | </dest> |
144 | <voice> | 144 | <voice> |
145 | *: "Yükleniyor... %%%d tamamlandı (%s)" | 145 | *: "Yükleniyor" |
146 | </voice> | 146 | </voice> |
147 | </phrase> | 147 | </phrase> |
148 | <phrase> | 148 | <phrase> |
@@ -1601,7 +1601,7 @@ | |||
1601 | *: "DoÄŸrusal (%)" | 1601 | *: "DoÄŸrusal (%)" |
1602 | </dest> | 1602 | </dest> |
1603 | <voice> | 1603 | <voice> |
1604 | *: "Doğrusal (%)" | 1604 | *: "Doğrusal yüzde" |
1605 | </voice> | 1605 | </voice> |
1606 | </phrase> | 1606 | </phrase> |
1607 | <phrase> | 1607 | <phrase> |
@@ -1754,7 +1754,7 @@ | |||
1754 | </dest> | 1754 | </dest> |
1755 | <voice> | 1755 | <voice> |
1756 | *: none | 1756 | *: none |
1757 | gigabeat*,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh10_5gb,mrobe100,sansac200*,sansae200*,gogearsa9200,samsungyh*,iriverh100,iriverh120,iriverh300,rtc: "" | 1757 | gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,rtc,samsungyh*,sansac200*,sansae200*: "" |
1758 | </voice> | 1758 | </voice> |
1759 | </phrase> | 1759 | </phrase> |
1760 | <phrase> | 1760 | <phrase> |
@@ -1779,7 +1779,6 @@ | |||
1779 | *: none | 1779 | *: none |
1780 | gigabeatfx,mrobe500: "POWER = Geri Döndür" | 1780 | gigabeatfx,mrobe500: "POWER = Geri Döndür" |
1781 | gigabeats: "LEFT = Revert" | 1781 | gigabeats: "LEFT = Revert" |
1782 | sansafuzeplus: "BACK = Geri Döndür" | ||
1783 | gogearsa9200: "LEFT = Geri Döndür" | 1782 | gogearsa9200: "LEFT = Geri Döndür" |
1784 | iaudiom5,iaudiox5: "RECORD = Geri Döndür" | 1783 | iaudiom5,iaudiox5: "RECORD = Geri Döndür" |
1785 | ipod*,mpiohd300,sansac200*: "MENU = Geri Döndür" | 1784 | ipod*,mpiohd300,sansac200*: "MENU = Geri Döndür" |
@@ -1788,11 +1787,12 @@ | |||
1788 | mrobe100: "DISPLAY = Geri Döndür" | 1787 | mrobe100: "DISPLAY = Geri Döndür" |
1789 | rtc: "OFF = Geri Döndür" | 1788 | rtc: "OFF = Geri Döndür" |
1790 | samsungyh*: "REW = Geri Döndür" | 1789 | samsungyh*: "REW = Geri Döndür" |
1790 | sansafuzeplus: "BACK = Geri Döndür" | ||
1791 | vibe500: "C = Geri Döndür" | 1791 | vibe500: "C = Geri Döndür" |
1792 | </dest> | 1792 | </dest> |
1793 | <voice> | 1793 | <voice> |
1794 | *: none | 1794 | *: none |
1795 | gogearsa9200,iaudiom5,iaudiox5,ipod*,sansac200*,iriverh10,iriverh10_5gb,sansae200*,iriverh100,iriverh120,iriverh300,mrobe100,rtc,samsungyh*: "" | 1795 | gigabeat*,gogearsa9200,iaudiom5,iaudiox5,ipod*,iriverh10,iriverh100,iriverh10_5gb,iriverh120,iriverh300,mrobe100,rtc,samsungyh*,sansac200*,sansae200*: "" |
1796 | </voice> | 1796 | </voice> |
1797 | </phrase> | 1797 | </phrase> |
1798 | <phrase> | 1798 | <phrase> |
@@ -1978,7 +1978,7 @@ | |||
1978 | *: "May" | 1978 | *: "May" |
1979 | </source> | 1979 | </source> |
1980 | <dest> | 1980 | <dest> |
1981 | *: "May" | 1981 | *: "Mayıs" |
1982 | </dest> | 1982 | </dest> |
1983 | <voice> | 1983 | <voice> |
1984 | *: "Mayıs" | 1984 | *: "Mayıs" |
@@ -2172,19 +2172,22 @@ | |||
2172 | user: core | 2172 | user: core |
2173 | <source> | 2173 | <source> |
2174 | *: none | 2174 | *: none |
2175 | multivolume: "HD1" | 2175 | hibylinux: "USB:" |
2176 | multivolume: "HD1:" | ||
2176 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" | 2177 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mSD:" |
2177 | xduoox3: "mSD2:" | 2178 | xduoox3: "mSD2:" |
2178 | </source> | 2179 | </source> |
2179 | <dest> | 2180 | <dest> |
2180 | *: none | 2181 | *: none |
2181 | multivolume: "HD1" | 2182 | hibylinux: "USB:" |
2182 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mikro-SD:" | 2183 | multivolume: "HardDisk1:" |
2183 | xduoox3: "mikro-SD2:" | 2184 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mikroSD:" |
2185 | xduoox3: "mikroSD2:" | ||
2184 | </dest> | 2186 | </dest> |
2185 | <voice> | 2187 | <voice> |
2186 | *: none | 2188 | *: none |
2187 | multivolume: "H D 1" | 2189 | hibylinux: "U S B" |
2190 | multivolume: "Hard Disk 1" | ||
2188 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mikroSD" | 2191 | sansac200*,sansaclipplus,sansae200*,sansafuze*: "mikroSD" |
2189 | xduoox3: "mikroSD2" | 2192 | xduoox3: "mikroSD2" |
2190 | </voice> | 2193 | </voice> |
@@ -2652,7 +2655,7 @@ | |||
2652 | *: "Edit mode: %s %s" | 2655 | *: "Edit mode: %s %s" |
2653 | </source> | 2656 | </source> |
2654 | <dest> | 2657 | <dest> |
2655 | *: "Düzenleme Modu: %s" | 2658 | *: "Düzenleme Modu: %s %s" |
2656 | </dest> | 2659 | </dest> |
2657 | <voice> | 2660 | <voice> |
2658 | *: "" | 2661 | *: "" |
@@ -3887,16 +3890,16 @@ | |||
3887 | </phrase> | 3890 | </phrase> |
3888 | <phrase> | 3891 | <phrase> |
3889 | id: LANG_AUTOMATIC | 3892 | id: LANG_AUTOMATIC |
3890 | desc: generic automatic | 3893 | desc: deprecated |
3891 | user: core | 3894 | user: core |
3892 | <source> | 3895 | <source> |
3893 | *: "Automatic" | 3896 | *: "" |
3894 | </source> | 3897 | </source> |
3895 | <dest> | 3898 | <dest> |
3896 | *: "Otomatik" | 3899 | *: "" |
3897 | </dest> | 3900 | </dest> |
3898 | <voice> | 3901 | <voice> |
3899 | *: "Otomatik" | 3902 | *: "" |
3900 | </voice> | 3903 | </voice> |
3901 | </phrase> | 3904 | </phrase> |
3902 | <phrase> | 3905 | <phrase> |
@@ -4112,10 +4115,10 @@ | |||
4112 | *: "Queued %d tracks (%s)" | 4115 | *: "Queued %d tracks (%s)" |
4113 | </source> | 4116 | </source> |
4114 | <dest> | 4117 | <dest> |
4115 | *: "Kuyruğa Alınan %d Parça (%s)" | 4118 | *: "Sırada %d Tane Parça (%s)" |
4116 | </dest> | 4119 | </dest> |
4117 | <voice> | 4120 | <voice> |
4118 | *: "Kuyruğa Alınan %d Parça (%s)" | 4121 | *: "tane parça sırada" |
4119 | </voice> | 4122 | </voice> |
4120 | </phrase> | 4123 | </phrase> |
4121 | <phrase> | 4124 | <phrase> |
@@ -4691,16 +4694,16 @@ | |||
4691 | </phrase> | 4694 | </phrase> |
4692 | <phrase> | 4695 | <phrase> |
4693 | id: LANG_SET_AS_PLAYLISTCAT_DIR | 4696 | id: LANG_SET_AS_PLAYLISTCAT_DIR |
4694 | desc: used in the onplay menu to set a playlist catalogue dir | 4697 | desc: deprecated |
4695 | user: core | 4698 | user: core |
4696 | <source> | 4699 | <source> |
4697 | *: "Set As Playlist Catalogue Directory" | 4700 | *: "" |
4698 | </source> | 4701 | </source> |
4699 | <dest> | 4702 | <dest> |
4700 | *: "Oynatma Listesi Katalog Dizini Olarak Ayarla" | 4703 | *: "" |
4701 | </dest> | 4704 | </dest> |
4702 | <voice> | 4705 | <voice> |
4703 | *: "Oynatma Listesi Katalog Dizini Olarak Ayarla" | 4706 | *: "" |
4704 | </voice> | 4707 | </voice> |
4705 | </phrase> | 4708 | </phrase> |
4706 | <phrase> | 4709 | <phrase> |
@@ -4812,16 +4815,16 @@ | |||
4812 | </phrase> | 4815 | </phrase> |
4813 | <phrase> | 4816 | <phrase> |
4814 | id: LANG_INSERT | 4817 | id: LANG_INSERT |
4815 | desc: in onplay menu. insert a track/playlist into dynamic playlist. | 4818 | desc: deprecated |
4816 | user: core | 4819 | user: core |
4817 | <source> | 4820 | <source> |
4818 | *: "Insert" | 4821 | *: "" |
4819 | </source> | 4822 | </source> |
4820 | <dest> | 4823 | <dest> |
4821 | *: "Tak" | 4824 | *: "" |
4822 | </dest> | 4825 | </dest> |
4823 | <voice> | 4826 | <voice> |
4824 | *: "Tak" | 4827 | *: "" |
4825 | </voice> | 4828 | </voice> |
4826 | </phrase> | 4829 | </phrase> |
4827 | <phrase> | 4830 | <phrase> |
@@ -4871,16 +4874,16 @@ | |||
4871 | </phrase> | 4874 | </phrase> |
4872 | <phrase> | 4875 | <phrase> |
4873 | id: LANG_SET_AS_START_DIR | 4876 | id: LANG_SET_AS_START_DIR |
4874 | desc: used in the onplay menu to set a starting browser dir | 4877 | desc: deprecated |
4875 | user: core | 4878 | user: core |
4876 | <source> | 4879 | <source> |
4877 | *: "Start File Browser Here" | 4880 | *: "" |
4878 | </source> | 4881 | </source> |
4879 | <dest> | 4882 | <dest> |
4880 | *: "Dosya Tarayıcısını Buradan Başlat " | 4883 | *: "" |
4881 | </dest> | 4884 | </dest> |
4882 | <voice> | 4885 | <voice> |
4883 | *: "Dosya Tarayıcısını Buradan Başlat" | 4886 | *: "" |
4884 | </voice> | 4887 | </voice> |
4885 | </phrase> | 4888 | </phrase> |
4886 | <phrase> | 4889 | <phrase> |
@@ -5656,10 +5659,10 @@ | |||
5656 | *: "%d Hz Band Gain" | 5659 | *: "%d Hz Band Gain" |
5657 | </source> | 5660 | </source> |
5658 | <dest> | 5661 | <dest> |
5659 | *: "%d Hz Band Kazancı" | 5662 | *: "%d Hz Bant Kazancı" |
5660 | </dest> | 5663 | </dest> |
5661 | <voice> | 5664 | <voice> |
5662 | *: "%d Hz Band Kazancı" | 5665 | *: "hertz bant kazancı" |
5663 | </voice> | 5666 | </voice> |
5664 | </phrase> | 5667 | </phrase> |
5665 | <phrase> | 5668 | <phrase> |
@@ -7284,19 +7287,17 @@ | |||
7284 | </phrase> | 7287 | </phrase> |
7285 | <phrase> | 7288 | <phrase> |
7286 | id: LANG_SET_AS_REC_DIR | 7289 | id: LANG_SET_AS_REC_DIR |
7287 | desc: used in the onplay menu to set a recording dir | 7290 | desc: deprecated |
7288 | user: core | 7291 | user: core |
7289 | <source> | 7292 | <source> |
7290 | *: none | 7293 | *: none |
7291 | recording: "Set As Recording Directory" | 7294 | recording: "" |
7292 | </source> | 7295 | </source> |
7293 | <dest> | 7296 | <dest> |
7294 | *: none | 7297 | *: "" |
7295 | recording: "Kayıt Dizini Olarak Ayarla" | ||
7296 | </dest> | 7298 | </dest> |
7297 | <voice> | 7299 | <voice> |
7298 | *: none | 7300 | *: "" |
7299 | recording: "Kayıt Dizini Olarak Ayarla" | ||
7300 | </voice> | 7301 | </voice> |
7301 | </phrase> | 7302 | </phrase> |
7302 | <phrase> | 7303 | <phrase> |
@@ -7335,16 +7336,16 @@ | |||
7335 | desc: in lcd settings | 7336 | desc: in lcd settings |
7336 | user: core | 7337 | user: core |
7337 | <source> | 7338 | <source> |
7338 | *: none | 7339 | *: "Backlight on Lock" |
7339 | hold_button: "Backlight on Hold" | 7340 | hold_button: "Backlight on Hold" |
7340 | </source> | 7341 | </source> |
7341 | <dest> | 7342 | <dest> |
7342 | *: none | 7343 | *: "Arka aydınlatma Kilitle" |
7343 | hold_button: "Beklemede Arka Işık" | 7344 | hold_button: "Arka aydınlatma Beklemede tut" |
7344 | </dest> | 7345 | </dest> |
7345 | <voice> | 7346 | <voice> |
7346 | *: none | 7347 | *: "Arka aydınlatma Kilitle" |
7347 | hold_button: "Beklemede Arka Işık" | 7348 | hold_button: "Arka aydınlatma Beklemede tut" |
7348 | </voice> | 7349 | </voice> |
7349 | </phrase> | 7350 | </phrase> |
7350 | <phrase> | 7351 | <phrase> |
@@ -7616,16 +7617,16 @@ | |||
7616 | </phrase> | 7617 | </phrase> |
7617 | <phrase> | 7618 | <phrase> |
7618 | id: LANG_INSERT_FIRST | 7619 | id: LANG_INSERT_FIRST |
7619 | desc: in onplay menu. insert a track/playlist into dynamic playlist. | 7620 | desc: deprecated |
7620 | user: core | 7621 | user: core |
7621 | <source> | 7622 | <source> |
7622 | *: "Insert Next" | 7623 | *: "" |
7623 | </source> | 7624 | </source> |
7624 | <dest> | 7625 | <dest> |
7625 | *: "Sonrakini Ekle" | 7626 | *: "" |
7626 | </dest> | 7627 | </dest> |
7627 | <voice> | 7628 | <voice> |
7628 | *: "Sonrakini Ekle" | 7629 | *: "" |
7629 | </voice> | 7630 | </voice> |
7630 | </phrase> | 7631 | </phrase> |
7631 | <phrase> | 7632 | <phrase> |
@@ -7988,16 +7989,16 @@ | |||
7988 | </phrase> | 7989 | </phrase> |
7989 | <phrase> | 7990 | <phrase> |
7990 | id: LANG_CATALOG_ADD_TO | 7991 | id: LANG_CATALOG_ADD_TO |
7991 | desc: in onplay playlist catalogue submenu | 7992 | desc: deprecated |
7992 | user: core | 7993 | user: core |
7993 | <source> | 7994 | <source> |
7994 | *: "Add to Playlist" | 7995 | *: "" |
7995 | </source> | 7996 | </source> |
7996 | <dest> | 7997 | <dest> |
7997 | *: "Oynatma listesine ekle" | 7998 | *: "" |
7998 | </dest> | 7999 | </dest> |
7999 | <voice> | 8000 | <voice> |
8000 | *: "Oynatma listesine ekle" | 8001 | *: "" |
8001 | </voice> | 8002 | </voice> |
8002 | </phrase> | 8003 | </phrase> |
8003 | <phrase> | 8004 | <phrase> |
@@ -8322,11 +8323,11 @@ | |||
8322 | </source> | 8323 | </source> |
8323 | <dest> | 8324 | <dest> |
8324 | *: none | 8325 | *: none |
8325 | recording: "-inf" | 8326 | recording: "-sonsuz" |
8326 | </dest> | 8327 | </dest> |
8327 | <voice> | 8328 | <voice> |
8328 | *: none | 8329 | *: none |
8329 | recording: "eksi sonsuzluk" | 8330 | recording: "eksi sonsuz" |
8330 | </voice> | 8331 | </voice> |
8331 | </phrase> | 8332 | </phrase> |
8332 | <phrase> | 8333 | <phrase> |
@@ -8575,16 +8576,16 @@ | |||
8575 | </phrase> | 8576 | </phrase> |
8576 | <phrase> | 8577 | <phrase> |
8577 | id: LANG_INSERT_SHUFFLED | 8578 | id: LANG_INSERT_SHUFFLED |
8578 | desc: in onplay menu. insert a track/playlist randomly into dynamic playlist | 8579 | desc: deprecated |
8579 | user: core | 8580 | user: core |
8580 | <source> | 8581 | <source> |
8581 | *: "Insert Shuffled" | 8582 | *: "" |
8582 | </source> | 8583 | </source> |
8583 | <dest> | 8584 | <dest> |
8584 | *: "Karışık Ekle" | 8585 | *: "" |
8585 | </dest> | 8586 | </dest> |
8586 | <voice> | 8587 | <voice> |
8587 | *: "Karışık Ekle" | 8588 | *: "" |
8588 | </voice> | 8589 | </voice> |
8589 | </phrase> | 8590 | </phrase> |
8590 | <phrase> | 8591 | <phrase> |
@@ -8803,16 +8804,16 @@ | |||
8803 | </phrase> | 8804 | </phrase> |
8804 | <phrase> | 8805 | <phrase> |
8805 | id: LANG_INSERT_LAST_SHUFFLED | 8806 | id: LANG_INSERT_LAST_SHUFFLED |
8806 | desc: in onplay menu. insert a playlist randomly at end of dynamic playlist | 8807 | desc: deprecated |
8807 | user: core | 8808 | user: core |
8808 | <source> | 8809 | <source> |
8809 | *: "Insert Last Shuffled" | 8810 | *: "" |
8810 | </source> | 8811 | </source> |
8811 | <dest> | 8812 | <dest> |
8812 | *: "Son Karıştırılanı Ekle" | 8813 | *: "" |
8813 | </dest> | 8814 | </dest> |
8814 | <voice> | 8815 | <voice> |
8815 | *: "Son Karıştırılanı Ekle" | 8816 | *: "" |
8816 | </voice> | 8817 | </voice> |
8817 | </phrase> | 8818 | </phrase> |
8818 | <phrase> | 8819 | <phrase> |
@@ -8910,31 +8911,16 @@ | |||
8910 | </phrase> | 8911 | </phrase> |
8911 | <phrase> | 8912 | <phrase> |
8912 | id: LANG_ALARM_MOD_KEYS | 8913 | id: LANG_ALARM_MOD_KEYS |
8913 | desc: Shown key functions in alarm menu (for the RTC alarm mod). | 8914 | desc: deprecated |
8914 | user: core | 8915 | user: core |
8915 | <source> | 8916 | <source> |
8916 | *: none | 8917 | *: "" |
8917 | alarm: "PLAY=Set OFF=Cancel" | ||
8918 | gigabeats: "SELECT=Set POWER=Cancel" | ||
8919 | ipod*: "SELECT=Set MENU=Cancel" | ||
8920 | iriverh10,iriverh10_5gb: "SELECT=Set PREV=Cancel" | ||
8921 | mpiohd300: "ENTER=Set MENU=Cancel" | ||
8922 | sansafuzeplus: "SELECT=Set BACK=Cancel" | ||
8923 | vibe500: "OK=Set C=Cancel" | ||
8924 | </source> | 8918 | </source> |
8925 | <dest> | 8919 | <dest> |
8926 | *: none | 8920 | *: "" |
8927 | alarm: "OYNAT=KAPALI olarak ayarla=Ä°ptal" | ||
8928 | gigabeats: "SELECT=GÜÇ Ayarla=İptal" | ||
8929 | ipod*: "SELECT=Ayarla,MENÜ=İptal" | ||
8930 | iriverh10,iriverh10_5gb: "SELECT=Ayarla PREV=Ä°ptal" | ||
8931 | mpiohd300: "ENTER=Ayarla MENÜ=İptal" | ||
8932 | sansafuzeplus: "SELECT=GERÄ° Ayarla=Ä°ptal" | ||
8933 | vibe500: "Tamam=Ayarla, C=Ä°ptal" | ||
8934 | </dest> | 8921 | </dest> |
8935 | <voice> | 8922 | <voice> |
8936 | *: none | 8923 | *: "" |
8937 | alarm,ipod*: "" | ||
8938 | </voice> | 8924 | </voice> |
8939 | </phrase> | 8925 | </phrase> |
8940 | <phrase> | 8926 | <phrase> |
@@ -9893,16 +9879,16 @@ | |||
9893 | </phrase> | 9879 | </phrase> |
9894 | <phrase> | 9880 | <phrase> |
9895 | id: LANG_INSERT_LAST | 9881 | id: LANG_INSERT_LAST |
9896 | desc: in onplay menu. append a track/playlist into dynamic playlist. | 9882 | desc: deprecated |
9897 | user: core | 9883 | user: core |
9898 | <source> | 9884 | <source> |
9899 | *: "Insert Last" | 9885 | *: "" |
9900 | </source> | 9886 | </source> |
9901 | <dest> | 9887 | <dest> |
9902 | *: "Sona Ekle" | 9888 | *: "" |
9903 | </dest> | 9889 | </dest> |
9904 | <voice> | 9890 | <voice> |
9905 | *: "Sona Ekle" | 9891 | *: "" |
9906 | </voice> | 9892 | </voice> |
9907 | </phrase> | 9893 | </phrase> |
9908 | <phrase> | 9894 | <phrase> |
@@ -10290,10 +10276,10 @@ | |||
10290 | </phrase> | 10276 | </phrase> |
10291 | <phrase> | 10277 | <phrase> |
10292 | id: LANG_AUDIOSCROBBLER | 10278 | id: LANG_AUDIOSCROBBLER |
10293 | desc: "Last.fm Log" in the playback menu | 10279 | desc: "Last.fm Logger" in Plugin/apps/scrobbler |
10294 | user: core | 10280 | user: core |
10295 | <source> | 10281 | <source> |
10296 | *: "Last.fm Log" | 10282 | *: "Last.fm Logger" |
10297 | </source> | 10283 | </source> |
10298 | <dest> | 10284 | <dest> |
10299 | *: "Last.fm Günlüğü" | 10285 | *: "Last.fm Günlüğü" |
@@ -11392,10 +11378,10 @@ | |||
11392 | *: "Q" | 11378 | *: "Q" |
11393 | </source> | 11379 | </source> |
11394 | <dest> | 11380 | <dest> |
11395 | *: "Q" | 11381 | *: "Kalite" |
11396 | </dest> | 11382 | </dest> |
11397 | <voice> | 11383 | <voice> |
11398 | *: "Q" | 11384 | *: "Kalite" |
11399 | </voice> | 11385 | </voice> |
11400 | </phrase> | 11386 | </phrase> |
11401 | <phrase> | 11387 | <phrase> |
@@ -12533,11 +12519,11 @@ | |||
12533 | </source> | 12519 | </source> |
12534 | <dest> | 12520 | <dest> |
12535 | *: none | 12521 | *: none |
12536 | es9018: "Bypass" | 12522 | es9018: "Ellemeden Geçir" |
12537 | </dest> | 12523 | </dest> |
12538 | <voice> | 12524 | <voice> |
12539 | *: none | 12525 | *: none |
12540 | es9018: "Bypass" | 12526 | es9018: "Ellemeden Geçir" |
12541 | </voice> | 12527 | </voice> |
12542 | </phrase> | 12528 | </phrase> |
12543 | <phrase> | 12529 | <phrase> |
@@ -12669,11 +12655,11 @@ | |||
12669 | </source> | 12655 | </source> |
12670 | <dest> | 12656 | <dest> |
12671 | *: none | 12657 | *: none |
12672 | es9218: "Brick Wall" | 12658 | es9218: "Tuğla Duvar (güçlü ses)" |
12673 | </dest> | 12659 | </dest> |
12674 | <voice> | 12660 | <voice> |
12675 | *: none | 12661 | *: none |
12676 | es9218: "Brick Wall" | 12662 | es9218: "Tuğla Duvar (güçlü ses)" |
12677 | </voice> | 12663 | </voice> |
12678 | </phrase> | 12664 | </phrase> |
12679 | <phrase> | 12665 | <phrase> |
@@ -13949,7 +13935,7 @@ | |||
13949 | *: "" | 13935 | *: "" |
13950 | </dest> | 13936 | </dest> |
13951 | <voice> | 13937 | <voice> |
13952 | *: "Bishop" | 13938 | *: "Fil" |
13953 | </voice> | 13939 | </voice> |
13954 | </phrase> | 13940 | </phrase> |
13955 | <phrase> | 13941 | <phrase> |
@@ -14666,58 +14652,58 @@ | |||
14666 | </phrase> | 14652 | </phrase> |
14667 | <phrase> | 14653 | <phrase> |
14668 | id: LANG_PROPERTIES_ARTIST | 14654 | id: LANG_PROPERTIES_ARTIST |
14669 | desc: in properties plugin | 14655 | desc: deprecated |
14670 | user: core | 14656 | user: core |
14671 | <source> | 14657 | <source> |
14672 | *: "[Artist]" | 14658 | *: "" |
14673 | </source> | 14659 | </source> |
14674 | <dest> | 14660 | <dest> |
14675 | *: "[Sanatçı]" | 14661 | *: "" |
14676 | </dest> | 14662 | </dest> |
14677 | <voice> | 14663 | <voice> |
14678 | *: "Sanatçı" | 14664 | *: "" |
14679 | </voice> | 14665 | </voice> |
14680 | </phrase> | 14666 | </phrase> |
14681 | <phrase> | 14667 | <phrase> |
14682 | id: LANG_PROPERTIES_TITLE | 14668 | id: LANG_PROPERTIES_TITLE |
14683 | desc: in properties plugin | 14669 | desc: deprecated |
14684 | user: core | 14670 | user: core |
14685 | <source> | 14671 | <source> |
14686 | *: "[Title]" | 14672 | *: "" |
14687 | </source> | 14673 | </source> |
14688 | <dest> | 14674 | <dest> |
14689 | *: "[Başlık]" | 14675 | *: "" |
14690 | </dest> | 14676 | </dest> |
14691 | <voice> | 14677 | <voice> |
14692 | *: "Başlık" | 14678 | *: "" |
14693 | </voice> | 14679 | </voice> |
14694 | </phrase> | 14680 | </phrase> |
14695 | <phrase> | 14681 | <phrase> |
14696 | id: LANG_PROPERTIES_ALBUM | 14682 | id: LANG_PROPERTIES_ALBUM |
14697 | desc: in properties plugin | 14683 | desc: deprecated |
14698 | user: core | 14684 | user: core |
14699 | <source> | 14685 | <source> |
14700 | *: "[Album]" | 14686 | *: "" |
14701 | </source> | 14687 | </source> |
14702 | <dest> | 14688 | <dest> |
14703 | *: "[Albüm]" | 14689 | *: "" |
14704 | </dest> | 14690 | </dest> |
14705 | <voice> | 14691 | <voice> |
14706 | *: "Albüm" | 14692 | *: "" |
14707 | </voice> | 14693 | </voice> |
14708 | </phrase> | 14694 | </phrase> |
14709 | <phrase> | 14695 | <phrase> |
14710 | id: LANG_PROPERTIES_DURATION | 14696 | id: LANG_PROPERTIES_DURATION |
14711 | desc: in properties plugin | 14697 | desc: deprecated |
14712 | user: core | 14698 | user: core |
14713 | <source> | 14699 | <source> |
14714 | *: "[Duration]" | 14700 | *: "" |
14715 | </source> | 14701 | </source> |
14716 | <dest> | 14702 | <dest> |
14717 | *: "[Süre]" | 14703 | *: "" |
14718 | </dest> | 14704 | </dest> |
14719 | <voice> | 14705 | <voice> |
14720 | *: "Süre" | 14706 | *: "" |
14721 | </voice> | 14707 | </voice> |
14722 | </phrase> | 14708 | </phrase> |
14723 | <phrase> | 14709 | <phrase> |
@@ -15051,16 +15037,16 @@ | |||
15051 | </phrase> | 15037 | </phrase> |
15052 | <phrase> | 15038 | <phrase> |
15053 | id: LANG_CLEAR_PLAYLIST | 15039 | id: LANG_CLEAR_PLAYLIST |
15054 | desc: in the pictureflow main menu | 15040 | desc: deprecated |
15055 | user: core | 15041 | user: core |
15056 | <source> | 15042 | <source> |
15057 | *: "Clear playlist" | 15043 | *: "" |
15058 | </source> | 15044 | </source> |
15059 | <dest> | 15045 | <dest> |
15060 | *: "Oynatma listesini temizle" | 15046 | *: "" |
15061 | </dest> | 15047 | </dest> |
15062 | <voice> | 15048 | <voice> |
15063 | *: "Oynatma listesini temizle" | 15049 | *: "" |
15064 | </voice> | 15050 | </voice> |
15065 | </phrase> | 15051 | </phrase> |
15066 | <phrase> | 15052 | <phrase> |
@@ -15107,7 +15093,7 @@ | |||
15107 | </phrase> | 15093 | </phrase> |
15108 | <phrase> | 15094 | <phrase> |
15109 | id: LANG_DIRECT | 15095 | id: LANG_DIRECT |
15110 | desc: in the pictureflow settings | 15096 | desc: in the pictureflow settings, also a volume adjustment mode |
15111 | user: core | 15097 | user: core |
15112 | <source> | 15098 | <source> |
15113 | *: "Direct" | 15099 | *: "Direct" |
@@ -15455,10 +15441,10 @@ | |||
15455 | *: "Track" | 15441 | *: "Track" |
15456 | </source> | 15442 | </source> |
15457 | <dest> | 15443 | <dest> |
15458 | *: "Track" | 15444 | *: "Parça" |
15459 | </dest> | 15445 | </dest> |
15460 | <voice> | 15446 | <voice> |
15461 | *: "Track" | 15447 | *: "Parça" |
15462 | </voice> | 15448 | </voice> |
15463 | </phrase> | 15449 | </phrase> |
15464 | <phrase> | 15450 | <phrase> |
@@ -15750,16 +15736,16 @@ | |||
15750 | </phrase> | 15736 | </phrase> |
15751 | <phrase> | 15737 | <phrase> |
15752 | id: LANG_CLEAR_LIST_AND_PLAY_NEXT | 15738 | id: LANG_CLEAR_LIST_AND_PLAY_NEXT |
15753 | desc: in onplay menu. Replace current playlist with selected tracks | 15739 | desc: deprecated |
15754 | user: core | 15740 | user: core |
15755 | <source> | 15741 | <source> |
15756 | *: "Clear List & Play Next" | 15742 | *: "" |
15757 | </source> | 15743 | </source> |
15758 | <dest> | 15744 | <dest> |
15759 | *: "Listeyi Temizle ve Sonrakini Oynat" | 15745 | *: "" |
15760 | </dest> | 15746 | </dest> |
15761 | <voice> | 15747 | <voice> |
15762 | *: "Listeyi Temizle ve Sonrakini Oynat" | 15748 | *: "" |
15763 | </voice> | 15749 | </voice> |
15764 | </phrase> | 15750 | </phrase> |
15765 | <phrase> | 15751 | <phrase> |
@@ -15820,16 +15806,16 @@ | |||
15820 | </phrase> | 15806 | </phrase> |
15821 | <phrase> | 15807 | <phrase> |
15822 | id: LANG_CLEAR_LIST_AND_PLAY_SHUFFLED | 15808 | id: LANG_CLEAR_LIST_AND_PLAY_SHUFFLED |
15823 | desc: in onplay menu. Replace current playlist with selected tracks in random order. | 15809 | desc: deprecated |
15824 | user: core | 15810 | user: core |
15825 | <source> | 15811 | <source> |
15826 | *: "Clear List & Play Shuffled" | 15812 | *: "" |
15827 | </source> | 15813 | </source> |
15828 | <dest> | 15814 | <dest> |
15829 | *: "Listeyi Temizle ve Karışık Oynat" | 15815 | *: "" |
15830 | </dest> | 15816 | </dest> |
15831 | <voice> | 15817 | <voice> |
15832 | *: "Listeyi Temizle ve Karışık Oynat" | 15818 | *: "" |
15833 | </voice> | 15819 | </voice> |
15834 | </phrase> | 15820 | </phrase> |
15835 | <phrase> | 15821 | <phrase> |
@@ -15876,142 +15862,142 @@ | |||
15876 | </phrase> | 15862 | </phrase> |
15877 | <phrase> | 15863 | <phrase> |
15878 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE | 15864 | id: LANG_PLAYLIST_RELOAD_AFTER_SAVE |
15879 | desc: reload playlist after saving | 15865 | desc: deprecated |
15880 | user: core | 15866 | user: core |
15881 | <source> | 15867 | <source> |
15882 | *: "Reload After Saving" | 15868 | *: "" |
15883 | </source> | 15869 | </source> |
15884 | <dest> | 15870 | <dest> |
15885 | *: "Kaydettikten Sonra Yeniden Yükle" | 15871 | *: "" |
15886 | </dest> | 15872 | </dest> |
15887 | <voice> | 15873 | <voice> |
15888 | *: "Kaydettikten Sonra Yeniden Yükle" | 15874 | *: "" |
15889 | </voice> | 15875 | </voice> |
15890 | </phrase> | 15876 | </phrase> |
15891 | <phrase> | 15877 | <phrase> |
15892 | id: LANG_PROPERTIES_ALBUMARTIST | 15878 | id: LANG_PROPERTIES_ALBUMARTIST |
15893 | desc: in properties plugin | 15879 | desc: deprecated |
15894 | user: core | 15880 | user: core |
15895 | <source> | 15881 | <source> |
15896 | *: "[Album Artist]" | 15882 | *: "" |
15897 | </source> | 15883 | </source> |
15898 | <dest> | 15884 | <dest> |
15899 | *: "[Albüm sanatçısı]" | 15885 | *: "" |
15900 | </dest> | 15886 | </dest> |
15901 | <voice> | 15887 | <voice> |
15902 | *: "Albüm sanatçısı" | 15888 | *: "" |
15903 | </voice> | 15889 | </voice> |
15904 | </phrase> | 15890 | </phrase> |
15905 | <phrase> | 15891 | <phrase> |
15906 | id: LANG_PROPERTIES_GENRE | 15892 | id: LANG_PROPERTIES_GENRE |
15907 | desc: in properties plugin | 15893 | desc: deprecated |
15908 | user: core | 15894 | user: core |
15909 | <source> | 15895 | <source> |
15910 | *: "[Genre]" | 15896 | *: "" |
15911 | </source> | 15897 | </source> |
15912 | <dest> | 15898 | <dest> |
15913 | *: "[Tür]" | 15899 | *: "" |
15914 | </dest> | 15900 | </dest> |
15915 | <voice> | 15901 | <voice> |
15916 | *: "Tür" | 15902 | *: "" |
15917 | </voice> | 15903 | </voice> |
15918 | </phrase> | 15904 | </phrase> |
15919 | <phrase> | 15905 | <phrase> |
15920 | id: LANG_PROPERTIES_COMMENT | 15906 | id: LANG_PROPERTIES_COMMENT |
15921 | desc: in properties plugin | 15907 | desc: deprecated |
15922 | user: core | 15908 | user: core |
15923 | <source> | 15909 | <source> |
15924 | *: "[Comment]" | 15910 | *: "" |
15925 | </source> | 15911 | </source> |
15926 | <dest> | 15912 | <dest> |
15927 | *: "[Yorum]" | 15913 | *: "" |
15928 | </dest> | 15914 | </dest> |
15929 | <voice> | 15915 | <voice> |
15930 | *: "Yorum Yap" | 15916 | *: "" |
15931 | </voice> | 15917 | </voice> |
15932 | </phrase> | 15918 | </phrase> |
15933 | <phrase> | 15919 | <phrase> |
15934 | id: LANG_PROPERTIES_COMPOSER | 15920 | id: LANG_PROPERTIES_COMPOSER |
15935 | desc: in properties plugin | 15921 | desc: deprecated |
15936 | user: core | 15922 | user: core |
15937 | <source> | 15923 | <source> |
15938 | *: "[Composer]" | 15924 | *: "" |
15939 | </source> | 15925 | </source> |
15940 | <dest> | 15926 | <dest> |
15941 | *: "[Besteci]" | 15927 | *: "" |
15942 | </dest> | 15928 | </dest> |
15943 | <voice> | 15929 | <voice> |
15944 | *: "Besteci" | 15930 | *: "" |
15945 | </voice> | 15931 | </voice> |
15946 | </phrase> | 15932 | </phrase> |
15947 | <phrase> | 15933 | <phrase> |
15948 | id: LANG_PROPERTIES_YEAR | 15934 | id: LANG_PROPERTIES_YEAR |
15949 | desc: in properties plugin | 15935 | desc: deprecated |
15950 | user: core | 15936 | user: core |
15951 | <source> | 15937 | <source> |
15952 | *: "[Year]" | 15938 | *: "" |
15953 | </source> | 15939 | </source> |
15954 | <dest> | 15940 | <dest> |
15955 | *: "[Yıl]" | 15941 | *: "" |
15956 | </dest> | 15942 | </dest> |
15957 | <voice> | 15943 | <voice> |
15958 | *: "Yıl" | 15944 | *: "" |
15959 | </voice> | 15945 | </voice> |
15960 | </phrase> | 15946 | </phrase> |
15961 | <phrase> | 15947 | <phrase> |
15962 | id: LANG_PROPERTIES_TRACKNUM | 15948 | id: LANG_PROPERTIES_TRACKNUM |
15963 | desc: in properties plugin | 15949 | desc: deprecated |
15964 | user: core | 15950 | user: core |
15965 | <source> | 15951 | <source> |
15966 | *: "[Tracknum]" | 15952 | *: "" |
15967 | </source> | 15953 | </source> |
15968 | <dest> | 15954 | <dest> |
15969 | *: "[Parça numarası]" | 15955 | *: "" |
15970 | </dest> | 15956 | </dest> |
15971 | <voice> | 15957 | <voice> |
15972 | *: "Parça numarası" | 15958 | *: "" |
15973 | </voice> | 15959 | </voice> |
15974 | </phrase> | 15960 | </phrase> |
15975 | <phrase> | 15961 | <phrase> |
15976 | id: LANG_PROPERTIES_DISCNUM | 15962 | id: LANG_PROPERTIES_DISCNUM |
15977 | desc: in properties plugin | 15963 | desc: deprecated |
15978 | user: core | 15964 | user: core |
15979 | <source> | 15965 | <source> |
15980 | *: "[Discnum]" | 15966 | *: "" |
15981 | </source> | 15967 | </source> |
15982 | <dest> | 15968 | <dest> |
15983 | *: "[Disknumarası]" | 15969 | *: "" |
15984 | </dest> | 15970 | </dest> |
15985 | <voice> | 15971 | <voice> |
15986 | *: "Disk numarası" | 15972 | *: "" |
15987 | </voice> | 15973 | </voice> |
15988 | </phrase> | 15974 | </phrase> |
15989 | <phrase> | 15975 | <phrase> |
15990 | id: LANG_PROPERTIES_FREQUENCY | 15976 | id: LANG_PROPERTIES_FREQUENCY |
15991 | desc: in properties plugin | 15977 | desc: deprecated |
15992 | user: core | 15978 | user: core |
15993 | <source> | 15979 | <source> |
15994 | *: "[Frequency]" | 15980 | *: "" |
15995 | </source> | 15981 | </source> |
15996 | <dest> | 15982 | <dest> |
15997 | *: "[Frekans]" | 15983 | *: "" |
15998 | </dest> | 15984 | </dest> |
15999 | <voice> | 15985 | <voice> |
16000 | *: "Frekans" | 15986 | *: "" |
16001 | </voice> | 15987 | </voice> |
16002 | </phrase> | 15988 | </phrase> |
16003 | <phrase> | 15989 | <phrase> |
16004 | id: LANG_PROPERTIES_BITRATE | 15990 | id: LANG_PROPERTIES_BITRATE |
16005 | desc: in properties plugin | 15991 | desc: deprecated |
16006 | user: core | 15992 | user: core |
16007 | <source> | 15993 | <source> |
16008 | *: "[Bitrate]" | 15994 | *: "" |
16009 | </source> | 15995 | </source> |
16010 | <dest> | 15996 | <dest> |
16011 | *: "[Bithızı]" | 15997 | *: "" |
16012 | </dest> | 15998 | </dest> |
16013 | <voice> | 15999 | <voice> |
16014 | *: "bit hızı" | 16000 | *: "" |
16015 | </voice> | 16001 | </voice> |
16016 | </phrase> | 16002 | </phrase> |
16017 | <phrase> | 16003 | <phrase> |
@@ -16036,7 +16022,7 @@ | |||
16036 | *: "dAY" | 16022 | *: "dAY" |
16037 | </source> | 16023 | </source> |
16038 | <dest> | 16024 | <dest> |
16039 | *: "Gün" | 16025 | *: "dAY" |
16040 | </dest> | 16026 | </dest> |
16041 | <voice> | 16027 | <voice> |
16042 | *: "" | 16028 | *: "" |
@@ -16112,3 +16098,766 @@ | |||
16112 | *: "Azalan" | 16098 | *: "Azalan" |
16113 | </voice> | 16099 | </voice> |
16114 | </phrase> | 16100 | </phrase> |
16101 | <phrase> | ||
16102 | id: LANG_ALBUM_ART | ||
16103 | desc: in Settings | ||
16104 | user: core | ||
16105 | <source> | ||
16106 | *: "Album Art" | ||
16107 | </source> | ||
16108 | <dest> | ||
16109 | *: "Albüm Kapağı" | ||
16110 | </dest> | ||
16111 | <voice> | ||
16112 | *: "Albüm Kapağı" | ||
16113 | </voice> | ||
16114 | </phrase> | ||
16115 | <phrase> | ||
16116 | id: LANG_PREFER_EMBEDDED | ||
16117 | desc: in Settings | ||
16118 | user: core | ||
16119 | <source> | ||
16120 | *: "Prefer Embedded" | ||
16121 | </source> | ||
16122 | <dest> | ||
16123 | *: "Dahili olanı Tercih et" | ||
16124 | </dest> | ||
16125 | <voice> | ||
16126 | *: "Dahili olanı Tercih et" | ||
16127 | </voice> | ||
16128 | </phrase> | ||
16129 | <phrase> | ||
16130 | id: LANG_PREFER_IMAGE_FILE | ||
16131 | desc: in Settings | ||
16132 | user: core | ||
16133 | <source> | ||
16134 | *: "Prefer Image File" | ||
16135 | </source> | ||
16136 | <dest> | ||
16137 | *: "Görsel Dosyasını Tercih et" | ||
16138 | </dest> | ||
16139 | <voice> | ||
16140 | *: "Görsel Dosyasını Tercih et" | ||
16141 | </voice> | ||
16142 | </phrase> | ||
16143 | <phrase> | ||
16144 | id: LANG_FM_SYNC_RDS_TIME | ||
16145 | desc: in radio screen and Settings | ||
16146 | user: core | ||
16147 | <source> | ||
16148 | *: none | ||
16149 | rds: "Sync RDS Time" | ||
16150 | </source> | ||
16151 | <dest> | ||
16152 | *: none | ||
16153 | rds: "RDS (radyoVeriSistemi) Saatini EÅŸle" | ||
16154 | </dest> | ||
16155 | <voice> | ||
16156 | *: none | ||
16157 | rds: "RDS (radyoVeriSistemi) Saatini EÅŸle" | ||
16158 | </voice> | ||
16159 | </phrase> | ||
16160 | <phrase> | ||
16161 | id: LANG_SORT_ALBUMS_BY | ||
16162 | desc: in Settings | ||
16163 | user: core | ||
16164 | <source> | ||
16165 | *: "Sort albums by" | ||
16166 | </source> | ||
16167 | <dest> | ||
16168 | *: "Albümleri şuna göre sırala:" | ||
16169 | </dest> | ||
16170 | <voice> | ||
16171 | *: "Albümleri şuna göre sırala:" | ||
16172 | </voice> | ||
16173 | </phrase> | ||
16174 | <phrase> | ||
16175 | id: LANG_ARTIST_PLUS_NAME | ||
16176 | desc: in Settings | ||
16177 | user: core | ||
16178 | <source> | ||
16179 | *: "Artist + Name" | ||
16180 | </source> | ||
16181 | <dest> | ||
16182 | *: "Artist + Ä°sim" | ||
16183 | </dest> | ||
16184 | <voice> | ||
16185 | *: "Artist Ve Ä°sim" | ||
16186 | </voice> | ||
16187 | </phrase> | ||
16188 | <phrase> | ||
16189 | id: LANG_ARTIST_PLUS_YEAR | ||
16190 | desc: in Settings | ||
16191 | user: core | ||
16192 | <source> | ||
16193 | *: "Artist + Year" | ||
16194 | </source> | ||
16195 | <dest> | ||
16196 | *: "Artist + Yıl" | ||
16197 | </dest> | ||
16198 | <voice> | ||
16199 | *: "Artist Ve Yıl" | ||
16200 | </voice> | ||
16201 | </phrase> | ||
16202 | <phrase> | ||
16203 | id: LANG_YEAR_SORT_ORDER | ||
16204 | desc: in Settings | ||
16205 | user: core | ||
16206 | <source> | ||
16207 | *: "Year sort order" | ||
16208 | </source> | ||
16209 | <dest> | ||
16210 | *: "Yıla göre sırala" | ||
16211 | </dest> | ||
16212 | <voice> | ||
16213 | *: "Yıla göre sırala" | ||
16214 | </voice> | ||
16215 | </phrase> | ||
16216 | <phrase> | ||
16217 | id: LANG_SHOW_YEAR_IN_ALBUM_TITLE | ||
16218 | desc: in Settings | ||
16219 | user: core | ||
16220 | <source> | ||
16221 | *: "Show year in album title" | ||
16222 | </source> | ||
16223 | <dest> | ||
16224 | *: "Albüm İsminde Yılı da Yaz" | ||
16225 | </dest> | ||
16226 | <voice> | ||
16227 | *: "Albüm İsminde Yılı da Yaz" | ||
16228 | </voice> | ||
16229 | </phrase> | ||
16230 | <phrase> | ||
16231 | id: LANG_WAIT_FOR_CACHE | ||
16232 | desc: in Settings | ||
16233 | user: core | ||
16234 | <source> | ||
16235 | *: "Cache needs to finish updating first!" | ||
16236 | </source> | ||
16237 | <dest> | ||
16238 | *: "Önbelleğin güncellenmesini bitirmesi gerek önce!" | ||
16239 | </dest> | ||
16240 | <voice> | ||
16241 | *: "Önbelleğin güncellenmesini bitirmesi gerek önce!" | ||
16242 | </voice> | ||
16243 | </phrase> | ||
16244 | <phrase> | ||
16245 | id: LANG_TRACK_INFO | ||
16246 | desc: Track Info Title | ||
16247 | user: core | ||
16248 | <source> | ||
16249 | *: "Track Info" | ||
16250 | </source> | ||
16251 | <dest> | ||
16252 | *: "Parça Bilgisi" | ||
16253 | </dest> | ||
16254 | <voice> | ||
16255 | *: "Parça Bilgisi" | ||
16256 | </voice> | ||
16257 | </phrase> | ||
16258 | <phrase> | ||
16259 | id: LANG_PLAY | ||
16260 | desc: play selected file/directory, in playlist context menu | ||
16261 | user: core | ||
16262 | <source> | ||
16263 | *: "Play" | ||
16264 | </source> | ||
16265 | <dest> | ||
16266 | *: "Oynat" | ||
16267 | </dest> | ||
16268 | <voice> | ||
16269 | *: "Oynat" | ||
16270 | </voice> | ||
16271 | </phrase> | ||
16272 | <phrase> | ||
16273 | id: LANG_PLAY_SHUFFLED | ||
16274 | desc: play selected files in shuffled order, in playlist context menu | ||
16275 | user: core | ||
16276 | <source> | ||
16277 | *: "Play Shuffled" | ||
16278 | </source> | ||
16279 | <dest> | ||
16280 | *: "Karılmış Oynat" | ||
16281 | </dest> | ||
16282 | <voice> | ||
16283 | *: "Karılmış Oynat" | ||
16284 | </voice> | ||
16285 | </phrase> | ||
16286 | <phrase> | ||
16287 | id: LANG_KEEP_CURRENT_TRACK_ON_REPLACE | ||
16288 | desc: used in the playlist settings menu | ||
16289 | user: core | ||
16290 | <source> | ||
16291 | *: "Keep Current Track When Replacing Playlist" | ||
16292 | </source> | ||
16293 | <dest> | ||
16294 | *: "Oynatma Listesi Yenilendiğinde Şuanki Parçayı Tut" | ||
16295 | </dest> | ||
16296 | <voice> | ||
16297 | *: "Oynatma Listesi Yenilendiğinde Şuanki Parçayı Tut" | ||
16298 | </voice> | ||
16299 | </phrase> | ||
16300 | <phrase> | ||
16301 | id: LANG_CLEAR_SETTINGS_ON_HOLD | ||
16302 | desc: in the system sub menu | ||
16303 | user: core | ||
16304 | <source> | ||
16305 | *: none | ||
16306 | clear_settings_on_hold,iriverh10: "Clear settings when reset button is held during startup" | ||
16307 | ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Clear settings when hold switch is on during startup" | ||
16308 | </source> | ||
16309 | <dest> | ||
16310 | *: none | ||
16311 | clear_settings_on_hold,iriverh10: "Başlangıç sırasında Reset tuşu basılı tutulduğunda ayarları sıfırla" | ||
16312 | ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Başlangıç sırasında Hold tuşu basılı tutulduğunda ayarları sıfırla" | ||
16313 | </dest> | ||
16314 | <voice> | ||
16315 | *: none | ||
16316 | clear_settings_on_hold,iriverh10: "Başlangıç sırasında Reset tuşu basılı tutulduğunda ayarları sıfırla" | ||
16317 | ipod4g,ipodcolor,ipodmini1g,ipodmini2g,ipodnano1g,ipodvideo: "Başlangıç sırasında Hold tuşu basılı tutulduğunda ayarları sıfırla" | ||
16318 | </voice> | ||
16319 | </phrase> | ||
16320 | <phrase> | ||
16321 | id: LANG_REWIND_ACROSS_TRACKS | ||
16322 | desc: in playback settings menu | ||
16323 | user: core | ||
16324 | <source> | ||
16325 | *: "Rewind Across Tracks" | ||
16326 | </source> | ||
16327 | <dest> | ||
16328 | *: "Parçalar içerisinde Geriye Sar" | ||
16329 | </dest> | ||
16330 | <voice> | ||
16331 | *: "Parçalar içerisinde Geriye Sar" | ||
16332 | </voice> | ||
16333 | </phrase> | ||
16334 | <phrase> | ||
16335 | id: LANG_SET_AS | ||
16336 | desc: used in the onplay menu | ||
16337 | user: core | ||
16338 | <source> | ||
16339 | *: "Set As..." | ||
16340 | </source> | ||
16341 | <dest> | ||
16342 | *: "Şöyle Ayarlansın..." | ||
16343 | </dest> | ||
16344 | <voice> | ||
16345 | *: "Şöyle Ayarlansın..." | ||
16346 | </voice> | ||
16347 | </phrase> | ||
16348 | <phrase> | ||
16349 | id: LANG_PLAYLIST_DIR | ||
16350 | desc: used in the onplay menu | ||
16351 | user: core | ||
16352 | <source> | ||
16353 | *: "Playlist Directory" | ||
16354 | </source> | ||
16355 | <dest> | ||
16356 | *: "Oynatma Listesi Dizini" | ||
16357 | </dest> | ||
16358 | <voice> | ||
16359 | *: "Oynatma Listesi Dizini" | ||
16360 | </voice> | ||
16361 | </phrase> | ||
16362 | <phrase> | ||
16363 | id: LANG_START_DIR | ||
16364 | desc: used in the onplay menu | ||
16365 | user: core | ||
16366 | <source> | ||
16367 | *: "Start Directory" | ||
16368 | </source> | ||
16369 | <dest> | ||
16370 | *: "Başlangıç Dizini" | ||
16371 | </dest> | ||
16372 | <voice> | ||
16373 | *: "Başlangıç Dizini" | ||
16374 | </voice> | ||
16375 | </phrase> | ||
16376 | <phrase> | ||
16377 | id: LANG_RECORDING_DIR | ||
16378 | desc: used in the onplay menu | ||
16379 | user: core | ||
16380 | <source> | ||
16381 | *: none | ||
16382 | recording: "Recording Directory" | ||
16383 | </source> | ||
16384 | <dest> | ||
16385 | *: none | ||
16386 | recording: "Kayıt etme Dizini" | ||
16387 | </dest> | ||
16388 | <voice> | ||
16389 | *: none | ||
16390 | recording: "Kayıt etme Dizini" | ||
16391 | </voice> | ||
16392 | </phrase> | ||
16393 | <phrase> | ||
16394 | id: LANG_ADD_TO_PL | ||
16395 | desc: used in the onplay menu | ||
16396 | user: core | ||
16397 | <source> | ||
16398 | *: "Add to Playlist..." | ||
16399 | </source> | ||
16400 | <dest> | ||
16401 | *: "Oynatma Listesine ekle..." | ||
16402 | </dest> | ||
16403 | <voice> | ||
16404 | *: "Oynatma Listesine ekle..." | ||
16405 | </voice> | ||
16406 | </phrase> | ||
16407 | <phrase> | ||
16408 | id: LANG_ADD_TO_EXISTING_PL | ||
16409 | desc: used in the onplay menu | ||
16410 | user: core | ||
16411 | <source> | ||
16412 | *: "Add to Existing Playlist" | ||
16413 | </source> | ||
16414 | <dest> | ||
16415 | *: "Var olan bir Oynatma Listesine ekle" | ||
16416 | </dest> | ||
16417 | <voice> | ||
16418 | *: "Var olan bir Oynatma Listesine ekle" | ||
16419 | </voice> | ||
16420 | </phrase> | ||
16421 | <phrase> | ||
16422 | id: LANG_PLAYING_NEXT | ||
16423 | desc: used in the onplay menu | ||
16424 | user: core | ||
16425 | <source> | ||
16426 | *: "Playing Next..." | ||
16427 | </source> | ||
16428 | <dest> | ||
16429 | *: "Bir Sonraki Oynanıyor..." | ||
16430 | </dest> | ||
16431 | <voice> | ||
16432 | *: "Bir Sonraki Oynanıyor..." | ||
16433 | </voice> | ||
16434 | </phrase> | ||
16435 | <phrase> | ||
16436 | id: LANG_PLAY_NEXT | ||
16437 | desc: used in the onplay menu | ||
16438 | user: core | ||
16439 | <source> | ||
16440 | *: "Play Next" | ||
16441 | </source> | ||
16442 | <dest> | ||
16443 | *: "Bir Sonrakini Oynat" | ||
16444 | </dest> | ||
16445 | <voice> | ||
16446 | *: "Bir Sonrakini Oynat" | ||
16447 | </voice> | ||
16448 | </phrase> | ||
16449 | <phrase> | ||
16450 | id: LANG_ADD_SHUFFLED | ||
16451 | desc: used in the onplay menu | ||
16452 | user: core | ||
16453 | <source> | ||
16454 | *: "Add Shuffled" | ||
16455 | </source> | ||
16456 | <dest> | ||
16457 | *: "Karılmışı Ekle" | ||
16458 | </dest> | ||
16459 | <voice> | ||
16460 | *: "Karılmışı Ekle" | ||
16461 | </voice> | ||
16462 | </phrase> | ||
16463 | <phrase> | ||
16464 | id: LANG_PLAY_LAST | ||
16465 | desc: used in the onplay menu | ||
16466 | user: core | ||
16467 | <source> | ||
16468 | *: "Play Last" | ||
16469 | </source> | ||
16470 | <dest> | ||
16471 | *: "Sonuncuyu Oynat" | ||
16472 | </dest> | ||
16473 | <voice> | ||
16474 | *: "Sonuncuyu Oynat" | ||
16475 | </voice> | ||
16476 | </phrase> | ||
16477 | <phrase> | ||
16478 | id: LANG_PLAY_LAST_SHUFFLED | ||
16479 | desc: used in the onplay menu | ||
16480 | user: core | ||
16481 | <source> | ||
16482 | *: "Play Last Shuffled" | ||
16483 | </source> | ||
16484 | <dest> | ||
16485 | *: "Son Karılmış olanı Oynat" | ||
16486 | </dest> | ||
16487 | <voice> | ||
16488 | *: "Son Karılmış olanı Oynat" | ||
16489 | </voice> | ||
16490 | </phrase> | ||
16491 | <phrase> | ||
16492 | id: LANG_VOLUME_ADJUST_MODE | ||
16493 | desc: in system settings | ||
16494 | user: core | ||
16495 | <source> | ||
16496 | *: none | ||
16497 | perceptual_volume: "Volume Adjustment Mode" | ||
16498 | </source> | ||
16499 | <dest> | ||
16500 | *: none | ||
16501 | perceptual_volume: "Ses Seviyesi Ayarlaması Modu" | ||
16502 | </dest> | ||
16503 | <voice> | ||
16504 | *: none | ||
16505 | perceptual_volume: "Ses Seviyesi Ayarlaması Modu" | ||
16506 | </voice> | ||
16507 | </phrase> | ||
16508 | <phrase> | ||
16509 | id: LANG_VOLUME_ADJUST_NORM_STEPS | ||
16510 | desc: in system settings | ||
16511 | user: core | ||
16512 | <source> | ||
16513 | *: none | ||
16514 | perceptual_volume: "Number of Volume Steps" | ||
16515 | </source> | ||
16516 | <dest> | ||
16517 | *: none | ||
16518 | perceptual_volume: "Ses Seviyesi Adımı Miktarı" | ||
16519 | </dest> | ||
16520 | <voice> | ||
16521 | *: none | ||
16522 | perceptual_volume: "Ses Seviyesi Adımı Miktarı" | ||
16523 | </voice> | ||
16524 | </phrase> | ||
16525 | <phrase> | ||
16526 | id: LANG_PERCEPTUAL | ||
16527 | desc: in system settings -> volume adjustment mode | ||
16528 | user: core | ||
16529 | <source> | ||
16530 | *: none | ||
16531 | perceptual_volume: "Perceptual" | ||
16532 | </source> | ||
16533 | <dest> | ||
16534 | *: none | ||
16535 | perceptual_volume: "Algısal" | ||
16536 | </dest> | ||
16537 | <voice> | ||
16538 | *: none | ||
16539 | perceptual_volume: "Algısal" | ||
16540 | </voice> | ||
16541 | </phrase> | ||
16542 | <phrase> | ||
16543 | id: LANG_SHOW_TRACKS_WHILE_BROWSING | ||
16544 | desc: in PictureFlow Main Menu | ||
16545 | user: core | ||
16546 | <source> | ||
16547 | *: "Show Tracks While Browsing" | ||
16548 | </source> | ||
16549 | <dest> | ||
16550 | *: "Tarar iken Parçaları Göster" | ||
16551 | </dest> | ||
16552 | <voice> | ||
16553 | *: "Tarar iken Parçaları Göster" | ||
16554 | </voice> | ||
16555 | </phrase> | ||
16556 | <phrase> | ||
16557 | id: LANG_GOTO_LAST_ALBUM | ||
16558 | desc: in PictureFlow Main Menu | ||
16559 | user: core | ||
16560 | <source> | ||
16561 | *: "Go to Last Album" | ||
16562 | </source> | ||
16563 | <dest> | ||
16564 | *: "Sondaki Albüme Git" | ||
16565 | </dest> | ||
16566 | <voice> | ||
16567 | *: "Sondaki Albüme Git" | ||
16568 | </voice> | ||
16569 | </phrase> | ||
16570 | <phrase> | ||
16571 | id: LANG_DATABASE_DIR | ||
16572 | desc: in database settings menu | ||
16573 | user: core | ||
16574 | <source> | ||
16575 | *: "Database Directory" | ||
16576 | </source> | ||
16577 | <dest> | ||
16578 | *: "Veritabanı Dizini" | ||
16579 | </dest> | ||
16580 | <voice> | ||
16581 | *: "Veritabanı Dizini" | ||
16582 | </voice> | ||
16583 | </phrase> | ||
16584 | <phrase> | ||
16585 | id: LANG_REMOVE_QUEUED_TRACKS | ||
16586 | desc: Confirmation dialog | ||
16587 | user: core | ||
16588 | <source> | ||
16589 | *: "Remove Queued Tracks?" | ||
16590 | </source> | ||
16591 | <dest> | ||
16592 | *: "Sıralanmış Parçaları Silmeyi lütfeder misin?" | ||
16593 | </dest> | ||
16594 | <voice> | ||
16595 | *: "Sıralanmış Parçaları Silmeyi lütfeder misin?" | ||
16596 | </voice> | ||
16597 | </phrase> | ||
16598 | <phrase> | ||
16599 | id: LANG_QUICK_IGNORE_DIRACHE | ||
16600 | desc: in Settings | ||
16601 | user: core | ||
16602 | <source> | ||
16603 | *: "Quick (Ignore Directory Cache)" | ||
16604 | </source> | ||
16605 | <dest> | ||
16606 | *: "Hızlı (Dizin Önbelleğini Görmezden gelerek)" | ||
16607 | </dest> | ||
16608 | <voice> | ||
16609 | *: "Hızlı (Dizin Önbelleğini Görmezden gelerek)" | ||
16610 | </voice> | ||
16611 | </phrase> | ||
16612 | <phrase> | ||
16613 | id: LANG_WPS | ||
16614 | desc: in Settings | ||
16615 | user: core | ||
16616 | <source> | ||
16617 | *: "What's Playing Screen" | ||
16618 | </source> | ||
16619 | <dest> | ||
16620 | *: "Ne oynuyor? Ekranı" | ||
16621 | </dest> | ||
16622 | <voice> | ||
16623 | *: "Ne oynuyor? Ekranı" | ||
16624 | </voice> | ||
16625 | </phrase> | ||
16626 | <phrase> | ||
16627 | id: LANG_DEFAULT_BROWSER | ||
16628 | desc: in Settings | ||
16629 | user: core | ||
16630 | <source> | ||
16631 | *: "Default Browser" | ||
16632 | </source> | ||
16633 | <dest> | ||
16634 | *: "Varsayılan Tarayıcı" | ||
16635 | </dest> | ||
16636 | <voice> | ||
16637 | *: "Varsayılan Tarayıcı" | ||
16638 | </voice> | ||
16639 | </phrase> | ||
16640 | <phrase> | ||
16641 | id: LANG_AMAZE_MENU | ||
16642 | desc: Amaze game | ||
16643 | user: core | ||
16644 | <source> | ||
16645 | *: "Amaze Main Menu" | ||
16646 | </source> | ||
16647 | <dest> | ||
16648 | *: "Amaze Ana Menü" | ||
16649 | </dest> | ||
16650 | <voice> | ||
16651 | *: "Amaze Ana Menü" | ||
16652 | </voice> | ||
16653 | </phrase> | ||
16654 | <phrase> | ||
16655 | id: LANG_SET_MAZE_SIZE | ||
16656 | desc: Maze size in Amaze game | ||
16657 | user: core | ||
16658 | <source> | ||
16659 | *: "Set Maze Size" | ||
16660 | </source> | ||
16661 | <dest> | ||
16662 | *: "Labirent boyutunu Ayarla" | ||
16663 | </dest> | ||
16664 | <voice> | ||
16665 | *: "Labirent boyutunu Ayarla" | ||
16666 | </voice> | ||
16667 | </phrase> | ||
16668 | <phrase> | ||
16669 | id: LANG_VIEW_MAP | ||
16670 | desc: Map in Amaze game | ||
16671 | user: core | ||
16672 | <source> | ||
16673 | *: "View Map" | ||
16674 | </source> | ||
16675 | <dest> | ||
16676 | *: "Haritaya Bak" | ||
16677 | </dest> | ||
16678 | <voice> | ||
16679 | *: "Haritaya Bak" | ||
16680 | </voice> | ||
16681 | </phrase> | ||
16682 | <phrase> | ||
16683 | id: LANG_SHOW_COMPASS | ||
16684 | desc: Compass in Amaze game | ||
16685 | user: core | ||
16686 | <source> | ||
16687 | *: "Show Compass" | ||
16688 | </source> | ||
16689 | <dest> | ||
16690 | *: "Pusulayı Göster" | ||
16691 | </dest> | ||
16692 | <voice> | ||
16693 | *: "Pusulayı Göster" | ||
16694 | </voice> | ||
16695 | </phrase> | ||
16696 | <phrase> | ||
16697 | id: LANG_SHOW_MAP | ||
16698 | desc: Map in Amaze game | ||
16699 | user: core | ||
16700 | <source> | ||
16701 | *: "Show Map" | ||
16702 | </source> | ||
16703 | <dest> | ||
16704 | *: "Haritayı Göster" | ||
16705 | </dest> | ||
16706 | <voice> | ||
16707 | *: "Haritayı Göster" | ||
16708 | </voice> | ||
16709 | </phrase> | ||
16710 | <phrase> | ||
16711 | id: LANG_REMEMBER_PATH | ||
16712 | desc: Map in Amaze game | ||
16713 | user: core | ||
16714 | <source> | ||
16715 | *: "Remember Path" | ||
16716 | </source> | ||
16717 | <dest> | ||
16718 | *: "Patikayı Hatırla" | ||
16719 | </dest> | ||
16720 | <voice> | ||
16721 | *: "Patikayı Hatırla" | ||
16722 | </voice> | ||
16723 | </phrase> | ||
16724 | <phrase> | ||
16725 | id: LANG_USE_LARGE_TILES | ||
16726 | desc: Map in Amaze game | ||
16727 | user: core | ||
16728 | <source> | ||
16729 | *: "Use Large Tiles" | ||
16730 | </source> | ||
16731 | <dest> | ||
16732 | *: "Büyük Karolar Kullan" | ||
16733 | </dest> | ||
16734 | <voice> | ||
16735 | *: "Büyük Karolar Kullan" | ||
16736 | </voice> | ||
16737 | </phrase> | ||
16738 | <phrase> | ||
16739 | id: LANG_SHOW_SOLUTION | ||
16740 | desc: Map in Amaze game | ||
16741 | user: core | ||
16742 | <source> | ||
16743 | *: "Show Solution" | ||
16744 | </source> | ||
16745 | <dest> | ||
16746 | *: "Çözümü Göster" | ||
16747 | </dest> | ||
16748 | <voice> | ||
16749 | *: "Çözümü Göster" | ||
16750 | </voice> | ||
16751 | </phrase> | ||
16752 | <phrase> | ||
16753 | id: LANG_QUIT_WITHOUT_SAVING | ||
16754 | desc: | ||
16755 | user: core | ||
16756 | <source> | ||
16757 | *: "Quit without saving" | ||
16758 | </source> | ||
16759 | <dest> | ||
16760 | *: "Kaydetmeden Çık" | ||
16761 | </dest> | ||
16762 | <voice> | ||
16763 | *: "Kaydetmeden Çık" | ||
16764 | </voice> | ||
16765 | </phrase> | ||
16766 | <phrase> | ||
16767 | id: LANG_GENERATING_MAZE | ||
16768 | desc: Amaze game | ||
16769 | user: core | ||
16770 | <source> | ||
16771 | *: "Generating maze..." | ||
16772 | </source> | ||
16773 | <dest> | ||
16774 | *: "Labirent OluÅŸturuluyor..." | ||
16775 | </dest> | ||
16776 | <voice> | ||
16777 | *: "Labirent OluÅŸturuluyor..." | ||
16778 | </voice> | ||
16779 | </phrase> | ||
16780 | <phrase> | ||
16781 | id: LANG_YOU_WIN | ||
16782 | desc: Success in game | ||
16783 | user: core | ||
16784 | <source> | ||
16785 | *: "You win!" | ||
16786 | </source> | ||
16787 | <dest> | ||
16788 | *: "Kazandın!" | ||
16789 | </dest> | ||
16790 | <voice> | ||
16791 | *: "Kazandın!" | ||
16792 | </voice> | ||
16793 | </phrase> | ||
16794 | <phrase> | ||
16795 | id: LANG_YOU_CHEATED | ||
16796 | desc: Cheated in game | ||
16797 | user: core | ||
16798 | <source> | ||
16799 | *: "You cheated!" | ||
16800 | </source> | ||
16801 | <dest> | ||
16802 | *: "Hile yaptın!" | ||
16803 | </dest> | ||
16804 | <voice> | ||
16805 | *: "Hile yaptın!" | ||
16806 | </voice> | ||
16807 | </phrase> | ||
16808 | <phrase> | ||
16809 | id: LANG_DIFFICULTY_EASY | ||
16810 | desc: Game difficulty | ||
16811 | user: core | ||
16812 | <source> | ||
16813 | *: "Easy" | ||
16814 | </source> | ||
16815 | <dest> | ||
16816 | *: "Kolay" | ||
16817 | </dest> | ||
16818 | <voice> | ||
16819 | *: "Kolay" | ||
16820 | </voice> | ||
16821 | </phrase> | ||
16822 | <phrase> | ||
16823 | id: LANG_DIFFICULTY_MEDIUM | ||
16824 | desc: Game difficulty | ||
16825 | user: core | ||
16826 | <source> | ||
16827 | *: "Medium" | ||
16828 | </source> | ||
16829 | <dest> | ||
16830 | *: "Orta" | ||
16831 | </dest> | ||
16832 | <voice> | ||
16833 | *: "Orta" | ||
16834 | </voice> | ||
16835 | </phrase> | ||
16836 | <phrase> | ||
16837 | id: LANG_DIFFICULTY_HARD | ||
16838 | desc: Game difficulty | ||
16839 | user: core | ||
16840 | <source> | ||
16841 | *: "Hard" | ||
16842 | </source> | ||
16843 | <dest> | ||
16844 | *: "Zor" | ||
16845 | </dest> | ||
16846 | <voice> | ||
16847 | *: "Zor" | ||
16848 | </voice> | ||
16849 | </phrase> | ||
16850 | <phrase> | ||
16851 | id: LANG_DIFFICULTY_EXPERT | ||
16852 | desc: Game difficulty | ||
16853 | user: core | ||
16854 | <source> | ||
16855 | *: "Expert" | ||
16856 | </source> | ||
16857 | <dest> | ||
16858 | *: "Çok Zor" | ||
16859 | </dest> | ||
16860 | <voice> | ||
16861 | *: "Çok Zor" | ||
16862 | </voice> | ||
16863 | </phrase> | ||
diff --git a/apps/open_plugin.c b/apps/open_plugin.c index afe59b38e3..8b5fce1d29 100644 --- a/apps/open_plugin.c +++ b/apps/open_plugin.c | |||
@@ -26,16 +26,12 @@ | |||
26 | #include "pathfuncs.h" | 26 | #include "pathfuncs.h" |
27 | #include "splash.h" | 27 | #include "splash.h" |
28 | #include "lang.h" | 28 | #include "lang.h" |
29 | #include "filetypes.h" | ||
29 | 30 | ||
30 | /* Define LOGF_ENABLE to enable logf output in this file */ | 31 | /* Define LOGF_ENABLE to enable logf output in this file */ |
31 | /*#define LOGF_ENABLE*/ | 32 | /*#define LOGF_ENABLE*/ |
32 | #include "logf.h" | 33 | #include "logf.h" |
33 | 34 | ||
34 | #define ROCK_EXT "rock" | ||
35 | #define ROCK_LEN sizeof(ROCK_EXT) | ||
36 | #define OP_EXT "opx" | ||
37 | #define OP_LEN sizeof(OP_EXT) | ||
38 | |||
39 | static const uint32_t open_plugin_csum = OPEN_PLUGIN_CHECKSUM; | 35 | static const uint32_t open_plugin_csum = OPEN_PLUGIN_CHECKSUM; |
40 | 36 | ||
41 | static const int op_entry_sz = sizeof(struct open_plugin_entry_t); | 37 | static const int op_entry_sz = sizeof(struct open_plugin_entry_t); |
@@ -279,7 +275,6 @@ struct open_plugin_entry_t * open_plugin_get_entry(void) | |||
279 | */ | 275 | */ |
280 | uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *parameter) | 276 | uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *parameter) |
281 | { | 277 | { |
282 | size_t len; | ||
283 | uint32_t hash; | 278 | uint32_t hash; |
284 | int32_t lang_id; | 279 | int32_t lang_id; |
285 | char *pos = "\0"; | 280 | char *pos = "\0"; |
@@ -306,12 +301,15 @@ uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *p | |||
306 | 301 | ||
307 | while (plugin) | 302 | while (plugin) |
308 | { | 303 | { |
304 | int fattr = filetype_get_attr(plugin); | ||
305 | |||
309 | /* name */ | 306 | /* name */ |
310 | if (path_basename(plugin, (const char **)&pos) == 0) | 307 | if (path_basename(plugin, (const char **)&pos) == 0) |
311 | pos = "\0"; | 308 | pos = "\0"; |
312 | 309 | ||
313 | len = strlcpy(op_entry->name, pos, OPEN_PLUGIN_NAMESZ); | 310 | strlcpy(op_entry->name, pos, OPEN_PLUGIN_NAMESZ); |
314 | if (len > ROCK_LEN && strcasecmp(&(pos[len-ROCK_LEN]), "." ROCK_EXT) == 0) | 311 | |
312 | if (fattr == FILE_ATTR_ROCK) | ||
315 | { | 313 | { |
316 | /* path */ | 314 | /* path */ |
317 | strmemccpy(op_entry->path, plugin, OPEN_PLUGIN_BUFSZ); | 315 | strmemccpy(op_entry->path, plugin, OPEN_PLUGIN_BUFSZ); |
@@ -320,11 +318,21 @@ uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *p | |||
320 | parameter = ""; | 318 | parameter = ""; |
321 | strmemccpy(op_entry->param, parameter, OPEN_PLUGIN_BUFSZ); | 319 | strmemccpy(op_entry->param, parameter, OPEN_PLUGIN_BUFSZ); |
322 | } | 320 | } |
323 | else if (len > OP_LEN && strcasecmp(&(pos[len-OP_LEN]), "." OP_EXT) == 0) | 321 | else if (fattr == FILE_ATTR_OPX) |
324 | { | 322 | { |
325 | /* get the entry from the opx file */ | 323 | /* get the entry from the opx file */ |
326 | op_load_entry(0, OPEN_PLUGIN_LANG_IGNORE, op_entry, plugin); | 324 | op_load_entry(0, OPEN_PLUGIN_LANG_IGNORE, op_entry, plugin); |
327 | } | 325 | } |
326 | else if(!parameter && lang_id != LANG_SHORTCUTS) | ||
327 | { | ||
328 | strmemccpy(op_entry->param, plugin, OPEN_PLUGIN_BUFSZ); | ||
329 | plugin = filetype_get_viewer(op_entry->path, OPEN_PLUGIN_BUFSZ, plugin); | ||
330 | if (!plugin) | ||
331 | { | ||
332 | logf("OP no plugin found to run %s", op_entry->param); | ||
333 | break; | ||
334 | } | ||
335 | } | ||
328 | else | 336 | else |
329 | { | 337 | { |
330 | break; | 338 | break; |
@@ -349,6 +357,8 @@ uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *p | |||
349 | static bool callback_show_item(char *name, int attr, struct tree_context *tc) | 357 | static bool callback_show_item(char *name, int attr, struct tree_context *tc) |
350 | { | 358 | { |
351 | (void)name; | 359 | (void)name; |
360 | (void)tc; | ||
361 | #if 0 | ||
352 | if(attr & ATTR_DIRECTORY) | 362 | if(attr & ATTR_DIRECTORY) |
353 | { | 363 | { |
354 | if (strstr(tc->currdir, PLUGIN_DIR) != NULL) | 364 | if (strstr(tc->currdir, PLUGIN_DIR) != NULL) |
@@ -364,6 +374,9 @@ static bool callback_show_item(char *name, int attr, struct tree_context *tc) | |||
364 | return true; | 374 | return true; |
365 | } | 375 | } |
366 | return false; | 376 | return false; |
377 | #endif | ||
378 | return attr & ATTR_DIRECTORY || | ||
379 | (filetype_supported(attr) && (attr & FILE_ATTR_AUDIO) != FILE_ATTR_AUDIO); | ||
367 | } | 380 | } |
368 | 381 | ||
369 | /* open_plugin_browse() | 382 | /* open_plugin_browse() |
diff --git a/apps/plugin.c b/apps/plugin.c index bd93cb8b5c..931b8f1fd4 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -837,6 +837,7 @@ static const struct plugin_api rockbox_api = { | |||
837 | #endif | 837 | #endif |
838 | playlist_get_first_index, | 838 | playlist_get_first_index, |
839 | playlist_get_display_index, | 839 | playlist_get_display_index, |
840 | filetype_get_plugin, | ||
840 | }; | 841 | }; |
841 | 842 | ||
842 | static int plugin_buffer_handle; | 843 | static int plugin_buffer_handle; |
diff --git a/apps/plugin.h b/apps/plugin.h index 24eb28b2bd..df519f28cf 100644 --- a/apps/plugin.h +++ b/apps/plugin.h | |||
@@ -974,6 +974,7 @@ struct plugin_api { | |||
974 | #endif | 974 | #endif |
975 | int (*playlist_get_first_index)(const struct playlist_info* playlist); | 975 | int (*playlist_get_first_index)(const struct playlist_info* playlist); |
976 | int (*playlist_get_display_index)(void); | 976 | int (*playlist_get_display_index)(void); |
977 | char* (*filetype_get_plugin)(int attr, char *buffer, size_t buffer_len); | ||
977 | }; | 978 | }; |
978 | 979 | ||
979 | /* plugin header */ | 980 | /* plugin header */ |
diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES index 28b8b67c68..c91d02ade8 100644 --- a/apps/plugins/CATEGORIES +++ b/apps/plugins/CATEGORIES | |||
@@ -57,7 +57,6 @@ lastfm_scrobbler_viewer,viewers | |||
57 | logo,demos | 57 | logo,demos |
58 | lrcplayer,apps | 58 | lrcplayer,apps |
59 | lua,viewers | 59 | lua,viewers |
60 | lua_scripts,demos | ||
61 | fractals,demos | 60 | fractals,demos |
62 | main_menu_config,apps | 61 | main_menu_config,apps |
63 | matrix,demos | 62 | matrix,demos |
@@ -82,6 +81,7 @@ pacbox,games | |||
82 | pdbox,viewers | 81 | pdbox,viewers |
83 | pegbox,games | 82 | pegbox,games |
84 | periodic_table,apps | 83 | periodic_table,apps |
84 | picross,games | ||
85 | pictureflow,demos | 85 | pictureflow,demos |
86 | pitch_detector,apps | 86 | pitch_detector,apps |
87 | pitch_screen,viewers | 87 | pitch_screen,viewers |
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index edc801362f..8028758ef0 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES | |||
@@ -116,7 +116,7 @@ metronome.c | |||
116 | /* Lua needs at least 160 KB to work in */ | 116 | /* Lua needs at least 160 KB to work in */ |
117 | #if PLUGIN_BUFFER_SIZE >= 0x80000 | 117 | #if PLUGIN_BUFFER_SIZE >= 0x80000 |
118 | boomshine.lua | 118 | boomshine.lua |
119 | lua_scripts.lua | 119 | picross.lua |
120 | #ifdef HAVE_LCD_COLOR | 120 | #ifdef HAVE_LCD_COLOR |
121 | pixel-painter.lua | 121 | pixel-painter.lua |
122 | #endif /* HAVE_LCD_COLOR */ | 122 | #endif /* HAVE_LCD_COLOR */ |
diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index b9c18b5fd9..7884989d1c 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS | |||
@@ -87,4 +87,5 @@ mpegplayer | |||
87 | #if PLUGIN_BUFFER_SIZE >= 0x80000 | 87 | #if PLUGIN_BUFFER_SIZE >= 0x80000 |
88 | lua | 88 | lua |
89 | lua_scripts | 89 | lua_scripts |
90 | picross | ||
90 | #endif | 91 | #endif |
diff --git a/apps/plugins/imageviewer/imageviewer.c b/apps/plugins/imageviewer/imageviewer.c index d1a512c4fd..9d5aea7f15 100644 --- a/apps/plugins/imageviewer/imageviewer.c +++ b/apps/plugins/imageviewer/imageviewer.c | |||
@@ -1033,7 +1033,7 @@ enum plugin_status plugin_start(const void* parameter) | |||
1033 | long greysize; /* helper */ | 1033 | long greysize; /* helper */ |
1034 | #endif | 1034 | #endif |
1035 | 1035 | ||
1036 | if(!parameter) return PLUGIN_ERROR; | 1036 | if(!parameter) {rb->splash(HZ*2, "No file"); return PLUGIN_ERROR; } |
1037 | 1037 | ||
1038 | rb->strcpy(np_file, parameter); | 1038 | rb->strcpy(np_file, parameter); |
1039 | if (get_image_type(np_file, false) == IMAGE_UNKNOWN) | 1039 | if (get_image_type(np_file, false) == IMAGE_UNKNOWN) |
@@ -1051,8 +1051,6 @@ enum plugin_status plugin_start(const void* parameter) | |||
1051 | 1051 | ||
1052 | get_pic_list(); | 1052 | get_pic_list(); |
1053 | 1053 | ||
1054 | if(!entries) return PLUGIN_ERROR; | ||
1055 | |||
1056 | #ifdef USEGSLIB | 1054 | #ifdef USEGSLIB |
1057 | if (!grey_init(buf, buf_size, GREY_ON_COP, | 1055 | if (!grey_init(buf, buf_size, GREY_ON_COP, |
1058 | LCD_WIDTH, LCD_HEIGHT, &greysize)) | 1056 | LCD_WIDTH, LCD_HEIGHT, &greysize)) |
diff --git a/apps/plugins/lua_scripts/dbgettags.lua b/apps/plugins/lua/include_lua/dbgettags.lua index 8e9f26393d..8e9f26393d 100644 --- a/apps/plugins/lua_scripts/dbgettags.lua +++ b/apps/plugins/lua/include_lua/dbgettags.lua | |||
diff --git a/apps/plugins/lua/include_lua/draw_poly.lua b/apps/plugins/lua/include_lua/draw_poly.lua index 23e02d0955..d5bc83ae39 100644 --- a/apps/plugins/lua/include_lua/draw_poly.lua +++ b/apps/plugins/lua/include_lua/draw_poly.lua | |||
@@ -46,7 +46,9 @@ local _poly = {} do | |||
46 | local flood_fill | 46 | local flood_fill |
47 | 47 | ||
48 | -- draws a non-filled figure based on points in t-points | 48 | -- draws a non-filled figure based on points in t-points |
49 | local function polyline(img, x, y, t_pts, color, bClosed, bClip, scale_x, scale_y) | 49 | local function polyline(img, x, y, t_pts, color, bClosed, bClip, scale_x, scale_y, b_size_only) |
50 | local draw_fn = _line | ||
51 | if b_size_only == true then draw_fn = function() end end | ||
50 | scale_x = scale_x or 1 | 52 | scale_x = scale_x or 1 |
51 | scale_y = scale_y or 1 | 53 | scale_y = scale_y or 1 |
52 | 54 | ||
@@ -69,8 +71,7 @@ local _poly = {} do | |||
69 | else | 71 | else |
70 | pt2 = {t_pts[i] * scale_x, t_pts[i + 1] * scale_y} | 72 | pt2 = {t_pts[i] * scale_x, t_pts[i + 1] * scale_y} |
71 | end-- first and last point | 73 | end-- first and last point |
72 | 74 | draw_fn(img, pt1[1] + x, pt1[2] + y, pt2[1] + x, pt2[2] + y, color, bClip) | |
73 | _line(img, pt1[1] + x, pt1[2] + y, pt2[1] + x, pt2[2] + y, color, bClip) | ||
74 | if pt1[1] > max_x then max_x = pt1[1] end | 75 | if pt1[1] > max_x then max_x = pt1[1] end |
75 | if pt1[2] > max_y then max_y = pt1[2] end | 76 | if pt1[2] > max_y then max_y = pt1[2] end |
76 | end | 77 | end |
@@ -80,12 +81,12 @@ local _poly = {} do | |||
80 | end | 81 | end |
81 | 82 | ||
82 | -- draws a closed figure based on points in t_pts | 83 | -- draws a closed figure based on points in t_pts |
83 | _poly.polygon = function(img, x, y, t_pts, color, fillcolor, bClip, scale_x, scale_y) | 84 | _poly.polygon = function(img, x, y, t_pts, color, fillcolor, bClip, scale_x, scale_y, b_size_only) |
84 | scale_x = scale_x or 1 | 85 | scale_x = scale_x or 1 |
85 | scale_y = scale_y or 1 | 86 | scale_y = scale_y or 1 |
86 | if #t_pts < 2 then error("not enough points", 3) end | 87 | if #t_pts < 2 then error("not enough points", 3) end |
87 | 88 | ||
88 | if fillcolor then | 89 | if fillcolor and b_size_only ~= true then |
89 | flood_fill = flood_fill or require("draw_floodfill") | 90 | flood_fill = flood_fill or require("draw_floodfill") |
90 | local x_min, x_max = 0, 0 | 91 | local x_min, x_max = 0, 0 |
91 | local y_min, y_max = 0, 0 | 92 | local y_min, y_max = 0, 0 |
@@ -119,7 +120,7 @@ local _poly = {} do | |||
119 | _NIL, _NIL, _NIL, _NIL, bClip, BSAND, fillcolor) | 120 | _NIL, _NIL, _NIL, _NIL, bClip, BSAND, fillcolor) |
120 | end | 121 | end |
121 | 122 | ||
122 | polyline(img, x, y, t_pts, color, true, bClip, scale_x, scale_y) | 123 | return polyline(img, x, y, t_pts, color, true, bClip, scale_x, scale_y, b_size_only) |
123 | end | 124 | end |
124 | 125 | ||
125 | -- expose internal functions to the outside through _poly table | 126 | -- expose internal functions to the outside through _poly table |
diff --git a/apps/plugins/lua_scripts/filebrowse.lua b/apps/plugins/lua/include_lua/filebrowse.lua index 0640ec3764..0640ec3764 100755 --- a/apps/plugins/lua_scripts/filebrowse.lua +++ b/apps/plugins/lua/include_lua/filebrowse.lua | |||
diff --git a/apps/plugins/lua_scripts/fileviewers.lua b/apps/plugins/lua/include_lua/fileviewers.lua index c686f3eeda..c686f3eeda 100755 --- a/apps/plugins/lua_scripts/fileviewers.lua +++ b/apps/plugins/lua/include_lua/fileviewers.lua | |||
diff --git a/apps/plugins/lua/lapi.c b/apps/plugins/lua/lapi.c index 6426cd94a9..120f8c8313 100644 --- a/apps/plugins/lua/lapi.c +++ b/apps/plugins/lua/lapi.c | |||
@@ -1057,8 +1057,11 @@ static const char *aux_upvalue (StkId fi, int n, TValue **val) { | |||
1057 | } | 1057 | } |
1058 | else { | 1058 | else { |
1059 | Proto *p = f->l.p; | 1059 | Proto *p = f->l.p; |
1060 | if (!(1 <= n && n <= p->sizeupvalues)) return NULL; | 1060 | if (!(1 <= n && n <= p->nups)) // not a valid upvalue |
1061 | return NULL; | ||
1061 | *val = f->l.upvals[n-1]->v; | 1062 | *val = f->l.upvals[n-1]->v; |
1063 | if (!(1 <= n && n <= p->sizeupvalues)) // don't have a name for this upvalue | ||
1064 | return ""; | ||
1062 | return getstr(p->upvalues[n-1]); | 1065 | return getstr(p->upvalues[n-1]); |
1063 | } | 1066 | } |
1064 | } | 1067 | } |
diff --git a/apps/plugins/lua/lua.make b/apps/plugins/lua/lua.make index 60dfd24cdd..c85182880b 100644 --- a/apps/plugins/lua/lua.make +++ b/apps/plugins/lua/lua.make | |||
@@ -16,14 +16,7 @@ LUA_OBJ := $(call c2obj, $(LUA_SRC)) | |||
16 | OTHER_SRC += $(LUA_SRC) | 16 | OTHER_SRC += $(LUA_SRC) |
17 | 17 | ||
18 | LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua | 18 | LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua |
19 | LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua \ | 19 | LUA_INCLUDELIST := $(wildcard $(LUA_INCLUDEDIR)/*.lua) |
20 | draw.lua draw_floodfill.lua draw_poly.lua draw_num.lua \ | ||
21 | draw_text.lua files.lua image.lua image_save.lua lcd.lua \ | ||
22 | math_ex.lua print.lua timer.lua playlist.lua pcm.lua \ | ||
23 | sound.lua rbcompat.lua rbsettings.lua poly_points.lua \ | ||
24 | printtable.lua printmenus.lua printsubmenu.lua \ | ||
25 | menubuttons.lua menucoresettings.lua create_kbd_layout.lua \ | ||
26 | temploader.lua) | ||
27 | 20 | ||
28 | ifndef APP_TYPE | 21 | ifndef APP_TYPE |
29 | ROCKS += $(LUA_BUILDDIR)/lua.rock | 22 | ROCKS += $(LUA_BUILDDIR)/lua.rock |
@@ -31,6 +24,7 @@ else | |||
31 | ### simulator | 24 | ### simulator |
32 | ROCKS += $(LUA_BUILDDIR)/lua.rock | 25 | ROCKS += $(LUA_BUILDDIR)/lua.rock |
33 | endif | 26 | endif |
27 | all: $(subst $(LUA_INCLUDEDIR)/,$(LUA_BUILDDIR)/,$(LUA_INCLUDELIST)) | ||
34 | 28 | ||
35 | $(LUA_BUILDDIR)/lua.rock: $(LUA_OBJ) $(TLSFLIB) $(LUA_BUILDDIR)/actions.lua $(LUA_BUILDDIR)/buttons.lua $(LUA_BUILDDIR)/settings.lua \ | 29 | $(LUA_BUILDDIR)/lua.rock: $(LUA_OBJ) $(TLSFLIB) $(LUA_BUILDDIR)/actions.lua $(LUA_BUILDDIR)/buttons.lua $(LUA_BUILDDIR)/settings.lua \ |
36 | $(LUA_BUILDDIR)/rocklib_aux.o $(LUA_BUILDDIR)/rb_defines.lua $(LUA_BUILDDIR)/sound_defines.lua \ | 30 | $(LUA_BUILDDIR)/rocklib_aux.o $(LUA_BUILDDIR)/rb_defines.lua $(LUA_BUILDDIR)/sound_defines.lua \ |
@@ -66,7 +60,7 @@ $(LUA_BUILDDIR)/rocklib_aux.o: $(LUA_BUILDDIR)/rocklib_aux.c | |||
66 | $(call PRINTS,CC $(<F))$(CC) $(INCLUDES) $(PLUGINFLAGS) -I $(LUA_SRCDIR) -c $< -o $@ | 60 | $(call PRINTS,CC $(<F))$(CC) $(INCLUDES) $(PLUGINFLAGS) -I $(LUA_SRCDIR) -c $< -o $@ |
67 | 61 | ||
68 | $(LUA_BUILDDIR)/%.lua: $(LUA_INCLUDEDIR)/%.lua | $(LUA_BUILDDIR) | 62 | $(LUA_BUILDDIR)/%.lua: $(LUA_INCLUDEDIR)/%.lua | $(LUA_BUILDDIR) |
69 | $(call PRINTS,CP $(subst $(LUA_INCLUDEDIR)/,,$<))cp $< $@ | 63 | $(call PRINTS,CP $(notdir $<))cp $< $@ |
70 | 64 | ||
71 | $(LUA_BUILDDIR)/lua.refmap: $(LUA_OBJ) $(TLSFLIB) | 65 | $(LUA_BUILDDIR)/lua.refmap: $(LUA_OBJ) $(TLSFLIB) |
72 | 66 | ||
diff --git a/apps/plugins/lua/luaconf.h b/apps/plugins/lua/luaconf.h index f7dd99b19e..77d4057118 100644 --- a/apps/plugins/lua/luaconf.h +++ b/apps/plugins/lua/luaconf.h | |||
@@ -818,6 +818,7 @@ extern long rb_pow(long, long); | |||
818 | /*else*/ | 818 | /*else*/ |
819 | #define LUA_USER_H "lua_user.h" | 819 | #define LUA_USER_H "lua_user.h" |
820 | #define LUA_DISABLE_BYTECODE | 820 | #define LUA_DISABLE_BYTECODE |
821 | #ifndef SIMULATOR | ||
821 | #define LUA_OPTIMIZE_DEBUG 2 /* Lua Compact Debug -- Terry Ellison 2015 */ | 822 | #define LUA_OPTIMIZE_DEBUG 2 /* Lua Compact Debug -- Terry Ellison 2015 */ |
822 | 823 | #endif | |
823 | #endif | 824 | #endif |
diff --git a/apps/plugins/lua_scripts.lua b/apps/plugins/lua_scripts/lua_scripts.lua index 43593d96b0..331611d389 100644 --- a/apps/plugins/lua_scripts.lua +++ b/apps/plugins/lua_scripts/lua_scripts.lua | |||
@@ -21,7 +21,7 @@ | |||
21 | ****************************************************************************/ | 21 | ****************************************************************************/ |
22 | ]] | 22 | ]] |
23 | 23 | ||
24 | local scrpath = rb.current_path() .. "/lua_scripts/" | 24 | local scrpath = rb.current_path() |
25 | 25 | ||
26 | package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path | 26 | package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path |
27 | require("printmenus") | 27 | require("printmenus") |
@@ -29,7 +29,6 @@ require("printmenus") | |||
29 | rb.actions = nil | 29 | rb.actions = nil |
30 | package.loaded["actions"] = nil | 30 | package.loaded["actions"] = nil |
31 | 31 | ||
32 | local excludedsrc = ";filebrowse.lua;fileviewers.lua;printmenu.lua;dbgettags.lua;" | ||
33 | -------------------------------------------------------------------------------- | 32 | -------------------------------------------------------------------------------- |
34 | local Icon_Plugin = 0x9 | 33 | local Icon_Plugin = 0x9 |
35 | 34 | ||
@@ -47,7 +46,7 @@ local function get_files(path, norecurse, finddir, findfile, f_t, d_t) | |||
47 | if name:len() <= 2 and (name == "." or name == "..") then | 46 | if name:len() <= 2 and (name == "." or name == "..") then |
48 | return false | 47 | return false |
49 | end | 48 | end |
50 | if string.find(excludedsrc, ";" .. name .. ";") then | 49 | if string.sub(name, 1, 1) == '.' then |
51 | return false | 50 | return false |
52 | end | 51 | end |
53 | if string.sub(name, -4) == ".lua" then | 52 | if string.sub(name, -4) == ".lua" then |
diff --git a/apps/plugins/lua_scripts/lua_scripts.make b/apps/plugins/lua_scripts/lua_scripts.make index 2f46f9d74a..9151ab6d1c 100644 --- a/apps/plugins/lua_scripts/lua_scripts.make +++ b/apps/plugins/lua_scripts/lua_scripts.make | |||
@@ -10,7 +10,6 @@ | |||
10 | LUASCR_SRCDIR := $(APPSDIR)/plugins/lua_scripts | 10 | LUASCR_SRCDIR := $(APPSDIR)/plugins/lua_scripts |
11 | LUASCR_BUILDDIR := $(BUILDDIR)/apps/plugins/lua_scripts | 11 | LUASCR_BUILDDIR := $(BUILDDIR)/apps/plugins/lua_scripts |
12 | LUASCRS := $(wildcard $(LUASCR_SRCDIR)/*.lua) | 12 | LUASCRS := $(wildcard $(LUASCR_SRCDIR)/*.lua) |
13 | |||
14 | #DUMMY := $(info [${LUASCRS}]) | 13 | #DUMMY := $(info [${LUASCRS}]) |
15 | 14 | ||
16 | DUMMY : all | 15 | DUMMY : all |
@@ -18,7 +17,6 @@ DUMMY : all | |||
18 | all: $(subst $(LUASCR_SRCDIR)/,$(LUASCR_BUILDDIR)/,$(LUASCRS)) | 17 | all: $(subst $(LUASCR_SRCDIR)/,$(LUASCR_BUILDDIR)/,$(LUASCRS)) |
19 | 18 | ||
20 | $(LUASCR_BUILDDIR)/%.lua: $(LUASCR_SRCDIR)/%.lua | $(LUASCR_BUILDDIR) | 19 | $(LUASCR_BUILDDIR)/%.lua: $(LUASCR_SRCDIR)/%.lua | $(LUASCR_BUILDDIR) |
21 | $(call PRINTS,CP $(subst $(LUASCR_SRCDIR)/,,$<))cp $< $@ | 20 | $(call PRINTS,CP $(subst $(APPSDIR)/,,$<))cp $< $@ |
22 | |||
23 | $(LUASCR_BUILDDIR): | 21 | $(LUASCR_BUILDDIR): |
24 | $(call PRINTS,MKDIR $@)mkdir -p $(LUASCR_BUILDDIR)/ | 22 | $(call PRINTS,MKDIR $@)mkdir -p $(LUASCR_BUILDDIR)/ |
diff --git a/apps/plugins/lua_scripts/stars.lua b/apps/plugins/lua_scripts/stars.lua index 14fae0c4b7..e05007afb6 100644 --- a/apps/plugins/lua_scripts/stars.lua +++ b/apps/plugins/lua_scripts/stars.lua | |||
@@ -17,7 +17,7 @@ | |||
17 | ]]-- | 17 | ]]-- |
18 | --https://nullprogram.com/blog/2011/06/13/ [Infinite Parallax Starfield] | 18 | --https://nullprogram.com/blog/2011/06/13/ [Infinite Parallax Starfield] |
19 | 19 | ||
20 | -- Imports | 20 | -- Imports |
21 | local _clr = require("color") -- clrset, clrinc provides device independent colors | 21 | local _clr = require("color") -- clrset, clrinc provides device independent colors |
22 | local _lcd = require("lcd") -- lcd helper functions | 22 | local _lcd = require("lcd") -- lcd helper functions |
23 | local _draw = require("draw") -- draw all the things (primitives) | 23 | local _draw = require("draw") -- draw all the things (primitives) |
@@ -32,13 +32,13 @@ local BLACK = _clr.set(0, 0, 0, 0) | |||
32 | local RED = _clr.set(WHITE, 100) | 32 | local RED = _clr.set(WHITE, 100) |
33 | local GREEN = _clr.set(WHITE, 0, 100) | 33 | local GREEN = _clr.set(WHITE, 0, 100) |
34 | local BGREEN = _clr.set(WHITE, 0, 255) | 34 | local BGREEN = _clr.set(WHITE, 0, 255) |
35 | local BLUE = _clr.set(WHITE, 0, 0, 100) | 35 | local BLUE = _clr.set(WHITE, 0, 0, 255) |
36 | 36 | ||
37 | local STAR_SEED = 0x9d2c5680; | 37 | local STAR_SEED = 0x811C9DC5; |
38 | local STAR_TILE_SIZE = math.max(rb.LCD_WIDTH, rb.LCD_HEIGHT) * 4; | 38 | local STAR_TILE_SIZE = math.max(rb.LCD_WIDTH, rb.LCD_HEIGHT) * 4; |
39 | local bxor, band, rshift, lshift, arshift = bit.bxor, bit.band, bit.rshift, bit.lshift, bit.arshift | 39 | local bxor, band, rshift, lshift, arshift = bit.bxor, bit.band, bit.rshift, bit.lshift, bit.arshift |
40 | local random, randomseed = math.random, math.randomseed | 40 | local random, randomseed = math.random, math.randomseed |
41 | local start_x, start_y, start_z | 41 | local start_x, start_y, start_z, scale_x, scale_y |
42 | 42 | ||
43 | -- load users coords from file if it exists | 43 | -- load users coords from file if it exists |
44 | local fname = rb.PLUGIN_DATA_DIR .. "/stars.pos" | 44 | local fname = rb.PLUGIN_DATA_DIR .. "/stars.pos" |
@@ -53,6 +53,10 @@ if file then | |||
53 | start_y = tonumber(line) or 0 | 53 | start_y = tonumber(line) or 0 |
54 | elseif v == 3 then | 54 | elseif v == 3 then |
55 | start_z = tonumber(line) or 0 | 55 | start_z = tonumber(line) or 0 |
56 | elseif v == 4 then | ||
57 | scale_x = tonumber(line) or 1 | ||
58 | elseif v == 5 then | ||
59 | scale_y = tonumber(line) or 1 | ||
56 | else | 60 | else |
57 | break; | 61 | break; |
58 | end | 62 | end |
@@ -62,15 +66,15 @@ end | |||
62 | 66 | ||
63 | -- Robert Jenkins' 96 bit Mix Function. | 67 | -- Robert Jenkins' 96 bit Mix Function. |
64 | local function mix (a, b, c) | 68 | local function mix (a, b, c) |
65 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 13))); | 69 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 13))) |
66 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 8))); | 70 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 8))) |
67 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 13))); | 71 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 13))) |
68 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 12))); | 72 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 12))) |
69 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 16))); | 73 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 16))) |
70 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 5))); | 74 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 5))) |
71 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 3))); | 75 | a=a-b; a=a-c; a=bxor(a, (rshift(c, 3))) |
72 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 10))); | 76 | b=b-c; b=b-a; b=bxor(b, (lshift(a, 10))) |
73 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 15))); | 77 | c=c-a; c=c-b; c=bxor(c, (rshift(b, 15))) |
74 | 78 | ||
75 | return c | 79 | return c |
76 | end | 80 | end |
@@ -94,13 +98,13 @@ local function s_bytes_nib(bits, value) | |||
94 | return bbuffer | 98 | return bbuffer |
95 | end | 99 | end |
96 | 100 | ||
97 | --[[ given table t and total elems desired uses random elems of t | 101 | --[[ given table t and total elems desired uses random elems of t |
98 | and random numbers between 1 and max_v if #t < total_elems]] | 102 | and random numbers between 1 and max_v if #t < total_elems]] |
99 | function randomize_table(t, total_elems, max_v) | 103 | function randomize_table(t, total_elems, max_v) |
100 | local rand_t = {} | 104 | local rand_t = {} |
101 | local i = 1 | 105 | local i = 1 |
102 | repeat | 106 | repeat |
103 | local v = t[random(1, total_elems)] | 107 | local v = t[random(i, total_elems)] |
104 | if v then | 108 | if v then |
105 | rand_t[i] = v | 109 | rand_t[i] = v |
106 | else | 110 | else |
@@ -111,21 +115,30 @@ function randomize_table(t, total_elems, max_v) | |||
111 | return rand_t | 115 | return rand_t |
112 | end | 116 | end |
113 | 117 | ||
114 | local function drawship(img, x, y, color, ship_t) | 118 | local function drawship(img, ship_t) |
115 | --_poly.polyline(img, x, y, ship_t, color, true, true) | 119 | --_poly.polyline(img, x, y, ship_t, color, true, true) |
116 | _poly.polygon(img, x, y, ship_t, color, BLACK, true) | 120 | _poly.polygon(img, ship_t.x, ship_t.y, ship_t.disp_t, ship_t.color, ship_t.fillcolor, true) |
117 | end | 121 | end |
118 | 122 | ||
119 | local function draw_astroid(img, x, y, size, shape, color, scale_x, scale_y) | 123 | local function draw_astroid(img, x, y, shape, color, fillcolor, scale_x, scale_y) |
120 | --the random number generator gets seeded with the hash so we get the same figure each time | 124 | --the random number generator gets seeded with the hash so we get the same figure each time |
121 | randomseed(shape) | 125 | randomseed(shape) |
126 | local move_x, move_y | ||
122 | -- we also use the 4 bytes of the hash as 4 coord pairs and randomly generate 8 more (16) half the size (8) | 127 | -- we also use the 4 bytes of the hash as 4 coord pairs and randomly generate 8 more (16) half the size (8) |
123 | local uniq_t = randomize_table(s_bytes_nib(32, shape), 16, 8) | 128 | local uniq_t = randomize_table(s_bytes_nib(32, shape), 16, 8) |
124 | _poly.polyline(img, x, y, uniq_t, color, true, true, scale_x or 1, scale_y or 1) | 129 | move_x, move_y = _poly.polyline(img, 0, 0, uniq_t, color, true, true, scale_x or 1, scale_y or 1, true) |
125 | --_poly.polygon(img, x, y, uniq_t, color, color, true, scale_x or 1, scale_y or 1) --filled figures | 130 | x = x - move_x / 2 |
131 | y = y - move_y / 2 | ||
132 | if fillcolor then | ||
133 | _poly.polygon(img, x, y, uniq_t, color, fillcolor, true, scale_x or 1, scale_y or 1) --filled figures | ||
134 | else | ||
135 | _poly.polyline(img, x, y, uniq_t, color, true, true, scale_x or 1, scale_y or 1) | ||
136 | end | ||
137 | |||
138 | return x, y, move_x, move_y | ||
126 | end | 139 | end |
127 | 140 | ||
128 | local function drawStars (img, xoff, yoff, starscale, color, scale_x, scale_y) | 141 | local function drawStars(img, drawFn, xoff, yoff, starscale, color, scale_x, scale_y) |
129 | local size = STAR_TILE_SIZE / starscale | 142 | local size = STAR_TILE_SIZE / starscale |
130 | local s_x, s_y = scale_x, scale_y | 143 | local s_x, s_y = scale_x, scale_y |
131 | local w, h = rb.LCD_WIDTH, rb.LCD_HEIGHT | 144 | local w, h = rb.LCD_WIDTH, rb.LCD_HEIGHT |
@@ -139,100 +152,245 @@ local function drawStars (img, xoff, yoff, starscale, color, scale_x, scale_y) | |||
139 | for j = sy, h + sy + size*3, size do | 152 | for j = sy, h + sy + size*3, size do |
140 | local hash = mix(STAR_SEED, (i / size), (j / size)) | 153 | local hash = mix(STAR_SEED, (i / size), (j / size)) |
141 | for n = 0, 2 do | 154 | for n = 0, 2 do |
142 | local px = (hash % size) + (i - xoff); | 155 | local px = (hash % size) + (i - xoff) |
143 | hash = arshift(hash, 3) | 156 | hash = arshift(hash, 3) |
144 | 157 | ||
145 | local py = (hash % size) + (j - yoff); | 158 | local py = (hash % size) + (j - yoff) |
146 | hash = arshift(hash, 3) | 159 | hash = arshift(hash, 3) |
147 | |||
148 | if px > 0 and px < w and py > 0 and py < h then | 160 | if px > 0 and px < w and py > 0 and py < h then |
149 | if n > 0 and starscale < 5 then | 161 | drawFn(img, px, py, color, n, hash) |
150 | draw_astroid(img, px, py, n, hash, color, s_x, s_y) | ||
151 | else | ||
152 | if scale_x > 1 then | ||
153 | img:set(px, py, color) | ||
154 | img:set(px + 1, py, color) | ||
155 | elseif scale_y > 1 then | ||
156 | img:set(px, py, color) | ||
157 | img:set(px, py + 1, color) | ||
158 | else | ||
159 | img:set(px, py, color) | ||
160 | end | ||
161 | end | ||
162 | end | 162 | end |
163 | end | 163 | end |
164 | end | 164 | end |
165 | end | 165 | end |
166 | end | 166 | end |
167 | 167 | ||
168 | local function update_lcd() | ||
169 | rb.lcd_puts(0,0, "[Infinite Starfield]") | ||
170 | _lcd:update() | ||
171 | rb.sleep(100) | ||
172 | update_lcd = _lcd.update | ||
173 | end | ||
174 | |||
175 | local backlight_on | ||
176 | local function turn_on_backlight() | ||
177 | rb.backlight_force_on(); | ||
178 | backlight_on = function() end | ||
179 | end | ||
180 | backlight_on = turn_on_backlight | ||
181 | |||
168 | do | 182 | do |
169 | local act = rb.actions | 183 | local act = rb.actions |
170 | local quit = false | 184 | local quit = false |
171 | local last_action = 0 | 185 | --local last_action = 0 |
172 | local x,y,z = start_x or 0, start_y or 0, start_z or 8 | 186 | local x,y,z = start_x or 0, start_y or 0, start_z or 8 |
173 | local x_fast = rb.LCD_WIDTH / 4 | 187 | local s_x, s_y = scale_x or 1, scale_y or 1 |
174 | local y_fast = rb.LCD_HEIGHT / 4 | 188 | local ship_t = {x = (rb.LCD_WIDTH - 0xF) / 2, |
175 | local ship_x = (rb.LCD_WIDTH - 0xF) / 2 | 189 | y = rb.LCD_HEIGHT - (rb.LCD_HEIGHT / 3), |
176 | local ship_y = rb.LCD_HEIGHT - (rb.LCD_HEIGHT / 3) | 190 | color = BGREEN, |
177 | local scale_x, scale_y = 1, 1 | 191 | fillcolor = BLACK, |
178 | -- vector draw the ship points for each direction (<>^v) | 192 | -- ship vector coords x,y, x,y,... |
179 | local ship_lt_t = {0,7, 15,0, 9,7, 15,15, 0,7} | 193 | lt_t = {0,7, 15,0, 9,7, 15,15, 0,7}, |
180 | local ship_rt_t = {0,0, 5,7, 0,15, 15,7, 0,0} | 194 | rt_t = {0,0, 5,7, 0,15, 15,7, 0,0}, |
181 | local ship_up_t = {0,15, 7,0, 15,15, 7,9, 0,15} | 195 | up_t = {0,15, 7,0, 15,15, 7,9, 0,15}, |
182 | local ship_dn_t = {0,0, 7,15, 15,0, 7,5, 0,0} | 196 | dn_t = {0,0, 7,15, 15,0, 7,5, 0,0} |
183 | local ship_t = ship_up_t | 197 | } |
198 | ship_t.disp_t = ship_t.up_t | ||
199 | |||
200 | local fast = {x = 1, y = 1, count = 0, inc_x = rb.LCD_WIDTH / 16, inc_y = rb.LCD_HEIGHT / 16} | ||
201 | |||
202 | local last = {sx = s_x, sy = s_y, dx = 0, dy = 0, inc_x = 0, inc_y = 0} | ||
203 | |||
204 | local function draw_points(img, x, y, color, n, hash) | ||
205 | if s_x > s_y then | ||
206 | img:line(x, y, x + s_x, y, color, true) | ||
207 | elseif s_y > s_x then | ||
208 | img:line(x, y, x, y + s_y, color, true) | ||
209 | else | ||
210 | img:set(x, y, color, true) | ||
211 | end | ||
212 | end | ||
213 | |||
214 | function action_drift() | ||
215 | if last.dx > 0 then | ||
216 | last.dx = last.dx - 1 | ||
217 | x = x + last.dx | ||
218 | elseif last.dx < 0 then | ||
219 | last.dx = last.dx + 1 | ||
220 | x = x + last.dx | ||
221 | end | ||
222 | if last.dy > 0 then | ||
223 | last.dy = last.dy - 1 | ||
224 | y = y + last.dy | ||
225 | elseif last.dy < 0 then | ||
226 | last.dy = last.dy + 1 | ||
227 | y = y + last.dy | ||
228 | end | ||
229 | if last.dx == 0 and last.dy == 0 then | ||
230 | rockev.suspend("timer") | ||
231 | end | ||
232 | rockev.trigger("action", true, act.ACTION_REDRAW) | ||
233 | end | ||
184 | 234 | ||
185 | function action_event(action) | 235 | function action_event(action) |
236 | backlight_on() | ||
186 | if action == act.PLA_EXIT or action == act.PLA_CANCEL then | 237 | if action == act.PLA_EXIT or action == act.PLA_CANCEL then |
187 | quit = true | 238 | quit = true |
188 | start_x, start_y, start_z = x, y, z | 239 | start_x, start_y, start_z = x, y, z |
240 | scale_x, scale_y = last.sx, last.sy | ||
189 | elseif action == act.PLA_RIGHT_REPEAT then | 241 | elseif action == act.PLA_RIGHT_REPEAT then |
190 | x = x + x_fast | 242 | fast.count = fast.count + 1 |
191 | scale_x = scale_x + 1 | 243 | if fast.count % 10 == 0 then |
192 | scale_y = 1 | 244 | fast.x = fast.x + fast.inc_x |
245 | if fast.count > 100 then s_x = s_x + 1 end | ||
246 | end | ||
247 | x = x + fast.x + last.inc_x | ||
248 | s_y = last.sy | ||
249 | last.dx = fast.x | ||
250 | ship_t.disp_t = ship_t.rt_t | ||
193 | elseif action == act.PLA_LEFT_REPEAT then | 251 | elseif action == act.PLA_LEFT_REPEAT then |
194 | x = x - x_fast | 252 | fast.count = fast.count + 1 |
195 | scale_x = scale_x + 1 | 253 | if fast.count % 10 == 0 then |
196 | scale_y = 1 | 254 | fast.x = fast.x + fast.inc_x |
255 | if fast.count > 100 then s_x = s_x + 1 end | ||
256 | end | ||
257 | x = x - fast.x + last.inc_x | ||
258 | s_y = last.sy | ||
259 | last.dx = -fast.x | ||
260 | ship_t.disp_t = ship_t.lt_t | ||
197 | elseif action == act.PLA_UP_REPEAT then | 261 | elseif action == act.PLA_UP_REPEAT then |
198 | y = y - y_fast | 262 | fast.count = fast.count + 1 |
199 | scale_y = scale_y + 1 | 263 | if fast.count % 10 == 0 then |
200 | scale_x = 1 | 264 | fast.y = fast.y + fast.inc_y |
265 | if fast.count > 100 then s_y = s_y + 1 end | ||
266 | end | ||
267 | y = y - fast.y + last.inc_y | ||
268 | s_x = last.sx | ||
269 | last.dy = -fast.y | ||
270 | ship_t.disp_t = ship_t.up_t | ||
201 | elseif action == act.PLA_DOWN_REPEAT then | 271 | elseif action == act.PLA_DOWN_REPEAT then |
202 | y = y + y_fast | 272 | fast.count = fast.count + 1 |
203 | scale_y = scale_y + 1 | 273 | if fast.count % 10 == 0 then |
204 | scale_x = 1 | 274 | fast.y = fast.y + fast.inc_y |
275 | if fast.count > 100 then s_y = s_y + 1 end | ||
276 | end | ||
277 | y = y + fast.y + last.inc_y | ||
278 | s_x = last.sx | ||
279 | last.dy = fast.y | ||
280 | ship_t.disp_t = ship_t.dn_t | ||
205 | elseif action == act.PLA_RIGHT then | 281 | elseif action == act.PLA_RIGHT then |
206 | x = x + 1 | 282 | last.inc_x = last.inc_x + 1 |
207 | ship_t = ship_rt_t | 283 | x = x + last.dx + 1 |
284 | if last.inc_x < 0 then | ||
285 | last.inc_x = 0 | ||
286 | end | ||
287 | last.dx = last.inc_x | ||
288 | ship_t.disp_t = ship_t.rt_t | ||
208 | elseif action == act.PLA_LEFT then | 289 | elseif action == act.PLA_LEFT then |
209 | x = x - 1 | 290 | last.inc_x = last.inc_x - 1 |
210 | ship_t = ship_lt_t | 291 | x = x + last.dx - 1 |
292 | if last.inc_x > 0 then | ||
293 | last.inc_x = 0 | ||
294 | end | ||
295 | last.dx = last.inc_x | ||
296 | ship_t.disp_t = ship_t.lt_t | ||
211 | elseif action == act.PLA_UP then | 297 | elseif action == act.PLA_UP then |
212 | y = y - 1 | 298 | last.inc_y = last.inc_y - 1 |
213 | ship_t = ship_up_t | 299 | y = y + last.dy - 1 |
300 | if last.inc_y > 0 then | ||
301 | last.inc_y = 0 | ||
302 | end | ||
303 | last.dy = last.inc_y | ||
304 | ship_t.disp_t = ship_t.up_t | ||
214 | elseif action == act.PLA_DOWN then | 305 | elseif action == act.PLA_DOWN then |
215 | y = y + 1 | 306 | last.inc_y = last.inc_y + 1 |
216 | ship_t = ship_dn_t | 307 | y = y + last.dy + 1 |
308 | if last.inc_y < 0 then | ||
309 | last.inc_y = 0 | ||
310 | end | ||
311 | last.dy = last.inc_y | ||
312 | ship_t.disp_t = ship_t.dn_t | ||
313 | elseif action == act.PLA_SELECT_REPEAT then | ||
314 | rockev.suspend("timer", true) | ||
315 | if s_x < 10 and s_y < 10 then | ||
316 | s_x = last.sx + 1 | ||
317 | s_y = last.sy + 1 | ||
318 | last.sx = s_x | ||
319 | last.sy = s_y | ||
320 | end | ||
217 | elseif action == act.PLA_SELECT then | 321 | elseif action == act.PLA_SELECT then |
218 | z = z + 4 | 322 | s_x = last.sx + 1 |
219 | if z > 16 then z = 0 end | 323 | s_y = last.sy + 1 |
324 | if s_x > 10 or s_y > 10 then | ||
325 | s_x = 1 | ||
326 | s_y = 1 | ||
327 | end | ||
328 | last.sx = s_x | ||
329 | last.sy = s_y | ||
220 | elseif action == act.ACTION_NONE then | 330 | elseif action == act.ACTION_NONE then |
221 | scale_x = 1 | 331 | if fast.count > 100 then |
222 | scale_y = 1 | 332 | z = (random(0, 400) / 100) * 4 |
333 | end | ||
334 | fast.count = 0 | ||
335 | fast.x = fast.inc_x | ||
336 | fast.y = fast.inc_y | ||
337 | s_x = last.sx | ||
338 | s_y = last.sy | ||
339 | backlight_on = turn_on_backlight | ||
340 | rb.backlight_use_settings() | ||
341 | if last.dx ~= 0 or last.dy ~= 0 then | ||
342 | rockev.suspend("timer", false) | ||
343 | else | ||
344 | last.inc_x = 0 | ||
345 | last.inc_y = 0 | ||
346 | end | ||
223 | end | 347 | end |
224 | 348 | ||
225 | _lcd:clear(BLACK) | 349 | _lcd:clear(BLACK) |
226 | for i = 0, z, 4 do | 350 | for i = 0, z, 4 do |
227 | drawStars(_LCD, x, y, i+1, RED, scale_x, scale_y) | 351 | drawStars(_LCD, draw_points, x, y, i+1, RED, s_x, s_y) |
228 | drawStars(_LCD, x, y, i+2, GREEN, scale_x, scale_y) | 352 | drawStars(_LCD, draw_points, x, y, i+2, GREEN, s_x, s_y) |
229 | drawStars(_LCD, x, y, i+3, BLUE, scale_x, scale_y) | 353 | drawStars(_LCD, draw_points, x, y, i+3, BLUE, s_x, s_y) |
230 | drawStars(_LCD, x, y, i+4, WHITE, scale_x, scale_y) | 354 | drawStars(_LCD, draw_points, x, y, i+4, WHITE, s_x, s_y) |
355 | end | ||
356 | |||
357 | local hit_t = {} | ||
358 | local SHIP_X, SHIP_Y = ship_t.x + 8, ship_t.y + 8 --center the ship coords | ||
359 | local function draw_asteroids(img, x, y, color, n, hash) | ||
360 | if n > 0 then | ||
361 | local x0, y0, w0, h0 | ||
362 | x0,y0,w0,h0 = draw_astroid(img, x, y, hash, color, false, s_x, s_y) | ||
363 | --check bounds | ||
364 | if s_x == s_y and x0 <= SHIP_X and x0+w0 >= SHIP_X and y0+h0 >= SHIP_Y and y0 <= SHIP_Y then | ||
365 | local r_t = {x = x0, y = y0, w = w0, h= h0, hash = hash, color = color} | ||
366 | hit_t[#hit_t + 1] = r_t | ||
367 | end | ||
368 | end | ||
231 | end | 369 | end |
232 | drawship(_LCD, ship_x, ship_y, BGREEN, ship_t) | ||
233 | _lcd:update() | ||
234 | 370 | ||
235 | last_action = action | 371 | drawStars(_LCD, draw_asteroids, x, y, 1, RED, s_x, s_y) |
372 | drawStars(_LCD, draw_asteroids, x, y, 2, GREEN, s_x, s_y) | ||
373 | drawStars(_LCD, draw_asteroids, x, y, 3, BLUE, s_x, s_y) | ||
374 | drawStars(_LCD, draw_asteroids, x, y, 4, WHITE, s_x, s_y) | ||
375 | if fast.count < 10 and last.dx == last.dy then | ||
376 | local seen = {} -- might have multiple hits but only show unique hashes | ||
377 | for i, v in ipairs(hit_t) do | ||
378 | if i < 4 then | ||
379 | draw_astroid(_LCD, v.x + v.w / 2, v.y + v.h / 2, v.hash, WHITE, v.color, s_x, s_y) | ||
380 | end | ||
381 | end | ||
382 | for i, v in ipairs(hit_t) do | ||
383 | if not seen[v.hash] then | ||
384 | rb.lcd_puts(0, (i - 1), string.format("[%x]", v.hash)) | ||
385 | end | ||
386 | seen[v.hash] = i | ||
387 | end | ||
388 | end | ||
389 | |||
390 | drawship(_LCD, ship_t) | ||
391 | update_lcd() | ||
392 | |||
393 | --last_action = action | ||
236 | end | 394 | end |
237 | 395 | ||
238 | function action_set_quit(bQuit) | 396 | function action_set_quit(bQuit) |
@@ -244,13 +402,22 @@ do | |||
244 | end | 402 | end |
245 | end | 403 | end |
246 | 404 | ||
405 | if not rb.backlight_force_on then | ||
406 | rb.backlight_force_on = function() end | ||
407 | end | ||
408 | |||
409 | if not rb.backlight_use_settings then | ||
410 | rb.backlight_use_settings = function() end | ||
411 | end | ||
412 | |||
247 | action_event(rb.actions.ACTION_NONE) -- we can call this now but not after registering.. | 413 | action_event(rb.actions.ACTION_NONE) -- we can call this now but not after registering.. |
248 | local eva = rockev.register("action", action_event) | 414 | local eva = rockev.register("action", action_event) |
415 | local evc = rockev.register("timer", action_drift, rb.HZ/7) | ||
249 | 416 | ||
250 | while not action_quit() do rb.sleep(rb.HZ) end | 417 | while not action_quit() do rb.sleep(rb.HZ) end |
251 | 418 | ||
252 | if start_x and start_y then | 419 | if start_x and start_y then |
253 | file = io.open(fname, "w") | 420 | file = io.open(fname, "w") |
254 | file:write(start_x, "\n", start_y, "\n", start_z, "\n") | 421 | file:write(start_x, "\n", start_y, "\n", start_z or 0, "\n", scale_x or 1, "\n", scale_y or 1, "\n") |
255 | io.close( file ) | 422 | io.close( file ) |
256 | end | 423 | end |
diff --git a/apps/plugins/mpegplayer/libmpeg2/idct_arm.S b/apps/plugins/mpegplayer/libmpeg2/idct_arm.S index 90eb5031c7..8ff7c90629 100644 --- a/apps/plugins/mpegplayer/libmpeg2/idct_arm.S +++ b/apps/plugins/mpegplayer/libmpeg2/idct_arm.S | |||
@@ -21,6 +21,8 @@ | |||
21 | 21 | ||
22 | #include "config.h" | 22 | #include "config.h" |
23 | 23 | ||
24 | .syntax unified | ||
25 | |||
24 | .global mpeg2_idct_copy | 26 | .global mpeg2_idct_copy |
25 | .type mpeg2_idct_copy, %function | 27 | .type mpeg2_idct_copy, %function |
26 | .global mpeg2_idct_add | 28 | .global mpeg2_idct_add |
diff --git a/apps/plugins/mpegplayer/libmpeg2/idct_armv6.S b/apps/plugins/mpegplayer/libmpeg2/idct_armv6.S index a259721410..ad28cefcf2 100644 --- a/apps/plugins/mpegplayer/libmpeg2/idct_armv6.S +++ b/apps/plugins/mpegplayer/libmpeg2/idct_armv6.S | |||
@@ -21,6 +21,8 @@ | |||
21 | 21 | ||
22 | #include "config.h" | 22 | #include "config.h" |
23 | 23 | ||
24 | .syntax unified | ||
25 | |||
24 | .global mpeg2_idct_copy | 26 | .global mpeg2_idct_copy |
25 | .type mpeg2_idct_copy, %function | 27 | .type mpeg2_idct_copy, %function |
26 | .global mpeg2_idct_add | 28 | .global mpeg2_idct_add |
diff --git a/apps/plugins/open_plugins.c b/apps/plugins/open_plugins.c index b608aff789..66200df8a5 100644 --- a/apps/plugins/open_plugins.c +++ b/apps/plugins/open_plugins.c | |||
@@ -116,10 +116,8 @@ static int op_entry_read_opx(const char *path) | |||
116 | int ret = -1; | 116 | int ret = -1; |
117 | off_t filesize; | 117 | off_t filesize; |
118 | int fd_opx; | 118 | int fd_opx; |
119 | int len; | ||
120 | 119 | ||
121 | len = rb->strlen(path); | 120 | if(rb->filetype_get_attr(path) == FILE_ATTR_OPX) |
122 | if(len > OP_LEN && rb->strcasecmp(&((path)[len-OP_LEN]), "." OP_EXT) == 0) | ||
123 | { | 121 | { |
124 | fd_opx = rb->open(path, O_RDONLY); | 122 | fd_opx = rb->open(path, O_RDONLY); |
125 | if (fd_opx >= 0) | 123 | if (fd_opx >= 0) |
@@ -317,7 +315,7 @@ static int op_entry_transfer(int fd, int fd_tmp, | |||
317 | 315 | ||
318 | static uint32_t op_entry_add_path(const char *key, const char *plugin, const char *parameter, bool use_key) | 316 | static uint32_t op_entry_add_path(const char *key, const char *plugin, const char *parameter, bool use_key) |
319 | { | 317 | { |
320 | int len; | 318 | char buf[MAX_PATH]; |
321 | uint32_t hash; | 319 | uint32_t hash; |
322 | uint32_t newhash; | 320 | uint32_t newhash; |
323 | char *pos = "";; | 321 | char *pos = "";; |
@@ -339,8 +337,11 @@ static uint32_t op_entry_add_path(const char *key, const char *plugin, const cha | |||
339 | else | 337 | else |
340 | hash = op_entry.hash; | 338 | hash = op_entry.hash; |
341 | 339 | ||
340 | |||
341 | |||
342 | if (plugin) | 342 | if (plugin) |
343 | { | 343 | { |
344 | int fattr = rb->filetype_get_attr(plugin); | ||
344 | /* name */ | 345 | /* name */ |
345 | if (use_key) | 346 | if (use_key) |
346 | { | 347 | { |
@@ -353,8 +354,21 @@ static uint32_t op_entry_add_path(const char *key, const char *plugin, const cha | |||
353 | if (op_entry.name[0] == '\0' || op_entry.lang_id >= 0) | 354 | if (op_entry.name[0] == '\0' || op_entry.lang_id >= 0) |
354 | rb->strlcpy(op_entry.name, pos, OPEN_PLUGIN_NAMESZ); | 355 | rb->strlcpy(op_entry.name, pos, OPEN_PLUGIN_NAMESZ); |
355 | 356 | ||
356 | len = rb->strlen(pos); | 357 | |
357 | if(len > ROCK_LEN && rb->strcasecmp(&(pos[len-ROCK_LEN]), "." ROCK_EXT) == 0) | 358 | |
359 | if ((!parameter || parameter[0] == '\0') && fattr != FILE_ATTR_ROCK && fattr != FILE_ATTR_OPX) | ||
360 | { | ||
361 | rb->strlcpy(op_entry.param, plugin, OPEN_PLUGIN_BUFSZ); | ||
362 | parameter = op_entry.param; | ||
363 | plugin = rb->filetype_get_plugin(fattr, buf, sizeof(buf)); | ||
364 | if (!plugin) | ||
365 | { | ||
366 | rb->splashf(HZ * 2, rb->str(LANG_OPEN_PLUGIN_NOT_A_PLUGIN), pos); | ||
367 | return 0; | ||
368 | } | ||
369 | } | ||
370 | |||
371 | if(fattr == FILE_ATTR_ROCK) | ||
358 | { | 372 | { |
359 | fd_tmp = rb->open(OPEN_PLUGIN_DAT ".tmp", O_WRONLY | O_CREAT | O_TRUNC, 0666); | 373 | fd_tmp = rb->open(OPEN_PLUGIN_DAT ".tmp", O_WRONLY | O_CREAT | O_TRUNC, 0666); |
360 | if (fd_tmp < 0) | 374 | if (fd_tmp < 0) |
diff --git a/apps/plugins/pacbox/pacbox_arm.S b/apps/plugins/pacbox/pacbox_arm.S index 87696ce6f7..d4500ce45f 100644 --- a/apps/plugins/pacbox/pacbox_arm.S +++ b/apps/plugins/pacbox/pacbox_arm.S | |||
@@ -22,6 +22,8 @@ | |||
22 | #include "config.h" | 22 | #include "config.h" |
23 | #include "pacbox.h" | 23 | #include "pacbox.h" |
24 | 24 | ||
25 | .syntax unified | ||
26 | |||
25 | .section .icode,"ax",%progbits | 27 | .section .icode,"ax",%progbits |
26 | .global blit_display | 28 | .global blit_display |
27 | 29 | ||
diff --git a/apps/plugins/picross.lua b/apps/plugins/picross.lua new file mode 100644 index 0000000000..ec9b6ef7a9 --- /dev/null +++ b/apps/plugins/picross.lua | |||
@@ -0,0 +1,822 @@ | |||
1 | --[[ | ||
2 | __________ __ ___. | ||
3 | Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | \/ \/ \/ \/ \/ | ||
8 | |||
9 | Port of Picross (aka. Picture Crossword, Nonograms, Paint By Numbers) | ||
10 | Copyright (c) 2012 by Nathan Korth | ||
11 | |||
12 | See http://en.wikipedia.org/wiki/Nonogram for details on how to play, and | ||
13 | http://nkorth.com/picross for more puzzles. | ||
14 | |||
15 | ]]-- | ||
16 | |||
17 | require "actions" | ||
18 | require "luadir" | ||
19 | require("rbsettings") | ||
20 | require("settings") | ||
21 | |||
22 | local _nums = require("draw_num") | ||
23 | local _clr = require("color") -- clrset, clrinc provides device independent colors | ||
24 | local _lcd = require("lcd") -- lcd helper functions | ||
25 | |||
26 | local plugindir = rb.PLUGIN_GAMES_DATA_DIR | ||
27 | local userdir = plugindir .. "/.picross" | ||
28 | |||
29 | local wrap = rb.settings.read('global_settings', rb.system.global_settings.list_wraparound) | ||
30 | wrap = (wrap or 1) == 1 | ||
31 | |||
32 | do -- free up some ram by removing items we don't need | ||
33 | local function strip_functions(t, ...) | ||
34 | local t_keep = {...} | ||
35 | local keep | ||
36 | for key, val in pairs(t) do | ||
37 | keep = false | ||
38 | for _, v in ipairs(t_keep) do | ||
39 | if string.find (key, v) then | ||
40 | keep = true; break | ||
41 | end | ||
42 | end | ||
43 | if keep ~= true then | ||
44 | t[key] = nil | ||
45 | end | ||
46 | end | ||
47 | end | ||
48 | |||
49 | strip_functions(rb.actions, "PLA_", "TOUCHSCREEN", "_NONE") | ||
50 | rb.contexts = nil | ||
51 | |||
52 | _clr.inc = nil | ||
53 | rb.metadata = nil -- remove metadata settings | ||
54 | rb.system = nil -- remove system settings | ||
55 | rb.settings = nil --remove setting read/write fns | ||
56 | end | ||
57 | |||
58 | --colors for fg/bg ------------------------ | ||
59 | local WHITE = _clr.set(-1, 255, 255, 255) | ||
60 | local BLACK = _clr.set(0, 0, 0, 0) | ||
61 | ------------------------------------------- | ||
62 | |||
63 | -- set colors on color targets | ||
64 | if rb.lcd_rgbpack ~= nil then | ||
65 | rb.lcd_set_background(rb.lcd_rgbpack(255, 255, 255)) | ||
66 | rb.lcd_set_foreground(rb.lcd_rgbpack(0, 0, 0)) | ||
67 | end | ||
68 | |||
69 | local TEXT_COLOR = BLACK | ||
70 | |||
71 | if rb.LCD_DEPTH == 2 then TEXT_COLOR = bit.bnot(TEXT_COLOR) end | ||
72 | |||
73 | --[[ | ||
74 | -- load images | ||
75 | local img_numbers = rb.read_bmp_file(rb.current_path().."picross_numbers.bmp") | ||
76 | |||
77 | -- image helper function | ||
78 | function draw_image(img, x, y, w, h, tilenum) | ||
79 | |||
80 | local func = rb.lcd_bitmap_transparent_part | ||
81 | or rb.lcd_bitmap_part -- Fallback version for grayscale targets | ||
82 | or rb.lcd_mono_bitmap_part -- Fallback version for mono targets | ||
83 | |||
84 | func(img, 0, (tilenum * h), w, x, y, w, h) | ||
85 | end | ||
86 | ]] | ||
87 | |||
88 | function draw_number(x, y, w, tilenum, scale) | ||
89 | scale = scale or 1 | ||
90 | _nums.print(_LCD, tilenum, x, y, w, TEXT_COLOR, nil, nil, true, scale, scale) | ||
91 | end | ||
92 | |||
93 | function showComplete(self) | ||
94 | if self:isComplete() then | ||
95 | rb.splash(rb.HZ * 2, "Puzzle complete!") | ||
96 | self:saveGame() | ||
97 | self.puzzleh = 50 | ||
98 | self.puzzlew = 50 | ||
99 | local old_boardh, old_boardw = self.boardh, self.boardw | ||
100 | local old_numbersw, old_numbersh = self.numbersw, self.numbersh | ||
101 | while self.numbersh > 0 do -- remove the number rows | ||
102 | table.remove (self.board, 1) | ||
103 | self.numbersh = self.numbersh - 1 | ||
104 | end | ||
105 | self.numbersh = 0 | ||
106 | self.numbersw = 0 | ||
107 | self.solution = nil | ||
108 | self.boardh = self.puzzleh | ||
109 | self.boardw = self.puzzlew | ||
110 | self.freedraw = 0 | ||
111 | -- find a free number | ||
112 | while rb.file_exists(string.format("%s/user_freedraw_%d.picross", | ||
113 | userdir, self.freedraw)) do | ||
114 | self.freedraw = self.freedraw + 1 | ||
115 | end | ||
116 | |||
117 | for r = 1, self.boardh do | ||
118 | local old_row = self.board[r] or {} | ||
119 | |||
120 | self.board[r] = {} | ||
121 | -- copy over the last drawing | ||
122 | for c = 1, self.boardw do | ||
123 | local ch = old_row[c + old_numbersw] | ||
124 | if not ch or ch ~= '*' then | ||
125 | self.board[r][c] = '.' | ||
126 | else | ||
127 | self.board[r][c] = '*' | ||
128 | end | ||
129 | end | ||
130 | end | ||
131 | rb.splash(rb.HZ * 3, "Free Draw!") | ||
132 | self.cursor.x = 1 | ||
133 | self.cursor.y = 1 | ||
134 | self.showComplete = function() end --show once, then remove the reference | ||
135 | end | ||
136 | end | ||
137 | |||
138 | local State = { | ||
139 | puzzlew = 0, | ||
140 | puzzleh = 0, | ||
141 | numbersw = 0, | ||
142 | numbersh = 0, | ||
143 | boardw = 0, | ||
144 | boardh = 0, | ||
145 | board = {}, | ||
146 | solution = {}, | ||
147 | filename = '', | ||
148 | cursor = {x = 0, y = 0}, | ||
149 | scale = 1, | ||
150 | freedraw = false | ||
151 | } | ||
152 | |||
153 | --[[ | ||
154 | |||
155 | Notes on how puzzles work in the code: | ||
156 | |||
157 | The "board" array is bigger than the actual puzzle, so the numbers | ||
158 | above and to the left of it can be stored and do not need to be recalculated | ||
159 | for every draw. (The "solution" array is the same size as the puzzle, however.) | ||
160 | The various width/height variables help keep track of where everything is. | ||
161 | (they should be fairly self-explanatory) | ||
162 | |||
163 | The width/height of the numbers section is always half the width/height of the | ||
164 | puzzle. For odd-number-sized puzzles, the value must be rounded up. This is | ||
165 | because strings of squares must have at least one blank space in between. For | ||
166 | example, on a board 5 wide, the maximum set of row numbers is "1 1 1". | ||
167 | |||
168 | Here are the values used in the "board" array: | ||
169 | ' ': empty space | ||
170 | '.': unfilled square | ||
171 | '*': filled square | ||
172 | [number]: number (not a string) | ||
173 | |||
174 | The .picross puzzle files are text files which look pretty much the same as the | ||
175 | "board" array, with two differences: | ||
176 | |||
177 | - puzzle files should not contain numbers, because they will be generated | ||
178 | based on the puzzle at runtime | ||
179 | - blank lines and lines starting with '#' are ignored | ||
180 | |||
181 | ]]-- | ||
182 | |||
183 | function State:initBoard() | ||
184 | if self.freedraw then | ||
185 | -- clear board (set the puzzle area to '.' and everything else to ' ') | ||
186 | self.board = {} | ||
187 | for r = 1,self.boardh do | ||
188 | self.board[r] = {} | ||
189 | for c = 1,self.boardw do | ||
190 | if r > self.numbersh and c > self.numbersw then | ||
191 | self.board[r][c] = '.' | ||
192 | else | ||
193 | self.board[r][c] = ' ' | ||
194 | end | ||
195 | end | ||
196 | end | ||
197 | |||
198 | -- reset cursor | ||
199 | self.cursor.x = 1 | ||
200 | self.cursor.y = 1 | ||
201 | return | ||
202 | end --freedraw | ||
203 | |||
204 | -- metrics | ||
205 | self.puzzleh = #self.solution | ||
206 | self.puzzlew = #self.solution[1] | ||
207 | self.numbersh = math.floor(self.puzzleh / 2) + 1 | ||
208 | self.numbersw = math.floor(self.puzzlew / 2) + 1 | ||
209 | self.boardh = self.puzzleh + self.numbersh | ||
210 | self.boardw = self.puzzlew + self.numbersw | ||
211 | self.showComplete = showComplete | ||
212 | |||
213 | -- clear board (set the puzzle area to '.' and everything else to ' ') | ||
214 | self.board = {} | ||
215 | for r = 1,self.boardh do | ||
216 | self.board[r] = {} | ||
217 | for c = 1,self.boardw do | ||
218 | if r > self.numbersh and c > self.numbersw then | ||
219 | self.board[r][c] = '.' | ||
220 | else | ||
221 | self.board[r][c] = ' ' | ||
222 | end | ||
223 | end | ||
224 | end | ||
225 | |||
226 | -- reset cursor | ||
227 | self.cursor.x = self.numbersw + 1 | ||
228 | self.cursor.y = self.numbersh + 1 | ||
229 | |||
230 | -- calculate row numbers | ||
231 | local rownums = {} | ||
232 | for r = 1,self.puzzleh do | ||
233 | rownums[r] = {} | ||
234 | local count = 0 | ||
235 | for c = 1,self.puzzlew do | ||
236 | if self.solution[r][c] == '*' then | ||
237 | -- filled square | ||
238 | count = count + 1 | ||
239 | else | ||
240 | -- empty square | ||
241 | if count > 0 then | ||
242 | table.insert(rownums[r], count) | ||
243 | count = 0 | ||
244 | end | ||
245 | end | ||
246 | end | ||
247 | -- if there were no empty squares | ||
248 | if count > 0 then | ||
249 | table.insert(rownums[r], count) | ||
250 | count = 0 | ||
251 | end | ||
252 | end | ||
253 | |||
254 | -- calculate column numbers | ||
255 | local columnnums = {} | ||
256 | for c = 1,self.puzzlew do | ||
257 | columnnums[c] = {} | ||
258 | local count = 0 | ||
259 | for r = 1,self.puzzleh do | ||
260 | if self.solution[r][c] == '*' then | ||
261 | -- filled square | ||
262 | count = count + 1 | ||
263 | else | ||
264 | -- empty square | ||
265 | if count > 0 then | ||
266 | table.insert(columnnums[c], count) | ||
267 | count = 0 | ||
268 | end | ||
269 | end | ||
270 | end | ||
271 | -- if there were no empty squares | ||
272 | if count > 0 then | ||
273 | table.insert(columnnums[c], count) | ||
274 | count = 0 | ||
275 | end | ||
276 | end | ||
277 | |||
278 | -- add row numbers to board | ||
279 | for r = 1,self.puzzleh do | ||
280 | for i,num in ipairs(rownums[r]) do | ||
281 | self.board[self.numbersh + r][self.numbersw - #rownums[r] + i] = num | ||
282 | end | ||
283 | end | ||
284 | |||
285 | -- add column numbers to board | ||
286 | for c = 1,self.puzzlew do | ||
287 | for i,num in ipairs(columnnums[c]) do | ||
288 | self.board[self.numbersh - #columnnums[c] + i][self.numbersw + c] = num | ||
289 | end | ||
290 | end | ||
291 | end | ||
292 | |||
293 | function State:saveGame() | ||
294 | local file | ||
295 | local boardw, boardh = self.boardw, self.boardh | ||
296 | |||
297 | if self.freedraw then | ||
298 | self.filename = string.format("%s/user_freedraw_%d.picross", userdir, self.freedraw) | ||
299 | |||
300 | |||
301 | --remove blank lines from the end | ||
302 | while boardh > 1 and not string.find(table.concat(self.board[boardh]), "\*") do | ||
303 | boardh = boardh - 1 | ||
304 | end | ||
305 | --remove blank lines from right | ||
306 | local max_w = 0 | ||
307 | for r = self.numbersh + 1, boardh do | ||
308 | for c = max_w + 1, boardw do | ||
309 | if self.board[r][c] == '*' then | ||
310 | max_w = c | ||
311 | end | ||
312 | end | ||
313 | end | ||
314 | boardw = max_w | ||
315 | if max_w == 0 then return end--nothing to save | ||
316 | |||
317 | file = io.open(self.filename, 'w') | ||
318 | else | ||
319 | file = io.open(plugindir .. '/picross.sav', 'w') | ||
320 | end | ||
321 | |||
322 | if file then | ||
323 | file:write("#"..self.filename.."\n") | ||
324 | for r = self.numbersh + 1, boardh do | ||
325 | for c = self.numbersw + 1, boardw do | ||
326 | file:write(self.board[r][c]) | ||
327 | end | ||
328 | file:write("\n") | ||
329 | end | ||
330 | file:close() | ||
331 | if self.freedraw then | ||
332 | rb.splash(rb.HZ, "Freedraw saved.") | ||
333 | else | ||
334 | rb.splash(rb.HZ, "Game saved.") | ||
335 | end | ||
336 | return true | ||
337 | else | ||
338 | rb.splash(rb.HZ * 2, "Failed to open save file") | ||
339 | return false | ||
340 | end | ||
341 | end | ||
342 | |||
343 | function State:loadSave() | ||
344 | local file = io.open(plugindir .. '/picross.sav') | ||
345 | if file then | ||
346 | -- first line is commented path of original puzzle | ||
347 | path = file:read('*l') | ||
348 | path = path:sub(2,-1) | ||
349 | -- prepare original puzzle | ||
350 | if self:loadFile(path) then | ||
351 | -- load saved board | ||
352 | contents = file:read('*all') | ||
353 | file:close() | ||
354 | local r = 1 | ||
355 | for line in contents:gmatch("[^\r\n]+") do | ||
356 | local c = 1 | ||
357 | for char in line:gmatch('.') do | ||
358 | self.board[self.numbersh + r][self.numbersw + c] = char | ||
359 | c = c + 1 | ||
360 | end | ||
361 | r = r + 1 | ||
362 | end | ||
363 | |||
364 | return true | ||
365 | else | ||
366 | return false | ||
367 | end | ||
368 | else | ||
369 | return false | ||
370 | end | ||
371 | end | ||
372 | |||
373 | function State:loadDefault() | ||
374 | return self:loadFile(userdir .. '/picross_default.picross') | ||
375 | end | ||
376 | |||
377 | function State:loadFile(path) | ||
378 | local file = io.open(path) | ||
379 | if file then | ||
380 | self.freedraw = false | ||
381 | local board = {} | ||
382 | local boardwidth = 0 | ||
383 | local count = 0 | ||
384 | contents = file:read('*all') | ||
385 | |||
386 | for line in contents:gmatch("[^\r\n]+") do | ||
387 | count = count + 1 | ||
388 | -- ignore blank lines and comments | ||
389 | if line ~= '' and line:sub(1, 1) ~= '#' then | ||
390 | table.insert(board, {}) -- add a new row | ||
391 | |||
392 | -- ensure all lines are the same width | ||
393 | if boardwidth == 0 then | ||
394 | boardwidth = #line | ||
395 | elseif #line ~= boardwidth then | ||
396 | -- a line was the wrong width | ||
397 | local err = "Invalid puzzle file!" | ||
398 | local msg = | ||
399 | string.format("%s (wrong line width ln: %d w: %d)", err, count, #line) | ||
400 | rb.splash(rb.HZ * 2, msg) | ||
401 | return false | ||
402 | end | ||
403 | local pos = 0 | ||
404 | for char in line:gmatch('.') do | ||
405 | pos = pos + 1 | ||
406 | if char == '*' or char == '.' then | ||
407 | table.insert(board[#board], char) | ||
408 | else | ||
409 | local err = "Invalid puzzle file!" | ||
410 | local msg = string.format("%s (invalid character ln: %d '%s' @ %d)", | ||
411 | err, count, char, pos) | ||
412 | -- invalid character in puzzle area | ||
413 | rb.splash(rb.HZ * 2, msg) | ||
414 | return false | ||
415 | end | ||
416 | end | ||
417 | else | ||
418 | -- display puzzle comments | ||
419 | --rb.splash(rb.HZ, line:sub(2,#line)) | ||
420 | end | ||
421 | end | ||
422 | |||
423 | if #board == 0 then | ||
424 | -- empty file | ||
425 | rb.splash(rb.HZ * 2, "Invalid puzzle file! (empty)") | ||
426 | return false | ||
427 | end | ||
428 | |||
429 | file:close() | ||
430 | |||
431 | self.solution = board | ||
432 | self.filename = path | ||
433 | if self.puzzleh < 100 and self.puzzlew < 100 then | ||
434 | self:initBoard() | ||
435 | return true | ||
436 | else | ||
437 | -- puzzle too big | ||
438 | rb.splash(rb.HZ * 2, "Invalid puzzle file! (too big)") | ||
439 | return false | ||
440 | end | ||
441 | else | ||
442 | -- file open failed | ||
443 | rb.splash(rb.HZ * 2, "Failed to open file!") | ||
444 | return false | ||
445 | end | ||
446 | end | ||
447 | |||
448 | function State:drawBoard() | ||
449 | local tw, th = 10 * self.scale, 10 * self.scale -- tile width and height (including bottom+right padding) | ||
450 | |||
451 | local ofsx = rb.LCD_WIDTH/2 - 4 - (self.cursor.x * tw) | ||
452 | local ofsy = rb.LCD_HEIGHT/2 - 4 - (self.cursor.y * th) | ||
453 | |||
454 | rb.lcd_clear_display() | ||
455 | |||
456 | -- guide lines | ||
457 | for r = 0, self.puzzleh do | ||
458 | local x1, x2, y = | ||
459 | ofsx + tw - 1, | ||
460 | ofsx + ((self.boardw + 1) * tw) - 1, | ||
461 | ofsy + ((self.numbersh + 1 + r) * th) - 1 | ||
462 | if r % 5 == 0 or r == self.puzzleh then | ||
463 | rb.lcd_hline(x1, x2, y) | ||
464 | else | ||
465 | for x = x1, x2, 2 do | ||
466 | rb.lcd_drawpixel(x, y) | ||
467 | end | ||
468 | end | ||
469 | end | ||
470 | for c = 0, self.puzzlew do | ||
471 | local x, y1, y2 = | ||
472 | ofsx + ((self.numbersw + 1 + c) * tw) - 1, | ||
473 | ofsy + th - 1, | ||
474 | ofsy + ((self.boardh + 1) * th) - 1 | ||
475 | if c % 5 == 0 or c == self.puzzlew then | ||
476 | rb.lcd_vline(x, y1, y2) | ||
477 | else | ||
478 | for y = y1,y2, 2 do | ||
479 | rb.lcd_drawpixel(x, y) | ||
480 | end | ||
481 | end | ||
482 | end | ||
483 | |||
484 | -- cursor | ||
485 | local cx, cy = ofsx + (self.cursor.x * tw) - 1, ofsy + (self.cursor.y * th) - 1 | ||
486 | rb.lcd_drawrect(cx, cy, tw + 1, th + 1) | ||
487 | local n_width = tw / self.scale / 2 - 1 | ||
488 | local xc = (tw - 5 * self.scale) / 2 | ||
489 | -- tiles | ||
490 | for r = 1, self.boardh do | ||
491 | for c = 1, self.boardw do | ||
492 | local x, y = ofsx + (c * tw) + 1, ofsy + (r * th) + 1 | ||
493 | |||
494 | if self.board[r][c] == '.' then | ||
495 | -- unfilled square | ||
496 | elseif self.board[r][c] == '*' then | ||
497 | -- filled square | ||
498 | rb.lcd_fillrect(x, y, tw - 3, th - 3) | ||
499 | elseif self.board[r][c] == 'x' then | ||
500 | -- eliminated square | ||
501 | rb.lcd_drawline(x + 1, y + 1, x + tw - 5, y + th - 5) | ||
502 | rb.lcd_drawline(x + tw - 5, y + 1, x + 1, y + th - 5) | ||
503 | elseif self.board[r][c] == ' ' then | ||
504 | -- empty space | ||
505 | elseif self.board[r][c] > 0 and self.board[r][c] < 100 then | ||
506 | -- number | ||
507 | local num = self.board[r][c] | ||
508 | if num < 10 then | ||
509 | draw_number(x + xc, y, n_width, num, self.scale) | ||
510 | draw_number(x + xc + 1, y, n_width, num, self.scale) | ||
511 | else | ||
512 | draw_number(x, y, n_width, num, self.scale) | ||
513 | draw_number(x + 1, y, n_width, num, self.scale) | ||
514 | end | ||
515 | end | ||
516 | end | ||
517 | end | ||
518 | |||
519 | rb.lcd_update() | ||
520 | end | ||
521 | |||
522 | function State:isComplete() | ||
523 | for r = 1,self.puzzleh do | ||
524 | for c = 1,self.puzzlew do | ||
525 | if self.solution[r][c] == '*' and | ||
526 | self.board[self.numbersh + r][self.numbersw + c] ~= '*' then | ||
527 | return false | ||
528 | end | ||
529 | end | ||
530 | end | ||
531 | |||
532 | return true | ||
533 | end | ||
534 | |||
535 | function State:moveCursor(dir) | ||
536 | -- The cursor isn't allowed to move in the top-left quadrant of the board. | ||
537 | -- This has to be checked in up and left moves. | ||
538 | local in_board_area = (self.cursor.y > (self.numbersh + 1) | ||
539 | and self.cursor.x > self.numbersw + 1) | ||
540 | |||
541 | if dir == 'left' then | ||
542 | if (self.cursor.x > (self.numbersw + 1) or self.cursor.y > self.numbersh) | ||
543 | and self.cursor.x > 1 then | ||
544 | self.cursor.x = self.cursor.x - 1 | ||
545 | elseif wrap == true then | ||
546 | if in_board_area then | ||
547 | self.cursor.x = 1 | ||
548 | else | ||
549 | self.cursor.x = self.boardw | ||
550 | end | ||
551 | dir = 'up' | ||
552 | end | ||
553 | elseif dir == 'right' then | ||
554 | if self.cursor.x < self.boardw then | ||
555 | self.cursor.x = self.cursor.x + 1 | ||
556 | elseif wrap == true then | ||
557 | if in_board_area then | ||
558 | self.cursor.x = 1 | ||
559 | else | ||
560 | self.cursor.x = self.numbersw + 1 | ||
561 | end | ||
562 | dir = 'down' | ||
563 | end | ||
564 | end | ||
565 | |||
566 | if dir == 'up' then | ||
567 | if (self.cursor.y > (self.numbersh + 1) or self.cursor.x > self.numbersw) | ||
568 | and self.cursor.y > 1 then | ||
569 | self.cursor.y = self.cursor.y - 1 | ||
570 | elseif wrap == true then | ||
571 | if in_board_area then | ||
572 | self.cursor.y = 1 | ||
573 | else | ||
574 | self.cursor.y = self.boardh | ||
575 | end | ||
576 | end | ||
577 | elseif dir == 'down' then | ||
578 | if self.cursor.y < self.boardh then | ||
579 | self.cursor.y = self.cursor.y + 1 | ||
580 | elseif wrap == true then | ||
581 | if in_board_area then | ||
582 | self.cursor.y = 1 | ||
583 | else | ||
584 | self.cursor.y = self.numbersh + 1 | ||
585 | end | ||
586 | end | ||
587 | end | ||
588 | end | ||
589 | |||
590 | function State:fillSquare(mode) | ||
591 | mode = mode or 0 | ||
592 | if self.cursor.x > self.numbersw and self.cursor.y > self.numbersh then | ||
593 | if self.board[self.cursor.y][self.cursor.x] == '*' and mode ~= 2 then | ||
594 | -- clear square | ||
595 | self.board[self.cursor.y][self.cursor.x] = '.' | ||
596 | elseif mode ~= 1 then -- '.' or 'x' | ||
597 | -- fill square | ||
598 | local x, y = self.cursor.x - self.numbersw, self.cursor.y - self.numbersh | ||
599 | if not self.solution or self.solution[y][x] == '*' then | ||
600 | self.board[self.cursor.y][self.cursor.x] = '*' | ||
601 | else | ||
602 | rb.splash(rb.HZ * 2, "Invalid move!") | ||
603 | -- "x" square for convenience | ||
604 | self.board[self.cursor.y][self.cursor.x] = 'x' | ||
605 | end | ||
606 | end | ||
607 | end | ||
608 | |||
609 | self:showComplete() | ||
610 | end | ||
611 | |||
612 | function State:eliminateSquare() | ||
613 | if not self.freedraw | ||
614 | and self.cursor.x > self.numbersw | ||
615 | and self.cursor.y > self.numbersh then | ||
616 | if self.board[self.cursor.y][self.cursor.x] == 'x' then | ||
617 | -- clear square | ||
618 | self.board[self.cursor.y][self.cursor.x] = '.' | ||
619 | else-- '.' or '*' | ||
620 | -- "x" square | ||
621 | self.board[self.cursor.y][self.cursor.x] = 'x' | ||
622 | end | ||
623 | else | ||
624 | self.board[self.cursor.y][self.cursor.x] = '.' | ||
625 | end | ||
626 | end | ||
627 | |||
628 | -- main code ------------------------------------------------------------------ | ||
629 | |||
630 | local function mainMenu() | ||
631 | local menu = { | ||
632 | "Resume", | ||
633 | "View picture", | ||
634 | "Restart puzzle", | ||
635 | "Load puzzle", | ||
636 | "Zoom " .. State.scale - 1, | ||
637 | "Save progress", | ||
638 | "Save and quit", | ||
639 | "Quit without saving" | ||
640 | } | ||
641 | local start | ||
642 | |||
643 | if State.freedraw then | ||
644 | menu[6] = "Save freedraw " .. State.freedraw --Save Progress | ||
645 | end | ||
646 | while true do | ||
647 | local s = rb.do_menu("Picross", menu, start, false) | ||
648 | start = s | ||
649 | if s == 0 then | ||
650 | -- resume | ||
651 | return | ||
652 | elseif s == 1 then | ||
653 | -- view picture | ||
654 | viewPicture() | ||
655 | start = 0 --resume | ||
656 | elseif s == 2 then | ||
657 | -- restart | ||
658 | State:initBoard() | ||
659 | return | ||
660 | elseif s == 3 then | ||
661 | -- choose puzzle | ||
662 | if puzzleList() then | ||
663 | return | ||
664 | end | ||
665 | elseif s == 4 then | ||
666 | -- zoom | ||
667 | State.scale = State.scale + 1 | ||
668 | if State.scale > 4 then | ||
669 | State.scale = 1 | ||
670 | end | ||
671 | menu[5] = "Zoom " .. State.scale - 1 | ||
672 | elseif s == 5 then | ||
673 | -- save | ||
674 | if State:saveGame() then | ||
675 | return | ||
676 | end | ||
677 | elseif s == 6 then | ||
678 | -- save and quit | ||
679 | if State:saveGame() then | ||
680 | os.exit() | ||
681 | end | ||
682 | elseif s == 7 then | ||
683 | -- quit | ||
684 | os.exit() | ||
685 | elseif s == -2 then | ||
686 | -- back button pressed | ||
687 | return | ||
688 | else | ||
689 | -- something strange happened | ||
690 | rb.splash(rb.HZ * 2, "Invalid menu index: "..s) | ||
691 | end | ||
692 | end | ||
693 | end | ||
694 | |||
695 | function puzzleList() | ||
696 | if rb.dir_exists(userdir) then | ||
697 | local files = {} | ||
698 | for file in luadir.dir(userdir) do | ||
699 | if file ~= '.' and file ~= '..' then | ||
700 | table.insert(files, file) | ||
701 | end | ||
702 | end | ||
703 | |||
704 | table.sort(files) | ||
705 | local udir = userdir .. "/" | ||
706 | if #files > 0 then | ||
707 | local s = rb.do_menu("Puzzles", files, nil, false) | ||
708 | if s >= 0 and s < #files then | ||
709 | if State:loadFile(udir..files[s+1]) then | ||
710 | return true -- return to puzzle screen | ||
711 | else | ||
712 | -- puzzle failed to load, return to main menu | ||
713 | return false | ||
714 | end | ||
715 | elseif s == -2 then | ||
716 | -- back button pressed, return to main menu | ||
717 | return false | ||
718 | else | ||
719 | -- something strange happened | ||
720 | rb.splash(rb.HZ * 2, "Invalid menu index: "..s) | ||
721 | return false | ||
722 | end | ||
723 | else | ||
724 | rb.splash(rb.HZ * 2, "No puzzles found! Put .picross files in " .. userdir) | ||
725 | return false | ||
726 | end | ||
727 | else | ||
728 | rb.splash(rb.HZ * 2, "Put .picross files in " .. userdir) | ||
729 | return false | ||
730 | end | ||
731 | end | ||
732 | |||
733 | function viewPicture() | ||
734 | rb.lcd_clear_display() | ||
735 | |||
736 | -- draw filled squares as pixels (scaled 2x) | ||
737 | for r = State.numbersh + 1, State.boardh do | ||
738 | for c = State.numbersw + 1, State.boardw do | ||
739 | if State.board[r][c] == '*' then | ||
740 | --rb.lcd_drawpixel(c - State.numbersw, r - State.numbersh) | ||
741 | local px = (c - State.numbersw) * State.scale - State.scale + 1 | ||
742 | local py = (r - State.numbersh) * State.scale - State.scale + 1 | ||
743 | |||
744 | rb.lcd_fillrect(px, py, State.scale, State.scale) | ||
745 | end | ||
746 | end | ||
747 | end | ||
748 | |||
749 | rb.lcd_update() | ||
750 | |||
751 | -- exit on button press | ||
752 | while true do | ||
753 | local action = rb.get_plugin_action(0) | ||
754 | |||
755 | if action == rb.actions.PLA_EXIT | ||
756 | or action == rb.actions.PLA_CANCEL | ||
757 | or action == rb.actions.PLA_SELECT then | ||
758 | return | ||
759 | end | ||
760 | |||
761 | rb.yield() | ||
762 | end | ||
763 | end | ||
764 | |||
765 | if not State:loadSave() then | ||
766 | if not State:loadDefault() then | ||
767 | return; | ||
768 | end | ||
769 | end | ||
770 | |||
771 | local act = rb.actions | ||
772 | local action = act.ACTION_NONE | ||
773 | local lockdraw = false | ||
774 | |||
775 | while true do | ||
776 | action = rb.get_plugin_action(0) | ||
777 | if action == rb.actions.PLA_EXIT then | ||
778 | lockdraw = false | ||
779 | mainMenu() | ||
780 | elseif action == act.PLA_UP or action == act.PLA_UP_REPEAT then | ||
781 | State:moveCursor('up') | ||
782 | elseif action == act.PLA_DOWN or action == act.PLA_DOWN_REPEAT then | ||
783 | State:moveCursor('down') | ||
784 | elseif action == act.PLA_LEFT or action == act.PLA_LEFT_REPEAT then | ||
785 | State:moveCursor('left') | ||
786 | elseif action == act.PLA_RIGHT or action == act.PLA_RIGHT_REPEAT then | ||
787 | State:moveCursor('right') | ||
788 | elseif action == act.PLA_SELECT then | ||
789 | if lockdraw then | ||
790 | lockdraw = lockdraw - 1 | ||
791 | if lockdraw < 0 then | ||
792 | lockdraw = false | ||
793 | elseif lockdraw == 1 then | ||
794 | rb.splash(50, "clear") | ||
795 | else | ||
796 | rb.splash(50, "invert") | ||
797 | end | ||
798 | else | ||
799 | State:fillSquare() | ||
800 | end | ||
801 | action = act.ACTION_NONE | ||
802 | elseif action == act.PLA_SELECT_REPEAT then | ||
803 | if State.freedraw and not lockdraw then | ||
804 | lockdraw = 2 | ||
805 | rb.splash(50, "draw") | ||
806 | action = act.ACTION_NONE | ||
807 | end | ||
808 | elseif action == act.PLA_CANCEL then | ||
809 | State:eliminateSquare() | ||
810 | action = act.ACTION_NONE | ||
811 | else | ||
812 | action = act.ACTION_NONE | ||
813 | end | ||
814 | |||
815 | if lockdraw and action ~= act.ACTION_NONE then | ||
816 | State:fillSquare(lockdraw) | ||
817 | end | ||
818 | |||
819 | State:drawBoard() | ||
820 | |||
821 | rb.yield() | ||
822 | end | ||
diff --git a/apps/plugins/picross/picross.make b/apps/plugins/picross/picross.make new file mode 100644 index 0000000000..ead5ba482a --- /dev/null +++ b/apps/plugins/picross/picross.make | |||
@@ -0,0 +1,24 @@ | |||
1 | # __________ __ ___. | ||
2 | # Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
3 | # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
4 | # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
5 | # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
6 | # \/ \/ \/ \/ \/ | ||
7 | # $Id$ | ||
8 | # | ||
9 | |||
10 | PICRSCR_SRCDIR := $(APPSDIR)/plugins/picross | ||
11 | PICRSCR_BUILDDIR := $(BUILDDIR)/apps/plugins/.picross | ||
12 | PICRSCRS := $(wildcard $(PICRSCR_SRCDIR)/*.picross) | ||
13 | |||
14 | #DUMMY := $(info [${PICRSCRS}]) | ||
15 | |||
16 | DUMMY : all | ||
17 | |||
18 | all: $(subst $(PICRSCR_SRCDIR)/,$(PICRSCR_BUILDDIR)/,$(PICRSCRS)) | ||
19 | |||
20 | $(PICRSCR_BUILDDIR)/%.picross: $(PICRSCR_SRCDIR)/%.picross | $(PICRSCR_BUILDDIR) | ||
21 | $(call PRINTS,CP $(subst $(APPSDIR)/,,$<))cp $< $@ | ||
22 | |||
23 | $(PICRSCR_BUILDDIR): | ||
24 | $(call PRINTS,MKDIR $@)mkdir -p $(PICRSCR_BUILDDIR)/ | ||
diff --git a/apps/plugins/picross/picross_default.picross b/apps/plugins/picross/picross_default.picross new file mode 100755 index 0000000000..ad7643b79e --- /dev/null +++ b/apps/plugins/picross/picross_default.picross | |||
@@ -0,0 +1,7 @@ | |||
1 | # simple default puzzle | ||
2 | |||
3 | ****..*...*.. | ||
4 | *...*.*...*.. | ||
5 | ****..*.***** | ||
6 | *.....*...*.. | ||
7 | *.....*...*.. | ||
diff --git a/apps/plugins/picross/rb.picross b/apps/plugins/picross/rb.picross new file mode 100644 index 0000000000..bb63b506f5 --- /dev/null +++ b/apps/plugins/picross/rb.picross | |||
@@ -0,0 +1,7 @@ | |||
1 | #open source jukebox firmware | ||
2 | |||
3 | ****...**...***.*..*.............. | ||
4 | *...*.*..*.*....*.*.*............. | ||
5 | ****..*..*.*....**..***...**..*..* | ||
6 | *..**.*..*.*....*.*.*..*.*..*..**. | ||
7 | *...*..**...***.*..****...**..*..* | ||
diff --git a/apps/radio/radio.c b/apps/radio/radio.c index bf8ad865dd..bf36f1d32d 100644 --- a/apps/radio/radio.c +++ b/apps/radio/radio.c | |||
@@ -167,6 +167,24 @@ bool in_radio_screen(void) | |||
167 | return in_screen; | 167 | return in_screen; |
168 | } | 168 | } |
169 | 169 | ||
170 | /* Keep freq on the grid for the current region */ | ||
171 | int snap_freq_to_grid(int freq) | ||
172 | { | ||
173 | const struct fm_region_data * const fmr = | ||
174 | &fm_region_data[global_settings.fm_region]; | ||
175 | |||
176 | /* Range clamp if out of range or just round to nearest */ | ||
177 | if (freq < fmr->freq_min) | ||
178 | freq = fmr->freq_min; | ||
179 | else if (freq > fmr->freq_max) | ||
180 | freq = fmr->freq_max; | ||
181 | else | ||
182 | freq = (freq - fmr->freq_min + fmr->freq_step/2) / | ||
183 | fmr->freq_step * fmr->freq_step + fmr->freq_min; | ||
184 | |||
185 | return freq; | ||
186 | } | ||
187 | |||
170 | /* TODO: Move some more of the control functionality to firmware | 188 | /* TODO: Move some more of the control functionality to firmware |
171 | and clean up the mess */ | 189 | and clean up the mess */ |
172 | 190 | ||
@@ -186,7 +204,8 @@ void radio_start(void) | |||
186 | /* clear flag before any yielding */ | 204 | /* clear flag before any yielding */ |
187 | radio_status &= ~FMRADIO_START_PAUSED; | 205 | radio_status &= ~FMRADIO_START_PAUSED; |
188 | 206 | ||
189 | curr_freq = global_status.last_frequency * fmr->freq_step + fmr->freq_min; | 207 | /* ensure the frequency is in range otherwise bad things happen --Bilgus */ |
208 | curr_freq = snap_freq_to_grid(global_status.last_frequency * fmr->freq_step + fmr->freq_min); | ||
190 | 209 | ||
191 | tuner_set(RADIO_SLEEP, 0); /* wake up the tuner */ | 210 | tuner_set(RADIO_SLEEP, 0); /* wake up the tuner */ |
192 | 211 | ||
@@ -261,24 +280,6 @@ bool radio_hardware_present(void) | |||
261 | return tuner_get(RADIO_PRESENT); | 280 | return tuner_get(RADIO_PRESENT); |
262 | } | 281 | } |
263 | 282 | ||
264 | /* Keep freq on the grid for the current region */ | ||
265 | int snap_freq_to_grid(int freq) | ||
266 | { | ||
267 | const struct fm_region_data * const fmr = | ||
268 | &fm_region_data[global_settings.fm_region]; | ||
269 | |||
270 | /* Range clamp if out of range or just round to nearest */ | ||
271 | if (freq < fmr->freq_min) | ||
272 | freq = fmr->freq_min; | ||
273 | else if (freq > fmr->freq_max) | ||
274 | freq = fmr->freq_max; | ||
275 | else | ||
276 | freq = (freq - fmr->freq_min + fmr->freq_step/2) / | ||
277 | fmr->freq_step * fmr->freq_step + fmr->freq_min; | ||
278 | |||
279 | return freq; | ||
280 | } | ||
281 | |||
282 | void remember_frequency(void) | 283 | void remember_frequency(void) |
283 | { | 284 | { |
284 | const struct fm_region_data * const fmr = | 285 | const struct fm_region_data * const fmr = |
diff --git a/apps/recorder/jpeg_idct_arm.S b/apps/recorder/jpeg_idct_arm.S index 1f2603da1b..e706a17384 100644 --- a/apps/recorder/jpeg_idct_arm.S +++ b/apps/recorder/jpeg_idct_arm.S | |||
@@ -24,6 +24,8 @@ | |||
24 | #include "config.h" | 24 | #include "config.h" |
25 | #include "apps/core_asmdefs.h" | 25 | #include "apps/core_asmdefs.h" |
26 | 26 | ||
27 | .syntax unified | ||
28 | |||
27 | .section .text | 29 | .section .text |
28 | .align 2 | 30 | .align 2 |
29 | .global jpeg_idct1h | 31 | .global jpeg_idct1h |
diff --git a/apps/settings.h b/apps/settings.h index 2277805fec..e3b11430cd 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -163,7 +163,7 @@ enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, SHOW_ID3DB, | |||
163 | 163 | ||
164 | /* file and dir sort options */ | 164 | /* file and dir sort options */ |
165 | enum { SORT_ALPHA, SORT_DATE, SORT_DATE_REVERSED, SORT_TYPE, /* available as settings */ | 165 | enum { SORT_ALPHA, SORT_DATE, SORT_DATE_REVERSED, SORT_TYPE, /* available as settings */ |
166 | SORT_ALPHA_REVERSED, SORT_TYPE_REVERSED }; /* internal use only */ | 166 | SORT_ALPHA_REVERSED, SORT_TYPE_REVERSED, SORT_AS_FILE }; /* internal use only */ |
167 | enum { SORT_INTERPRET_AS_DIGIT, SORT_INTERPRET_AS_NUMBER }; | 167 | enum { SORT_INTERPRET_AS_DIGIT, SORT_INTERPRET_AS_NUMBER }; |
168 | 168 | ||
169 | /* recursive dir insert options */ | 169 | /* recursive dir insert options */ |
diff --git a/apps/tree.c b/apps/tree.c index 2e82b165af..58457c2d71 100644 --- a/apps/tree.c +++ b/apps/tree.c | |||
@@ -466,6 +466,13 @@ static int update_dir(void) | |||
466 | icon = tc.browse->icon; | 466 | icon = tc.browse->icon; |
467 | if (icon == NOICON) | 467 | if (icon == NOICON) |
468 | icon = filetype_get_icon(ATTR_DIRECTORY); | 468 | icon = filetype_get_icon(ATTR_DIRECTORY); |
469 | /* display sub directories in the title of plugin browser */ | ||
470 | if (tc.dirlevel > 0 && *tc.dirfilter == SHOW_PLUGINS) | ||
471 | { | ||
472 | char *subdir = strrchr(tc.currdir, '/'); | ||
473 | if (subdir) | ||
474 | title = subdir + 1; /* step past the separator */ | ||
475 | } | ||
469 | } | 476 | } |
470 | else | 477 | else |
471 | { | 478 | { |
@@ -1056,7 +1063,7 @@ int rockbox_browse(struct browse_context *browse) | |||
1056 | int last_context; | 1063 | int last_context; |
1057 | /* don't reset if its the same browse already loaded */ | 1064 | /* don't reset if its the same browse already loaded */ |
1058 | if (tc.browse != browse || | 1065 | if (tc.browse != browse || |
1059 | !(tc.currdir[1] && strcmp(tc.currdir, browse->root) == 0)) | 1066 | !(tc.currdir[1] && strstr(tc.currdir, browse->root) != NULL)) |
1060 | { | 1067 | { |
1061 | tc.browse = browse; | 1068 | tc.browse = browse; |
1062 | tc.selected_item = 0; | 1069 | tc.selected_item = 0; |
diff --git a/docs/CREDITS b/docs/CREDITS index 363c7b7dfb..fba9aed0d3 100644 --- a/docs/CREDITS +++ b/docs/CREDITS | |||
@@ -718,6 +718,8 @@ Mihaly 'Hermit' Horvath | |||
718 | Uwe Kleine-König | 718 | Uwe Kleine-König |
719 | JJ Style | 719 | JJ Style |
720 | Jerry Chapman | 720 | Jerry Chapman |
721 | Leander Lismond | ||
722 | Eren Akpolat | ||
721 | 723 | ||
722 | The libmad team | 724 | The libmad team |
723 | The wavpack team | 725 | The wavpack team |
diff --git a/firmware/asm/arm/lcd-as-memframe.S b/firmware/asm/arm/lcd-as-memframe.S index d42b2a920d..f69f6e5080 100644 --- a/firmware/asm/arm/lcd-as-memframe.S +++ b/firmware/asm/arm/lcd-as-memframe.S | |||
@@ -24,6 +24,8 @@ | |||
24 | #include "config.h" | 24 | #include "config.h" |
25 | #include "cpu.h" | 25 | #include "cpu.h" |
26 | 26 | ||
27 | .syntax unified | ||
28 | |||
27 | /**************************************************************************** | 29 | /**************************************************************************** |
28 | * void lcd_copy_buffer_rect(fb_data *dst, fb_data *src, int width, | 30 | * void lcd_copy_buffer_rect(fb_data *dst, fb_data *src, int width, |
29 | * int height); | 31 | * int height); |
diff --git a/firmware/asm/arm/memcpy.S b/firmware/asm/arm/memcpy.S index 86fc6b7930..1fbb6660e9 100644 --- a/firmware/asm/arm/memcpy.S +++ b/firmware/asm/arm/memcpy.S | |||
@@ -35,6 +35,8 @@ | |||
35 | #define push lsr | 35 | #define push lsr |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | .syntax unified | ||
39 | |||
38 | /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ | 40 | /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ |
39 | /* Prototype: void *mempcpy(void *dest, const void *src, size_t n); */ | 41 | /* Prototype: void *mempcpy(void *dest, const void *src, size_t n); */ |
40 | 42 | ||
diff --git a/firmware/asm/arm/memmove.S b/firmware/asm/arm/memmove.S index e5c9b42928..cf22a74622 100644 --- a/firmware/asm/arm/memmove.S +++ b/firmware/asm/arm/memmove.S | |||
@@ -35,6 +35,8 @@ | |||
35 | #define push lsr | 35 | #define push lsr |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | .syntax unified | ||
39 | |||
38 | .text | 40 | .text |
39 | 41 | ||
40 | /* | 42 | /* |
diff --git a/firmware/asm/arm/memset.S b/firmware/asm/arm/memset.S index d727f2a5ec..ef5cdb5819 100644 --- a/firmware/asm/arm/memset.S +++ b/firmware/asm/arm/memset.S | |||
@@ -20,6 +20,8 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include "config.h" | 21 | #include "config.h" |
22 | 22 | ||
23 | .syntax unified | ||
24 | |||
23 | .section .icode,"ax",%progbits | 25 | .section .icode,"ax",%progbits |
24 | 26 | ||
25 | .align 2 | 27 | .align 2 |
diff --git a/firmware/asm/arm/memset16.S b/firmware/asm/arm/memset16.S index 226eac39e1..851b9207a2 100644 --- a/firmware/asm/arm/memset16.S +++ b/firmware/asm/arm/memset16.S | |||
@@ -20,6 +20,8 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include "config.h" | 21 | #include "config.h" |
22 | 22 | ||
23 | .syntax unified | ||
24 | |||
23 | .section .icode,"ax",%progbits | 25 | .section .icode,"ax",%progbits |
24 | 26 | ||
25 | .align 2 | 27 | .align 2 |
diff --git a/firmware/export/config.h b/firmware/export/config.h index 80d59ea836..9812db9161 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h | |||
@@ -1018,14 +1018,19 @@ Lyre prototype 1 */ | |||
1018 | * These macros are for switching on unified syntax in inline assembly. | 1018 | * These macros are for switching on unified syntax in inline assembly. |
1019 | * Older versions of GCC emit assembly in divided syntax with no option | 1019 | * Older versions of GCC emit assembly in divided syntax with no option |
1020 | * to enable unified syntax. | 1020 | * to enable unified syntax. |
1021 | * | ||
1022 | * FIXME: This needs to be looked at after the toolchain bump | ||
1023 | */ | 1021 | */ |
1022 | #if (__GNUC__ < 8) | ||
1024 | #define BEGIN_ARM_ASM_SYNTAX_UNIFIED ".syntax unified\n" | 1023 | #define BEGIN_ARM_ASM_SYNTAX_UNIFIED ".syntax unified\n" |
1025 | #define END_ARM_ASM_SYNTAX_UNIFIED ".syntax divided\n" | 1024 | #define END_ARM_ASM_SYNTAX_UNIFIED ".syntax divided\n" |
1025 | #else | ||
1026 | #define BEGIN_ARM_ASM_SYNTAX_UNIFIED | ||
1027 | #define END_ARM_ASM_SYNTAX_UNIFIED | ||
1028 | #endif | ||
1026 | 1029 | ||
1027 | #if defined(CPU_ARM) && defined(__ASSEMBLER__) | 1030 | #if defined(CPU_ARM) && defined(__ASSEMBLER__) |
1031 | #if (__GNUC__ < 8) | ||
1028 | .syntax unified | 1032 | .syntax unified |
1033 | #endif | ||
1029 | /* ARMv4T doesn't switch the T bit when popping pc directly, we must use BX */ | 1034 | /* ARMv4T doesn't switch the T bit when popping pc directly, we must use BX */ |
1030 | .macro ldmpc cond="", order="ia", regs | 1035 | .macro ldmpc cond="", order="ia", regs |
1031 | #if ARM_ARCH == 4 && defined(USE_THUMB) | 1036 | #if ARM_ARCH == 4 && defined(USE_THUMB) |
@@ -1043,6 +1048,9 @@ Lyre prototype 1 */ | |||
1043 | ldr\cond pc, [sp], #4 | 1048 | ldr\cond pc, [sp], #4 |
1044 | #endif | 1049 | #endif |
1045 | .endm | 1050 | .endm |
1051 | #if (__GNUC__ < 8) | ||
1052 | .syntax divided | ||
1053 | #endif | ||
1046 | #endif | 1054 | #endif |
1047 | 1055 | ||
1048 | #if defined(CPU_COLDFIRE) && defined(__ASSEMBLER__) | 1056 | #if defined(CPU_COLDFIRE) && defined(__ASSEMBLER__) |
diff --git a/firmware/target/arm/ata-as-arm.S b/firmware/target/arm/ata-as-arm.S index 16c2928bf1..cec4a7e235 100644 --- a/firmware/target/arm/ata-as-arm.S +++ b/firmware/target/arm/ata-as-arm.S | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include "config.h" | 22 | #include "config.h" |
23 | 23 | ||
24 | .syntax unified | ||
24 | 25 | ||
25 | #if CONFIG_CPU == PP5002 | 26 | #if CONFIG_CPU == PP5002 |
26 | /* Causes ATA retries on iPod G3 probably related to improper controller | 27 | /* Causes ATA retries on iPod G3 probably related to improper controller |
diff --git a/firmware/target/arm/ipod/video/lcd-as-video.S b/firmware/target/arm/ipod/video/lcd-as-video.S index 7d6caef448..dcef7c0a95 100644 --- a/firmware/target/arm/ipod/video/lcd-as-video.S +++ b/firmware/target/arm/ipod/video/lcd-as-video.S | |||
@@ -21,6 +21,8 @@ | |||
21 | 21 | ||
22 | #include "config.h" | 22 | #include "config.h" |
23 | 23 | ||
24 | .syntax unified | ||
25 | |||
24 | .section .icode, "ax", %progbits | 26 | .section .icode, "ax", %progbits |
25 | 27 | ||
26 | /**************************************************************************** | 28 | /**************************************************************************** |
diff --git a/firmware/target/mips/ingenic_x1000/app.lds b/firmware/target/mips/ingenic_x1000/app.lds index fe06e1cd8d..a1e84fb9cf 100644 --- a/firmware/target/mips/ingenic_x1000/app.lds +++ b/firmware/target/mips/ingenic_x1000/app.lds | |||
@@ -153,3 +153,8 @@ SECTIONS | |||
153 | *(.rel.dyn); | 153 | *(.rel.dyn); |
154 | } | 154 | } |
155 | } | 155 | } |
156 | |||
157 | #if defined(HAVE_NOCROSSREFS_TO) && defined(HAVE_INIT_ATTR) | ||
158 | /* Prevent accidental references to the .init section from other sections */ | ||
159 | NOCROSSREFS_TO(.init .text .iram .tcsm); | ||
160 | #endif | ||
diff --git a/lib/arm_support/support-arm.S b/lib/arm_support/support-arm.S index 3af0c70975..d12392eeb3 100644 --- a/lib/arm_support/support-arm.S +++ b/lib/arm_support/support-arm.S | |||
@@ -30,6 +30,8 @@ | |||
30 | 30 | ||
31 | #include <config.h> | 31 | #include <config.h> |
32 | 32 | ||
33 | .syntax unified | ||
34 | |||
33 | .macro ARM_SDIV32_PRE numerator, divisor, sign | 35 | .macro ARM_SDIV32_PRE numerator, divisor, sign |
34 | /* sign[31] = divisor sign */ | 36 | /* sign[31] = divisor sign */ |
35 | ands \sign, \divisor, #1<<31 | 37 | ands \sign, \divisor, #1<<31 |
diff --git a/lib/rbcodec/codecs/demac/libdemac/udiv32_arm.S b/lib/rbcodec/codecs/demac/libdemac/udiv32_arm.S index 1d19160a91..514bae2949 100644 --- a/lib/rbcodec/codecs/demac/libdemac/udiv32_arm.S +++ b/lib/rbcodec/codecs/demac/libdemac/udiv32_arm.S | |||
@@ -29,6 +29,9 @@ | |||
29 | ****************************************************************************/ | 29 | ****************************************************************************/ |
30 | 30 | ||
31 | #include "config.h" | 31 | #include "config.h" |
32 | |||
33 | .syntax unified | ||
34 | |||
32 | /* On targets with codec iram, a header file will be generated after an initial | 35 | /* On targets with codec iram, a header file will be generated after an initial |
33 | link of the APE codec, stating the amount of IRAM remaining for use by the | 36 | link of the APE codec, stating the amount of IRAM remaining for use by the |
34 | reciprocal lookup table. */ | 37 | reciprocal lookup table. */ |
diff --git a/lib/rbcodec/codecs/libtta/filter_arm.S b/lib/rbcodec/codecs/libtta/filter_arm.S index 10f1491796..d801a52419 100644 --- a/lib/rbcodec/codecs/libtta/filter_arm.S +++ b/lib/rbcodec/codecs/libtta/filter_arm.S | |||
@@ -26,6 +26,8 @@ | |||
26 | * void hybrid_filter(fltst *fs, int *in) | 26 | * void hybrid_filter(fltst *fs, int *in) |
27 | */ | 27 | */ |
28 | 28 | ||
29 | .syntax unified | ||
30 | |||
29 | #ifdef USE_IRAM | 31 | #ifdef USE_IRAM |
30 | .section .icode, "ax", %progbits | 32 | .section .icode, "ax", %progbits |
31 | #else | 33 | #else |
diff --git a/lib/rbcodec/dsp/dsp_arm.S b/lib/rbcodec/dsp/dsp_arm.S index 864abee4b6..b17c94fe6c 100644 --- a/lib/rbcodec/dsp/dsp_arm.S +++ b/lib/rbcodec/dsp/dsp_arm.S | |||
@@ -22,6 +22,7 @@ | |||
22 | ****************************************************************************/ | 22 | ****************************************************************************/ |
23 | #include "rbcodecconfig.h" | 23 | #include "rbcodecconfig.h" |
24 | 24 | ||
25 | .syntax unified | ||
25 | /**************************************************************************** | 26 | /**************************************************************************** |
26 | * void channel_mode_proc_mono(struct dsp_proc_entry *this, | 27 | * void channel_mode_proc_mono(struct dsp_proc_entry *this, |
27 | * struct dsp_buffer **buf_p) | 28 | * struct dsp_buffer **buf_p) |
diff --git a/lib/rbcodec/dsp/dsp_arm_v6.S b/lib/rbcodec/dsp/dsp_arm_v6.S index aa27ec90f6..facd3facbd 100644 --- a/lib/rbcodec/dsp/dsp_arm_v6.S +++ b/lib/rbcodec/dsp/dsp_arm_v6.S | |||
@@ -20,6 +20,7 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include "rbcodecconfig.h" | 21 | #include "rbcodecconfig.h" |
22 | 22 | ||
23 | .syntax unified | ||
23 | /**************************************************************************** | 24 | /**************************************************************************** |
24 | * void sample_output_mono(struct sample_io_data *this, | 25 | * void sample_output_mono(struct sample_io_data *this, |
25 | * struct dsp_buffer *src, | 26 | * struct dsp_buffer *src, |
diff --git a/lib/unwarminder/safe_read.S b/lib/unwarminder/safe_read.S index ce4913870c..557f3dca31 100644 --- a/lib/unwarminder/safe_read.S +++ b/lib/unwarminder/safe_read.S | |||
@@ -20,6 +20,8 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include "config.h" | 21 | #include "config.h" |
22 | 22 | ||
23 | .syntax unified | ||
24 | |||
23 | .data | 25 | .data |
24 | was_aborted: | 26 | was_aborted: |
25 | .word 0 | 27 | .word 0 |
diff --git a/manual/main_menu/main.tex b/manual/main_menu/main.tex index 9a75689940..fced43ab98 100644 --- a/manual/main_menu/main.tex +++ b/manual/main_menu/main.tex | |||
@@ -284,7 +284,7 @@ settings. With a shortcut, | |||
284 | a \fname{.cfg} loaded) | 284 | a \fname{.cfg} loaded) |
285 | \item The file browser can be opened with the cursor positioned at | 285 | \item The file browser can be opened with the cursor positioned at |
286 | a specified file or folder | 286 | a specified file or folder |
287 | \item A file's or folder's ``Current Playlist'' context menu item can | 287 | \item A file's or folder's ``Playing Next...'' context menu item can |
288 | be displayed | 288 | be displayed |
289 | \item A setting can be configured (any which can be added to the | 289 | \item A setting can be configured (any which can be added to the |
290 | \setting{Quick Screen}) | 290 | \setting{Quick Screen}) |
@@ -307,7 +307,7 @@ each item to be displayed. Each shortcut looks like the following: | |||
307 | data: <what the shortcut actually links to> | 307 | data: <what the shortcut actually links to> |
308 | name: <what the shortcut should be displayed as> | 308 | name: <what the shortcut should be displayed as> |
309 | icon: <number of the theme icon to use (see \wikilink{CustomIcons})> | 309 | icon: <number of the theme icon to use (see \wikilink{CustomIcons})> |
310 | talkclip: <filename of a talk clip to speak when voice menus are enabled> | 310 | talkclip: <full path to a talk clip to speak when voice menus are enabled> (example: \fname{/.rockbox/filename.talk}) |
311 | \end{example} | 311 | \end{example} |
312 | 312 | ||
313 | Only ``type'' and ``data'' are required (except if type is ``separator'' in which case | 313 | Only ``type'' and ``data'' are required (except if type is ``separator'' in which case |
diff --git a/manual/rockbox_interface/tagcache.tex b/manual/rockbox_interface/tagcache.tex index 91c0255750..3c3e6d2df8 100644 --- a/manual/rockbox_interface/tagcache.tex +++ b/manual/rockbox_interface/tagcache.tex | |||
@@ -47,30 +47,34 @@ with logging | |||
47 | \item[Load To RAM] | 47 | \item[Load To RAM] |
48 | The database can either be kept on \disk{} (to save memory), or | 48 | The database can either be kept on \disk{} (to save memory), or |
49 | loaded into RAM (for fast browsing). Setting this to \setting{Yes} loads | 49 | loaded into RAM (for fast browsing). Setting this to \setting{Yes} loads |
50 | the database to RAM, allowing faster browsing and searching. Setting this | 50 | the database to RAM, beginning with the next reboot, allowing faster browsing and |
51 | option to \setting{No} keeps the database on the \disk{}, meaning slower | 51 | searching. Setting this option to \setting{No} keeps the database on the \disk{}, |
52 | browsing but it does not use extra RAM and saves some battery on boot up. | 52 | meaning slower browsing but it does not use extra RAM and saves some battery on |
53 | 53 | boot up. | |
54 | |||
54 | \opt{HAVE_DISK_STORAGE}{ | 55 | \opt{HAVE_DISK_STORAGE}{ |
55 | If you browse your music frequently using the database, you should | 56 | If you browse your music frequently using the database, you should |
56 | load to RAM, as this will reduce the overall battery consumption because | 57 | load to RAM, as this will reduce the overall battery consumption because |
57 | the disk will not need to spin on each search. | 58 | the disk will not need to spin on each search. |
58 | } | 59 | } |
59 | 60 | ||
60 | \note{When Load to RAM is turned on, and the directory cache is enabled as well, | 61 | \note{When Load to RAM is turned on, and the directory cache (see |
61 | it may take an unexpectedly long amount of time for disk activity to | 62 | \reference{ref:dircache}) is enabled as well, it may take an unexpectedly long amount |
62 | wind down after booting, depending on your library size and player. | 63 | of time for disk activity to wind down after booting, depending on your library size |
64 | and player. | ||
63 | 65 | ||
64 | This can be mitigated by choosing the \setting{Quick} option instead, which causes | 66 | This can be mitigated by choosing the \setting{Quick} option instead, which causes |
65 | the database to ignore cached file references. In that case, you may notice brief | 67 | the database to ignore cached file references. In that case, you should expect brief |
66 | moments of disk activity once the path for a database entry has to be retrieved. | 68 | moments of disk activity whenever the path for a database entry has to be retrieved. |
67 | 69 | ||
68 | Set to \setting{On}, if you plan to take advantage the database's Update function, | 70 | Setting this to \setting{On} may be preferable for reducing disk accesses if you plan to |
69 | or use a WPS that displays multiple upcoming tracks from the current playlist. | 71 | take advantage of \setting{Auto Update}, have enabled \setting{Gather Runtime Data} |
70 | Otherwise, you may notice file names instead of metadata being displayed for those | 72 | (see below for both), enabled \setting{Automatic resume} (see |
71 | tracks.} | 73 | \reference{ref:Autoresumeconfigactual}), or use a WPS that displays multiple upcoming |
74 | tracks from the current playlist. In the latter case, metadata will not be displayed | ||
75 | for those tracks otherwise.} | ||
72 | } | 76 | } |
73 | 77 | ||
74 | \item[Auto Update] | 78 | \item[Auto Update] |
75 | If \setting{Auto update} is set to \setting{on}, each time the \dap{} | 79 | If \setting{Auto update} is set to \setting{on}, each time the \dap{} |
76 | boots, the database will automatically be updated. | 80 | boots, the database will automatically be updated. |
diff --git a/tools/builds.pm b/tools/builds.pm index 0c83548cf2..47fa7d2aef 100644 --- a/tools/builds.pm +++ b/tools/builds.pm | |||
@@ -440,7 +440,11 @@ $releasenotes="/wiki/ReleaseNotes315"; | |||
440 | manualok => 1, # Remove once status moves to 3 | 440 | manualok => 1, # Remove once status moves to 3 |
441 | }, | 441 | }, |
442 | 'aigoerosq' => { | 442 | 'aigoerosq' => { |
443 | name => 'AIGO EROS Q / K', | 443 | name => 'AIGO EROS Q / K (Hosted)', |
444 | status => 2, | ||
445 | }, | ||
446 | 'erosqnative' => { | ||
447 | name => 'AIGO EROS Q / K (Native)', | ||
444 | status => 2, | 448 | status => 2, |
445 | }, | 449 | }, |
446 | 'ihifi770' => { | 450 | 'ihifi770' => { |
diff --git a/tools/buildzip.pl b/tools/buildzip.pl index 43c304ff12..65aca59e13 100755 --- a/tools/buildzip.pl +++ b/tools/buildzip.pl | |||
@@ -167,6 +167,13 @@ sub make_install { | |||
167 | glob_install("$src/rocks/$t/*", "$libdir/rocks/$t", "-m 0755"); | 167 | glob_install("$src/rocks/$t/*", "$libdir/rocks/$t", "-m 0755"); |
168 | } | 168 | } |
169 | 169 | ||
170 | if(-e "$src/rocks/games/sgt_puzzles") { | ||
171 | unless (glob_mkdir("$libdir/rocks/games/sgt_puzzles")) { | ||
172 | return 0; | ||
173 | } | ||
174 | glob_install("$src/rocks/games/sgt_puzzles/*", "$libdir/rocks/games/sgt_puzzles", "-m 0755"); | ||
175 | } | ||
176 | |||
170 | # rocks/viewers/lua | 177 | # rocks/viewers/lua |
171 | unless (glob_mkdir("$libdir/rocks/viewers/lua")) { | 178 | unless (glob_mkdir("$libdir/rocks/viewers/lua")) { |
172 | return 0; | 179 | return 0; |
@@ -183,6 +190,14 @@ sub make_install { | |||
183 | #glob_copy("$ROOT/apps/plugins/lua_scripts/*.lua", "$temp_dir/rocks/demos/lua_scripts/"); | 190 | #glob_copy("$ROOT/apps/plugins/lua_scripts/*.lua", "$temp_dir/rocks/demos/lua_scripts/"); |
184 | } | 191 | } |
185 | 192 | ||
193 | #lua picross puzzles | ||
194 | if(-e "$ROOT/apps/plugins/picross") { | ||
195 | unless (glob_mkdir("$libdir/rocks/games/.picross")) { | ||
196 | return 0; | ||
197 | } | ||
198 | glob_install("$ROOT/apps/plugins/picross/*.picross", "$libdir/rocks/games/.picross"); | ||
199 | } | ||
200 | |||
186 | # all the rest directories | 201 | # all the rest directories |
187 | foreach my $t (@userstuff) { | 202 | foreach my $t (@userstuff) { |
188 | unless (glob_mkdir("$userdir/$t")) { | 203 | unless (glob_mkdir("$userdir/$t")) { |
@@ -373,9 +388,12 @@ sub buildzip { | |||
373 | } | 388 | } |
374 | } | 389 | } |
375 | 390 | ||
376 | # create the file so the database does not try indexing a folder | 391 | # create the file so the database indexer skips this folder |
377 | open(IGNORE, ">$temp_dir/database.ignore") || die "can't open database.ignore"; | 392 | open(IGNORE, ">$temp_dir/database.ignore") || die "can't open database.ignore"; |
378 | close(IGNORE); | 393 | close(IGNORE); |
394 | # create the file so the talkclip generation skips this folder | ||
395 | open(IGNORE, ">$temp_dir/talkclips.ignore") || die "can't open talkclips.ignore"; | ||
396 | close(IGNORE); | ||
379 | 397 | ||
380 | # the samsung ypr0 has a loader script that's needed in the zip | 398 | # the samsung ypr0 has a loader script that's needed in the zip |
381 | if ($modelname =~ /samsungypr[01]/) { | 399 | if ($modelname =~ /samsungypr[01]/) { |
@@ -444,6 +462,12 @@ sub buildzip { | |||
444 | glob_copy("$ROOT/apps/plugins/lua_scripts/*.lua", "$temp_dir/rocks/demos/lua_scripts/"); | 462 | glob_copy("$ROOT/apps/plugins/lua_scripts/*.lua", "$temp_dir/rocks/demos/lua_scripts/"); |
445 | } | 463 | } |
446 | 464 | ||
465 | #lua picross puzzles | ||
466 | if(-e "$ROOT/apps/plugins/picross") { | ||
467 | glob_mkdir("$temp_dir/rocks/games/.picross"); | ||
468 | glob_copy("$ROOT/apps/plugins/picross/*.picross", "$temp_dir/rocks/games/.picross/"); | ||
469 | } | ||
470 | |||
447 | # exclude entries for the image file types not supported by the imageviewer for the target. | 471 | # exclude entries for the image file types not supported by the imageviewer for the target. |
448 | my $viewers = "$ROOT/apps/plugins/viewers.config"; | 472 | my $viewers = "$ROOT/apps/plugins/viewers.config"; |
449 | my $c="cat $viewers | gcc $cppdef -I. -I$firmdir/export -E -P -include config.h -"; | 473 | my $c="cat $viewers | gcc $cppdef -I. -I$firmdir/export -E -P -include config.h -"; |
@@ -505,7 +529,13 @@ sub buildzip { | |||
505 | foreach my $line (@rock_targetdirs) { | 529 | foreach my $line (@rock_targetdirs) { |
506 | if ($line =~ /([^,]*),(.*)/) { | 530 | if ($line =~ /([^,]*),(.*)/) { |
507 | my ($plugin, $dir)=($1, $2); | 531 | my ($plugin, $dir)=($1, $2); |
508 | move("$temp_dir/rocks/${plugin}.rock", "$temp_dir/rocks/$dir/${plugin}.rock"); | 532 | if($dir eq 'games' and substr(${plugin}, 0, 4) eq "sgt-") { |
533 | glob_mkdir("$temp_dir/rocks/$dir/sgt_puzzles"); | ||
534 | move("$temp_dir/rocks/${plugin}.rock", "$temp_dir/rocks/$dir/sgt_puzzles/${plugin}.rock"); | ||
535 | } | ||
536 | else { | ||
537 | move("$temp_dir/rocks/${plugin}.rock", "$temp_dir/rocks/$dir/${plugin}.rock"); | ||
538 | } | ||
509 | if(-e "$temp_dir/rocks/${plugin}.ovl") { | 539 | if(-e "$temp_dir/rocks/${plugin}.ovl") { |
510 | # if there's an "overlay" file for the .rock, move that as | 540 | # if there's an "overlay" file for the .rock, move that as |
511 | # well | 541 | # well |
@@ -533,6 +563,10 @@ sub buildzip { | |||
533 | copy("$ROOT/apps/plugins/sokoban.levels", "$temp_dir/rocks/games/sokoban.levels"); # sokoban levels | 563 | copy("$ROOT/apps/plugins/sokoban.levels", "$temp_dir/rocks/games/sokoban.levels"); # sokoban levels |
534 | copy("$ROOT/apps/plugins/snake2.levels", "$temp_dir/rocks/games/snake2.levels"); # snake2 levels | 564 | copy("$ROOT/apps/plugins/snake2.levels", "$temp_dir/rocks/games/snake2.levels"); # snake2 levels |
535 | copy("$ROOT/apps/plugins/rockbox-fonts.config", "$temp_dir/rocks/viewers/"); | 565 | copy("$ROOT/apps/plugins/rockbox-fonts.config", "$temp_dir/rocks/viewers/"); |
566 | # picross files | ||
567 | copy("$ROOT/apps/plugins/picross_default.picross", "$temp_dir/rocks/games/picross_default.picross"); | ||
568 | copy("$ROOT/apps/plugins/bitmaps/native/picross_numbers.bmp", | ||
569 | "$temp_dir/rocks/games/picross_numbers.bmp"); | ||
536 | } | 570 | } |
537 | 571 | ||
538 | if(-e "$temp_dir/rocks/demos/pictureflow.rock") { | 572 | if(-e "$temp_dir/rocks/demos/pictureflow.rock") { |
diff --git a/tools/configure b/tools/configure index 8a2e499a29..1a03f3f010 100755 --- a/tools/configure +++ b/tools/configure | |||
@@ -4409,15 +4409,14 @@ gccver=`$CC -dumpversion`; | |||
4409 | # system etc to be able to see it easier | 4409 | # system etc to be able to see it easier |
4410 | if [ $uname = "Darwin" ]; then | 4410 | if [ $uname = "Darwin" ]; then |
4411 | ldver=`$LD -v 2>&1 | sed -e 's/[^0-9.-]//g'` | 4411 | ldver=`$LD -v 2>&1 | sed -e 's/[^0-9.-]//g'` |
4412 | # Convert LD version to a number major*100 + minor | ||
4413 | ldnum1=`echo $ldver | cut -d . -f1` | ||
4414 | ldnum2=`echo $ldver | cut -d . -f2` | ||
4415 | ldnum=`(expr $ldnum1 "*" 100 + $ldnum2) 2>/dev/null` | ||
4412 | else | 4416 | else |
4413 | ldver=`$LD --version | sed -n '1p' | sed -e 's/.* \([0-9]*\)\.\([0-9]*\).*/\1\2/'` | 4417 | ldnum=`$LD --version | sed -n '1p' | sed -e 's/.* \([0-9]*\)\.\([0-9]*\).*/\1\2/'` |
4414 | fi | 4418 | fi |
4415 | 4419 | ||
4416 | # Convert LD version to a number major*100 + minor | ||
4417 | ldnum1=`echo $ldver | cut -d . -f1` | ||
4418 | ldnum2=`echo $ldver | cut -d . -f2` | ||
4419 | ldnum=`(expr $ldnum1 "*" 100 + $ldnum2) 2>/dev/null` | ||
4420 | |||
4421 | if test "$ldnum" -ge "227"; then | 4420 | if test "$ldnum" -ge "227"; then |
4422 | have_nocrossrefs_to="#define HAVE_NOCROSSREFS_TO" | 4421 | have_nocrossrefs_to="#define HAVE_NOCROSSREFS_TO" |
4423 | else | 4422 | else |
@@ -4533,7 +4532,11 @@ if [ -z "$arch" ]; then | |||
4533 | elif [ -n "$(echo $cpp_defines | grep -w __arm__)" ]; then | 4532 | elif [ -n "$(echo $cpp_defines | grep -w __arm__)" ]; then |
4534 | arch="arm" | 4533 | arch="arm" |
4535 | # cpp defines like "#define __ARM_ARCH_4TE__ 1" (where we want to extract the 4) | 4534 | # cpp defines like "#define __ARM_ARCH_4TE__ 1" (where we want to extract the 4) |
4536 | arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep __ARM_ARCH | sed -e 's,.*\([0-9]\).*,\1,' | grep -v __ARM_ARCH)" | 4535 | arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep __ARM_ARCH | sed -e 's,.*\([0-9]\).*,\1,' | grep -v __ARM_ARCH | head -1)" |
4536 | if test "$gccnum" -ge "800"; then | ||
4537 | # GCC8+ can natively emit unified asm syntax | ||
4538 | GCCOPTS="$GCCOPTS -masm-syntax-unified" | ||
4539 | fi | ||
4537 | elif [ -n "$(echo $cpp_defines | grep -w __mips__)" ]; then | 4540 | elif [ -n "$(echo $cpp_defines | grep -w __mips__)" ]; then |
4538 | arch="mips" | 4541 | arch="mips" |
4539 | arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep _MIPS_ARCH_MIPS | sed -e 's,.*\([0-9][0-9]\).*,\1,' | grep -v _MIPS_ARCH_MIPS)" | 4542 | arch_version="$(echo $cpp_defines | tr ' ' '\012' | grep _MIPS_ARCH_MIPS | sed -e 's,.*\([0-9][0-9]\).*,\1,' | grep -v _MIPS_ARCH_MIPS)" |
diff --git a/tools/root.make b/tools/root.make index 37aeaadaff..4adb4f4d3d 100644 --- a/tools/root.make +++ b/tools/root.make | |||
@@ -437,6 +437,8 @@ help: | |||
437 | @echo "tools - builds the tools only" | 437 | @echo "tools - builds the tools only" |
438 | @echo "voice - creates the voice clips (voice builds only)" | 438 | @echo "voice - creates the voice clips (voice builds only)" |
439 | @echo "voicetools - builds the voice tools only" | 439 | @echo "voicetools - builds the voice tools only" |
440 | @echo "talkclips - builds talkclips for everything under TALKDIR, skipping existing clips" | ||
441 | @echo "talkclips-force - builds talkclips for everything under TALKDIR, overwriting all existing clips" | ||
440 | @echo "install - installs your build (at PREFIX, defaults to simdisk/ for simulators (no fonts))" | 442 | @echo "install - installs your build (at PREFIX, defaults to simdisk/ for simulators (no fonts))" |
441 | @echo "fullinstall - installs your build (like install, but with fonts)" | 443 | @echo "fullinstall - installs your build (like install, but with fonts)" |
442 | @echo "symlinkinstall - like fullinstall, but with links instead of copying files. (Good for developing on simulator)" | 444 | @echo "symlinkinstall - like fullinstall, but with links instead of copying files. (Good for developing on simulator)" |
diff --git a/tools/updatelang b/tools/updatelang index 61d57de532..6f0012c573 100755 --- a/tools/updatelang +++ b/tools/updatelang | |||
@@ -47,7 +47,7 @@ sub parselangfile { | |||
47 | next; | 47 | next; |
48 | } elsif($line =~ /^ *#/) { | 48 | } elsif($line =~ /^ *#/) { |
49 | push(@comments, "$line\n") if ($pos eq 'lang'); | 49 | push(@comments, "$line\n") if ($pos eq 'lang'); |
50 | # comments are ignored! | 50 | # comments are ignored, but retained! |
51 | next; | 51 | next; |
52 | } elsif ($pos eq 'phrase' && $line =~ /^([^:]+): ?(.*)$/) { | 52 | } elsif ($pos eq 'phrase' && $line =~ /^([^:]+): ?(.*)$/) { |
53 | $thisphrase{$pos}->{$1} = $2; | 53 | $thisphrase{$pos}->{$1} = $2; |
@@ -124,6 +124,37 @@ sub combinetgts { | |||
124 | return %combined; | 124 | return %combined; |
125 | } | 125 | } |
126 | 126 | ||
127 | sub reduceformat($) { | ||
128 | my ($in) = @_; | ||
129 | my $out = ""; | ||
130 | my $infmt = 0; | ||
131 | |||
132 | for (my $i = 0; $i < length($in) ; $i++) { | ||
133 | my $c = substr($in, $i, 1); | ||
134 | if (!$infmt && ($c eq '%')) { | ||
135 | # First char in a format string! | ||
136 | $infmt = 1; | ||
137 | next; | ||
138 | } | ||
139 | next if (!$infmt); | ||
140 | |||
141 | if ($c ne '%') { | ||
142 | # Ignore literal %, otherwise dump specifier over | ||
143 | $out .= $c; | ||
144 | } | ||
145 | |||
146 | # Look for a terminating field: | ||
147 | my $count = $c =~ tr/sSdDuUxXzZ%//; | ||
148 | if ($count) { | ||
149 | $infmt = 0; | ||
150 | next; | ||
151 | } | ||
152 | } | ||
153 | |||
154 | return $out; | ||
155 | } | ||
156 | |||
157 | |||
127 | ################## | 158 | ################## |
128 | 159 | ||
129 | if($#ARGV != 2) { | 160 | if($#ARGV != 2) { |
@@ -332,6 +363,43 @@ foreach my $id (@langorder) { | |||
332 | $lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' is identical to english!\n"; | 363 | $lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' is identical to english!\n"; |
333 | # print "#!! '$id:$tgt' dest identical ('$lp{$tgt}')\n"; | 364 | # print "#!! '$id:$tgt' dest identical ('$lp{$tgt}')\n"; |
334 | } | 365 | } |
366 | if ($id eq 'LANG_VOICED_DATE_FORMAT') { | ||
367 | my $sane = $lp{$tgt}; | ||
368 | $sane =~ tr/YAmd//d; | ||
369 | if (length($sane) != 0) { | ||
370 | $lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' has illegal characters! Restoring from English!\n"; | ||
371 | $lang{$id}{'notes'} .= "### the previously used one is commented below:\n"; | ||
372 | $lang{$id}{'notes'} .= "### $lang{$id}{dest}{$tgt}\n"; | ||
373 | $lang{$id}{'dest'}{$tgt} = $english{$id}{'dest'}{$tgt}; | ||
374 | } | ||
375 | } | ||
376 | my $count1 = $ep{$tgt} =~ tr/%//; | ||
377 | my $count2 = 0; | ||
378 | if (defined($lp{$tgt})) { | ||
379 | $count2 = $lp{$tgt} =~ tr/%//; | ||
380 | } | ||
381 | if ($count1 || $count2) { | ||
382 | my $fmt1 = reduceformat($ep{$tgt}); | ||
383 | my $fmt2 = ""; | ||
384 | if ($count2) { | ||
385 | $fmt2 = reduceformat($lp{$tgt}); | ||
386 | } | ||
387 | if ($fmt1 ne $fmt2) { | ||
388 | $lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' has incorrect format specifiers! Copying from English!\n"; | ||
389 | $lang{$id}{'notes'} .= "### the previously used one is commented below:\n"; | ||
390 | $lang{$id}{'notes'} .= "### $lang{$id}{dest}{$tgt}\n"; | ||
391 | $lang{$id}{'dest'}{$tgt} = $english{$id}{'dest'}{$tgt}; | ||
392 | # print "#!! '$id:$tgt' dest does not match src format args: '$fmt1' vs '$fmt2'\n"; | ||
393 | } | ||
394 | } | ||
395 | if (defined($lp{$tgt})) { | ||
396 | $count2 = $lp{$tgt} =~ tr/"//; | ||
397 | if ($count2 > 0) { | ||
398 | # If it has suspicious characters that are not allowed | ||
399 | $lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' has some suspicious characters, please double-check!\n"; | ||
400 | # print "#!! '$id:$tgt' suspicious characters\n"; | ||
401 | } | ||
402 | } | ||
335 | } | 403 | } |
336 | } | 404 | } |
337 | 405 | ||
@@ -365,13 +433,17 @@ foreach my $id (@langorder) { | |||
365 | $lang{$id}{'voice'}{$tgt} = $english{$id}{'voice'}{$tgt}; | 433 | $lang{$id}{'voice'}{$tgt} = $english{$id}{'voice'}{$tgt}; |
366 | } elsif ($lp{$tgt} ne $ep{$tgt}) { | 434 | } elsif ($lp{$tgt} ne $ep{$tgt}) { |
367 | if ($lp{$tgt} eq '' && $ep{$tgt} ne '') { | 435 | if ($lp{$tgt} eq '' && $ep{$tgt} ne '') { |
368 | # If the lang voice string is blank, complain, and copy from English | 436 | # If the lang voice string is blank, complain and copy from translation |
369 | # print "#!! '$id:$tgt' voice is blank ('$lp{$tgt}' vs '$ep{$tgt}')\n"; | 437 | # print "#!! '$id:$tgt' voice is blank ('$lp{$tgt}' vs '$ep{$tgt}')\n"; |
370 | if ($lang{$id}{'dest'}{$tgt} ne '' && | 438 | if ($lang{$id}{'dest'}{$tgt} ne '' && |
371 | $lang{$id}{'dest'}{$tgt} ne $english{$id}{'dest'}{$tgt}) { | 439 | $lang{$id}{'dest'}{$tgt} ne $english{$id}{'dest'}{$tgt}) { |
372 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is blank! Copying from translated <dest>!\n"; | 440 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is blank! Copying from translated <dest>!\n"; |
373 | $lang{$id}{'voice'}{$tgt} = $lang{$id}{'dest'}{$tgt}; | 441 | $lang{$id}{'voice'}{$tgt} = $lang{$id}{'dest'}{$tgt}; |
374 | 442 | if ($lang{$id}{'voice'}{$tgt} =~ /%"/) { | |
443 | # If it has suspicious characters that are not normally voiced.. | ||
444 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' has some suspicious characters, please double-check!\n"; | ||
445 | #print "#!! '$id:$tgt' suspicious characters\n"; | ||
446 | } | ||
375 | } else { | 447 | } else { |
376 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is blank! Copying from english!\n"; | 448 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is blank! Copying from english!\n"; |
377 | 449 | ||
@@ -397,6 +469,11 @@ foreach my $id (@langorder) { | |||
397 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is identical to english!\n"; | 469 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is identical to english!\n"; |
398 | } | 470 | } |
399 | } | 471 | } |
472 | if (defined($lp{$tgt}) && ($lp{$tgt} =~ /%"/)) { | ||
473 | # If it has suspicious characters that are not normally voiced.. | ||
474 | $lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' has some suspicious characters, please double-check!\n"; | ||
475 | # print "#!! '$id:$tgt' suspicious characters\n"; | ||
476 | } | ||
400 | } | 477 | } |
401 | } | 478 | } |
402 | 479 | ||
diff --git a/tools/voice.pl b/tools/voice.pl index 337407e187..9efc844c10 100755 --- a/tools/voice.pl +++ b/tools/voice.pl | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | use strict; | 18 | use strict; |
19 | use warnings; | 19 | use warnings; |
20 | use utf8; | ||
20 | use File::Basename; | 21 | use File::Basename; |
21 | use File::Copy; | 22 | use File::Copy; |
22 | use vars qw($V $C $t $l $e $E $s $S $i $v $f $F); | 23 | use vars qw($V $C $t $l $e $E $s $S $i $v $f $F); |
@@ -25,8 +26,8 @@ use IPC::Open3; | |||
25 | use Digest::MD5 qw(md5_hex); | 26 | use Digest::MD5 qw(md5_hex); |
26 | use DirHandle; | 27 | use DirHandle; |
27 | use open ':encoding(utf8)'; | 28 | use open ':encoding(utf8)'; |
28 | use open ':std'; | 29 | use Encode::Locale; |
29 | use utf8; | 30 | use Encode; |
30 | 31 | ||
31 | sub printusage { | 32 | sub printusage { |
32 | print <<USAGE | 33 | print <<USAGE |
@@ -562,6 +563,7 @@ sub gentalkclips { | |||
562 | my ($dir, $tts_object, $encoder, $encoder_opts, $tts_engine_opts, $i) = @_; | 563 | my ($dir, $tts_object, $encoder, $encoder_opts, $tts_engine_opts, $i) = @_; |
563 | my $d = new DirHandle $dir; | 564 | my $d = new DirHandle $dir; |
564 | while (my $file = $d->read) { | 565 | while (my $file = $d->read) { |
566 | $file = Encode::decode( locale_fs => $file); | ||
565 | my ($voice, $wav, $enc); | 567 | my ($voice, $wav, $enc); |
566 | my $format = $tts_object->{'format'}; | 568 | my $format = $tts_object->{'format'}; |
567 | 569 | ||
@@ -580,13 +582,13 @@ sub gentalkclips { | |||
580 | if ($file eq '.' || $file eq '..' || $file =~ /\.talk$/) { | 582 | if ($file eq '.' || $file eq '..' || $file =~ /\.talk$/) { |
581 | next; | 583 | next; |
582 | } | 584 | } |
583 | # Element is a dir | 585 | |
584 | if ( -d $path) { | 586 | if ( -d $path) { # Element is a dir |
585 | $enc = sprintf("%s/_dirname.talk", $path); | 587 | $enc = sprintf("%s/_dirname.talk", $path); |
586 | gentalkclips($path, $tts_object, $encoder, $encoder_opts, $tts_engine_opts, $i); | 588 | if (! -e "$path/talkclips.ignore") { # Skip directories containing "talkclips.ignore" |
587 | } | 589 | gentalkclips($path, $tts_object, $encoder, $encoder_opts, $tts_engine_opts, $i); |
588 | # Element is a file | 590 | } |
589 | else { | 591 | } else { # Element is a file |
590 | $enc = sprintf("%s.talk", $path); | 592 | $enc = sprintf("%s.talk", $path); |
591 | $voice =~ s/\.[^\.]*$//; # Trim extension | 593 | $voice =~ s/\.[^\.]*$//; # Trim extension |
592 | } | 594 | } |
diff --git a/utils/themeeditor/quazip/crypt.h b/utils/themeeditor/quazip/crypt.h index 82748c5715..2316f0c604 100644 --- a/utils/themeeditor/quazip/crypt.h +++ b/utils/themeeditor/quazip/crypt.h | |||
@@ -32,7 +32,7 @@ | |||
32 | /*********************************************************************** | 32 | /*********************************************************************** |
33 | * Return the next byte in the pseudo-random sequence | 33 | * Return the next byte in the pseudo-random sequence |
34 | */ | 34 | */ |
35 | static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab) | 35 | static int decrypt_byte(unsigned long* pkeys, const uint32_t* pcrc_32_tab) |
36 | { | 36 | { |
37 | (void) pcrc_32_tab; /* avoid "unused parameter" warning */ | 37 | (void) pcrc_32_tab; /* avoid "unused parameter" warning */ |
38 | unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an | 38 | unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an |
@@ -46,7 +46,7 @@ static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab) | |||
46 | /*********************************************************************** | 46 | /*********************************************************************** |
47 | * Update the encryption keys with the next byte of plain text | 47 | * Update the encryption keys with the next byte of plain text |
48 | */ | 48 | */ |
49 | static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c) | 49 | static int update_keys(unsigned long* pkeys,const uint32_t* pcrc_32_tab,int c) |
50 | { | 50 | { |
51 | (*(pkeys+0)) = CRC32((*(pkeys+0)), c); | 51 | (*(pkeys+0)) = CRC32((*(pkeys+0)), c); |
52 | (*(pkeys+1)) += (*(pkeys+0)) & 0xff; | 52 | (*(pkeys+1)) += (*(pkeys+0)) & 0xff; |
@@ -63,7 +63,7 @@ static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int | |||
63 | * Initialize the encryption keys and the random header according to | 63 | * Initialize the encryption keys and the random header according to |
64 | * the given password. | 64 | * the given password. |
65 | */ | 65 | */ |
66 | static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab) | 66 | static void init_keys(const char* passwd,unsigned long* pkeys,const uint32_t* pcrc_32_tab) |
67 | { | 67 | { |
68 | *(pkeys+0) = 305419896L; | 68 | *(pkeys+0) = 305419896L; |
69 | *(pkeys+1) = 591751049L; | 69 | *(pkeys+1) = 591751049L; |
@@ -93,7 +93,7 @@ static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) | |||
93 | unsigned char *buf; /* where to write header */ | 93 | unsigned char *buf; /* where to write header */ |
94 | int bufSize; | 94 | int bufSize; |
95 | unsigned long* pkeys; | 95 | unsigned long* pkeys; |
96 | const unsigned long* pcrc_32_tab; | 96 | const uint32_t* pcrc_32_tab; |
97 | unsigned long crcForCrypting; | 97 | unsigned long crcForCrypting; |
98 | { | 98 | { |
99 | int n; /* index in random header */ | 99 | int n; /* index in random header */ |
diff --git a/utils/themeeditor/quazip/unzip.c b/utils/themeeditor/quazip/unzip.c index ace7a08837..59bab3ccc1 100644 --- a/utils/themeeditor/quazip/unzip.c +++ b/utils/themeeditor/quazip/unzip.c | |||
@@ -147,7 +147,7 @@ typedef struct | |||
147 | int encrypted; | 147 | int encrypted; |
148 | # ifndef NOUNCRYPT | 148 | # ifndef NOUNCRYPT |
149 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ | 149 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ |
150 | const unsigned long* pcrc_32_tab; | 150 | const uint32_t* pcrc_32_tab; |
151 | # endif | 151 | # endif |
152 | } unz_s; | 152 | } unz_s; |
153 | 153 | ||
@@ -204,7 +204,7 @@ local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) | |||
204 | uLong *pX; | 204 | uLong *pX; |
205 | { | 205 | { |
206 | uLong x ; | 206 | uLong x ; |
207 | int i; | 207 | int i = 0; |
208 | int err; | 208 | int err; |
209 | 209 | ||
210 | err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); | 210 | err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); |
@@ -232,7 +232,7 @@ local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) | |||
232 | uLong *pX; | 232 | uLong *pX; |
233 | { | 233 | { |
234 | uLong x ; | 234 | uLong x ; |
235 | int i; | 235 | int i = 0; |
236 | int err; | 236 | int err; |
237 | 237 | ||
238 | err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); | 238 | err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); |
diff --git a/utils/themeeditor/quazip/zip.c b/utils/themeeditor/quazip/zip.c index 13463fe336..77c8726b3a 100644 --- a/utils/themeeditor/quazip/zip.c +++ b/utils/themeeditor/quazip/zip.c | |||
@@ -130,7 +130,7 @@ typedef struct | |||
130 | int encrypt; | 130 | int encrypt; |
131 | #ifndef NOCRYPT | 131 | #ifndef NOCRYPT |
132 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ | 132 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ |
133 | const unsigned long* pcrc_32_tab; | 133 | const uint32_t* pcrc_32_tab; |
134 | int crypt_header_size; | 134 | int crypt_header_size; |
135 | #endif | 135 | #endif |
136 | } curfile_info; | 136 | } curfile_info; |