annotate lib/human.h @ 4739:04758f7475fd

Merge changes from glibc.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 26 Sep 2003 07:35:01 +0000
parents d0d257fdad20
children a535859efd14
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
1 /* human.h -- print human readable file size
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
2
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
3 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
4 Software Foundation, Inc.
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
5
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
6 This program is free software; you can redistribute it and/or modify
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
7 it under the terms of the GNU General Public License as published by
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
9 any later version.
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
10
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
11 This program is distributed in the hope that it will be useful,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
14 GNU General Public License for more details.
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
15
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
16 You should have received a copy of the GNU General Public License
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
17 along with this program; if not, write to the Free Software Foundation,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
18 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
19
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
20 /* Written by Paul Eggert and Larry McVoy. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
21
1137
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 #ifndef HUMAN_H_
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 # define HUMAN_H_ 1
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24
1813
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
25 # if HAVE_CONFIG_H
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
26 # include <config.h>
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
27 # endif
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
28
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
29 # include <limits.h>
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
30 # include <stdbool.h>
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
31
1813
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
32 # if HAVE_INTTYPES_H
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
33 # include <inttypes.h>
4132
98b37cab8b76 More consistent inttypes.h / stdint.h handling.
Bruno Haible <bruno@clisp.org>
parents: 1864
diff changeset
34 # else
98b37cab8b76 More consistent inttypes.h / stdint.h handling.
Bruno Haible <bruno@clisp.org>
parents: 1864
diff changeset
35 # if HAVE_STDINT_H
98b37cab8b76 More consistent inttypes.h / stdint.h handling.
Bruno Haible <bruno@clisp.org>
parents: 1864
diff changeset
36 # include <stdint.h>
98b37cab8b76 More consistent inttypes.h / stdint.h handling.
Bruno Haible <bruno@clisp.org>
parents: 1864
diff changeset
37 # endif
1813
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
38 # endif
9e16d9bc8891 <inttypes.h>: Include it here instead.
Jim Meyering <jim@meyering.net>
parents: 1392
diff changeset
39
1137
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40 /* A conservative bound on the maximum length of a human-readable string.
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
41 The output can be the square of the largest uintmax_t, so double
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
42 its size before converting to a bound.
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
43 302 / 1000 is ceil (log10 (2.0)). Add 1 for integer division truncation.
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
44 Also, the output can have a thousands separator between every digit,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
45 so multiply by MB_LEN_MAX + 1 and then subtract MB_LEN_MAX.
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
46 Finally, append 3, the maximum length of a suffix. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
47 # define LONGEST_HUMAN_READABLE \
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
48 ((2 * sizeof (uintmax_t) * CHAR_BIT * 302 / 1000 + 1) * (MB_LEN_MAX + 1) \
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
49 - MB_LEN_MAX + 3)
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
50
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
51 /* Options for human_readable. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
52 enum
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
53 {
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
54 /* Unless otherwise specified these options may be ORed together. */
1137
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
56 /* The following three options are mutually exclusive. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
57 /* Round to plus infinity (default). */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
58 human_ceiling = 0,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
59 /* Round to nearest, ties to even. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
60 human_round_to_nearest = 1,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
61 /* Round to minus infinity. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
62 human_floor = 2,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
63
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
64 /* Group digits together, e.g. `1,000,000'. This uses the
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
65 locale-defined grouping; the traditional C locale does not group,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
66 so this has effect only if some other locale is in use. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
67 human_group_digits = 4,
1137
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
69 /* When autoscaling, suppress ".0" at end. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
70 human_suppress_point_zero = 8,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
71
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
72 /* Scale output and use SI-style units, ignoring the output block size. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
73 human_autoscale = 16,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
74
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
75 /* Prefer base 1024 to base 1000. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
76 human_base_1024 = 32,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
77
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
78 /* Append SI prefix, e.g. "k" or "M". */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
79 human_SI = 64,
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
80
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
81 /* Append "B" (if base 1000) or "iB" (if base 1024) to SI prefix. */
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
82 human_B = 128
1864
734d9b0f9fce (enum human_inexact_style): New enum.
Jim Meyering <jim@meyering.net>
parents: 1813
diff changeset
83 };
734d9b0f9fce (enum human_inexact_style): New enum.
Jim Meyering <jim@meyering.net>
parents: 1813
diff changeset
84
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
85 char *human_readable (uintmax_t, char *, int, uintmax_t, uintmax_t);
1392
849f05797f68 (human_readable): Coalesce last two args into one, for convenience.
Jim Meyering <jim@meyering.net>
parents: 1170
diff changeset
86
4351
d0d257fdad20 Merge human.c changes from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4132
diff changeset
87 int human_options (char const *, bool, uintmax_t *);
1137
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88
2c9059ccc457 New file. The interface is inspired
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 #endif /* HUMAN_H_ */