Move printFormat() to kstd
This commit is contained in:
		
							parent
							
								
									27fd989245
								
							
						
					
					
						commit
						7e266a2837
					
				
					 3 changed files with 45 additions and 30 deletions
				
			
		|  | @ -62,13 +62,9 @@ struct Console | |||
|     void printString(const char *str); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Write a format string to the current cursor position. Returns the number | ||||
|      * of characters printed. | ||||
|      * Set the current cursor color. Subsequent characters will be written in | ||||
|      * this color. | ||||
|      */ | ||||
|     int printFormat(const char *format, ...) PRINTF(2, 3); | ||||
|     int printFormat(const char *format, va_list args); | ||||
| 
 | ||||
| 
 | ||||
|     void setColor(Color fg, Color bg); | ||||
| 
 | ||||
| private: | ||||
|  |  | |||
|  | @ -1,9 +1,9 @@ | |||
| /* ConsolePrintFormat.cc
 | ||||
| /* PrintFormat.cc
 | ||||
|  * vim: set tw=80: | ||||
|  * Eryn Wells <eryn@erynwells.me> | ||||
|  */ | ||||
| /**
 | ||||
|  * Implementation of Console::printFormat, a printf style method. | ||||
|  * Declares printFormat(), for writing formatted strings to the appropriate channel. | ||||
|  */ | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
|  | @ -168,25 +168,26 @@ Spec::print(kernel::Console& console) | |||
| 
 | ||||
| 
 | ||||
| inline bool | ||||
| is_size(char c) | ||||
| isSize(char c) | ||||
| { | ||||
|     return c == 'h' || c == 'l'; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| inline bool | ||||
| is_specifier(char c) | ||||
| isSpecifier(char c) | ||||
| { | ||||
|     return c == 'd' || c == 'x' || c == 'X' || c == 'c' || c == 's'; | ||||
| } | ||||
| 
 | ||||
| } /* anonymous namespace */ | ||||
| 
 | ||||
| namespace kernel { | ||||
| 
 | ||||
| namespace kstd { | ||||
| 
 | ||||
| int | ||||
| Console::printFormat(const char* format, | ||||
|                      va_list args) | ||||
| printFormat(const char* format, | ||||
|             va_list args) | ||||
| { | ||||
|     enum { | ||||
|         Default = 0, | ||||
|  | @ -214,33 +215,33 @@ Console::printFormat(const char* format, | |||
|                     state = Default; | ||||
|                     printChar(*p); | ||||
|                     nchars++; | ||||
|                 } else if (kstd::Char::isDigit(*p)) { | ||||
|                 } else if (Char::isDigit(*p)) { | ||||
|                     if (*p == '0' && !spec.zeroPadded) { | ||||
|                         spec.zeroPadded = true; | ||||
|                     } else { | ||||
|                         state = Width; | ||||
|                         spec.width = *p - '0'; | ||||
|                     } | ||||
|                 } else if (is_size(*p)) { | ||||
|                 } else if (isSize(*p)) { | ||||
|                     goto state_size; | ||||
|                 } else if (is_specifier(*p)) { | ||||
|                 } else if (isSpecifier(*p)) { | ||||
|                     goto state_specifier; | ||||
|                 } | ||||
|                 break; | ||||
|             case Width: | ||||
|                 if (kstd::Char::isDigit(*p)) { | ||||
|                 if (Char::isDigit(*p)) { | ||||
|                     spec.width = 10 * spec.width + (*p - '0'); | ||||
|                 } else if (is_size(*p)) { | ||||
|                 } else if (isSize(*p)) { | ||||
|                     state = Size; | ||||
|                     goto state_size; | ||||
|                 } else if (is_specifier(*p)) { | ||||
|                 } else if (isSpecifier(*p)) { | ||||
|                     goto state_specifier; | ||||
|                 } | ||||
|                 break; | ||||
|             case Size: | ||||
|                 if (is_size(*p)) { | ||||
|                 if (isSize(*p)) { | ||||
|                     goto state_size; | ||||
|                 } else if (is_specifier(*p)) { | ||||
|                 } else if (isSpecifier(*p)) { | ||||
|                     goto state_specifier; | ||||
|                 } | ||||
|                 break; | ||||
|  | @ -253,13 +254,9 @@ Console::printFormat(const char* format, | |||
| 
 | ||||
|     state_size: | ||||
|         if (*p == 'h') { | ||||
|             spec.size =   (spec.size == Spec::Size::Short) | ||||
|                         ? Spec::Size::DoubleShort | ||||
|                         : Spec::Size::Short; | ||||
|             spec.size = (spec.size == Spec::Size::Short) ? Spec::Size::DoubleShort : Spec::Size::Short; | ||||
|         } else if (*p == 'l') { | ||||
|             spec.size =   (spec.size == Spec::Size::Long) | ||||
|                         ? Spec::Size::DoubleLong | ||||
|                         : Spec::Size::Long; | ||||
|             spec.size = (spec.size == Spec::Size::Long) ? Spec::Size::DoubleLong : Spec::Size::Long; | ||||
|         } | ||||
|         continue; | ||||
| 
 | ||||
|  | @ -328,8 +325,8 @@ Console::printFormat(const char* format, | |||
| 
 | ||||
| 
 | ||||
| int | ||||
| Console::printFormat(const char* format, | ||||
|                      ...) | ||||
| printFormat(const char* format, | ||||
|             ...) | ||||
| { | ||||
|     va_list args; | ||||
|     va_start(args, format); | ||||
|  | @ -338,4 +335,4 @@ Console::printFormat(const char* format, | |||
|     return nchars; | ||||
| } | ||||
| 
 | ||||
| } /* namespace kernel */ | ||||
| } /* namespace kstd */ | ||||
							
								
								
									
										22
									
								
								src/kstd/PrintFormat.hh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/kstd/PrintFormat.hh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| /* PrintFormat.hh
 | ||||
|  * vim: set tw=80: | ||||
|  * Eryn Wells <eryn@erynwells.me> | ||||
|  */ | ||||
| /**
 | ||||
|  * Declares printFormat(), for writing formatted strings to the appropriate channel. | ||||
|  */ | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| 
 | ||||
| namespace kstd { | ||||
| 
 | ||||
| /**
 | ||||
|  * Write a format string to the appropriate output channel. | ||||
|  * @return Number of characters printed | ||||
|  * @{ | ||||
|  */ | ||||
| int printFormat(const char* format, ...) PRINTF(2,3); | ||||
| int printFormat(const char* format, va_list args); | ||||
| /** @} */ | ||||
|      | ||||
| } /* namespace kstd */ | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue