/libreoffice-3.6.0.2/dmake/dbug/malloc/tostring.c
C | 132 lines | 70 code | 13 blank | 49 comment | 6 complexity | f48033a96cb51abffc01c2e1ffeac42f MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, LGPL-2.1, AGPL-1.0, BSD-3-Clause-No-Nuclear-License-2014, GPL-3.0, LGPL-3.0
- /*
- * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).
- * You may copy, distribute, and use this software as long as this
- * copyright statement is not removed.
- */
- #include "tostring.h"
- /*
- * Function: tostring()
- *
- * Purpose: to convert an integer to an ascii display string
- *
- * Arguments: buf - place to put the
- * val - integer to convert
- * len - length of output field (0 if just enough to hold data)
- * base - base for number conversion (only works for base <= 16)
- * fill - fill char when len > # digits
- *
- * Returns: length of string
- *
- * Narrative: IF fill character is non-blank
- * Determine base
- * If base is HEX
- * add "0x" to begining of string
- * IF base is OCTAL
- * add "0" to begining of string
- *
- * While value is greater than zero
- * use val % base as index into xlation str to get cur char
- * divide val by base
- *
- * Determine fill-in length
- *
- * Fill in fill chars
- *
- * Copy in number
- *
- *
- * Mod History:
- * 90/01/24 cpcahil Initial revision.
- */
- #ifndef lint
- static
- char rcs_hdr[] = "$Id: tostring.c,v 1.2 2006-07-25 10:10:17 rt Exp $";
- #endif
- #define T_LEN 10
- int
- tostring(buf,val,len,base,fill)
- int base;
- char * buf;
- char fill;
- int len;
- int val;
- {
- char * bufstart = buf;
- int i = T_LEN;
- char * xbuf = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- char tbuf[T_LEN];
- /*
- * if we are filling with non-blanks, make sure the
- * proper start string is added
- */
- if( fill != ' ' )
- {
- switch(base)
- {
- case B_HEX:
- *(buf++) = '0';
- *(buf++) = 'x';
- if( len )
- {
- len -= 2;
- }
- break;
- case B_OCTAL:
- *(buf++) = fill;
- if( len )
- {
- len--;
- }
- break;
- default:
- break;
- }
- }
- while( val > 0 )
- {
- tbuf[--i] = xbuf[val % base];
- val = val / base;
- }
- if( len )
- {
- len -= (T_LEN - i);
- if( len > 0 )
- {
- while(len-- > 0)
- {
- *(buf++) = fill;
- }
- }
- else
- {
- /*
- * string is too long so we must truncate
- * off some characters. We do this the easiest
- * way by just incrementing i. This means the
- * most significant digits are lost.
- */
- while( len++ < 0 )
- {
- i++;
- }
- }
- }
- while( i < T_LEN )
- {
- *(buf++) = tbuf[i++];
- }
- return( (int) (buf - bufstart) );
- } /* tostring(... */