/* * (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(... */