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}