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}