code wiki / (root) / nx_compare_results.nx

nx_compare_results.nx source

↩ module page · 81 lines · 4796 B

1// nx_compare_results.nx -- CLI over nx_compare_results_lib (ecosystem EC64, 2026-09-17): a board's results in ONE place. 2// nx_compare_results emit <dom> <results-file> <out.html> -> render any results file to any page (fixtures, previews) 3// nx_compare_results publish <dom> -> buildroot/knowledge/compare/<dom>.results rendered to 4// sites/nishifamily/compare/<dom>/results/index.html 5// Every image on the page sits behind the estate's click-to-open primitive; the page is refused when the audit finds a 6// media tag outside one. Receipt: one COMPARE-RESULTS line, verdict last. 7// exit: 0 emitted | 2 usage | 3 results file unreadable | 4 no live rows | 5 write refused | 6 page overflow | 7 bare media 8// license_tier: ORIGINAL No hw writes (Rule 26). 9import "nx_syscalls.nx" 10import "nx_compare_results_lib.nx" 11 12const CRC_EXIT_USAGE: i64 = 2 13const CRC_ARGC_EMIT: i64 = 5 14const CRC_ARGC_PUBLISH: i64 = 3 15const CRC_MODE755: i64 = 493 16const CRC_STDOUT: i64 = 1 17const CRC_DATA_PREFIX: *u8 = "buildroot/knowledge/compare/" 18const CRC_DATA_SUFFIX: *u8 = ".results" 19const CRC_SITE_PREFIX: *u8 = "sites/nishifamily/compare/" 20const CRC_SITE_DIR: *u8 = "/results" 21const CRC_SITE_PAGE: *u8 = "/results/index.html" 22 23func crc_puts(s: *u8) -> i64 { sys_write(CRC_STDOUT, s, rvl_slen(s)); return 0 } 24func crc_putn(v: i64) -> i64 { 25 let b: *u8 = sys_mmap(CRES_PATHB) 26 var o: i64 = 0 27 if v < 0 { o = rvl_cat(b, 0, CRES_PATHB, "-" as *u8); o = cres_catn(b, o, CRES_PATHB, 0 - v) } else { o = cres_catn(b, 0, CRES_PATHB, v) } 28 return crc_puts(b) 29} 30func crc_kv(k: *u8, v: i64) -> i64 { crc_puts(k); return crc_putn(v) } 31func crc_usage() -> i64 { crc_puts("usage: nx_compare_results emit <dom> <results-file> <out.html> | publish <dom>\n" as *u8); return CRC_EXIT_USAGE } 32func crc_streq(a: *u8, b: *u8) -> i64 { return rvl_span_is(a, 0, rvl_slen(a), b) } 33func crc_verdict(code: i64) -> *u8 { 34 if code == CRES_E_READ { return "REFUSED-RESULTS-FILE-UNREADABLE" as *u8 } 35 if code == CRES_E_NOROWS { return "REFUSED-NO-LIVE-ROWS" as *u8 } 36 if code == CRES_E_WRITE { return "REFUSED-WRITE" as *u8 } 37 if code == CRES_E_OVERFLOW { return "REFUSED-PAGE-OVERFLOW" as *u8 } 38 if code == CRES_E_BARE { return "REFUSED-BARE-MEDIA" as *u8 } 39 return "EMITTED" as *u8 40} 41func crc_run(dom: *u8, results_path: *u8, out_path: *u8) -> i64 { 42 let rep: *i64 = sys_mmap(CRES_R_N * CRES_I64) as *i64 43 var i: i64 = 0 44 while i < CRES_R_N { rep[i] = 0; i = i + 1 } 45 let code: i64 = cres_emit_file(dom, results_path, out_path, rep) 46 crc_puts("COMPARE-RESULTS dom=" as *u8); crc_puts(dom) 47 crc_puts(" results=" as *u8); crc_puts(results_path) 48 crc_puts(" page=" as *u8); crc_puts(out_path) 49 crc_kv(" lines=" as *u8, rep[CRES_R_LINES]); crc_kv(" rows=" as *u8, rep[CRES_R_ROWS]); crc_kv(" live=" as *u8, rep[CRES_R_LIVE]) 50 crc_kv(" superseded=" as *u8, rep[CRES_R_SUPERSEDED]); crc_kv(" malformed=" as *u8, rep[CRES_R_MALFORMED]); crc_kv(" first_bad_line=" as *u8, rep[CRES_R_FIRST_BAD_LINE]) 51 crc_kv(" kinds=" as *u8, rep[CRES_R_KINDS]); crc_kv(" inline=" as *u8, rep[CRES_R_OPEN]); crc_kv(" click=" as *u8, rep[CRES_R_CLICK]) 52 crc_kv(" gated=" as *u8, rep[CRES_R_GATED]); crc_kv(" unknown_class=" as *u8, rep[CRES_R_UNKNOWN]); crc_kv(" adult=" as *u8, rep[CRES_R_ADULT]) 53 crc_kv(" bare_media=" as *u8, rep[CRES_R_BARE]); crc_kv(" html_bytes=" as *u8, rep[CRES_R_HTML_BYTES]) 54 crc_puts(" verdict=" as *u8); crc_puts(crc_verdict(code)); crc_puts("\n" as *u8) 55 if code >= 0 { return 0 } 56 return 0 - code 57} 58func main(argc: i64, argv: **u8) -> i64 { 59 if argc < CRC_ARGC_PUBLISH { return crc_usage() } 60 if crc_streq(argv[1], "emit" as *u8) == 1 { 61 if argc < CRC_ARGC_EMIT { return crc_usage() } 62 return crc_run(argv[2], argv[3], argv[4]) 63 } 64 if crc_streq(argv[1], "publish" as *u8) == 1 { 65 let data: *u8 = sys_mmap(CRES_PATHB) 66 var o: i64 = rvl_cat(data, 0, CRES_PATHB, CRC_DATA_PREFIX) 67 o = rvl_cat(data, o, CRES_PATHB, argv[2]); o = rvl_cat(data, o, CRES_PATHB, CRC_DATA_SUFFIX) 68 let dir: *u8 = sys_mmap(CRES_PATHB) 69 var d: i64 = rvl_cat(dir, 0, CRES_PATHB, CRC_SITE_PREFIX) 70 d = rvl_cat(dir, d, CRES_PATHB, argv[2]); d = rvl_cat(dir, d, CRES_PATHB, CRC_SITE_DIR) 71 let page: *u8 = sys_mmap(CRES_PATHB) 72 var g: i64 = rvl_cat(page, 0, CRES_PATHB, CRC_SITE_PREFIX) 73 g = rvl_cat(page, g, CRES_PATHB, argv[2]); g = rvl_cat(page, g, CRES_PATHB, CRC_SITE_PAGE) 74 if o < 0 { return crc_usage() } 75 if d < 0 { return crc_usage() } 76 if g < 0 { return crc_usage() } 77 sys_mkdir(dir, CRC_MODE755) 78 return crc_run(argv[2], data, page) 79 } 80 return crc_usage() 81}