pub fn dumphexptr(hexptr: *mut u8, length: usize) -> i32 {
unsafe {
let cap = 0x1000;
let hexvec: Vec<u8> = Vec::from_raw_parts(hexptr, length, cap);
let count = length / 16;
let orgval: u8 = 0;
for i in 0..count {
let baseidx = i * 16;
let val0: &u8 = hexvec.get(baseidx).unwrap_or(&orgval);
let val1: &u8 = hexvec.get(baseidx + 1).unwrap_or(&orgval);
let val2: &u8 = hexvec.get(baseidx + 2).unwrap_or(&orgval);
let val3: &u8 = hexvec.get(baseidx + 3).unwrap_or(&orgval);
let val4: &u8 = hexvec.get(baseidx + 4).unwrap_or(&orgval);
let val5: &u8 = hexvec.get(baseidx + 5).unwrap_or(&orgval);
let val6: &u8 = hexvec.get(baseidx + 6).unwrap_or(&orgval);
let val7: &u8 = hexvec.get(baseidx + 7).unwrap_or(&orgval);
let val8: &u8 = hexvec.get(baseidx + 8).unwrap_or(&orgval);
let val9: &u8 = hexvec.get(baseidx + 9).unwrap_or(&orgval);
let val10: &u8 = hexvec.get(baseidx + 10).unwrap_or(&orgval);
let val11: &u8 = hexvec.get(baseidx + 11).unwrap_or(&orgval);
let val12: &u8 = hexvec.get(baseidx + 12).unwrap_or(&orgval);
let val13: &u8 = hexvec.get(baseidx + 13).unwrap_or(&orgval);
let val14: &u8 = hexvec.get(baseidx + 14).unwrap_or(&orgval);
let val15: &u8 = hexvec.get(baseidx + 15).unwrap_or(&orgval);
print!(
"{:04x}: {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x}",
i, val0, val1, val2, val3, val4, val5, val6, val7,val8, val9, val10, val11, val12, val13, val14, val15
);
let baseend: usize = baseidx + 16;
let mut strout = CString16::new();
for idx in baseidx..baseend {
let val = *hexvec.get(idx).unwrap_or(&orgval) as u16;
if (val >= 0x20) {
let valchar = Char16::from_u16_unchecked(val);
if (valchar.is_ascii()) {
strout.push(valchar);
} else {
strout.push(Char16::try_from('.').unwrap())
}
} else {
strout.push(Char16::try_from('.').unwrap())
}
}
print!(" {}\n", strout);
}
0
}
}