rem: *str++ = '0';
add: put_character(_string, _bytesLeft, '0');
context: number(char *str, long long num, unsigned base, int size, int precision, int type){	const char *digits = "0123456789abcdefghijklmnopqrstuvwxyz";	char c, sign, tmp[66];	int i;	if (type & LARGE)		digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";	if (type & LEFT)		type &= ~ZEROPAD;	if (base < 2 || base > 36)		return 0;	c = (type & ZEROPAD) ? '0' : ' ';	sign = 0;	if (type & SIGN) {		if (num < 0) {			sign = '-';			num = -num;			size--;		} else if (type & PLUS) {			sign = '+';			size--;		} else if (type & SPACE) {			sign = ' ';			size--;		}	}	if (type & SPECIAL) {		if (base == 16)			size -= 2;		else if (base == 8)			size--;	}	i = 0;	if (num == 0)		tmp[i++] = '0';	else while (num != 0)		tmp[i++] = digits[do_div(&num, base)];	if (i > precision)		precision = i;	size -= precision;	if (!(type&(ZEROPAD + LEFT))) {		while (size-- > 0)			*str++ = ' ';	}	if (sign)		*str++ = sign;	if (type & SPECIAL) {		if (base == 8)			*str++ = '0';		else if (base == 16) {			*str++ = '0';			*str++ = digits[33];		}	}	if (!(type & LEFT))		while (size-- > 0)			*str++ = c;	while (i < precision--)		*str++ = '0';	while (i-- > 0)		*str++ = tmp[i];	while (size-- > 0)		*str++ = ' ';	return str;}