68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* $Header$ */
 | 
						|
/*
 | 
						|
 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
						|
 * See the copyright notice in the ACK home directory, in the file "Copyright".
 | 
						|
 */
 | 
						|
/* Integer to String translator
 | 
						|
	-> base is a value from [-16,-2] V [2,16]
 | 
						|
	-> base < 0: see 'val' as unsigned value
 | 
						|
	-> no checks for buffer overflow and illegal parameters
 | 
						|
	(1985, EHB)
 | 
						|
*/
 | 
						|
 | 
						|
#define MAXWIDTH 32
 | 
						|
 | 
						|
char *
 | 
						|
long2str(val, base)
 | 
						|
	register long val;
 | 
						|
	register base;
 | 
						|
{
 | 
						|
	static char numbuf[MAXWIDTH];
 | 
						|
	static char vec[] = "0123456789ABCDEF";
 | 
						|
	register char *p = &numbuf[MAXWIDTH];
 | 
						|
	int sign = (base > 0);
 | 
						|
 | 
						|
	*--p = '\0';		/* null-terminate string	*/
 | 
						|
	if (val) {
 | 
						|
		if (base > 0) {
 | 
						|
			if (val < 0L) {
 | 
						|
				long v1 = -val;
 | 
						|
				if (v1 == val)
 | 
						|
					goto overflow;
 | 
						|
				val = v1;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				sign = 0;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		if (base < 0) {			/* unsigned */
 | 
						|
			base = -base;
 | 
						|
			if (val < 0L) {	/* taken from Amoeba src */
 | 
						|
				register mod, i;
 | 
						|
			overflow:
 | 
						|
				mod = 0;
 | 
						|
				for (i = 0; i < 8 * sizeof val; i++) {
 | 
						|
					mod <<= 1;
 | 
						|
					if (val < 0)
 | 
						|
						mod++;
 | 
						|
					val <<= 1;
 | 
						|
					if (mod >= base) {
 | 
						|
						mod -= base;
 | 
						|
						val++;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				*--p = vec[mod];
 | 
						|
			}
 | 
						|
		}
 | 
						|
		do {
 | 
						|
			*--p = vec[(int) (val % base)];
 | 
						|
			val /= base;
 | 
						|
		} while (val != 0L);
 | 
						|
		if (sign)
 | 
						|
			*--p = '-';	/* don't forget it !!	*/
 | 
						|
	}
 | 
						|
	else
 | 
						|
		*--p = '0';		/* just a simple 0	*/
 | 
						|
	return p;
 | 
						|
}
 |