code wiki / (root) / nx_toner_store.nx

nx_toner_store.nx source

↩ module page · 40 lines · 1460 B

1// nx_toner_store.nx -- tiny persistent store for the real-toner ledger (survives across runs, on /mnt/c). 2// 16-byte little-endian file: [0..7]=yield_pages, [8..15]=consumed_ppm. Sovereign sys calls only; it writes 3// a small DATA file (not firmware) -> never-brick (#26). license_tier: ORIGINAL 4// genealogy_id: project-printer-management-ipp-sclass-2026-06-20 5 6import "nx_syscalls.nx" 7 8func nx_tstore_rd_le64(b: *u8, off: i64) -> i64 { 9 var v: i64 = 0 10 var i: i64 = 0 11 while i < 8 { v = v | ((b[off + i] as i64) << (i * 8)); i = i + 1 } 12 return v 13} 14func nx_tstore_wr_le64(b: *u8, off: i64, v: i64) -> i64 { 15 var i: i64 = 0 16 while i < 8 { b[off + i] = ((v >> (i * 8)) & 0xff) as u8; i = i + 1 } 17 return 0 18} 19 20// load -> 1 and fills out_*, or 0 if missing/short. 21func nx_tstore_load(path: *u8, out_yield: *i64, out_consumed: *i64) -> i64 { 22 let lenp: *i64 = sys_mmap(8) as *i64 23 let d: *u8 = sys_read_file(path, lenp) 24 if d == (0 as *u8) { return 0 } 25 if lenp[0] < 16 { return 0 } 26 out_yield[0] = nx_tstore_rd_le64(d, 0) 27 out_consumed[0] = nx_tstore_rd_le64(d, 8) 28 return 1 29} 30// save -> 0 ok / -1 fail 31func nx_tstore_save(path: *u8, yield_pages: i64, consumed: i64) -> i64 { 32 let b: *u8 = sys_mmap(16) 33 nx_tstore_wr_le64(b, 0, yield_pages) 34 nx_tstore_wr_le64(b, 8, consumed) 35 let fd: i64 = sys_openat_wr(path, 0x1a4) 36 if fd < 0 { return 0 - 1 } 37 sys_write(fd, b, 16) 38 sys_close(fd) 39 return 0 40}