code wiki / _hdl_build / _pe_kw_crc.nx
_pe_kw_crc.nx source
↩ module page · 36 lines · 1071 B
1// AUTHORED BY THE NISHI BUILDER (pattern: STRUCT_WALK v2 magic/tailrest) -- field-table walk, no Claude logic
2import "nx_syscalls.nx"
3func _pe_kw_crc_locate(b: *u8, n: i64, out: *i64) -> i64 {
4 var off: i64 = 0
5 if off >= n { return 0 - 1 }
6 var ks: i64 = off
7 while b[off] != (0 as u8) {
8 off = off + 1
9 if off >= n { return 0 - 1 }
10 }
11 out[2] = ks
12 out[3] = off - ks
13 out[4] = off + 1
14 off = off + 1
15 if off + 4 > n { return 0 - 1 }
16 var cc: i64 = 0xffffffff
17 var ci: i64 = 0
18 while ci < off {
19 cc = cc ^ (b[ci] & 0xff)
20 var cb: i64 = 0
21 while cb < 8 {
22 let cm: i64 = 0 - (cc & 1)
23 cc = (cc >> 1) ^ (0xedb88320 & cm)
24 cb = cb + 1
25 }
26 ci = ci + 1
27 }
28 let cv: i64 = (cc ^ 0xffffffff) & 0xffffffff
29 let cs: i64 = (((b[off] & 0xff) << 24) | ((b[off + 1] & 0xff) << 16)) | (((b[off + 2] & 0xff) << 8) | (b[off + 3] & 0xff))
30 if cv != cs { return 0 - 1 }
31 out[0] = 0
32 out[1] = off - 0
33 off = off + 4
34 return 0
35 return 0 - 1
36}