Index: openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl,v diff -u -N -r1.189.2.17 -r1.189.2.18 --- openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl 25 Jun 2019 12:33:32 -0000 1.189.2.17 +++ openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl 26 Jun 2019 16:21:20 -0000 1.189.2.18 @@ -3419,26 +3419,48 @@ ad_proc -public util::content_size_pretty { {-size "0"} {-precision "1"} - {-decimal:boolean} + {-standard "decimal"} } { - Transforms data size, provided in non-negative bytes, to KB, MB... up to YB/Yib. + Transforms data size, provided in non-negative bytes, to KB, MB... up to YB. @param size Size in bytes @param precision Numbers in the fractional part - @param decimal Use powers of 10 instead of 2 + @param standard Standard to use for binary prefix. Three standards are + supported currently by this proc: + - decimal (default): SI (base-10, 1000 B = 1kB) + - binary: IEC (base-2, 1024 B = 1KiB) + - legacy: JEDEC (base-2, 1024 B = 1KB) - @return Pretty size (e.g. '5.2 MB') + @return Size in given standard units (e.g. '5.2 MB') @author Héctor Romojaro @creation-date 2019-06-25 - } { - if {$decimal_p} { - set div 1000 - set units [list B KB MB GB TB PB EB ZB YB] - } else { - set div 1024 - set units [list B KiB MiB GiB TiB PiB EiB ZiB YiB] + switch $standard { + decimal { + # + # SI (base-10, 1000 B = 1KB) + # + set div 1000 + set units [list B kB MB GB TB PB EB ZB YB] + } + binary { + # + # IEC (base-2, 1024 B = 1KiB) + # + set div 1024 + set units [list B KiB MiB GiB TiB PiB EiB ZiB YiB] + } + legacy { + # + # JEDEC (base-2, 1024 B = 1KB) + # + set div 1024 + set units [list B KB MB GB TB PB EB ZB YB] + } + default { + return "Unknown value $standard for -standard option" + } } if {$size eq ""} { Index: openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl,v diff -u -N -r1.71.2.9 -r1.71.2.10 --- openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl 26 Jun 2019 15:30:58 -0000 1.71.2.9 +++ openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl 26 Jun 2019 16:21:20 -0000 1.71.2.10 @@ -1414,36 +1414,51 @@ @author Héctor Romojaro @creation-date 2019-06-25 } { - aa_equals "No arguments" [util::content_size_pretty] "[lc_numeric 0] B" - aa_equals "No arguments decimal" [util::content_size_pretty -decimal] "[lc_numeric 0] B" - aa_equals "Empty value" [util::content_size_pretty -size ""] "[lc_numeric 0] B" - aa_equals "Empty value decimal" [util::content_size_pretty -size "" -decimal] "[lc_numeric 0] B" - aa_equals "1.0 KiB" [util::content_size_pretty -size 1024] "[lc_numeric 1.0] KiB" - aa_equals "1.0 KB" [util::content_size_pretty -size 1000 -decimal] "[lc_numeric 1.0] KB" - aa_equals "1.0 MiB" [util::content_size_pretty -size 1048576] "[lc_numeric 1.0] MiB" - aa_equals "1.0 MB" [util::content_size_pretty -size 1000000 -decimal] "[lc_numeric 1.0] MB" - aa_equals "1.0 GiB" [util::content_size_pretty -size 1073741824] "[lc_numeric 1.0] GiB" - aa_equals "1.0 GB" [util::content_size_pretty -size 1000000000 -decimal] "[lc_numeric 1.0] GB" - aa_equals "1.0 TiB" [util::content_size_pretty -size 1099511627800] "[lc_numeric 1.0] TiB" - aa_equals "1.0 TB" [util::content_size_pretty -size 1000000000000 -decimal] "[lc_numeric 1.0] TB" - aa_equals "1.0 PiB" [util::content_size_pretty -size 1125899906842620] "[lc_numeric 1.0] PiB" - aa_equals "1.0 PB" [util::content_size_pretty -size 1000000000000000 -decimal] "[lc_numeric 1.0] PB" - aa_equals "1.0 EiB" [util::content_size_pretty -size 1152921504606850000] "[lc_numeric 1.0] EiB" - aa_equals "1.0 EB" [util::content_size_pretty -size 1000000000000000000 -decimal] "[lc_numeric 1.0] EB" - aa_equals "1.0 ZiB" [util::content_size_pretty -size 1180591620717410000000] "[lc_numeric 1.0] ZiB" - aa_equals "1.0 ZB" [util::content_size_pretty -size 1000000000000000000000 -decimal] "[lc_numeric 1.0] ZB" - aa_equals "1.0 YiB" [util::content_size_pretty -size 1208925819614630000000000] "[lc_numeric 1.0] YiB" - aa_equals "1.0 YB" [util::content_size_pretty -size 1000000000000000000000000 -decimal] "[lc_numeric 1.0] YB" - aa_equals "1.3 YiB" [util::content_size_pretty -size 1571603565499020000000000] "[lc_numeric 1.3] YiB" - aa_equals "1.3 YB" [util::content_size_pretty -size 1300000000000000000000000 -decimal] "[lc_numeric 1.3] YB" - aa_equals "1.000 KiB" [util::content_size_pretty -size 1024 -precision 3] "[lc_numeric 1.000] KiB" - aa_equals "1.000 KB" [util::content_size_pretty -size 1000 -precision 3 -decimal] "[lc_numeric 1.000] KB" - aa_equals "1 KiB" [util::content_size_pretty -size 1024 -precision 0] "[lc_numeric 1] KiB" - aa_equals "1 KB" [util::content_size_pretty -size 1000 -precision 0 -decimal] "[lc_numeric 1] KB" - aa_equals "1 KiB" [util::content_size_pretty -size 1044 -precision 0] "[lc_numeric 1] KiB" - aa_equals "1 KB" [util::content_size_pretty -size 1080 -precision 0 -decimal] "[lc_numeric 1] KB" - aa_equals "1.01953 -> 1.020 KiB" [util::content_size_pretty -size 1044 -precision 3] "[lc_numeric 1.020] KiB" - aa_equals "1.080 KB" [util::content_size_pretty -size 1080 -precision 3 -decimal] "[lc_numeric 1.080] KB" + aa_equals "No arguments binary" [util::content_size_pretty -standard "binary"] "[lc_numeric 0] B" + aa_equals "No arguments legacy" [util::content_size_pretty -standard "legacy"] "[lc_numeric 0] B" + aa_equals "No arguments decimal" [util::content_size_pretty] "[lc_numeric 0] B" + aa_equals "Empty value binary" [util::content_size_pretty -size "" -standard "binary"] "[lc_numeric 0] B" + aa_equals "Empty value legacy" [util::content_size_pretty -size "" -standard "legacy"] "[lc_numeric 0] B" + aa_equals "Empty value decimal" [util::content_size_pretty -size ""] "[lc_numeric 0] B" + aa_equals "1.0 KiB" [util::content_size_pretty -size 1024 -standard "binary"] "[lc_numeric 1.0] KiB" + aa_equals "1.0 KB" [util::content_size_pretty -size 1024 -standard "legacy"] "[lc_numeric 1.0] KB" + aa_equals "1.0 KB" [util::content_size_pretty -size 1000] "[lc_numeric 1.0] kB" + aa_equals "1.0 MiB" [util::content_size_pretty -size 1048576 -standard "binary"] "[lc_numeric 1.0] MiB" + aa_equals "1.0 MB" [util::content_size_pretty -size 1048576 -standard "legacy"] "[lc_numeric 1.0] MB" + aa_equals "1.0 MB" [util::content_size_pretty -size 1000000] "[lc_numeric 1.0] MB" + aa_equals "1.0 GiB" [util::content_size_pretty -size 1073741824 -standard "binary"] "[lc_numeric 1.0] GiB" + aa_equals "1.0 GB" [util::content_size_pretty -size 1073741824 -standard "legacy"] "[lc_numeric 1.0] GB" + aa_equals "1.0 GB" [util::content_size_pretty -size 1000000000] "[lc_numeric 1.0] GB" + aa_equals "1.0 TiB" [util::content_size_pretty -size 1099511627800 -standard "binary"] "[lc_numeric 1.0] TiB" + aa_equals "1.0 TB" [util::content_size_pretty -size 1099511627800 -standard "legacy"] "[lc_numeric 1.0] TB" + aa_equals "1.0 TB" [util::content_size_pretty -size 1000000000000] "[lc_numeric 1.0] TB" + aa_equals "1.0 PiB" [util::content_size_pretty -size 1125899906842620 -standard "binary"] "[lc_numeric 1.0] PiB" + aa_equals "1.0 PB" [util::content_size_pretty -size 1125899906842620 -standard "legacy"] "[lc_numeric 1.0] PB" + aa_equals "1.0 PB" [util::content_size_pretty -size 1000000000000000] "[lc_numeric 1.0] PB" + aa_equals "1.0 EiB" [util::content_size_pretty -size 1152921504606850000 -standard "binary"] "[lc_numeric 1.0] EiB" + aa_equals "1.0 EB" [util::content_size_pretty -size 1152921504606850000 -standard "legacy"] "[lc_numeric 1.0] EB" + aa_equals "1.0 EB" [util::content_size_pretty -size 1000000000000000000] "[lc_numeric 1.0] EB" + aa_equals "1.0 ZiB" [util::content_size_pretty -size 1180591620717410000000 -standard "binary"] "[lc_numeric 1.0] ZiB" + aa_equals "1.0 ZB" [util::content_size_pretty -size 1180591620717410000000 -standard "legacy"] "[lc_numeric 1.0] ZB" + aa_equals "1.0 ZB" [util::content_size_pretty -size 1000000000000000000000] "[lc_numeric 1.0] ZB" + aa_equals "1.0 YiB" [util::content_size_pretty -size 1208925819614630000000000 -standard "binary"] "[lc_numeric 1.0] YiB" + aa_equals "1.0 YB" [util::content_size_pretty -size 1208925819614630000000000 -standard "legacy"] "[lc_numeric 1.0] YB" + aa_equals "1.0 YB" [util::content_size_pretty -size 1000000000000000000000000] "[lc_numeric 1.0] YB" + aa_equals "1.3 YiB" [util::content_size_pretty -size 1571603565499020000000000 -standard "binary"] "[lc_numeric 1.3] YiB" + aa_equals "1.3 YB" [util::content_size_pretty -size 1571603565499020000000000 -standard "legacy"] "[lc_numeric 1.3] YB" + aa_equals "1.3 YB" [util::content_size_pretty -size 1300000000000000000000000] "[lc_numeric 1.3] YB" + aa_equals "1.000 KiB" [util::content_size_pretty -size 1024 -precision 3 -standard "binary"] "[lc_numeric 1.000] KiB" + aa_equals "1.000 KB" [util::content_size_pretty -size 1024 -precision 3 -standard "legacy"] "[lc_numeric 1.000] KB" + aa_equals "1.000 kB" [util::content_size_pretty -size 1000 -precision 3] "[lc_numeric 1.000] kB" + aa_equals "1 KiB" [util::content_size_pretty -size 1024 -precision 0 -standard "binary"] "[lc_numeric 1] KiB" + aa_equals "1 KB" [util::content_size_pretty -size 1024 -precision 0 -standard "legacy"] "[lc_numeric 1] KB" + aa_equals "1 kB" [util::content_size_pretty -size 1000 -precision 0] "[lc_numeric 1] kB" + aa_equals "1 KiB" [util::content_size_pretty -size 1044 -precision 0 -standard "binary"] "[lc_numeric 1] KiB" + aa_equals "1 KB" [util::content_size_pretty -size 1044 -precision 0 -standard "legacy"] "[lc_numeric 1] KB" + aa_equals "1 kB" [util::content_size_pretty -size 1080 -precision 0] "[lc_numeric 1] kB" + aa_equals "1.01953 -> 1.020 KiB" [util::content_size_pretty -size 1044 -precision 3 -standard "binary"] "[lc_numeric 1.020] KiB" + aa_equals "1.01953 -> 1.020 KB" [util::content_size_pretty -size 1044 -precision 3 -standard "legacy"] "[lc_numeric 1.020] KB" + aa_equals "1.080 kB" [util::content_size_pretty -size 1080 -precision 3] "[lc_numeric 1.080] kB" } # Local variables: