50f54591ed
2006/06/28 15:11:43 rt 1.1.1.1.150.1: #i54459# CVS history removed from file.
132 lines
2.8 KiB
C
132 lines
2.8 KiB
C
/*
|
|
* (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(... */
|
|
|