diff options
-rw-r--r-- | uisimulator/tree.c | 298 | ||||
-rw-r--r-- | uisimulator/tree.h | 21 |
2 files changed, 0 insertions, 319 deletions
diff --git a/uisimulator/tree.c b/uisimulator/tree.c deleted file mode 100644 index c74aa07fea..0000000000 --- a/uisimulator/tree.c +++ /dev/null @@ -1,298 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 Daniel Stenberg - * - * All files in this archive are subject to the GNU General Public License. - * See the file COPYING in the source tree root for full license agreement. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#include <string.h> -#include <stdlib.h> -#include <stdbool.h> - -#include "dir.h" -#include "file.h" -#include "lcd.h" -#include "button.h" -#include "kernel.h" -#include "tree.h" -#include "icons.h" -#include "play.h" - - -#define TREE_MAX_FILENAMELEN 128 -#define MAX_DIR_LEVELS 10 - -struct entry { - bool file; /* true if file, false if dir */ - char name[TREE_MAX_FILENAMELEN]; - int namelen; -}; - -void browse_root(void) -{ - dirbrowse("/"); -} - - -#ifdef HAVE_LCD_BITMAP - -#define TREE_MAX_ON_SCREEN 7 -#define TREE_MAX_LEN_DISPLAY 16 /* max length that fits on screen */ - -#define MARGIN_Y 8 /* Y pixel margin */ -#define MARGIN_X 12 /* X pixel margin */ -#define LINE_Y 0 /* Y position the entry-list starts at */ -#define LINE_X 2 /* X position the entry-list starts at */ -#define LINE_HEIGTH 8 /* pixels for each text line */ - -extern unsigned char bitmap_icons_6x8[LastIcon][6]; -extern icons_6x8; - -#else /* HAVE_LCD_BITMAP */ - -#define TREE_MAX_ON_SCREEN 2 -#define TREE_MAX_LEN_DISPLAY 11 /* max length that fits on screen */ -#define LINE_Y 0 /* Y position the entry-list starts at */ -#define LINE_X 1 /* X position the entry-list starts at */ - -#endif /* HAVE_LCD_BITMAP */ - -int static showdir(char *path, struct entry *buffer, int start, - int scrollpos, int* at_end) -{ - int i; - int j=0; - int icon_type = 0; - DIR *dir = opendir(path); - struct dirent *entry; - - if(!dir) - return -1; /* not a directory */ - - i=start; - *at_end=0; /* Have we displayed the last directory entry? */ - while((entry = readdir(dir))) { - int len; - - if(entry->d_name[0] == '.') - /* skip names starting with a dot */ - continue; - - if(j++ < scrollpos) - continue ; - - len = strlen(entry->d_name); - if(len < TREE_MAX_FILENAMELEN) - /* strncpy() is evil, we memcpy() instead, +1 includes the - trailing zero */ - memcpy(buffer[i].name, entry->d_name, len+1); - else - memcpy(buffer[i].name, "too long", 9); - - buffer[i].file = !(entry->attribute&ATTR_DIRECTORY); - -#ifdef HAVE_LCD_BITMAP - if ( buffer[i].file ) - icon_type=File; - else - icon_type=Folder; - lcd_bitmap(bitmap_icons_6x8[icon_type], 6, MARGIN_Y+i*LINE_HEIGTH, 6, - 8, true); -#endif - - if(len < TREE_MAX_LEN_DISPLAY) - lcd_puts(LINE_X, LINE_Y+i, buffer[i].name); - else { - char storage = buffer[i].name[TREE_MAX_LEN_DISPLAY]; - buffer[i].name[TREE_MAX_LEN_DISPLAY]=0; - lcd_puts(LINE_X, LINE_Y+i, buffer[i].name); - buffer[i].name[TREE_MAX_LEN_DISPLAY]=storage; - } - - if(++i >= TREE_MAX_ON_SCREEN) - break; - } - - if (entry==0) { - *at_end=1; - } else { - *at_end=(readdir(dir)==0); - } - j = i ; - while (j++ < TREE_MAX_ON_SCREEN) { - lcd_puts(LINE_X, LINE_Y+j," "); - } - closedir(dir); - - return i; -} - -bool dirbrowse(char *root) -{ - struct entry buffer[TREE_MAX_ON_SCREEN]; - int numentries; - char buf[255]; - char currdir[255]; - int dircursor=0; - int i; - int start=0; - int at_end=0; - int dirpos[MAX_DIR_LEVELS]; - int dirlevel=0; - - lcd_clear_display(); - -#ifdef HAVE_LCD_BITMAP - lcd_putsxy(0,0, "[Browse]",0); - lcd_setmargins(0,MARGIN_Y); - lcd_setfont(0); -#endif - memcpy(currdir,root,sizeof(currdir)); - - numentries = showdir(root, buffer, 0, start, &at_end); - - if (numentries == -1) - return -1; /* root is not a directory */ - - lcd_puts(0, dircursor, "-"); - lcd_update(); - - while(1) { - int key = button_get(); - - if(!key) { - sleep(1); - continue; - } - switch(key) { - case BUTTON_OFF: - return false; - break; - - case BUTTON_LEFT: - i=strlen(currdir); - if (i==1) { - return false; - } - else { - while (currdir[i-1]!='/') - i--; - strcpy(buf,&currdir[i]); - if (i==1) - currdir[i]=0; - else - currdir[i-1]=0; - - lcd_clear_display(); -#ifdef HAVE_LCD_BITMAP - lcd_putsxy(0,0, "[Browse]",0); -#endif - dirlevel--; - if ( dirlevel < MAX_DIR_LEVELS ) - start = dirpos[dirlevel]; - else - start = 0; - numentries = showdir(currdir, buffer, 0, start, &at_end); - dircursor=0; - while ( (dircursor < TREE_MAX_ON_SCREEN) && - (strcmp(buffer[dircursor].name,buf)!=0)) - dircursor++; - if (dircursor==TREE_MAX_ON_SCREEN) - dircursor=0; - lcd_puts(0, LINE_Y+dircursor, "-"); - lcd_update(); - } - - break; - - case BUTTON_RIGHT: - case BUTTON_PLAY: - if ((currdir[0]=='/') && (currdir[1]==0)) { - sprintf(buf,"%s%s",currdir,buffer[dircursor].name); - } else { - sprintf(buf,"%s/%s",currdir,buffer[dircursor].name); - } - - if (!buffer[dircursor].file) { - memcpy(currdir,buf,sizeof(currdir)); - if ( dirlevel < MAX_DIR_LEVELS ) - dirpos[dirlevel] = start+dircursor; - dirlevel++; - dircursor=0; - start=0; - } else { - playtune(currdir, buffer[dircursor].name); -#ifdef HAVE_LCD_BITMAP - lcd_setmargins(0, MARGIN_Y); - lcd_setfont(0); -#endif - } - - lcd_clear_display(); - numentries = showdir(currdir, buffer, 0, start, &at_end); -#ifdef HAVE_LCD_BITMAP - lcd_putsxy(0,0, "[Browse]",0); -#endif - lcd_puts(0, LINE_Y+dircursor, "-"); - lcd_update(); - break; - - case BUTTON_UP: - if(dircursor) { - lcd_puts(0, LINE_Y+dircursor, " "); - dircursor--; - lcd_puts(0, LINE_Y+dircursor, "-"); - lcd_update(); - } - else { - if (start) { - lcd_clear_display(); - start--; - numentries = showdir(currdir, buffer, 0, - start, &at_end); -#ifdef HAVE_LCD_BITMAP - lcd_putsxy(0,0, "[Browse]",0); -#endif - lcd_puts(0, LINE_Y+dircursor, "-"); - lcd_update(); - } - } - break; - case BUTTON_DOWN: - if(dircursor+1 < numentries) { - lcd_puts(0, LINE_Y+dircursor, " "); - dircursor++; - lcd_puts(0, LINE_Y+dircursor, "-"); - lcd_update(); - } else - { - if (!at_end) { - lcd_clear_display(); - start++; - numentries = showdir(currdir, buffer, 0, - start, &at_end); -#ifdef HAVE_LCD_BITMAP - lcd_putsxy(0,0, "[Browse]",0); -#endif - lcd_puts(0, LINE_Y+dircursor, "-"); - lcd_update(); - } - } - break; - } - } - - return false; -} diff --git a/uisimulator/tree.h b/uisimulator/tree.h deleted file mode 100644 index 0dfd4ec99b..0000000000 --- a/uisimulator/tree.h +++ /dev/null @@ -1,21 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 Daniel Stenberg - * - * All files in this archive are subject to the GNU General Public License. - * See the file COPYING in the source tree root for full license agreement. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -void browse_root(void); -bool dirbrowse(char *root); |