kprintf and kprint_float
This commit is contained in:
parent
6208ae369d
commit
2564aa6aba
4 changed files with 28 additions and 2 deletions
|
|
@ -38,6 +38,22 @@ void kprint_int(int num) {
|
|||
}
|
||||
}
|
||||
|
||||
void kprint_float(float num) {
|
||||
if (num < 0) {
|
||||
kputchar('-');
|
||||
num = -num;
|
||||
}
|
||||
int int_part = (int)num;
|
||||
float frac_part = num - int_part;
|
||||
kprint_int(int_part);
|
||||
kputchar('.');
|
||||
for (int i = 0; i < 6; i++) {
|
||||
frac_part *= 10.0f;
|
||||
}
|
||||
int fraction = (int)(frac_part + 0.5f); // Round to nearest
|
||||
kprint_int(fraction);
|
||||
}
|
||||
|
||||
void kprint_hex(uint64_t val) {
|
||||
char *digits = "0123456789ABCDEF";
|
||||
char buffer[16]; // 64-bit hex is 16 chars
|
||||
|
|
@ -79,6 +95,11 @@ void kprintf(const char *format, ...) {
|
|||
kprint_int(d);
|
||||
break;
|
||||
}
|
||||
case 'f': {
|
||||
double f = va_arg(args, double);
|
||||
kprint_float((float)f);
|
||||
break;
|
||||
}
|
||||
case 'x': // Hex
|
||||
case 'p': { // Pointer
|
||||
uint64_t x = va_arg(args, uint64_t);
|
||||
|
|
@ -97,5 +118,5 @@ void kprintf(const char *format, ...) {
|
|||
kputchar(*p);
|
||||
}
|
||||
}
|
||||
|
||||
knewline();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue