code wiki / _hdl_build / nx_border_probe.nx
nx_border_probe.nx source
↩ module page · 56 lines · 3320 B
1// nx_border_probe.nx -- MEASURE-FIRST probe for the box-border paint rung. Renders a bordered box + a
2// table with bordered cells to BMP+PNG and reports dimensions + presence/count of each border color, so
3// the asserting gate uses VERIFIED values. 100% sovereign. license_tier: ORIGINAL
4import "nx_syscalls.nx"
5import "nx_render_html.nx"
6
7func p_w(s: *u8) -> i64 { var k: i64=0; while s[k]!=(0 as u8){k=k+1} sys_write(1,s,k); return 0 }
8func p_n(v0: i64) -> i64 { var v: i64=v0; if v<0 { let m: *u8=sys_mmap(8); m[0]=45 as u8; sys_write(1,m,1); v=0-v } let b: *u8=sys_mmap(24); var k: i64=0; if v==0 {b[0]=48;k=1} while v>0 {b[k]=(48+(v%10)) as u8; v=v/10; k=k+1} let o: *u8=sys_mmap(24); var j: i64=0; while j<k {o[j]=b[k-1-j];j=j+1} sys_write(1,o,k); return 0 }
9func u32le(d: *u8, p: i64) -> i64 { return (d[p]&0xff) + ((d[p+1]&0xff)<<8) + ((d[p+2]&0xff)<<16) + ((d[p+3]&0xff)<<24) }
10func col_count(data: *u8, off: i64, w: i64, h: i64, R: i64, G: i64, B: i64) -> i64 {
11 let row3: i64 = w*3
12 let pad: i64 = (4-(row3%4))%4
13 let rowstride: i64 = row3+pad
14 var n: i64 = 0
15 var y: i64 = 0
16 while y < h {
17 var x: i64 = 0
18 let rowbase: i64 = off + y*rowstride
19 while x < w {
20 let p: i64 = rowbase + x*3
21 if (data[p]&0xff)==B { if (data[p+1]&0xff)==G { if (data[p+2]&0xff)==R { n=n+1 } } }
22 x = x+1
23 }
24 y = y+1
25 }
26 return n
27}
28func rep_color(data: *u8, off: i64, w: i64, h: i64, name: *u8, R: i64, G: i64, B: i64) -> i64 {
29 let n: i64 = col_count(data, off, w, h, R, G, B)
30 p_w(" " as *u8); p_w(name); p_w(" (" as *u8); p_n(R); p_w("," as *u8); p_n(G); p_w("," as *u8); p_n(B); p_w("): count=" as *u8); p_n(n); p_w("\n" as *u8)
31 return 0
32}
33
34func main() -> i64 {
35 let html: *u8 = "<body><h1>Borders</h1><style>.boxed{border:5px solid #cc0000;background-color:#ffffff;height:60px;width:300px;padding-left:8px;padding-top:8px}table{border:2px solid #3333cc}td{border:1px solid #999999;padding-left:6px;padding-right:6px}</style><div class=\"boxed\">A bordered box.</div><table><tr><td>Cell A</td><td>Cell B</td></tr><tr><td>Cell C</td><td>Cell D</td></tr></table></body>\x00" as *u8
36 var hlen: i64 = 0
37 while html[hlen]!=(0 as u8) { hlen=hlen+1 }
38 p_w("=== BORDER PROBE ===\n" as *u8)
39 let nbmp: i64 = nx_render_html_to_bmp(html, hlen, "knowledge/status/border_probe.bmp\x00" as *u8)
40 nx_render_html_to_png(html, hlen, "knowledge/status/border_probe.png\x00" as *u8)
41 p_w("boxes=" as *u8); p_n(nbmp); p_w("\n" as *u8)
42 let lp: *i64 = sys_mmap(8) as *i64
43 let bmp: *u8 = sys_read_file("knowledge/status/border_probe.bmp\x00" as *u8, lp)
44 let blen: i64 = lp[0]
45 if blen < 54 { p_w("(no image)\n" as *u8); return 1 }
46 let off: i64 = u32le(bmp, 10)
47 let w: i64 = u32le(bmp, 18)
48 let h: i64 = u32le(bmp, 22)
49 p_w("width=" as *u8); p_n(w); p_w(" height=" as *u8); p_n(h); p_w("\n" as *u8)
50 rep_color(bmp, off, w, h, "boxed border #cc0000\x00" as *u8, 0xcc,0,0)
51 rep_color(bmp, off, w, h, "table border #3333cc\x00" as *u8, 0x33,0x33,0xcc)
52 rep_color(bmp, off, w, h, "td border #999999\x00" as *u8, 0x99,0x99,0x99)
53 rep_color(bmp, off, w, h, "white #ffffff\x00" as *u8, 255,255,255)
54 rep_color(bmp, off, w, h, "CONTROL green #00ff00\x00" as *u8, 0,0xff,0)
55 return 0
56}