code wiki / _hdl_build / nx_archcensus.nx
nx_archcensus.nx source
↩ module page · 152 lines · 6788 B
1// nx_archcensus.nx -- ECOSYSTEM OO-HEALTH CENSUS (the "use the atlas to consolidate and architect"
2// capstone). Composes nx_sharpgrade_core (sgc_grade, DRY) over a whole tree: grades every organ
3// SHARP | SHARP-LIB | SPLIT-K, rolls up an ecosystem SHARPNESS gauge (permil sharp-or-lib), and names
4// the worst SPLIT offenders (the ranked split backlog). Seeds the archcensus- plane = the atlas-integrated
5// SSOT of architectural health, so the consolidation backlog is DERIVED from measurement, not taste.
6// argv: <dir> [dir2...]
7// Report: SPLIT <file> comp=K pref=P per split organ, then NX-ARCHCENSUS organs=N sharp=S sharplib=L
8// split=P worst=<file>@<k> sharpness_permil=<g>
9// exit 0. Deterministic. license_tier: ORIGINAL No hw writes (Rule 26).
10import "nx_sharpgrade_core.nx"
11import "nx_seat_drive_lib.nx"
12import "nx_store_seed_lib.nx"
13import "nx_seg_store.nx"
14import "nx_deploy_lib.nx"
15import "nx_syscalls.nx"
16const AC_MAGIC_262144: i64 = 262144
17const AC_MAGIC_1024: i64 = 1024
18
19const AC_SRCCAP: i64 = 4194304
20const AC_QCAP: i64 = 4194304
21
22func ac_ends_nx(nm: *u8) -> i64 {
23 var n: i64 = 0
24 while nm[n] != (0 as u8) { n = n + 1 }
25 if n < 3 { return 0 }
26 if nm[n-3] == (46 as u8) { if nm[n-2] == (110 as u8) { if nm[n-1] == (120 as u8) { return 1 } } }
27 return 0
28}
29
30func main(argc: i64, argv: *i64) -> i64 {
31 if argc < 3 { sd_w("usage: nx_archcensus <consolq-prefix> <dir> [dir2...]\n" as *u8); sys_exit(2); return 2 }
32 let cqp: *u8 = argv[1] as *u8
33 let src: *u8 = sys_mmap(AC_SRCCAP)
34 let g: *i64 = sys_mmap(32) as *i64
35 let dbuf: *u8 = sys_mmap(AC_MAGIC_262144)
36 let outq: *u8 = sys_mmap(AC_QCAP)
37 var qo: i64 = 0
38
39 var organs: i64 = 0
40 var sharp: i64 = 0
41 var sharplib: i64 = 0
42 var split: i64 = 0
43 var worstk: i64 = 0
44 let worstf: *u8 = sys_mmap(AC_MAGIC_1024)
45 worstf[0] = 45 as u8; worstf[1] = 0 as u8
46
47 var d: i64 = 2
48 while d < argc {
49 let dir: *u8 = argv[d] as *u8
50 let dfd: i64 = sys_openat_rd(dir)
51 if dfd >= 0 {
52 var go: i64 = 1
53 while go == 1 {
54 let dn: i64 = sys_getdents64(dfd, dbuf, AC_MAGIC_262144)
55 if dn <= 0 { go = 0 } else {
56 var off: i64 = 0
57 while off < dn {
58 let rec: *u8 = ((dbuf as i64) + off) as *u8
59 let ty: i64 = dirent_type(rec)
60 let nm: *u8 = dirent_name(rec)
61 if ty != 4 { if ac_ends_nx(nm) == 1 {
62 let p: *u8 = sys_mmap(AC_MAGIC_1024)
63 var po: i64 = 0
64 var di: i64 = 0
65 while dir[di] != (0 as u8) { p[po] = dir[di]; po = po + 1; di = di + 1 }
66 p[po] = 47 as u8; po = po + 1
67 var mi: i64 = 0
68 while nm[mi] != (0 as u8) { p[po] = nm[mi]; po = po + 1; mi = mi + 1 }
69 p[po] = 0 as u8
70 let fd: i64 = sys_openat_rd(p)
71 if fd >= 0 {
72 var slen: i64 = 0
73 var r: i64 = sys_read(fd, src, AC_SRCCAP - 1)
74 while r > 0 { slen = slen + r; if slen >= AC_SRCCAP - 1 { r = 0 } else { r = sys_read(fd, src + slen, AC_SRCCAP - 1 - slen) } }
75 sys_close(fd)
76 if slen > 0 {
77 organs = organs + 1
78 sgc_grade(src, slen, g)
79 let nf: i64 = g[0]
80 let comps: i64 = g[1]
81 let dpref: i64 = g[2]
82 // verdict
83 if comps <= 1 { sharp = sharp + 1 } else {
84 if dpref <= 1 { sharplib = sharplib + 1 } else {
85 split = split + 1
86 sd_w("SPLIT " as *u8)
87 sd_w(p)
88 sd_w(" comp=" as *u8)
89 let cb: *u8 = sys_mmap(24)
90 sd_num(cb, 0, comps)
91 sd_w(cb)
92 sd_w(" pref=" as *u8)
93 sd_num(cb, 0, dpref)
94 sd_w(cb)
95 sd_w("\n" as *u8)
96 // consolq row (frontier-shaped split proposal)
97 qo = sd_cat(outq, qo, "S" as *u8)
98 qo = sd_num(outq, qo, split)
99 qo = sd_cat(outq, qo, "\tsplit " as *u8)
100 qo = sd_cat(outq, qo, p)
101 qo = sd_cat(outq, qo, " into " as *u8)
102 qo = sd_num(outq, qo, comps)
103 qo = sd_cat(outq, qo, " tools\t7\t0\tarchitect\tT\t\tsharp-split\tatlas\n" as *u8)
104 if comps > worstk {
105 worstk = comps
106 var wi: i64 = 0
107 while p[wi] != (0 as u8) { worstf[wi] = p[wi]; wi = wi + 1 }
108 worstf[wi] = 0 as u8
109 }
110 }
111 }
112 }
113 }
114 } }
115 off = off + dirent_reclen(rec)
116 }
117 }
118 }
119 sys_close(dfd)
120 }
121 d = d + 1
122 }
123
124 sts_seed(cqp, outq, qo)
125
126 var health: i64 = 0
127 if organs > 0 { health = (sharp + sharplib) * 1000 / organs }
128 sd_w("NX-ARCHCENSUS organs=" as *u8)
129 let ob: *u8 = sys_mmap(64)
130 sd_num(ob, 0, organs)
131 sd_w(ob)
132 sd_w(" sharp=" as *u8)
133 sd_num(ob, 0, sharp)
134 sd_w(ob)
135 sd_w(" sharplib=" as *u8)
136 sd_num(ob, 0, sharplib)
137 sd_w(ob)
138 sd_w(" split=" as *u8)
139 sd_num(ob, 0, split)
140 sd_w(ob)
141 sd_w(" worst=" as *u8)
142 sd_w(worstf)
143 sd_w("@" as *u8)
144 sd_num(ob, 0, worstk)
145 sd_w(ob)
146 sd_w(" sharpness_permil=" as *u8)
147 sd_num(ob, 0, health)
148 sd_w(ob)
149 sd_w("\n" as *u8)
150 sys_exit(0)
151 return 0
152}