code wiki / _hdl_build / nx_media_ws_register.nx

nx_media_ws_register.nx source

↩ module page · 87 lines · 4417 B

1// nx_media_ws_register.nx -- register the SOTA-MEDIA-CONSUMPTION program as a LIVE workstream in the WMS 2// registry (E-PLATFORM, one of the 12 valid empires -- else nx_ws_board refuses to render). Mirrors 3// nx_project_ws_register EXACTLY: hold the per-prefix wlock across the ws:ids RMW AND the ws:<id> write 4// (no nested lock = no self-deadlock); idempotent; code_link=nx_media_inventory_gate (machine-verifiable). 5// Beats the string-keyed heartbeat so the board shows ALIVE. Verifies by READBACK. NOTE: every id/const is 6// indexed only via a function PARAM (never a direct global-const index -- that path miscompiles under nx_cc). 7// expect_exit: 0 license_tier: ORIGINAL 8import "nx_ws_cas.nx" 9import "nx_heartbeat_str.nx" 10const MWR_MAGIC_1024: i64 = 1024 11 12const MWR_ID: *u8 = "SOTA-MEDIA-CONSUMPTION" 13const MWR_EMP: *u8 = "E-PLATFORM" 14const MWR_MEM: *u8 = "project-nishi-gallery-jellyfin-class-2026-07-11" 15const MWR_CODE: *u8 = "nx_media_inventory_gate" 16const MWR_HB: *u8 = "knowledge/status/wms_heartbeat.log" 17 18func mwr_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 19func mwr_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64 = off; var i: i64 = 0; while s[i] != (0 as u8) { dst[o] = s[i]; o = o + 1; i = i + 1 } return o } 20func mwr_n(dst: *u8, off: i64, v: i64) -> i64 { var o: i64 = off; var m: i64 = v; if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m } 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 { dst[o + i] = t[k - 1 - i]; i = i + 1 } return o + k } 21 22// id/emp/state/mem/code are PARAMS (param-indexing is codegen-safe, unlike direct global-const indexing). 23func mwr_register(id: *u8, emp: *u8, state: *u8, mem: *u8, code: *u8) -> i64 { 24 let wp: *u8 = WS_PREFIX 25 let lp: *u8 = sys_mmap(512) 26 var i: i64 = 0 27 while wp[i] != (0 as u8) { lp[i] = wp[i]; i = i + 1 } 28 let suf: *u8 = "wlock" 29 var s: i64 = 0 30 while suf[s] != (0 as u8) { lp[i] = suf[s]; i = i + 1; s = s + 1 } 31 lp[i] = 0 as u8 32 let lfd: i64 = sys_openat_append(lp, 0x1a4) 33 if lfd >= 0 { sys_flock(lfd, SYS_LOCK_EX) } 34 35 let key: *u8 = sys_mmap(192) 36 var kk: i64 = mwr_cat(key, 0, "ws:" as *u8) 37 kk = mwr_cat(key, kk, id) 38 key[kk] = 0 as u8 39 40 let rec: *u8 = sys_mmap(MWR_MAGIC_1024) 41 var o: i64 = 0 42 o = mwr_cat(rec, o, id); rec[o] = 9 as u8; o = o + 1 43 o = mwr_cat(rec, o, emp); rec[o] = 9 as u8; o = o + 1 44 o = mwr_cat(rec, o, state); rec[o] = 9 as u8; o = o + 1 45 o = mwr_n(rec, o, sys_now_realtime_sec()); rec[o] = 9 as u8; o = o + 1 46 o = mwr_cat(rec, o, mem); rec[o] = 9 as u8; o = o + 1 47 o = mwr_cat(rec, o, code); rec[o] = 9 as u8; o = o + 1 48 o = mwr_cat(rec, o, "-" as *u8); rec[o] = 0 as u8 49 ws_put_p(WS_PREFIX, key, rec) 50 51 let pq: *i64 = sys_mmap(16) as *i64 52 let lq: *i64 = sys_mmap(16) as *i64 53 if ss_get(WS_PREFIX, "ws:ids" as *u8, pq, lq) == 1 { 54 let ids: *u8 = pq[0] as *u8 55 let idn: i64 = lq[0] 56 if ws_member(ids, idn, id) == 0 { 57 let nb: *u8 = sys_mmap(idn + 192) 58 var c: i64 = 0 59 while c < idn { nb[c] = ids[c]; c = c + 1 } 60 nb[c] = 9 as u8; c = c + 1 61 var d: i64 = 0 62 while id[d] != (0 as u8) { nb[c] = id[d]; c = c + 1; d = d + 1 } 63 nb[c] = 0 as u8 64 ws_put_p(WS_PREFIX, "ws:ids" as *u8, nb) 65 } 66 } 67 if lfd >= 0 { sys_flock(lfd, SYS_LOCK_UN); sys_close(lfd) } 68 return 0 69} 70 71func main() -> i64 { 72 mwr_puts("=== nx_media_ws_register -- SOTA-MEDIA-CONSUMPTION into WMS (E-PLATFORM, code_link=nx_media_inventory_gate) ===\n" as *u8) 73 mwr_register(MWR_ID, MWR_EMP, "ACTIVE" as *u8, MWR_MEM, MWR_CODE) 74 hb_beat_s(MWR_HB, MWR_ID, 1) 75 let pq: *i64 = sys_mmap(16) as *i64 76 let lq: *i64 = sys_mmap(16) as *i64 77 var ok: i64 = 0 78 if ss_get(WS_PREFIX, "ws:SOTA-MEDIA-CONSUMPTION" as *u8, pq, lq) == 1 { if lq[0] > 0 { ok = 1 } } 79 if ok == 1 { 80 mwr_puts("readback=OK ws:SOTA-MEDIA-CONSUMPTION = " as *u8) 81 sys_write(1, pq[0] as *u8, lq[0]); mwr_puts("\n" as *u8) 82 mwr_puts("verdict=GREEN (registered E-PLATFORM workstream; visible on nx_ws_board)\n" as *u8) 83 sys_exit(0); return 0 84 } 85 mwr_puts("verdict=RED (readback missing)\n" as *u8) 86 sys_exit(1); return 1 87}