length := fn(ptr: ^u8): int { len := 0; loop if *ptr == 0 break else { len += 1; ptr += 1; } return len; } display_int := fn(num: int, p: ^u8): ^u8 { i := 0; if num == 0 { set(p, 48); return p; } loop { if num == 0 break; set(p + i, num % 10 + 48); num /= 10; i += 1; } reverse(p); //null terminate set(p + i, 0); return p; } reverse := fn(s: ^u8): void { //reverse a string, don't remove digits len := 0; loop { if *(s + len) == 0 break; len += 1; } i := 0; j := len - 1; loop { if i >= j break; temp := *(s + i); *(s + i) = *(s + j); *(s + j) = temp; i += 1; j -= 1; } return; } set := fn(change: ^u8, new: int): void { *(change) = new; return; }