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}