code wiki / _hdl_build / nx_viz_format.nx
nx_viz_format.nx source
↩ module page · 37 lines · 1472 B
1// nx_viz_format.nx -- the NUMBER-FORMAT layer of the sovereign Nishi viz library (the d3-format SI core, bits-up).
2// Human-readable axis numbers: <1000 as-is, thousands as "N.Nk", millions as "N.NM". Pure integer. Closes
3// format-number. license_tier: ORIGINAL
4import "nx_syscalls.nx"
5const K_MAGIC_1000000: i64 = 1000000
6const K_MAGIC_100000: i64 = 100000
7
8func vf_uint(out: *u8, off: i64, v: i64) -> i64 {
9 var o: i64 = off; var x: i64 = v
10 let t: *u8 = sys_mmap(28); var k: i64 = 0
11 if x == 0 { t[0] = 48 as u8; k = 1 }
12 while x > 0 { t[k] = (48 + x % 10) as u8; x = x / 10; k = k + 1 }
13 var i: i64 = 0; while i < k { out[o] = t[k - 1 - i]; o = o + 1; i = i + 1 }
14 return o
15}
16// SI-format value -> out (null-terminated). returns length.
17func vf_si(value: i64, out: *u8) -> i64 {
18 var o: i64 = 0
19 if value < 1000 { o = vf_uint(out, 0, value) }
20 if value >= 1000 {
21 if value < K_MAGIC_1000000 {
22 o = vf_uint(out, 0, value / 1000)
23 out[o] = 46 as u8; o = o + 1
24 out[o] = (48 + (value / 100) % 10) as u8; o = o + 1
25 out[o] = 107 as u8; o = o + 1
26 }
27 if value >= K_MAGIC_1000000 {
28 o = vf_uint(out, 0, value / K_MAGIC_1000000)
29 out[o] = 46 as u8; o = o + 1
30 out[o] = (48 + (value / K_MAGIC_100000) % 10) as u8; o = o + 1
31 out[o] = 77 as u8; o = o + 1
32 }
33 }
34 out[o] = 0 as u8
35 return o
36}
37func main() -> i64 { return 0 }