code wiki / _hdl_build / nx_galx_repath.nx

nx_galx_repath.nx source

↩ module page · 75 lines · 2804 B

1// nx_galx_repath.nx -- SOVEREIGN substring replacer for one-time storage repath (local C: -> NAS). 2// Reads <infile> fully into memory, replaces every occurrence of <find> with <repl>, writes the result 3// to <outfile>.tmp then sys_renameat()s it over <outfile> (atomic -- a live reader never sees a torn 4// file). Used to repoint the gallery sidecar (CID\tpath) + corpus list from 5// /mnt/c/.../data-vault/images to /mnt/nas_ai/images so the heavy image storage is served off the NAS, 6// not the local machine. All logic NishiLang. Usage: nx_galx_repath <in> <out> <find> <repl> 7// license_tier: ORIGINAL 8import "nx_syscalls.nx" 9const K_MAGIC_1048576: i64 = 1048576 10const K_MAGIC_1024: i64 = 1024 11 12func rp_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 13 14func main(argc: i64, argv: *i64) -> i64 { 15 if argc < 5 { return 2 } 16 let inf: *u8 = argv[1] as *u8 17 let outf: *u8 = argv[2] as *u8 18 let fnd: *u8 = argv[3] as *u8 19 let rep: *u8 = argv[4] as *u8 20 let fl: i64 = rp_len(fnd) 21 let rl: i64 = rp_len(rep) 22 23 let szp: *i64 = sys_mmap(16) as *i64 24 let b: *u8 = sys_read_file(inf, szp) 25 let n: i64 = szp[0] 26 if (b as i64) == 0 { return 1 } 27 28 let cap: i64 = n * 2 + K_MAGIC_1048576 29 let o: *u8 = sys_mmap(cap) 30 var oi: i64 = 0 31 var i: i64 = 0 32 var hits: i64 = 0 33 while i < n { 34 var m: i64 = 0 35 if i + fl <= n { 36 m = 1 37 var j: i64 = 0 38 while j < fl { if b[i + j] != fnd[j] { m = 0 } j = j + 1 } 39 } 40 if m == 1 { 41 var k: i64 = 0 42 while k < rl { o[oi] = rep[k]; oi = oi + 1; k = k + 1 } 43 i = i + fl 44 hits = hits + 1 45 } else { 46 o[oi] = b[i]; oi = oi + 1; i = i + 1 47 } 48 } 49 50 // tmp = outf + ".tmp" (same dir -> renameat stays on one filesystem) 51 let tmp: *u8 = sys_mmap(K_MAGIC_1024) 52 var ti: i64 = 0 53 while outf[ti] != (0 as u8) { tmp[ti] = outf[ti]; ti = ti + 1 } 54 tmp[ti] = 46 as u8; tmp[ti+1] = 116 as u8; tmp[ti+2] = 109 as u8; tmp[ti+3] = 112 as u8; tmp[ti+4] = 0 as u8 55 let fd: i64 = sys_openat_wr(tmp, 0x1a4) 56 if fd < 0 { return 3 } 57 sys_write(fd, o, oi) 58 sys_close(fd) 59 sys_renameat(tmp, outf) 60 61 // report hits to stdout 62 let msg: *u8 = "REPATH hits=" 63 var mn: i64 = 0 64 while msg[mn] != (0 as u8) { mn = mn + 1 } 65 sys_write(1, msg as *u8, mn) 66 let nb: *u8 = sys_mmap(28); var v: i64 = hits; var kk: i64 = 0 67 if v == 0 { nb[0] = 48 as u8; kk = 1 } 68 let tt: *u8 = sys_mmap(28) 69 while v > 0 { tt[kk] = (48 + (v % 10)) as u8; v = v / 10; kk = kk + 1 } 70 var p2: i64 = 0; let ob: *u8 = sys_mmap(28) 71 while p2 < kk { ob[p2] = tt[kk-1-p2]; p2 = p2 + 1 } 72 sys_write(1, ob, kk) 73 sys_write(1, "\n" as *u8, 1) 74 return 0 75}