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 }