itoa.c revision 256281
119304Speter/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2004
219304Speter     Free Software Foundation, Inc.
319304Speter     Written by James Clark (jjc@jclark.com)
419304Speter
519304SpeterThis file is part of groff.
619304Speter
719304Spetergroff is free software; you can redistribute it and/or modify it under
819304Speterthe terms of the GNU General Public License as published by the Free
919304SpeterSoftware Foundation; either version 2, or (at your option) any later
1019304Speterversion.
1119304Speter
1219304Spetergroff is distributed in the hope that it will be useful, but WITHOUT ANY
1319304SpeterWARRANTY; without even the implied warranty of MERCHANTABILITY or
1419304SpeterFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1519304Speterfor more details.
1619304Speter
1719304SpeterYou should have received a copy of the GNU General Public License along
1819304Speterwith groff; see the file COPYING.  If not, write to the Free Software
1919304SpeterFoundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
2019304Speter
2119304Speter#define INT_DIGITS 19		/* enough for 64 bit integer */
2219304Speter#define UINT_DIGITS 20
2319304Speter
2419304Speter#ifdef __cplusplus
2519304Speterextern "C" {
2619304Speter#endif
2719304Speter
2819304Speterchar *i_to_a(int i)
2919304Speter{
3019304Speter  /* Room for INT_DIGITS digits, - and '\0' */
3119304Speter  static char buf[INT_DIGITS + 2];
3219304Speter  char *p = buf + INT_DIGITS + 1;	/* points to terminating '\0' */
3319304Speter  if (i >= 0) {
3419304Speter    do {
3519304Speter      *--p = '0' + (i % 10);
3619304Speter      i /= 10;
37    } while (i != 0);
38    return p;
39  }
40  else {			/* i < 0 */
41    do {
42      *--p = '0' - (i % 10);
43      i /= 10;
44    } while (i != 0);
45    *--p = '-';
46  }
47  return p;
48}
49
50char *ui_to_a(unsigned int i)
51{
52  /* Room for UINT_DIGITS digits and '\0' */
53  static char buf[UINT_DIGITS + 1];
54  char *p = buf + UINT_DIGITS;	/* points to terminating '\0' */
55  do {
56    *--p = '0' + (i % 10);
57    i /= 10;
58  } while (i != 0);
59  return p;
60}
61
62#ifdef __cplusplus
63}
64#endif
65