Kernel: Formatter now supports fill to length
This commit is contained in:
		
							parent
							
								
									2938c85c1a
								
							
						
					
					
						commit
						1283e74ee6
					
				|  | @ -34,6 +34,7 @@ namespace Formatter | ||||||
| 	{ | 	{ | ||||||
| 		int base		= 10; | 		int base		= 10; | ||||||
| 		int percision	= 3; | 		int percision	= 3; | ||||||
|  | 		int fill		= 0; | ||||||
| 		bool upper		= false; | 		bool upper		= false; | ||||||
| 	}; | 	}; | ||||||
| 	 | 	 | ||||||
|  | @ -72,7 +73,6 @@ namespace Formatter | ||||||
| 		PUTC_LIKE('\n'); | 		PUTC_LIKE('\n'); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 	template<void(*PUTC_LIKE)(char), typename Arg> | 	template<void(*PUTC_LIKE)(char), typename Arg> | ||||||
| 	size_t print_argument(const char* format, Arg argument) | 	size_t print_argument(const char* format, Arg argument) | ||||||
| 	{ | 	{ | ||||||
|  | @ -87,6 +87,17 @@ namespace Formatter | ||||||
| 			if (!format[i] || format[i] == '}') | 			if (!format[i] || format[i] == '}') | ||||||
| 				break; | 				break; | ||||||
| 
 | 
 | ||||||
|  | 			if ('0' <= format[i] && format[i] <= '9') | ||||||
|  | 			{ | ||||||
|  | 				int fill = 0; | ||||||
|  | 				while ('0' <= format[i] && format[i] <= '9') | ||||||
|  | 				{ | ||||||
|  | 					fill = (fill * 10) + (format[i] - '0'); | ||||||
|  | 					i++; | ||||||
|  | 				} | ||||||
|  | 				value_format.fill = fill; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
| 			switch (format[i]) | 			switch (format[i]) | ||||||
| 			{ | 			{ | ||||||
| 				case 'b': value_format.base = 2;	value_format.upper = false;	i++; break; | 				case 'b': value_format.base = 2;	value_format.upper = false;	i++; break; | ||||||
|  | @ -142,7 +153,11 @@ namespace Formatter | ||||||
| 	void print_integer(T value, const ValueFormat& format) | 	void print_integer(T value, const ValueFormat& format) | ||||||
| 	{ | 	{ | ||||||
| 		if (value == 0) | 		if (value == 0) | ||||||
| 			return PUTC_LIKE('0'); | 		{ | ||||||
|  | 			for (int i = 0; i < format.fill || i < 1; i++) | ||||||
|  | 				PUTC_LIKE('0'); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		bool sign = false; | 		bool sign = false; | ||||||
| 
 | 
 | ||||||
|  | @ -165,6 +180,9 @@ namespace Formatter | ||||||
| 			value /= format.base; | 			value /= format.base; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		while (ptr >= buffer + sizeof(buffer) - format.fill) | ||||||
|  | 			*(--ptr) = '0'; | ||||||
|  | 
 | ||||||
| 		if (sign) | 		if (sign) | ||||||
| 			*(--ptr) = '-'; | 			*(--ptr) = '-'; | ||||||
| 		 | 		 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue