length := fn(ptr: ^u8): uint { len := @as(uint, 0) // loop if *(ptr + len) == 0 return len else len += 1 loop if *(ptr + len) == 0 break else len += 1 return len } display_int := fn(num: int, p: ^u8, radix: uint): ^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 { digit := num % @bitcast(radix) if digit < 10 { *ptr = @intcast(digit) + 48 } else { *ptr = @intcast(digit) + 55 } ptr += 1 num /= @bitcast(radix) } } if negative { *ptr = 45 ptr += 1 }; *ptr = 0 @inline(reverse, digits_start) return p } reverse := fn(s: ^u8): void { i := @as(uint, 0) j := @inline(length, s) - 1 temp := @as(u8, 0) loop if i >= j break else { temp = *(s + i); *(s + i) = *(s + j); *(s + j) = temp i += 1 j -= 1 } return }