/** * The simple implementation of printf. */ void term_printf(const char* fmt, ...) { va_list ap; int32_t d; uint32_t u; uint32_t h; char c, *s; va_start(ap, fmt); while(*fmt != '\0') { if(*fmt == '%') { fmt++; if(*fmt == 'd') { d = va_arg(ap, int32_t); print_int32(d); } else if(*fmt == 'u') { u = va_arg(ap, uint32_t); print_uint32(u); } else if(*fmt == 'h') { h = va_arg(ap, uint32_t); print_hex(h); } else if(*fmt == 's') { s = va_arg(ap, char*); print_string(s); } else if(*fmt == 'c') {
/********************************************************************** * Description: * Prints Formatted strings for STD out. Format specifiers * provide what type of data to be printed and the data value is taken * from the argument list. * * Input: * One or more Formatted string messages to be printed allong with * other data values to be printed. * * Output: * Number of characters actually printed. -1 if failure. *********************************************************************/ int printk(char *fmt, ...) { va_list arg; int ret = 0; uint32_t val; uint64_t val64; //Check if valid putc() is registered. if (_putc == NULL) return -1; // Variable argument processing va_start(arg, fmt); // Till the end of string while(*fmt != '\0') { // Format the data to be printed if(*fmt == '%') { fmt++; switch(*fmt) { case 'd': // Print the integer val = va_arg(arg,int); ret += print_int32((int)val); break; case 'x': // Print Hex val = va_arg(arg, uint32_t); ret += print_hex32(val, 1); break; case 'c': // Print the char val = va_arg(arg, int); _putc((char)val); ret++; break; case 'u': // Print unsigned int val = va_arg(arg, uint32_t); ret += print_uint32(val); break; case 's': // Print the string val = va_arg(arg, uint32_t); ret += print_string((char*)val); break; case 'l': // Long data switch(*(++fmt)) { case 'u': val64 = va_arg(arg, uint64_t); ret += print_uint64(val64); break; case 'd': val64 = va_arg(arg, int64_t); ret += print_int64(val64); break; case 'x': val64 = va_arg(arg, uint64_t); ret += print_hex64(val64); break; default: val64 = va_arg(arg, int64_t); ret += print_int64(val64); break; } break; default: _putc(*fmt); ret++; break; } } else {