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}