code wiki / _hdl_build / nx_flip_worklist.nx

nx_flip_worklist.nx source

↩ module page · 111 lines · 4665 B

1// nx_flip_worklist.nx -- the INTAKE half of "go part by part on an entire car". 2// The coverage gate in nx_flip_score tells you what was missed AFTER you score. This tells you what to 3// LOOK AT BEFORE you start, and -- given a deal -- exactly which mandatory systems still have no finding. 4// nx_flip_worklist <class> [deal] [plane-prefix-root] 5// 6// FIRST MEMBER OF THE FAMILY CONVERTED ONTO THE SHARED BASE `nx_flip_lib.nx` (fx_*). It previously 7// carried its own private copy of ~17 primitives (fw_puts/fw_col/fw_slice_eqs/...); those are GONE. 8// Behaviour is byte-identical BY CONSTRUCTION and PROVEN by nx_flip_gate staying 16/16 across the swap 9// -- that is exactly what the gate was built for: it makes a refactor of working code safe. 10// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0 11import "nx_flip_lib.nx" 12import "nx_syscalls.nx" 13 14const FW_ARGC_MIN: i64 = 2 15const FW_ARG_DEAL: i64 = 2 16const FW_ARG_PFX: i64 = 3 17const FW_CK_CLASS: i64 = 1 18const FW_CK_NAME: i64 = 2 19const FW_CK_MAND: i64 = 3 20const FW_CF_DEAL: i64 = 1 21const FW_CF_COMP: i64 = 2 22 23func main(argc: i64, argv: *i64) -> i64 { 24 if argc < FW_ARGC_MIN { 25 fx_puts("usage: nx_flip_worklist <class> [deal] [plane-prefix-root]\n" as *u8) 26 sys_exit(FX_EXIT_USAGE) 27 return FX_EXIT_USAGE 28 } 29 let cls: *u8 = argv[1] as *u8 30 var deal: *u8 = "@" as *u8 31 var have_deal: i64 = 0 32 if argc > FW_ARG_DEAL { deal = argv[FW_ARG_DEAL] as *u8; have_deal = 1 } 33 var root: *u8 = "flip-" as *u8 34 if argc > FW_ARG_PFX { root = argv[FW_ARG_PFX] as *u8 } 35 36 let nkp: *i64 = sts_mm(FX_SCRATCH) as *i64 37 let nfp: *i64 = sts_mm(FX_SCRATCH) as *i64 38 let bk: *u8 = fx_plane(root, "comp-" as *u8, nkp) 39 let bf: *u8 = fx_plane(root, "find-" as *u8, nfp) 40 let nk: i64 = nkp[0] 41 let nf: i64 = nfp[0] 42 let sp: *i64 = sts_mm(FX_SCRATCH) as *i64 43 let cs: *i64 = sts_mm(FX_SCRATCH) as *i64 44 let pb: *u8 = sts_mm(FX_BUF) 45 var po: i64 = 0 46 47 if nk == 0 { 48 fx_puts("FLIP-RED reason=component-plane-empty\n" as *u8) 49 sys_exit(FX_EXIT_REFUSED) 50 return FX_EXIT_REFUSED 51 } 52 53 var total: i64 = 0 54 var n_mand: i64 = 0 55 var mand_cov: i64 = 0 56 var elec_cov: i64 = 0 57 var i: i64 = 0 58 while i < nk { 59 let le: i64 = fx_line_end(bk, nk, i) 60 if le > i { 61 if fx_col(bk, i, le, FW_CK_CLASS, sp) == 1 { 62 if fx_slice_eqs(bk, sp[0], sp[1], cls) == 1 { 63 total = total + 1 64 let m: i64 = fx_col_atoi(bk, i, le, FW_CK_MAND, sp) 65 if m == 1 { n_mand = n_mand + 1 } 66 fx_col(bk, i, le, 0, cs) 67 var cov: i64 = 0 68 if have_deal == 1 { cov = fx_has_finding(bf, nf, deal, FW_CF_DEAL, FW_CF_COMP, bk, cs[0], cs[1], sp) } 69 if cov == 1 { 70 if m == 1 { mand_cov = mand_cov + 1 } else { elec_cov = elec_cov + 1 } 71 } 72 po = fx_bcat(pb, po, "ITEM " as *u8) 73 po = fx_bcatsl(pb, po, bk, cs[0], cs[1]) 74 po = fx_bcat(pb, po, " " as *u8) 75 if fx_col(bk, i, le, FW_CK_NAME, sp) == 1 { po = fx_bcatsl(pb, po, bk, sp[0], sp[1]) } 76 if m == 1 { po = fx_bcat(pb, po, " MANDATORY" as *u8) } else { po = fx_bcat(pb, po, " elective" as *u8) } 77 if have_deal == 1 { 78 if cov == 1 { po = fx_bcat(pb, po, " COVERED" as *u8) } else { 79 if m == 1 { po = fx_bcat(pb, po, " **MISSING-MANDATORY**" as *u8) } else { po = fx_bcat(pb, po, " missing" as *u8) } 80 } 81 } 82 po = fx_bcat(pb, po, "\n" as *u8) 83 } 84 } 85 } 86 i = le + 1 87 } 88 89 if total == 0 { 90 fx_puts("FLIP-RED reason=unknown-asset-class class=" as *u8); fx_puts(cls); fx_puts("\n" as *u8) 91 sys_exit(FX_EXIT_REFUSED) 92 return FX_EXIT_REFUSED 93 } 94 95 fx_puts("FLIP-WORKLIST\n" as *u8) 96 fx_puts("class=" as *u8); fx_puts(cls) 97 if have_deal == 1 { fx_puts(" deal=" as *u8); fx_puts(deal) } 98 fx_puts("\n" as *u8) 99 fx_puts("components=" as *u8); fx_putn(total) 100 fx_puts(" mandatory=" as *u8); fx_putn(n_mand) 101 fx_puts(" mandatory_covered=" as *u8); fx_putn(mand_cov) 102 fx_puts(" missing_mandatory=" as *u8); fx_putn(n_mand - mand_cov) 103 fx_puts(" elective_covered=" as *u8); fx_putn(elec_cov) 104 fx_puts("\n" as *u8) 105 var ready: i64 = 0 106 if n_mand - mand_cov == 0 { ready = 1 } 107 fx_kv("ready_to_score" as *u8, ready) 108 sys_write(FX_OUT, pb, po) 109 sys_exit(0) 110 return 0 111}