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 return len
} }
// WTFFF is wrong with display_int display_int := fn(num: int, p: ^u8, radix: int): ^u8 {
display_int := fn(num: int, p: ^u8): ^u8 {
ptr := p ptr := p
negative := num < 0 negative := num < 0
if negative { if negative {
num = -num 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 { if num == 0 {
*ptr = 48 *ptr = 48
ptr += 1 ptr += 1
} else { } else {
loop if num == 0 break 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 ptr += 1
num /= 10 num /= radix
} }
} }
if negative { if negative {
*ptr = 45 *ptr = 45
ptr += 1 ptr += 1
}; };
*ptr = 0 *ptr = 0
@inline(reverse, p)
@inline(reverse, digits_start)
return p return p
} }
reverse := fn(s: ^u8): void { reverse := fn(s: ^u8): void {
len := @inline(length, s) len := @inline(length, s)
i := 0 i := 0

View file

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