/*************************************************************************** * __________ __ ___. * 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 #include #include #include #include "kernel.h" #ifdef WIN32 #include #endif // WIN32 #define TREE_MAX_LEN 15 #define TREE_MAX_ON_SCREEN 7 int dircursor=0; bool dirbrowse(char *root) { DIR *dir = opendir(root); int i; struct dirent *entry; char buffer[TREE_MAX_ON_SCREEN][20]; if(!dir) return TRUE; /* failure */ lcd_clearrect(0, 0, LCD_WIDTH, LCD_HEIGHT); lcd_puts(0,0, "[Browse]", 0); i=0; while((entry = readdir(dir))) { strncpy(buffer[i], entry->d_name, TREE_MAX_LEN); buffer[i][TREE_MAX_LEN]=0; lcd_puts(6, 8+i*8, buffer[i], 0); if(++i >= TREE_MAX_ON_SCREEN) break; } closedir(dir); lcd_puts(0, 8+dircursor, "-", 0); lcd_update(); while(1) { int key = button_get(); if(!key) { sleep(1); continue; } switch(key) { case BUTTON_OFF: case BUTTON_LEFT: return FALSE; break; case BUTTON_UP: if(dircursor) { lcd_puts(0, 8+dircursor, " ", 0); dircursor -= 8; lcd_puts(0, 8+dircursor, "-", 0); lcd_update(); } break; case BUTTON_DOWN: if(dircursor < (8 * TREE_MAX_ON_SCREEN)) { lcd_puts(0, 8+dircursor, " ", 0); dircursor += 8; lcd_puts(0, 8+dircursor, "-", 0); lcd_update(); } break; } } return FALSE; }