code wiki / _hdl_build / _pe_riff2.nx

_pe_riff2.nx source

↩ module page · 28 lines · 1157 B

1// AUTHORED BY THE NISHI BUILDER (pattern: WIRE_TLV v2 le/pad) -- [type][len][body] wire walk, no Claude logic 2import "nx_syscalls.nx" 3func _pe_riff2_rdbe(b: *u8, off: i64, w: i64) -> i64 { var v: i64 = 0; var i: i64 = 0; while i < w { v = (v << 8) | (b[off + i] & 0xff); i = i + 1 } return v } 4func _pe_riff2_rdle(b: *u8, off: i64, w: i64) -> i64 { var v: i64 = 0; var i: i64 = 0; while i < w { v = v | ((b[off + i] & 0xff) << (i * 8)); i = i + 1 } return v } 5func _pe_riff2_count(b: *u8, n: i64) -> i64 { 6 var off: i64 = 0 7 var c: i64 = 0 8 while off < n { 9 if off + 8 > n { return 0 - 1 } 10 let l: i64 = _pe_riff2_rdle(b, off + 4, 4) 11 if off + 8 + l > n { return 0 - 1 } 12 off = off + 8 + l + (l & 1) 13 c = c + 1 14 } 15 return c 16} 17func _pe_riff2_find(b: *u8, n: i64, t: i64) -> i64 { 18 var off: i64 = 0 19 while off < n { 20 if off + 8 > n { return 0 - 2 } 21 let ty: i64 = _pe_riff2_rdbe(b, off + 0, 4) 22 let l: i64 = _pe_riff2_rdle(b, off + 4, 4) 23 if off + 8 + l > n { return 0 - 2 } 24 if ty == t { return off + 8 } 25 off = off + 8 + l + (l & 1) 26 } 27 return 0 - 1 28}