properties: remove some text buffers
use lcd_putsf() remove filesize2string, instead get the "logarithm" (rounded towards zero) and use the this value to compute the size displayed and the unit prefix (nothing/k/m/g) also use struct initializer in dir_properties() git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27923 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
cf2ce17d09
commit
bc2b74b0fb
1 changed files with 32 additions and 38 deletions
|
@ -39,25 +39,17 @@ char str_duration[32];
|
||||||
|
|
||||||
int num_properties;
|
int num_properties;
|
||||||
|
|
||||||
static char* filesize2string(long long size, char* pstr, int len)
|
static const char human_size_prefix[4] = { '\0', 'K', 'M', 'G' };
|
||||||
|
static unsigned human_size_log(long long size)
|
||||||
{
|
{
|
||||||
/* margin set at 10K boundary: 10239 B +1 => 10 KB
|
const size_t n = sizeof(human_size_prefix)/sizeof(human_size_prefix[0]);
|
||||||
routine below is 200 bytes smaller than cascaded if/else :)
|
|
||||||
not using build-in function because of huge values (long long) */
|
unsigned i;
|
||||||
const char* kgb[4] = { "B", "KB", "MB", "GB" };
|
/* margin set at 10K boundary: 10239 B +1 => 10 KB */
|
||||||
int i = 0;
|
for(i=0; i < n-1 && size >= 10*1024; i++)
|
||||||
while(true)
|
|
||||||
{
|
|
||||||
if((size < 10240) || (i > 2))
|
|
||||||
{
|
|
||||||
/* depends on the order in the above array */
|
|
||||||
rb->snprintf(pstr, len, "%ld %s", (long)size, kgb[i]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
size >>= 10; /* div by 1024 */
|
size >>= 10; /* div by 1024 */
|
||||||
i++;
|
|
||||||
}
|
return i;
|
||||||
return pstr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool file_properties(char* selected_file)
|
static bool file_properties(char* selected_file)
|
||||||
|
@ -79,12 +71,13 @@ static bool file_properties(char* selected_file)
|
||||||
{
|
{
|
||||||
if(!rb->strcmp(entry->d_name, selected_file+dirlen))
|
if(!rb->strcmp(entry->d_name, selected_file+dirlen))
|
||||||
{
|
{
|
||||||
rb->snprintf(str_dirname, sizeof str_dirname, "Path: %s",
|
unsigned log;
|
||||||
tstr);
|
rb->snprintf(str_dirname, sizeof str_dirname, "Path: %s", tstr);
|
||||||
rb->snprintf(str_filename, sizeof str_filename, "Name: %s",
|
rb->snprintf(str_filename, sizeof str_filename, "Name: %s",
|
||||||
selected_file+dirlen);
|
selected_file+dirlen);
|
||||||
rb->snprintf(str_size, sizeof str_size, "Size: %s",
|
log = human_size_log(entry->size);
|
||||||
filesize2string(entry->size, tstr, sizeof tstr));
|
rb->snprintf(str_size, sizeof str_size, "Size: %ld %cB",
|
||||||
|
entry->size >> (log*10), human_size_prefix[log]);
|
||||||
rb->snprintf(str_date, sizeof str_date, "Date: %04d/%02d/%02d",
|
rb->snprintf(str_date, sizeof str_date, "Date: %04d/%02d/%02d",
|
||||||
((entry->wrtdate >> 9 ) & 0x7F) + 1980, /* year */
|
((entry->wrtdate >> 9 ) & 0x7F) + 1980, /* year */
|
||||||
((entry->wrtdate >> 5 ) & 0x0F), /* month */
|
((entry->wrtdate >> 5 ) & 0x0F), /* month */
|
||||||
|
@ -145,8 +138,6 @@ typedef struct {
|
||||||
unsigned int dc;
|
unsigned int dc;
|
||||||
unsigned int fc;
|
unsigned int fc;
|
||||||
long long bc;
|
long long bc;
|
||||||
char tstr[64];
|
|
||||||
char tstr2[64];
|
|
||||||
} DPS;
|
} DPS;
|
||||||
|
|
||||||
static bool _dir_properties(DPS* dps)
|
static bool _dir_properties(DPS* dps)
|
||||||
|
@ -173,6 +164,8 @@ static bool _dir_properties(DPS* dps)
|
||||||
|
|
||||||
if (entry->attribute & ATTR_DIRECTORY)
|
if (entry->attribute & ATTR_DIRECTORY)
|
||||||
{
|
{
|
||||||
|
unsigned log;
|
||||||
|
|
||||||
if (!rb->strcmp((char *)entry->d_name, ".") ||
|
if (!rb->strcmp((char *)entry->d_name, ".") ||
|
||||||
!rb->strcmp((char *)entry->d_name, ".."))
|
!rb->strcmp((char *)entry->d_name, ".."))
|
||||||
continue; /* skip these */
|
continue; /* skip these */
|
||||||
|
@ -182,13 +175,11 @@ static bool _dir_properties(DPS* dps)
|
||||||
rb->lcd_puts(0,0,"SCANNING...");
|
rb->lcd_puts(0,0,"SCANNING...");
|
||||||
rb->lcd_puts(0,1,dps->dirname);
|
rb->lcd_puts(0,1,dps->dirname);
|
||||||
rb->lcd_puts(0,2,entry->d_name);
|
rb->lcd_puts(0,2,entry->d_name);
|
||||||
rb->snprintf(dps->tstr, 64, "Directories: %d", dps->dc);
|
rb->lcd_putsf(0,3,"Directories: %d", dps->dc);
|
||||||
rb->lcd_puts(0,3,dps->tstr);
|
rb->lcd_putsf(0,4,"Files: %d", dps->fc);
|
||||||
rb->snprintf(dps->tstr, 64, "Files: %d", dps->fc);
|
log = human_size_log(dps->bc);
|
||||||
rb->lcd_puts(0,4,dps->tstr);
|
rb->lcd_putsf(0,5,"Size: %lld %cB", dps->bc >> (10*log),
|
||||||
rb->snprintf(dps->tstr, 64, "Size: %s",
|
human_size_prefix[log]);
|
||||||
filesize2string(dps->bc, dps->tstr2, 64));
|
|
||||||
rb->lcd_puts(0,5,dps->tstr);
|
|
||||||
rb->lcd_update();
|
rb->lcd_update();
|
||||||
|
|
||||||
/* recursion */
|
/* recursion */
|
||||||
|
@ -209,21 +200,24 @@ static bool _dir_properties(DPS* dps)
|
||||||
|
|
||||||
static bool dir_properties(char* selected_file)
|
static bool dir_properties(char* selected_file)
|
||||||
{
|
{
|
||||||
DPS dps;
|
unsigned log;
|
||||||
char tstr[64];
|
DPS dps = {
|
||||||
|
.len = MAX_PATH,
|
||||||
|
.dc = 0,
|
||||||
|
.fc = 0,
|
||||||
|
.bc = 0,
|
||||||
|
};
|
||||||
rb->strlcpy(dps.dirname, selected_file, MAX_PATH);
|
rb->strlcpy(dps.dirname, selected_file, MAX_PATH);
|
||||||
dps.len = MAX_PATH;
|
|
||||||
dps.dc = 0;
|
|
||||||
dps.fc = 0;
|
|
||||||
dps.bc = 0;
|
|
||||||
if(false == _dir_properties(&dps))
|
if(false == _dir_properties(&dps))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
rb->strlcpy(str_dirname, selected_file, MAX_PATH);
|
rb->strlcpy(str_dirname, selected_file, MAX_PATH);
|
||||||
rb->snprintf(str_dircount, sizeof str_dircount, "Subdirs: %d", dps.dc);
|
rb->snprintf(str_dircount, sizeof str_dircount, "Subdirs: %d", dps.dc);
|
||||||
rb->snprintf(str_filecount, sizeof str_filecount, "Files: %d", dps.fc);
|
rb->snprintf(str_filecount, sizeof str_filecount, "Files: %d", dps.fc);
|
||||||
rb->snprintf(str_size, sizeof str_size, "Size: %s",
|
log = human_size_log(dps.bc);
|
||||||
filesize2string(dps.bc, tstr, sizeof tstr));
|
rb->snprintf(str_size, sizeof str_size, "Size: %lld %cB",
|
||||||
|
dps.bc >> (log*10), human_size_prefix[log]);
|
||||||
num_properties = 4;
|
num_properties = 4;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue