display_int radices

This commit is contained in:
koniifer 2024-10-20 13:31:44 +01:00
parent bcfaf89ed0
commit b35b430047
2 changed files with 32 additions and 7 deletions

View file

@ -4,32 +4,57 @@ length := fn(ptr: ^u8): uint {
return len
}
// WTFFF is wrong with display_int
display_int := fn(num: int, p: ^u8): ^u8 {
display_int := fn(num: int, p: ^u8, radix: int): ^u8 {
ptr := p
negative := num < 0
if negative {
num = -num
}
if radix == 2 {
*ptr = 48
ptr += 1;
*ptr = 98
ptr += 1
} else if radix == 16 {
*ptr = 48
ptr += 1;
*ptr = 120
ptr += 1
} else if radix == 8 {
*ptr = 48
ptr += 1;
*ptr = 111
ptr += 1
}
digits_start := ptr
if num == 0 {
*ptr = 48
ptr += 1
} else {
loop if num == 0 break else {
*ptr = num % 10 + 48
digit := num % radix
if digit < 10 {
*ptr = digit + 48
} else {
*ptr = digit + 55
}
ptr += 1
num /= 10
num /= radix
}
}
if negative {
*ptr = 45
ptr += 1
};
*ptr = 0
@inline(reverse, p)
@inline(reverse, digits_start)
return p
}
reverse := fn(s: ^u8): void {
len := @inline(length, s)
i := 0

View file

@ -12,7 +12,7 @@ main := fn(): int {
buf := "\0\0\0\0"
x := 0
loop if x == 255 break else {
log.info(string.display_int(x, buf))
log.info(string.display_int(x, buf, 10))
x += 1
}
return 0