code wiki / (root) / nx_media_index_run.nx

nx_media_index_run.nx source

↩ module page · 88 lines · 3565 B

1// nx_media_index_run.nx -- EXPOSURE rung X1 (runnable tool). 2// Reads a newline-separated list of media file paths from 3// knowledge/staging/media/idx_in.txt 4// tags each via nx_mindex_tag_path, and writes a searchable tag-index 5// knowledge/staging/media/idx_tags.tsv 6// <path>\tstatus<s>\t<w>x<h>\tskin<permille>\tconc<permille>\tpresent<0/1> 7// plus a one-line summary to stdout. The portal/gallery filters & searches 8// on this tsv (and the same store later carries preference/action/mood tags). 9// license_tier: ORIGINAL 10import "nx_syscalls.nx" 11import "nx_media_index.nx" 12const K_MAGIC_4096: i64 = 4096 13const K_MAGIC_4095: i64 = 4095 14 15func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 16func gn(v: i64) -> i64 { 17 let bb: *u8 = sys_mmap(28) 18 var m: i64 = v 19 if m < 0 { sys_write(1, "-\x00" as *u8, 1); m = 0 - m } 20 let t: *u8 = sys_mmap(28) 21 var k: i64 = 0 22 if m == 0 { t[0] = 48 as u8; k = 1 } 23 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 24 var i: i64 = 0 25 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 26 sys_write(1, bb, k) 27 return 0 28} 29func fps(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 30func fnum(fd: i64, v: i64) -> i64 { 31 let bb: *u8 = sys_mmap(28) 32 var m: i64 = v 33 if m < 0 { sys_write(fd, "-\x00" as *u8, 1); m = 0 - m } 34 let t: *u8 = sys_mmap(28) 35 var k: i64 = 0 36 if m == 0 { t[0] = 48 as u8; k = 1 } 37 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 38 var i: i64 = 0 39 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 40 sys_write(fd, bb, k) 41 return 0 42} 43 44func main() -> i64 { 45 let szp: *i64 = sys_mmap(16) as *i64 46 let buf: *u8 = sys_read_file("knowledge/staging/media/idx_in.txt\x00" as *u8, szp) 47 if (buf as i64) == 0 { gp("nx_media_index: no idx_in.txt at knowledge/staging/media/\n\x00" as *u8); return 1 } 48 let len: i64 = szp[0] 49 let tagfd: i64 = sys_openat_wr("knowledge/staging/media/idx_tags.tsv\x00" as *u8, 420) 50 let pbuf: *u8 = sys_mmap(K_MAGIC_4096) 51 let out: *i64 = sys_mmap(128) as *i64 52 53 var total: i64 = 0 54 var okc: i64 = 0 55 var present: i64 = 0 56 var i: i64 = 0 57 while i < len { 58 var j: i64 = i 59 while j < len && (buf[j] as i64) != 10 { j = j + 1 } 60 var end: i64 = j 61 if end > i && (buf[end - 1] as i64) == 13 { end = end - 1 } 62 let ll: i64 = end - i 63 if ll > 0 { 64 var k: i64 = 0 65 while k < ll && k < K_MAGIC_4095 { pbuf[k] = buf[i + k]; k = k + 1 } 66 pbuf[k] = 0 as u8 67 nx_mindex_tag_path(pbuf, out) 68 total = total + 1 69 if out[0] == NX_MIDX_OK { okc = okc + 1 } 70 if out[5] == 1 { present = present + 1 } 71 fps(tagfd, pbuf) 72 fps(tagfd, "\tstatus\x00" as *u8); fnum(tagfd, out[0]) 73 fps(tagfd, "\t\x00" as *u8); fnum(tagfd, out[1]); fps(tagfd, "x\x00" as *u8); fnum(tagfd, out[2]) 74 fps(tagfd, "\tskin\x00" as *u8); fnum(tagfd, out[3]) 75 fps(tagfd, "\tconc\x00" as *u8); fnum(tagfd, out[4]) 76 fps(tagfd, "\tpresent\x00" as *u8); fnum(tagfd, out[5]) 77 fps(tagfd, "\n\x00" as *u8) 78 } 79 i = j + 1 80 } 81 if tagfd > 0 { sys_close(tagfd) } 82 83 gp("nx_media_index processed=\x00" as *u8); gn(total) 84 gp(" decoded=\x00" as *u8); gn(okc) 85 gp(" present=\x00" as *u8); gn(present) 86 gp(" -> knowledge/staging/media/idx_tags.tsv\n\x00" as *u8) 87 return 0 88}