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}