code wiki / _hdl_build / _wb_jpeg.nx
_wb_jpeg.nx source
↩ module page · 66 lines · 2113 B
1// AUTHORED BY THE NISHI BUILDER (pattern: WIRE_MARKER) -- prefix-marker wire walk, no Claude logic
2import "nx_syscalls.nx"
3func _wb_jpeg_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 m == 208 { sa = 1 }
14 if m == 209 { sa = 1 }
15 if m == 210 { sa = 1 }
16 if m == 211 { sa = 1 }
17 if m == 212 { sa = 1 }
18 if m == 213 { sa = 1 }
19 if m == 214 { sa = 1 }
20 if m == 215 { sa = 1 }
21 if sa == 1 { off = off + 2; c = c + 1 }
22 if sa == 0 {
23 if off + 4 > n { return 0 - 1 }
24 let l: i64 = ((b[off + 2] & 0xff) << 8) | (b[off + 3] & 0xff)
25 if l < 2 { return 0 - 1 }
26 if off + 2 + l > n { return 0 - 1 }
27 c = c + 1
28 if m == 218 { return c }
29 off = off + 2 + l
30 }
31 }
32 return c
33}
34func _wb_jpeg_find(b: *u8, n: i64, t: i64) -> i64 {
35 var off: i64 = 0
36 while off < n {
37 if off + 2 > n { return 0 - 2 }
38 if (b[off] & 0xff) != 255 { return 0 - 2 }
39 let m: i64 = b[off + 1] & 0xff
40 var sa: i64 = 0
41 if m == 216 { sa = 1 }
42 if m == 217 { sa = 1 }
43 if m == 208 { sa = 1 }
44 if m == 209 { sa = 1 }
45 if m == 210 { sa = 1 }
46 if m == 211 { sa = 1 }
47 if m == 212 { sa = 1 }
48 if m == 213 { sa = 1 }
49 if m == 214 { sa = 1 }
50 if m == 215 { sa = 1 }
51 if sa == 1 {
52 if m == t { return off + 2 }
53 off = off + 2
54 }
55 if sa == 0 {
56 if off + 4 > n { return 0 - 2 }
57 let l: i64 = ((b[off + 2] & 0xff) << 8) | (b[off + 3] & 0xff)
58 if l < 2 { return 0 - 2 }
59 if off + 2 + l > n { return 0 - 2 }
60 if m == t { return off + 4 }
61 if m == 218 { return 0 - 1 }
62 off = off + 2 + l
63 }
64 }
65 return 0 - 1
66}