code wiki / _hdl_build / _race5_claude.nx

_race5_claude.nx source

↩ module page · 104 lines · 3551 B

1// _race5_claude.nx -- the CLAUDE lane for autonomy race 5 (handwritten single-pass RIFF/WAV 2// chunk census; the yardstick the team lane races against). Lane contract: read 3// /tmp/race_input.bin, print NCHK= FMT= DATA= LIST= RSZ= as key=int lines. 4// Census semantics (the assignment): NCHK = well-formed chunk count, -1 = REFUSED (truncated / 5// bad magic / overlong length); finds = body offset RELATIVE to the chunk area (byte 12), 6// -2 when refused or absent; RSZ = declared u32le size at byte 4 whenever the 12-byte header 7// is intact, -2 otherwise. Odd chunk bodies are padded to even (RIFF law). license_tier: ORIGINAL 8import "nx_syscalls.nx" 9 10func r5_dec(label: *u8, v: i64) -> i64 { 11 var n: i64 = 0 12 while label[n] != (0 as u8) { n = n + 1 } 13 sys_write(1, label, n) 14 var av: i64 = v 15 if av < 0 { sys_write(1, "-" as *u8, 1); av = 0 - av } 16 if av == 0 { sys_write(1, "0" as *u8, 1) } 17 if av > 0 { 18 let buf: *u8 = sys_mmap(32) 19 var pos: i64 = 0 20 var x: i64 = av 21 while x > 0 { buf[pos] = (48 + (x % 10)) as u8; x = x / 10; pos = pos + 1 } 22 let outb: *u8 = sys_mmap(32) 23 var oi: i64 = 0 24 while oi < pos { outb[oi] = buf[pos - 1 - oi]; oi = oi + 1 } 25 sys_write(1, outb, pos) 26 } 27 sys_write(1, "\n" as *u8, 1) 28 return 0 29} 30 31func r5_le4(b: *u8, off: i64) -> i64 { 32 var v: i64 = b[off] as i64 33 v = v + ((b[off + 1] as i64) << 8) 34 v = v + ((b[off + 2] as i64) << 16) 35 v = v + ((b[off + 3] as i64) << 24) 36 return v 37} 38 39func r5_4cc(b: *u8, off: i64) -> i64 { 40 var v: i64 = (b[off] as i64) << 24 41 v = v + ((b[off + 1] as i64) << 16) 42 v = v + ((b[off + 2] as i64) << 8) 43 v = v + (b[off + 3] as i64) 44 return v 45} 46 47// chunk count from byte 12; -1 = refused (truncated entry or overlong length) 48func r5_count(b: *u8, n: i64) -> i64 { 49 var off: i64 = 12 50 var c: i64 = 0 51 while off < n { 52 if off + 8 > n { return 0 - 1 } 53 let len: i64 = r5_le4(b, off + 4) 54 if off + 8 + len > n { return 0 - 1 } 55 off = off + 8 + len + (len & 1) 56 c = c + 1 57 } 58 return c 59} 60 61// body offset of first chunk tagged t, RELATIVE to the chunk area; -2 absent 62func r5_find(b: *u8, n: i64, t: i64) -> i64 { 63 var off: i64 = 12 64 while off < n { 65 if off + 8 > n { return 0 - 2 } 66 let len: i64 = r5_le4(b, off + 4) 67 if off + 8 + len > n { return 0 - 2 } 68 if r5_4cc(b, off) == t { return off + 8 - 12 } 69 off = off + 8 + len + (len & 1) 70 } 71 return 0 - 2 72} 73 74func main() -> i64 { 75 let lenp: *i64 = sys_mmap(16) as *i64 76 let b: *u8 = sys_read_file("/tmp/race_input.bin\x00" as *u8, lenp) 77 let n: i64 = lenp[0] 78 var hdr_ok: i64 = 0 79 if n >= 12 { 80 if r5_4cc(b, 0) == 0x52494646 { if r5_4cc(b, 8) == 0x57415645 { hdr_ok = 1 } } 81 } 82 if hdr_ok == 0 { 83 r5_dec("NCHK=\x00" as *u8, 0 - 1) 84 r5_dec("FMT=\x00" as *u8, 0 - 2) 85 r5_dec("DATA=\x00" as *u8, 0 - 2) 86 r5_dec("LIST=\x00" as *u8, 0 - 2) 87 r5_dec("RSZ=\x00" as *u8, 0 - 2) 88 return 0 89 } 90 let c: i64 = r5_count(b, n) 91 r5_dec("NCHK=\x00" as *u8, c) 92 if c < 0 { 93 r5_dec("FMT=\x00" as *u8, 0 - 2) 94 r5_dec("DATA=\x00" as *u8, 0 - 2) 95 r5_dec("LIST=\x00" as *u8, 0 - 2) 96 } 97 if c >= 0 { 98 r5_dec("FMT=\x00" as *u8, r5_find(b, n, 0x666d7420)) 99 r5_dec("DATA=\x00" as *u8, r5_find(b, n, 0x64617461)) 100 r5_dec("LIST=\x00" as *u8, r5_find(b, n, 0x4c495354)) 101 } 102 r5_dec("RSZ=\x00" as *u8, r5_le4(b, 4)) 103 return 0 104}