summaryrefslogtreecommitdiff
path: root/apps/tree.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-09-03 09:44:08 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-09-03 09:44:08 +0000
commitc521ed128d1afeea9bfad134358f6c3a7df9f2c0 (patch)
tree0ea712643dabad159946129606393858626f53cc /apps/tree.c
parent3d641c92a5886554b181cec78b8d83f870154d6d (diff)
downloadrockbox-c521ed128d1afeea9bfad134358f6c3a7df9f2c0.tar.gz
rockbox-c521ed128d1afeea9bfad134358f6c3a7df9f2c0.zip
Added Randy Wood's ROLO
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2149 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/tree.c')
-rw-r--r--apps/tree.c172
1 files changed, 105 insertions, 67 deletions
diff --git a/apps/tree.c b/apps/tree.c
index b0a30cdbcf..e5fb3c152d 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -42,6 +42,7 @@
42#include "status.h" 42#include "status.h"
43#include "debug.h" 43#include "debug.h"
44#include "ata.h" 44#include "ata.h"
45#include "rolo.h"
45#include "icons.h" 46#include "icons.h"
46 47
47#ifdef HAVE_LCD_BITMAP 48#ifdef HAVE_LCD_BITMAP
@@ -57,7 +58,7 @@
57char name_buffer[NAME_BUFFER_SIZE]; 58char name_buffer[NAME_BUFFER_SIZE];
58int name_buffer_length; 59int name_buffer_length;
59struct entry { 60struct entry {
60 short attr; /* FAT attributes */ 61 short attr; /* FAT attributes + file type flags */
61 char *name; 62 char *name;
62}; 63};
63 64
@@ -126,8 +127,12 @@ extern unsigned char bitmap_icons_6x8[LastIcon][6];
126#define RELEASE_MASK (BUTTON_STOP) 127#define RELEASE_MASK (BUTTON_STOP)
127#endif /* HAVE_RECORDER_KEYPAD */ 128#endif /* HAVE_RECORDER_KEYPAD */
128 129
129#define TREE_ATTR_M3U 0x80 /* unused by FAT attributes */ 130/* using attribute not used by FAT */
130#define TREE_ATTR_MPA 0x40 /* unused by FAT attributes */ 131#define TREE_ATTR_MPA 0x40 /* mpeg audio file */
132#define TREE_ATTR_M3U 0x80 /* playlist */
133#define TREE_ATTR_WPS 0x100 /* wps config file */
134#define TREE_ATTR_MOD 0x200 /* firmware file */
135#define TREE_ATTR_MASK 0xffd0 /* which bits tree.c uses (above + DIR) */
131 136
132static int build_playlist(int start_index) 137static int build_playlist(int start_index)
133{ 138{
@@ -232,9 +237,16 @@ static int showdir(char *path, int start)
232 (!strcasecmp(&entry->d_name[len-4], ".mp2")) || 237 (!strcasecmp(&entry->d_name[len-4], ".mp2")) ||
233 (!strcasecmp(&entry->d_name[len-4], ".mpa"))) 238 (!strcasecmp(&entry->d_name[len-4], ".mpa")))
234 dptr->attr |= TREE_ATTR_MPA; 239 dptr->attr |= TREE_ATTR_MPA;
235 else 240 else if (!strcasecmp(&entry->d_name[len-4], ".m3u"))
236 if (!strcasecmp(&entry->d_name[len-4], ".m3u")) 241 dptr->attr |= TREE_ATTR_M3U;
237 dptr->attr |= TREE_ATTR_M3U; 242 else if (!strcasecmp(&entry->d_name[len-4], ".wps"))
243 dptr->attr |= TREE_ATTR_WPS;
244#ifdef HAVE_RECORDER_KEYPAD
245 else if (!strcasecmp(&entry->d_name[len-4], ".ajz"))
246#else
247 else if (!strcasecmp(&entry->d_name[len-4], ".mod"))
248#endif
249 dptr->attr |= TREE_ATTR_MOD;
238 } 250 }
239 251
240 /* filter non-mp3 or m3u files */ 252 /* filter non-mp3 or m3u files */
@@ -291,17 +303,30 @@ static int showdir(char *path, int start)
291 303
292 len = strlen(dircache[i].name); 304 len = strlen(dircache[i].name);
293 305
294 if ( dircache[i].attr & ATTR_DIRECTORY ) 306 switch ( dircache[i].attr & TREE_ATTR_MASK ) {
295 icon_type = Folder; 307 case ATTR_DIRECTORY:
296 else if ( dircache[i].attr & TREE_ATTR_M3U ) 308 icon_type = Folder;
297 icon_type = Playlist; 309 break;
298 else if ( dircache[i].attr & TREE_ATTR_MPA ) 310
299 icon_type = File; 311 case TREE_ATTR_M3U:
300 else if (!strcasecmp(&dircache[i].name[len-4], ".wps")) 312 icon_type = Playlist;
301 icon_type = Wps; 313 break;
302 else 314
303 icon_type = 0; 315 case TREE_ATTR_MPA:
316 icon_type = File;
317 break;
318
319 case TREE_ATTR_WPS:
320 icon_type = Wps;
321 break;
304 322
323 case TREE_ATTR_MOD:
324 icon_type = Mod_Ajz;
325 break;
326
327 default:
328 icon_type = 0;
329 }
305#ifdef HAVE_LCD_BITMAP 330#ifdef HAVE_LCD_BITMAP
306 if (icon_type) 331 if (icon_type)
307 lcd_bitmap(bitmap_icons_6x8[icon_type], 332 lcd_bitmap(bitmap_icons_6x8[icon_type],
@@ -450,7 +475,6 @@ bool dirbrowse(char *root)
450 int lasti=-1; 475 int lasti=-1;
451 int rc; 476 int rc;
452 int button; 477 int button;
453 int start_index;
454 int tree_max_on_screen; 478 int tree_max_on_screen;
455#ifdef LOADABLE_FONTS 479#ifdef LOADABLE_FONTS
456 int fh; 480 int fh;
@@ -543,68 +567,82 @@ bool dirbrowse(char *root)
543 start=0; 567 start=0;
544 } else { 568 } else {
545 int seed = current_tick; 569 int seed = current_tick;
570 bool play = false;
571 int start_index=0;
546 lcd_stop_scroll(); 572 lcd_stop_scroll();
547 if (file->attr & TREE_ATTR_M3U ) 573 switch ( file->attr & TREE_ATTR_MASK ) {
548 { 574 case TREE_ATTR_M3U:
549 if ( global_settings.resume ) 575 if ( global_settings.resume )
550 snprintf(global_settings.resume_file, 576 snprintf(global_settings.resume_file,
551 MAX_PATH, "%s/%s", 577 MAX_PATH, "%s/%s",
552 currdir, file->name); 578 currdir, file->name);
553 play_list(currdir, file->name, 0, false, 0, seed ); 579 play_list(currdir, file->name, 0, false, 0, seed );
554 start_index = 0; 580 start_index = 0;
555 } 581 play = true;
556 else if (file->attr & TREE_ATTR_MPA ) { 582 break;
557 if ( global_settings.resume ) 583
558 strncpy(global_settings.resume_file, 584 case TREE_ATTR_MPA:
559 currdir, MAX_PATH); 585 if ( global_settings.resume )
560 start_index = build_playlist(dircursor+start); 586 strncpy(global_settings.resume_file,
561 587 currdir, MAX_PATH);
562 /* it is important that we get back the index in 588 start_index = build_playlist(dircursor+start);
563 the (shuffled) list and stor that */ 589
564 start_index = play_list(currdir, NULL, 590 /* it is important that we get back the index in
565 start_index, false, 0, seed); 591 the (shuffled) list and stor that */
566 } 592 start_index = play_list(currdir, NULL,
567 else { 593 start_index, false,
568 /* wps config file? */ 594 0, seed);
569 int len = strlen(file->name); 595 play = true;
570 if (!strcasecmp(&file->name[len-4], ".wps")) { 596 break;
597
598 /* wps config file */
599 case TREE_ATTR_WPS:
571 snprintf(buf, sizeof buf, "%s/%s", 600 snprintf(buf, sizeof buf, "%s/%s",
572 currdir, file->name); 601 currdir, file->name);
573 wps_load_custom(buf); 602 wps_load_custom(buf);
574 restore = true; 603 restore = true;
575 break; 604 break;
576 } 605
577 else 606#ifndef SIMULATOR
607 /* firmware file */
608 case TREE_ATTR_MOD:
609 snprintf(buf, sizeof buf, "%s/%s",
610 currdir, file->name);
611 rolo_load(buf);
578 break; 612 break;
579 } 613#endif
580 if ( global_settings.resume ) {
581 /* the resume_index must always be the index in the
582 shuffled list in case shuffle is enabled */
583 global_settings.resume_index = start_index;
584 global_settings.resume_offset = 0;
585 global_settings.resume_seed = seed;
586 settings_save();
587 } 614 }
588 615
589 status_set_playmode(STATUS_PLAY); 616 if ( play ) {
590 status_draw(); 617 if ( global_settings.resume ) {
591 lcd_stop_scroll(); 618 /* the resume_index must always be the index in the
592 rc = wps_show(); 619 shuffled list in case shuffle is enabled */
593 if(rc == SYS_USB_CONNECTED) 620 global_settings.resume_index = start_index;
594 { 621 global_settings.resume_offset = 0;
595 /* Force a re-read of the root directory */ 622 global_settings.resume_seed = seed;
596 strcpy(currdir, "/"); 623 settings_save();
597 lastdir[0] = 0; 624 }
598 dirlevel = 0; 625
599 dircursor = 0; 626 status_set_playmode(STATUS_PLAY);
600 start = 0; 627 status_draw();
601 global_settings.resume_index = -1; 628 lcd_stop_scroll();
602 } 629 rc = wps_show();
630 if(rc == SYS_USB_CONNECTED)
631 {
632 /* Force a re-read of the root directory */
633 strcpy(currdir, "/");
634 lastdir[0] = 0;
635 dirlevel = 0;
636 dircursor = 0;
637 start = 0;
638 global_settings.resume_index = -1;
639 }
603#ifdef LOADABLE_FONTS 640#ifdef LOADABLE_FONTS
604 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; 641 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
605#else 642#else
606 tree_max_on_screen = TREE_MAX_ON_SCREEN; 643 tree_max_on_screen = TREE_MAX_ON_SCREEN;
607#endif 644#endif
645 }
608 } 646 }
609 restore = true; 647 restore = true;
610 break; 648 break;