code wiki / _hdl_build / _pe_jpgmark.nx
_pe_jpgmark.nx source
↩ module page · 50 lines · 1623 B
1// AUTHORED BY THE NISHI BUILDER (pattern: WIRE_MARKER) -- prefix-marker wire walk, no Claude logic
2import "nx_syscalls.nx"
3func _pe_jpgmark_count(b: *u8, n: i64) -> i64 {
4 var off: i64 = 0
5 var c: i64 = 0
6 while off < n {
7 if off + 2 > n { return 0 - 1 }
8 if (b[off] & 0xff) != 255 { return 0 - 1 }
9 let m: i64 = b[off + 1] & 0xff
10 var sa: i64 = 0
11 if m == 216 { sa = 1 }
12 if m == 217 { sa = 1 }
13 if sa == 1 { off = off + 2; c = c + 1 }
14 if sa == 0 {
15 if off + 4 > n { return 0 - 1 }
16 let l: i64 = ((b[off + 2] & 0xff) << 8) | (b[off + 3] & 0xff)
17 if l < 2 { return 0 - 1 }
18 if off + 2 + l > n { return 0 - 1 }
19 c = c + 1
20 if m == 218 { return c }
21 off = off + 2 + l
22 }
23 }
24 return c
25}
26func _pe_jpgmark_find(b: *u8, n: i64, t: i64) -> i64 {
27 var off: i64 = 0
28 while off < n {
29 if off + 2 > n { return 0 - 2 }
30 if (b[off] & 0xff) != 255 { return 0 - 2 }
31 let m: i64 = b[off + 1] & 0xff
32 var sa: i64 = 0
33 if m == 216 { sa = 1 }
34 if m == 217 { sa = 1 }
35 if sa == 1 {
36 if m == t { return off + 2 }
37 off = off + 2
38 }
39 if sa == 0 {
40 if off + 4 > n { return 0 - 2 }
41 let l: i64 = ((b[off + 2] & 0xff) << 8) | (b[off + 3] & 0xff)
42 if l < 2 { return 0 - 2 }
43 if off + 2 + l > n { return 0 - 2 }
44 if m == t { return off + 4 }
45 if m == 218 { return 0 - 1 }
46 off = off + 2 + l
47 }
48 }
49 return 0 - 1
50}