X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcfilebox.C;h=03a49e9a9161c3968e3919d7660ce597c567d0d5;hp=6c1ceb314b61d0a65aa3087919ae0c1ba826c544;hb=3594cc12d62e8bf2c92e4e897aaf130645cbbc56;hpb=a6369311556cc1e1877142181d8606e4f68aa803 diff --git a/cinelerra-5.1/guicast/bcfilebox.C b/cinelerra-5.1/guicast/bcfilebox.C index 6c1ceb31..03a49e9a 100644 --- a/cinelerra-5.1/guicast/bcfilebox.C +++ b/cinelerra-5.1/guicast/bcfilebox.C @@ -794,6 +794,13 @@ int BC_FileBox::extract_extension(char *out, const char *in) return 0; } +static inline int64_t ipow(int m, int n) +{ + int64_t v = 1; + for( int64_t vv=m; n>0; vv*=vv,n>>=1 ) if( n & 1 ) v *= vv; + return v; +} + int BC_FileBox::create_tables() { delete_tables(); @@ -821,7 +828,27 @@ int BC_FileBox::create_tables() // { if(!is_dir) { - sprintf(string, "%jd", file_item->size); + int64_t size = file_item->size; +#if 1 + int len = 1; + static const char *suffix[] = { "", "K", "M", "G", "T", "P" }; + for( int64_t s=size; len<15 && (s/=10)>0; ++len ); + int drop = len-3; + if( drop > 0 ) { + size /= ipow(10,drop); + int sfx = (len-1)/3; + int digits = (sfx+1)*3 - len; + int64_t frac = ipow(10,digits); + int mantisa = size / frac; + int fraction = size - mantisa*frac; + if( fraction ) + sprintf(string, "%d.%0*d%s", mantisa, digits, fraction, suffix[sfx]); + else + sprintf(string, "%d%s", mantisa, suffix[sfx]); + } + else +#endif + sprintf(string, "%jd", size); new_item = new BC_ListBoxItem(string, get_resources()->file_color); } else