code wiki / _hdl_build / nx_surface_census.nx

nx_surface_census.nx source

↩ module page · 135 lines · 5978 B

1// nx_surface_census.nx -- the PRODUCT-SURFACE report (operator: "where are we on 2// emitting our own browser/game/kernel/dev-platform?" -> the system ANSWERS every 3// beat, no tutor grep). Reads surfaces.tsv (surface, maturity, emits_via, gate log + 4// anchor + green) and grades each surface by its gate's LAST verdict -- the examiner 5// gene applied to PRODUCTS. Tallies maturity tiers so the climb is one readable line. 6// Durable: SURFACE rows + SURFACE-CENSUS -> knowledge/status/surface_census.log. 7// Exit 0 always (a census reports, never fails). argv[1]=surfaces.tsv override. 8// license_tier: ORIGINAL 9import "nx_syscalls.nx" 10const K_MAGIC_524288: i64 = 524288 11const K_MAGIC_524272: i64 = 524272 12const K_MAGIC_262144: i64 = 262144 13const K_MAGIC_262128: i64 = 262128 14func _p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 15func _fp(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 16func _fn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(fd,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 } 17func sc_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 18func sc_read(path: *u8, buf: *u8, cap: i64) -> i64 { 19 let fd: i64 = sys_openat_rd(path) 20 if fd < 0 { return 0 } 21 var n: i64 = 0 22 var go: i64 = 1 23 while go == 1 { let base: i64 = buf as i64; let r: i64 = sys_read(fd, (base + n) as *u8, cap - n); if r <= 0 { go = 0 } else { n = n + r } if n >= cap { go = 0 } } 24 sys_close(fd) 25 return n 26} 27func sc_has(hay: *u8, a: i64, b: i64, pat: *u8) -> i64 { 28 let pl: i64 = sc_len(pat) 29 if pl == 0 { return 0 } 30 var i: i64 = a 31 while i + pl <= b { 32 var k: i64 = 0 33 var hit: i64 = 1 34 while k < pl { if hay[i+k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } } 35 if hit == 1 { return 1 } 36 i = i + 1 37 } 38 return 0 39} 40// tab columns of a line into sp (start,end pairs); returns ncols 41func sc_cols(q: *u8, ls: i64, le: i64, sp: *i64) -> i64 { 42 var c: i64 = 0 43 var p: i64 = ls 44 while c < 7 { 45 var e: i64 = p 46 var s: i64 = 1 47 while s == 1 { if e >= le { s = 0 } else { if q[e] == (9 as u8) { s = 0 } else { e = e + 1 } } } 48 sp[c*2] = p 49 sp[c*2+1] = e 50 c = c + 1 51 if e >= le { return c } 52 p = e + 1 53 } 54 return c 55} 56// copy slice to nul-str 57func sc_cpy(q: *u8, a: i64, b: i64, out: *u8) -> i64 { 58 var o: i64 = 0 59 var i: i64 = a 60 while i < b { out[o] = q[i]; o = o + 1; i = i + 1 } 61 out[o] = 0 as u8 62 return o 63} 64// grade a surface by its gate log's LAST line containing anchor: contains green? 0 GREEN/1 RED/2 ABSENT 65func sc_grade(logp: *u8, anchor: *u8, green: *u8) -> i64 { 66 let lb: *u8 = sys_mmap(K_MAGIC_524288) 67 let n: i64 = sc_read(logp, lb, K_MAGIC_524272) 68 if n <= 0 { return 2 } 69 var fa: i64 = 0 - 1 70 var fb: i64 = 0 - 1 71 var i: i64 = 0 72 while i < n { 73 var le: i64 = i 74 var s: i64 = 1 75 while s == 1 { if le >= n { s = 0 } else { if lb[le] == (10 as u8) { s = 0 } else { le = le + 1 } } } 76 if sc_has(lb, i, le, anchor) == 1 { fa = i; fb = le } 77 i = le + 1 78 } 79 if fa < 0 { return 2 } 80 if sc_has(lb, fa, fb, green) == 1 { return 0 } 81 return 1 82} 83func main(argc: i64, argv: *i64) -> i64 { 84 var sp_path: *u8 = "knowledge/registry/surfaces.tsv" as *u8 85 if argc >= 2 { sp_path = argv[1] as *u8 } 86 _p("=== SURFACE CENSUS: where are we on emitting our own products (per beat) ===\n" as *u8) 87 let q: *u8 = sys_mmap(K_MAGIC_262144) 88 let qn: i64 = sc_read(sp_path, q, K_MAGIC_262128) 89 if qn <= 0 { _p(" surfaces MISSING -- fail loud\n" as *u8); sys_exit(1); return 1 } 90 let lfd: i64 = sys_openat_append("knowledge/status/surface_census.log" as *u8, 0x1a4) 91 if lfd < 0 { _p(" surface census log open failed\n" as *u8); sys_exit(1); return 1 } 92 let sp: *i64 = sys_mmap(160) as *i64 93 let anc: *u8 = sys_mmap(128) 94 let grn: *u8 = sys_mmap(128) 95 let logp: *u8 = sys_mmap(256) 96 var nsurf: i64 = 0 97 var emitting: i64 = 0 98 var grn_n: i64 = 0 99 var i: i64 = 0 100 while i < qn { 101 var le: i64 = i 102 var s: i64 = 1 103 while s == 1 { if le >= qn { s = 0 } else { if q[le] == (10 as u8) { s = 0 } else { le = le + 1 } } } 104 if q[i] != (35 as u8) { 105 let nc: i64 = sc_cols(q, i, le, sp) 106 if nc == 6 { 107 nsurf = nsurf + 1 108 sc_cpy(q, sp[6], sp[7], logp) 109 sc_cpy(q, sp[8], sp[9], anc) 110 sc_cpy(q, sp[10], sp[11], grn) 111 let g: i64 = sc_grade(logp, anc, grn) 112 _fp(lfd, "SURFACE name=" as *u8) 113 sys_write(lfd, (q as i64 + sp[0]) as *u8, sp[1] - sp[0]) 114 _fp(lfd, " maturity=" as *u8) 115 sys_write(lfd, (q as i64 + sp[2]) as *u8, sp[3] - sp[2]) 116 _fp(lfd, " gate=" as *u8) 117 if g == 0 { _fp(lfd, "GREEN" as *u8); grn_n = grn_n + 1 } 118 if g == 1 { _fp(lfd, "RED" as *u8) } 119 if g == 2 { _fp(lfd, "ABSENT" as *u8) } 120 _fp(lfd, "\n" as *u8) 121 if sc_has(q, sp[2], sp[3], "EMITTING" as *u8) == 1 { emitting = emitting + 1 } 122 } 123 } 124 i = le + 1 125 } 126 _fp(lfd, "SURFACE-CENSUS epoch=" as *u8); _fn(lfd, sys_now_realtime_sec()) 127 _fp(lfd, " surfaces=" as *u8); _fn(lfd, nsurf) 128 _fp(lfd, " emitting=" as *u8); _fn(lfd, emitting) 129 _fp(lfd, " gate_green=" as *u8); _fn(lfd, grn_n) 130 _fp(lfd, " verdict=REPORTED\n" as *u8) 131 sys_close(lfd) 132 _p(" SURFACE CENSUS: " as *u8); _fn(1, emitting); _p(" emitting / " as *u8); _fn(1, nsurf); _p(" surfaces (knowledge/status/surface_census.log)\n" as *u8) 133 sys_exit(0) 134 return 0 135}