123d1a178SPawel Jakub Dawidek.\" $NetBSD: humanize_number.3,v 1.4 2003/04/16 13:34:37 wiz Exp $ 223d1a178SPawel Jakub Dawidek.\" $FreeBSD$ 323d1a178SPawel Jakub Dawidek.\" 423d1a178SPawel Jakub Dawidek.\" Copyright (c) 1999, 2002 The NetBSD Foundation, Inc. 523d1a178SPawel Jakub Dawidek.\" All rights reserved. 623d1a178SPawel Jakub Dawidek.\" 723d1a178SPawel Jakub Dawidek.\" This code is derived from software contributed to The NetBSD Foundation 823d1a178SPawel Jakub Dawidek.\" by Luke Mewburn and by Tomas Svensson. 923d1a178SPawel Jakub Dawidek.\" 1023d1a178SPawel Jakub Dawidek.\" Redistribution and use in source and binary forms, with or without 1123d1a178SPawel Jakub Dawidek.\" modification, are permitted provided that the following conditions 1223d1a178SPawel Jakub Dawidek.\" are met: 1323d1a178SPawel Jakub Dawidek.\" 1. Redistributions of source code must retain the above copyright 1423d1a178SPawel Jakub Dawidek.\" notice, this list of conditions and the following disclaimer. 1523d1a178SPawel Jakub Dawidek.\" 2. Redistributions in binary form must reproduce the above copyright 1623d1a178SPawel Jakub Dawidek.\" notice, this list of conditions and the following disclaimer in the 1723d1a178SPawel Jakub Dawidek.\" documentation and/or other materials provided with the distribution. 1823d1a178SPawel Jakub Dawidek.\" 1923d1a178SPawel Jakub Dawidek.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2023d1a178SPawel Jakub Dawidek.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2123d1a178SPawel Jakub Dawidek.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2223d1a178SPawel Jakub Dawidek.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2323d1a178SPawel Jakub Dawidek.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2423d1a178SPawel Jakub Dawidek.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2523d1a178SPawel Jakub Dawidek.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2623d1a178SPawel Jakub Dawidek.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2723d1a178SPawel Jakub Dawidek.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2823d1a178SPawel Jakub Dawidek.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2923d1a178SPawel Jakub Dawidek.\" POSSIBILITY OF SUCH DAMAGE. 3023d1a178SPawel Jakub Dawidek.\" 31*7d14df1aSXin LI.Dd Apr 12, 2011 3223d1a178SPawel Jakub Dawidek.Dt HUMANIZE_NUMBER 3 3323d1a178SPawel Jakub Dawidek.Os 3423d1a178SPawel Jakub Dawidek.Sh NAME 3523d1a178SPawel Jakub Dawidek.Nm humanize_number 3623d1a178SPawel Jakub Dawidek.Nd format a number into a human readable form 37e27d1913SPawel Jakub Dawidek.Sh LIBRARY 38e27d1913SPawel Jakub Dawidek.Lb libutil 3923d1a178SPawel Jakub Dawidek.Sh SYNOPSIS 40d268591bSTom Rhodes.In libutil.h 4123d1a178SPawel Jakub Dawidek.Ft int 42fd132368SRuslan Ermilov.Fo humanize_number 43fd132368SRuslan Ermilov.Fa "char *buf" "size_t len" "int64_t number" "const char *suffix" 44fd132368SRuslan Ermilov.Fa "int scale" "int flags" 45fd132368SRuslan Ermilov.Fc 4623d1a178SPawel Jakub Dawidek.Sh DESCRIPTION 4723d1a178SPawel Jakub DawidekThe 4823d1a178SPawel Jakub Dawidek.Fn humanize_number 4969560edcSPawel Jakub Dawidekfunction formats the signed 64-bit quantity given in 5023d1a178SPawel Jakub Dawidek.Fa number 5123d1a178SPawel Jakub Dawidekinto 525f2e9efbSGlen Barber.Fa buf . 5323d1a178SPawel Jakub DawidekA space and then 5423d1a178SPawel Jakub Dawidek.Fa suffix 5523d1a178SPawel Jakub Dawidekis appended to the end. 5669560edcSPawel Jakub DawidekThe buffer pointed to by 575f2e9efbSGlen Barber.Fa buf 5823d1a178SPawel Jakub Dawidekmust be at least 5923d1a178SPawel Jakub Dawidek.Fa len 6013c273c8SXin LIbytes long. 6123d1a178SPawel Jakub Dawidek.Pp 6223d1a178SPawel Jakub DawidekIf the formatted number (including 6323d1a178SPawel Jakub Dawidek.Fa suffix ) 6423d1a178SPawel Jakub Dawidekwould be too long to fit into 655f2e9efbSGlen Barber.Fa buf , 6623d1a178SPawel Jakub Dawidekthen divide 6723d1a178SPawel Jakub Dawidek.Fa number 6823d1a178SPawel Jakub Dawidekby 1024 until it will. 6923d1a178SPawel Jakub DawidekIn this case, prefix 7023d1a178SPawel Jakub Dawidek.Fa suffix 71*7d14df1aSXin LIwith the appropriate designator. 72a73a3ab5SRuslan ErmilovThe 73a73a3ab5SRuslan Ermilov.Fn humanize_number 74*7d14df1aSXin LIfunction follows the traditional computer science conventions by 75*7d14df1aSXin LIdefault, rather than the IEE/IEC (and now also SI) power of two 76*7d14df1aSXin LIconvention or the power of ten notion. 77*7d14df1aSXin LIThis behaviour however can be altered by specifying the 78*7d14df1aSXin LI.Dv HN_DIVISOR_1000 79*7d14df1aSXin LIand 80*7d14df1aSXin LI.Dv HN_IEC_PREFIXES 81*7d14df1aSXin LIflags. 8223d1a178SPawel Jakub Dawidek.Pp 83*7d14df1aSXin LIThe traditional 84*7d14df1aSXin LI.Pq default 85*7d14df1aSXin LIprefixes are: 86d5fbc8f4SWarner Losh.Bl -column "Prefix" "Description" "1000000000000000000" -offset indent 87d5fbc8f4SWarner Losh.It Sy "Prefix" Ta Sy "Description" Ta Sy "Multiplier" Ta Sy "Multiplier 1000x" 88*7d14df1aSXin LI.It Li (note) Ta No kilo Ta 1024 Ta 1000 89d5fbc8f4SWarner Losh.It Li M Ta No mega Ta 1048576 Ta 1000000 90d5fbc8f4SWarner Losh.It Li G Ta No giga Ta 1073741824 Ta 1000000000 91d5fbc8f4SWarner Losh.It Li T Ta No tera Ta 1099511627776 Ta 1000000000000 92d5fbc8f4SWarner Losh.It Li P Ta No peta Ta 1125899906842624 Ta 1000000000000000 93d5fbc8f4SWarner Losh.It Li E Ta No exa Ta 1152921504606846976 Ta 1000000000000000000 9423d1a178SPawel Jakub Dawidek.El 9523d1a178SPawel Jakub Dawidek.Pp 96*7d14df1aSXin LINote: 97*7d14df1aSXin LIAn uppercase K indicates a power of two, a lowercase k a power of ten. 98*7d14df1aSXin LI.Pp 99*7d14df1aSXin LIThe IEE/IEC (and now also SI) power of two prefixes are: 100*7d14df1aSXin LI.Bl -column "Prefix" "Description" "1000000000000000000" -offset indent 101*7d14df1aSXin LI.It Sy "Prefix" Ta Sy "Description" Ta Sy "Multiplier" 102*7d14df1aSXin LI.It Li Ki Ta No kibi Ta 1024 103*7d14df1aSXin LI.It Li Mi Ta No mebi Ta 1048576 104*7d14df1aSXin LI.It Li Gi Ta No gibi Ta 1073741824 105*7d14df1aSXin LI.It Li Ti Ta No tebi Ta 1099511627776 106*7d14df1aSXin LI.It Li Pi Ta No pebi Ta 1125899906842624 107*7d14df1aSXin LI.It Li Ei Ta No exbi Ta 1152921504606846976 108*7d14df1aSXin LI.El 109*7d14df1aSXin LI.Pp 11069560edcSPawel Jakub DawidekThe 11123d1a178SPawel Jakub Dawidek.Fa len 11269560edcSPawel Jakub Dawidekargument must be at least 4 plus the length of 11323d1a178SPawel Jakub Dawidek.Fa suffix , 11423d1a178SPawel Jakub Dawidekin order to ensure a useful result is generated into 1155f2e9efbSGlen Barber.Fa buf . 11623d1a178SPawel Jakub DawidekTo use a specific prefix, specify this as 11723d1a178SPawel Jakub Dawidek.Fa scale 118*7d14df1aSXin LI.Po multiplier = 1024 ^ scale; 119*7d14df1aSXin LIwhen 120*7d14df1aSXin LI.Dv HN_DIVISOR_1000 121*7d14df1aSXin LIis specified, 122*7d14df1aSXin LImultiplier = 1000 ^ scale 123*7d14df1aSXin LI.Pc . 12423d1a178SPawel Jakub DawidekThis cannot be combined with any of the 12523d1a178SPawel Jakub Dawidek.Fa scale 12623d1a178SPawel Jakub Dawidekflags below. 12723d1a178SPawel Jakub Dawidek.Pp 12823d1a178SPawel Jakub DawidekThe following flags may be passed in 12969560edcSPawel Jakub Dawidek.Fa scale : 13069560edcSPawel Jakub Dawidek.Bl -tag -width ".Dv HN_DIVISOR_1000" -offset indent 13123d1a178SPawel Jakub Dawidek.It Dv HN_AUTOSCALE 13223d1a178SPawel Jakub DawidekFormat the buffer using the lowest multiplier possible. 13323d1a178SPawel Jakub Dawidek.It Dv HN_GETSCALE 13423d1a178SPawel Jakub DawidekReturn the prefix index number (the number of times 13523d1a178SPawel Jakub Dawidek.Fa number 13623d1a178SPawel Jakub Dawidekmust be divided to fit) instead of formatting it to the buffer. 13723d1a178SPawel Jakub Dawidek.El 13823d1a178SPawel Jakub Dawidek.Pp 13923d1a178SPawel Jakub DawidekThe following flags may be passed in 14069560edcSPawel Jakub Dawidek.Fa flags : 14169560edcSPawel Jakub Dawidek.Bl -tag -width ".Dv HN_DIVISOR_1000" -offset indent 14223d1a178SPawel Jakub Dawidek.It Dv HN_DECIMAL 14323d1a178SPawel Jakub DawidekIf the final result is less than 10, display it using one digit. 14423d1a178SPawel Jakub Dawidek.It Dv HN_NOSPACE 14523d1a178SPawel Jakub DawidekDo not put a space between 14623d1a178SPawel Jakub Dawidek.Fa number 14723d1a178SPawel Jakub Dawidekand the prefix. 14823d1a178SPawel Jakub Dawidek.It Dv HN_B 14969560edcSPawel Jakub DawidekUse 15069560edcSPawel Jakub Dawidek.Ql B 15169560edcSPawel Jakub Dawidek(bytes) as prefix if the original result does not have a prefix. 15223d1a178SPawel Jakub Dawidek.It Dv HN_DIVISOR_1000 15323d1a178SPawel Jakub DawidekDivide 15423d1a178SPawel Jakub Dawidek.Fa number 15523d1a178SPawel Jakub Dawidekwith 1000 instead of 1024. 156*7d14df1aSXin LI.It Dv HN_IEC_PREFIXES 157*7d14df1aSXin LIUse the IEE/IEC notion of prefixes (Ki, Mi, Gi...). 158*7d14df1aSXin LIThis flag has no effect when 159*7d14df1aSXin LI.Dv HN_DIVISOR_1000 160*7d14df1aSXin LIis also specified. 16123d1a178SPawel Jakub Dawidek.El 16223d1a178SPawel Jakub Dawidek.Sh RETURN VALUES 16369560edcSPawel Jakub DawidekThe 16423d1a178SPawel Jakub Dawidek.Fn humanize_number 16569560edcSPawel Jakub Dawidekfunction returns the number of characters stored in 1665f2e9efbSGlen Barber.Fa buf 16769560edcSPawel Jakub Dawidek(excluding the terminating 16869560edcSPawel Jakub Dawidek.Dv NUL ) 16969560edcSPawel Jakub Dawidekupon success, or \-1 upon failure. 17023d1a178SPawel Jakub DawidekIf 17123d1a178SPawel Jakub Dawidek.Dv HN_GETSCALE 17223d1a178SPawel Jakub Dawidekis specified, the prefix index number will be returned instead. 173c2fc8cebSPawel Jakub Dawidek.Sh SEE ALSO 174c2fc8cebSPawel Jakub Dawidek.Xr expand_number 3 175*7d14df1aSXin LI.Sh STANDARDS 176*7d14df1aSXin LIThe 177*7d14df1aSXin LI.Dv HN_DIVISOR_1000 178*7d14df1aSXin LIand 179*7d14df1aSXin LI.Dv HN_IEC_PREFIXES 180*7d14df1aSXin LIflags 181*7d14df1aSXin LIconform to 182*7d14df1aSXin LI.Tn ISO/IEC 183*7d14df1aSXin LIStd\~80000-13:2008 184*7d14df1aSXin LIand 185*7d14df1aSXin LI.Tn IEEE 186*7d14df1aSXin LIStd\~1541-2002. 18723d1a178SPawel Jakub Dawidek.Sh HISTORY 18869560edcSPawel Jakub DawidekThe 18923d1a178SPawel Jakub Dawidek.Fn humanize_number 19069560edcSPawel Jakub Dawidekfunction first appeared in 19161881b52SDavid E. O'Brien.Nx 2.0 19261881b52SDavid E. O'Brienand then in 19361881b52SDavid E. O'Brien.Fx 5.3 . 194*7d14df1aSXin LIThe 195*7d14df1aSXin LI.Dv HN_IEC_PREFIXES 196*7d14df1aSXin LIflag was introduced in 197*7d14df1aSXin LI.Fx 9.0 . 198