get rid of most primitive casts
parent
a7fb392c5e
commit
4570d494ad
|
@ -19,14 +19,6 @@ macro_rules! _durandal_read_impl {
|
||||||
(BE $b:ident $nam:ident i32 $n:expr) => {
|
(BE $b:ident $nam:ident i32 $n:expr) => {
|
||||||
_durandal_read_impl!($b i32::from_be_bytes, $nam 4 $n);
|
_durandal_read_impl!($b i32::from_be_bytes, $nam 4 $n);
|
||||||
};
|
};
|
||||||
(BE $b:ident $nam:ident as usize u16 $n:expr) => {
|
|
||||||
_durandal_read_impl!($b u16::from_be_bytes, $nam 2 $n);
|
|
||||||
let $nam = $nam as usize;
|
|
||||||
};
|
|
||||||
(BE $b:ident $nam:ident as usize u32 $n:expr) => {
|
|
||||||
_durandal_read_impl!($b u32::from_be_bytes, $nam 4 $n);
|
|
||||||
let $nam = $nam as usize;
|
|
||||||
};
|
|
||||||
|
|
||||||
// little endian
|
// little endian
|
||||||
(LE $b:ident $nam:ident u16 $n:expr) => {
|
(LE $b:ident $nam:ident u16 $n:expr) => {
|
||||||
|
@ -41,14 +33,6 @@ macro_rules! _durandal_read_impl {
|
||||||
(LE $b:ident $nam:ident i32 $n:expr) => {
|
(LE $b:ident $nam:ident i32 $n:expr) => {
|
||||||
_durandal_read_impl!($b i32::from_le_bytes $nam 4 $n);
|
_durandal_read_impl!($b i32::from_le_bytes $nam 4 $n);
|
||||||
};
|
};
|
||||||
(LE $b:ident $nam:ident as usize u16 $n:expr) => {
|
|
||||||
_durandal_read_impl!($b u16::from_le_bytes $nam 2 $n);
|
|
||||||
let $nam = $nam as usize;
|
|
||||||
};
|
|
||||||
(LE $b:ident $nam:ident as usize u32 $n:expr) => {
|
|
||||||
_durandal_read_impl!($b u32::from_le_bytes $nam 4 $n);
|
|
||||||
let $nam = $nam as usize;
|
|
||||||
};
|
|
||||||
|
|
||||||
// either endianness
|
// either endianness
|
||||||
($e:ident $b:ident $nam:ident Angle $n:expr) => {
|
($e:ident $b:ident $nam:ident Angle $n:expr) => {
|
||||||
|
@ -67,16 +51,24 @@ macro_rules! _durandal_read_impl {
|
||||||
_durandal_read_impl!($e $b $nam u16 $n);
|
_durandal_read_impl!($e $b $nam u16 $n);
|
||||||
let $nam = OptU16::from_repr($nam);
|
let $nam = OptU16::from_repr($nam);
|
||||||
};
|
};
|
||||||
|
($e:ident $b:ident $nam:ident usize u16 $n:expr) => {
|
||||||
|
_durandal_read_impl!($e $b $nam u16 $n);
|
||||||
|
let $nam = usize::from($nam);
|
||||||
|
};
|
||||||
|
($e:ident $b:ident $nam:ident usize u32 $n:expr) => {
|
||||||
|
_durandal_read_impl!($e $b $nam u32 $n);
|
||||||
|
let $nam = usize_from_u32($nam);
|
||||||
|
};
|
||||||
|
|
||||||
// generic endianness
|
// no endianness
|
||||||
($_:ident $b:ident $nam:ident u8 $n:expr) => {
|
($_:ident $b:ident $nam:ident u8 $n:expr) => {
|
||||||
let $nam = $b[$n];
|
let $nam = $b[$n];
|
||||||
};
|
};
|
||||||
($_:ident $b:ident $nam:ident array u8 $n:expr) => {
|
($_:ident $b:ident $nam:ident slice u8 $n:expr) => {
|
||||||
let $nam = &$b[$n];
|
let $nam = &$b[$n];
|
||||||
};
|
};
|
||||||
($_:ident $b:ident $nam:ident i8 $n:expr) => {
|
($_:ident $b:ident $nam:ident i8 $n:expr) => {
|
||||||
let $nam = $b[$n] as i8;
|
let $nam = i8::from_ne_bytes([$b[$n]]);
|
||||||
};
|
};
|
||||||
($_:ident $b:ident $nam:ident Ident $n:expr) => {
|
($_:ident $b:ident $nam:ident Ident $n:expr) => {
|
||||||
let $nam = Ident([$b[$n], $b[$n + 1], $b[$n + 2], $b[$n + 3]]);
|
let $nam = Ident([$b[$n], $b[$n + 1], $b[$n + 2], $b[$n + 3]]);
|
||||||
|
@ -84,7 +76,7 @@ macro_rules! _durandal_read_impl {
|
||||||
($_:ident $b:ident $nam:ident $f:ident $n:expr) => {
|
($_:ident $b:ident $nam:ident $f:ident $n:expr) => {
|
||||||
let $nam = $f(&$b[$n])?;
|
let $nam = $f(&$b[$n])?;
|
||||||
};
|
};
|
||||||
($_:ident $b:ident $nam:ident nt $f:ident $n:expr) => {
|
($_:ident $b:ident $nam:ident no_try $f:ident $n:expr) => {
|
||||||
let $nam = $f(&$b[$n]);
|
let $nam = $f(&$b[$n]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -97,7 +89,7 @@ macro_rules! _durandal_read_impl {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reads structured data from a byte array.
|
/// Reads structured data from a byte slice.
|
||||||
///
|
///
|
||||||
/// First start by specifying the endianness, size and source using the syntax
|
/// First start by specifying the endianness, size and source using the syntax
|
||||||
/// `endian, size in source =>` where:
|
/// `endian, size in source =>` where:
|
||||||
|
@ -128,12 +120,12 @@ macro_rules! _durandal_read_impl {
|
||||||
/// - The name of a function, which is passed `&source[place]` as its only
|
/// - The name of a function, which is passed `&source[place]` as its only
|
||||||
/// argument. The function's result has the `?` operator applied to it.
|
/// argument. The function's result has the `?` operator applied to it.
|
||||||
/// - `opts` may be one of:
|
/// - `opts` may be one of:
|
||||||
/// - `array` when `type` is `u8`: `place` is a range specifying a `u8` slice
|
/// - `slice` when `type` is `u8`: `place` is a range specifying a `u8` slice
|
||||||
/// to be taken from `source`.
|
/// to be taken from `source`.
|
||||||
/// - `as usize` when `type` is `u16` or `u32`: converts the resulting
|
/// - `usize` when `type` is `u16` or `u32`: converts the resulting integer
|
||||||
/// integer to `usize` by primitive cast.
|
/// to `usize` by `usize_to_u32` for `u32` or by `from` for `u16`.
|
||||||
/// - `nt` when `type` is a function name: does not use the `?` operator on
|
/// - `no_try` when `type` is a function name: does not use the `?` operator
|
||||||
/// the resulting function call
|
/// on the resulting function call.
|
||||||
/// - Nothing at all.
|
/// - Nothing at all.
|
||||||
/// - `place` is either an integer literal which must be representable as
|
/// - `place` is either an integer literal which must be representable as
|
||||||
/// `usize`, or a range, which may only be used when `type` is a function
|
/// `usize`, or a range, which may only be used when `type` is a function
|
||||||
|
@ -152,6 +144,10 @@ macro_rules! read_data {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Casts a `u32` to a `usize`. For future compatibility.
|
||||||
|
#[inline]
|
||||||
|
pub const fn usize_from_u32(n: u32) -> usize {n as usize}
|
||||||
|
|
||||||
/// Creates an `Ident` from a slice.
|
/// Creates an `Ident` from a slice.
|
||||||
///
|
///
|
||||||
/// `b` must be at least 4 bytes, or a panic will occur.
|
/// `b` must be at least 4 bytes, or a panic will occur.
|
||||||
|
@ -217,7 +213,7 @@ pub fn rd_ofstable<T, F>(b: &[u8],
|
||||||
let mut v = Vec::with_capacity(num);
|
let mut v = Vec::with_capacity(num);
|
||||||
|
|
||||||
for _ in 0..num {
|
for _ in 0..num {
|
||||||
let ofs = u32b(&b[p..p + 4]) as usize;
|
let ofs = usize_from_u32(u32b(&b[p..p + 4]));
|
||||||
|
|
||||||
if ofs >= b.len() {
|
if ofs >= b.len() {
|
||||||
bail!("not enough data");
|
bail!("not enough data");
|
||||||
|
|
|
@ -13,7 +13,7 @@ fn crc_init() -> [u32; 256]
|
||||||
{
|
{
|
||||||
let mut t = [0; 256];
|
let mut t = [0; 256];
|
||||||
for (n, v) in t.iter_mut().enumerate() {
|
for (n, v) in t.iter_mut().enumerate() {
|
||||||
*v = (0..8).fold(n as u32, crc_accum);
|
*v = (0..8).fold(u32::from(n), crc_accum);
|
||||||
}
|
}
|
||||||
t
|
t
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,7 @@ fn crc_init() -> [u32; 256]
|
||||||
pub fn crc32(b: &[u8], s: u32) -> u32
|
pub fn crc32(b: &[u8], s: u32) -> u32
|
||||||
{
|
{
|
||||||
let t = crc_init();
|
let t = crc_init();
|
||||||
!b.iter()
|
!b.iter().fold(s, |a, &o| a >> 8 ^ t[usize::from(a as u8 ^ o)])
|
||||||
.fold(s, |a, &o| a >> 8 ^ t[(a & 0xFF ^ u32::from(o)) as usize])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -35,9 +35,9 @@ pub fn to_binsize(n: u64) -> String
|
||||||
|
|
||||||
// terabytes, gigabytes, megabytes, kilobytes
|
// terabytes, gigabytes, megabytes, kilobytes
|
||||||
for i in (1..=4).rev() {
|
for i in (1..=4).rev() {
|
||||||
let pow = 1000_u64.pow(i);
|
let pow = 1000_u64.pow(i as u32);
|
||||||
if n >= pow {
|
if n >= pow {
|
||||||
return format!("{:1}{}", n / pow, NAMES[i as usize - 1]);
|
return format!("{:1}{}", n / pow, NAMES[i - 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ pub fn fuck_string(s: &[u8]) -> Vec<u8>
|
||||||
/// Reads a Pascal-style byte string with bounds checking.
|
/// Reads a Pascal-style byte string with bounds checking.
|
||||||
pub fn pascal_str(b: &[u8]) -> Option<&[u8]>
|
pub fn pascal_str(b: &[u8]) -> Option<&[u8]>
|
||||||
{
|
{
|
||||||
let s = *b.get(0)? as usize;
|
let s = usize::from(*b.get(0)?);
|
||||||
b.get(1..=s)
|
b.get(1..=s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,13 +80,12 @@ pub fn mac_roman_conv(s: &[u8]) -> String
|
||||||
let mut v = String::with_capacity(s.len());
|
let mut v = String::with_capacity(s.len());
|
||||||
|
|
||||||
for &c in s.iter() {
|
for &c in s.iter() {
|
||||||
let c = match c {
|
v.push(match c {
|
||||||
0 => break,
|
0 => break,
|
||||||
b'\r' => '\n',
|
b'\r' => '\n',
|
||||||
c if c & 0x80 != 0 => TR[c as usize & 0x7F],
|
c if c & 0x80 != 0 => TR[usize::from(c) & 0x7F],
|
||||||
c => c as char,
|
c => char::from(c),
|
||||||
};
|
});
|
||||||
v.push(c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
v
|
v
|
||||||
|
|
|
@ -10,7 +10,7 @@ pub fn check_apple_single(b: &[u8]) -> Option<usize>
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let num = u16b(&b[24..]) as usize;
|
let num = usize::from(u16b(&b[24..]));
|
||||||
|
|
||||||
if b.len() < 26 + 12 * num {
|
if b.len() < 26 + 12 * num {
|
||||||
return None;
|
return None;
|
||||||
|
@ -20,8 +20,8 @@ pub fn check_apple_single(b: &[u8]) -> Option<usize>
|
||||||
for i in 0..num {
|
for i in 0..num {
|
||||||
let p = 26 + 12 * i;
|
let p = 26 + 12 * i;
|
||||||
let ent = u32b(&b[p..]);
|
let ent = u32b(&b[p..]);
|
||||||
let ofs = u32b(&b[p + 4..]) as usize;
|
let ofs = usize_from_u32(u32b(&b[p + 4..]));
|
||||||
let len = u32b(&b[p + 8..]) as usize;
|
let len = usize_from_u32(u32b(&b[p + 8..]));
|
||||||
|
|
||||||
if ent == 1 {
|
if ent == 1 {
|
||||||
return if ofs + len > b.len() {None} else {Some(ofs)};
|
return if ofs + len > b.len() {None} else {Some(ofs)};
|
||||||
|
|
|
@ -55,7 +55,7 @@ pub fn read_minf(b: &[u8]) -> ResultS<Minf>
|
||||||
music_id = u16[4];
|
music_id = u16[4];
|
||||||
missi_flags = u16[6];
|
missi_flags = u16[6];
|
||||||
envir_flags = u16[8];
|
envir_flags = u16[8];
|
||||||
level_name = mac_roman_conv[18..84] nt;
|
level_name = mac_roman_conv[18..84] no_try;
|
||||||
entry_flags = u32[84];
|
entry_flags = u32[84];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ pub fn read_old_lite(b: &[u8]) -> ResultS<(Light, usize)>
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
32, BE in b =>
|
32, BE in b =>
|
||||||
ltype = u16[2] as usize;
|
ltype = u16[2] usize;
|
||||||
mode = u16[4];
|
mode = u16[4];
|
||||||
phase = i16[6];
|
phase = i16[6];
|
||||||
min = Fixed[8];
|
min = Fixed[8];
|
||||||
|
@ -400,7 +400,7 @@ pub fn read_note(b: &[u8]) -> ResultS<(Note, usize)>
|
||||||
72, BE in b =>
|
72, BE in b =>
|
||||||
pos = read_point[2..6];
|
pos = read_point[2..6];
|
||||||
poly = u16[6];
|
poly = u16[6];
|
||||||
text = mac_roman_conv[8..72] nt;
|
text = mac_roman_conv[8..72] no_try;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok((Note{pos, poly, text}, 72))
|
Ok((Note{pos, poly, text}, 72))
|
||||||
|
|
|
@ -12,10 +12,10 @@ fn read_pm_header<'a>(b: &'a [u8],
|
||||||
read_data! {
|
read_data! {
|
||||||
36, BE in b =>
|
36, BE in b =>
|
||||||
pt_fl = u16[0];
|
pt_fl = u16[0];
|
||||||
top = u16[2] as usize;
|
top = u16[2] usize;
|
||||||
left = u16[4] as usize;
|
left = u16[4] usize;
|
||||||
bottom = u16[6] as usize;
|
bottom = u16[6] usize;
|
||||||
right = u16[8] as usize;
|
right = u16[8] usize;
|
||||||
pack_t = u16[12];
|
pack_t = u16[12];
|
||||||
depth = u16[28];
|
depth = u16[28];
|
||||||
}
|
}
|
||||||
|
@ -44,14 +44,14 @@ fn read_pm_header<'a>(b: &'a [u8],
|
||||||
p += 18; // srcRect, dstRect, mode
|
p += 18; // srcRect, dstRect, mode
|
||||||
|
|
||||||
if clip {
|
if clip {
|
||||||
p += u16b(&b[p..]) as usize; // maskRgn
|
p += usize::from(u16b(&b[p..])); // maskRgn
|
||||||
}
|
}
|
||||||
|
|
||||||
let rle = pack_t == PackType::Default ||
|
let rle = pack_t == PackType::Default ||
|
||||||
pack_t == PackType::Rle16 && depth == 16 ||
|
pack_t == PackType::Rle16 && depth == 16 ||
|
||||||
pack_t == PackType::Rle32 && depth == 32;
|
pack_t == PackType::Rle32 && depth == 32;
|
||||||
|
|
||||||
let pitch = (pt_fl & 0x3FFF) as usize;
|
let pitch = usize::from(pt_fl & 0x3FFF);
|
||||||
|
|
||||||
Ok((&b[p..], Header{pitch, pack_t, depth, clut, rle}))
|
Ok((&b[p..], Header{pitch, pack_t, depth, clut, rle}))
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ fn read_pm_ind(mut im: Image8, b: &[u8], hdr: Header) -> ResultS<Image8>
|
||||||
// uncompressed 8-bit colormap indices
|
// uncompressed 8-bit colormap indices
|
||||||
for _ in 0..im.h() {
|
for _ in 0..im.h() {
|
||||||
for _ in 0..im.w() {
|
for _ in 0..im.w() {
|
||||||
let idx = b[p] as usize;
|
let idx = usize::from(b[p]);
|
||||||
im.cr.push(ok!(clut.get(idx), "invalid index")?.clone());
|
im.cr.push(ok!(clut.get(idx), "invalid index")?.clone());
|
||||||
p += 1;
|
p += 1;
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ fn read_pm_ind(mut im: Image8, b: &[u8], hdr: Header) -> ResultS<Image8>
|
||||||
|
|
||||||
for &idx in &d {
|
for &idx in &d {
|
||||||
im.cr
|
im.cr
|
||||||
.push(ok!(clut.get(idx as usize), "invalid index")?.clone());
|
.push(ok!(clut.get(usize::from(idx)), "invalid index")?.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,8 +203,8 @@ pub fn load_pict(b: &[u8]) -> ResultS<Image8>
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
10, BE in b =>
|
10, BE in b =>
|
||||||
h = u16[6] as usize;
|
h = u16[6] usize;
|
||||||
w = u16[8] as usize;
|
w = u16[8] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let im = Image8::new(w, h);
|
let im = Image8::new(w, h);
|
||||||
|
@ -287,10 +287,10 @@ pub fn load_pict(b: &[u8]) -> ResultS<Image8>
|
||||||
0x0033 | // InvertRect
|
0x0033 | // InvertRect
|
||||||
0x0034 => p += 8, // FillRect
|
0x0034 => p += 8, // FillRect
|
||||||
0x002D => p += 10, // LineJustify
|
0x002D => p += 10, // LineJustify
|
||||||
0x0001 => p += (u16b(&b[p.. ]) & !1) as usize, // Clip
|
0x0001 => p += usize::from(u16b(&b[p.. ]) & !1), // Clip
|
||||||
0x00A1 => p += (u16b(&b[p+2..]) & !1) as usize + 2, // LongComment
|
0x00A1 => p += usize::from(u16b(&b[p+2..]) & !1) + 2, // LongComment
|
||||||
0x100..=
|
0x100..=
|
||||||
0x7FFF => p += (op >> 8) as usize * 2, // Reserved
|
0x7FFF => p += usize::from(op >> 8) * 2, // Reserved
|
||||||
_ => {
|
_ => {
|
||||||
bail!("invalid op in PICT");
|
bail!("invalid op in PICT");
|
||||||
}
|
}
|
||||||
|
@ -306,7 +306,7 @@ pub fn get_clut(b: &[u8]) -> ResultS<(Vec<Color8>, usize)>
|
||||||
read_data! {
|
read_data! {
|
||||||
8, BE in b =>
|
8, BE in b =>
|
||||||
dev = u16[4];
|
dev = u16[4];
|
||||||
num = u16[6] as usize;
|
num = u16[6] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let dev = dev & 0x8000 != 0;
|
let dev = dev & 0x8000 != 0;
|
||||||
|
@ -318,7 +318,7 @@ pub fn get_clut(b: &[u8]) -> ResultS<(Vec<Color8>, usize)>
|
||||||
for i in 0..num {
|
for i in 0..num {
|
||||||
read_data! {
|
read_data! {
|
||||||
p + 8, BE in b =>
|
p + 8, BE in b =>
|
||||||
n = u16[p] as usize;
|
n = u16[p] usize;
|
||||||
r = u8[p + 2];
|
r = u8[p + 2];
|
||||||
g = u8[p + 4];
|
g = u8[p + 4];
|
||||||
b = u8[p + 6];
|
b = u8[p + 6];
|
||||||
|
@ -343,15 +343,15 @@ fn read_rle<T>(b: &[u8], pitch: usize) -> ResultS<(Vec<T>, usize)>
|
||||||
let mut o = Vec::with_capacity(pitch);
|
let mut o = Vec::with_capacity(pitch);
|
||||||
|
|
||||||
let sz = if pitch > 250 {
|
let sz = if pitch > 250 {
|
||||||
(u16b(b) as usize + 2, p += 2).0
|
(usize::from(u16b(b)) + 2, p += 2).0
|
||||||
} else {
|
} else {
|
||||||
(b[0] as usize + 1, p += 1).0
|
(usize::from(b[0]) + 1, p += 1).0
|
||||||
};
|
};
|
||||||
|
|
||||||
while p < sz {
|
while p < sz {
|
||||||
let szf = b[p];
|
let szf = b[p];
|
||||||
let cmp = szf & 0x80 != 0;
|
let cmp = szf & 0x80 != 0;
|
||||||
let len = if cmp {!szf + 2} else {szf + 1} as usize;
|
let len = usize::from(if cmp {!szf + 2} else {szf + 1});
|
||||||
|
|
||||||
p += 1;
|
p += 1;
|
||||||
o.reserve(len);
|
o.reserve(len);
|
||||||
|
|
|
@ -23,7 +23,7 @@ fn read_color(b: &[u8], clut: &mut [ColorShp]) -> ResultS<()>
|
||||||
}?;
|
}?;
|
||||||
|
|
||||||
let cr = ColorShp::Opaque{r, g, b, l};
|
let cr = ColorShp::Opaque{r, g, b, l};
|
||||||
clut[i as usize] = cr;
|
clut[usize::from(i)] = cr;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,8 +56,8 @@ pub fn read_bitmap(b: &[u8]) -> ResultS<Bitmap>
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
26, BE in b =>
|
26, BE in b =>
|
||||||
width = u16[0] as usize;
|
width = u16[0] usize;
|
||||||
height = u16[2] as usize;
|
height = u16[2] usize;
|
||||||
compr = u16[4];
|
compr = u16[4];
|
||||||
flags = u16[6];
|
flags = u16[6];
|
||||||
depth = u16[8];
|
depth = u16[8];
|
||||||
|
@ -83,8 +83,8 @@ pub fn read_bitmap(b: &[u8]) -> ResultS<Bitmap>
|
||||||
for _ in 0..scanlines {
|
for _ in 0..scanlines {
|
||||||
read_data! {
|
read_data! {
|
||||||
p + 4, BE in b =>
|
p + 4, BE in b =>
|
||||||
fst = u16[p] as usize;
|
fst = u16[p] usize;
|
||||||
lst = u16[p + 2] as usize;
|
lst = u16[p + 2] usize;
|
||||||
}
|
}
|
||||||
let end = lst - fst;
|
let end = lst - fst;
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ pub fn read_frame(b: &[u8]) -> ResultS<Frame>
|
||||||
36, BE in b =>
|
36, BE in b =>
|
||||||
flags = u16[0];
|
flags = u16[0];
|
||||||
min_lt = Fixed[2];
|
min_lt = Fixed[2];
|
||||||
bmp_ind = u16[6] as usize;
|
bmp_ind = u16[6] usize;
|
||||||
wrl_l = Unit[16];
|
wrl_l = Unit[16];
|
||||||
wrl_r = Unit[18];
|
wrl_r = Unit[18];
|
||||||
wrl_t = Unit[20];
|
wrl_t = Unit[20];
|
||||||
|
@ -144,7 +144,7 @@ pub fn read_sequence(b: &[u8]) -> ResultS<Sequence>
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
88, BE in b =>
|
88, BE in b =>
|
||||||
name = u8[4..38] array;
|
name = u8[4..38] slice;
|
||||||
v_type = u16[38];
|
v_type = u16[38];
|
||||||
frames = u16[40];
|
frames = u16[40];
|
||||||
ticks = u16[42];
|
ticks = u16[42];
|
||||||
|
@ -172,15 +172,15 @@ pub fn read_collection(b: &[u8]) -> ResultS<Collection>
|
||||||
544, BE in b =>
|
544, BE in b =>
|
||||||
version = u16[0];
|
version = u16[0];
|
||||||
cl_type = u16[2];
|
cl_type = u16[2];
|
||||||
clr_num = u16[6] as usize;
|
clr_num = u16[6] usize;
|
||||||
tab_num = u16[8] as usize;
|
tab_num = u16[8] usize;
|
||||||
tab_ofs = u32[10] as usize;
|
tab_ofs = u32[10] usize;
|
||||||
seq_num = u16[14] as usize;
|
seq_num = u16[14] usize;
|
||||||
seq_ofs = u32[16] as usize;
|
seq_ofs = u32[16] usize;
|
||||||
frm_num = u16[20] as usize;
|
frm_num = u16[20] usize;
|
||||||
frm_ofs = u32[22] as usize;
|
frm_ofs = u32[22] usize;
|
||||||
bmp_num = u16[26] as usize;
|
bmp_num = u16[26] usize;
|
||||||
bmp_ofs = u32[28] as usize;
|
bmp_ofs = u32[28] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let cl_type = CollectionType::from_repr(cl_type)?;
|
let cl_type = CollectionType::from_repr(cl_type)?;
|
||||||
|
@ -206,19 +206,19 @@ pub fn read_shapes(b: &[u8]) -> ResultS<Vec<CollectionDef>>
|
||||||
for _ in 0..32 {
|
for _ in 0..32 {
|
||||||
read_data! {
|
read_data! {
|
||||||
p + 32, BE in b =>
|
p + 32, BE in b =>
|
||||||
lo_ofs = u32[p + 4] as usize;
|
lo_ofs = u32[p + 4] usize;
|
||||||
lo_len = u32[p + 8] as usize;
|
lo_len = u32[p + 8] usize;
|
||||||
hi_ofs = u32[p + 12] as usize;
|
hi_ofs = u32[p + 12] usize;
|
||||||
hi_len = u32[p + 16] as usize;
|
hi_len = u32[p + 16] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let c_lo = if lo_ofs == u32::max_value() as usize {
|
let c_lo = if lo_ofs == usize_from_u32(u32::max_value()) {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(read_collection(&b[lo_ofs..lo_ofs + lo_len])?)
|
Some(read_collection(&b[lo_ofs..lo_ofs + lo_len])?)
|
||||||
};
|
};
|
||||||
|
|
||||||
let c_hi = if hi_ofs == u32::max_value() as usize {
|
let c_hi = if hi_ofs == usize_from_u32(u32::max_value()) {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(read_collection(&b[hi_ofs..hi_ofs + hi_len])?)
|
Some(read_collection(&b[hi_ofs..hi_ofs + hi_len])?)
|
||||||
|
@ -261,11 +261,11 @@ impl Image for ImageShp<'_, '_>
|
||||||
{
|
{
|
||||||
static TRANSLUCENT_COLOR: ColorShp = ColorShp::Translucent;
|
static TRANSLUCENT_COLOR: ColorShp = ColorShp::Translucent;
|
||||||
|
|
||||||
let cr = if self.bmp.cmajr {
|
let cr = usize::from(if self.bmp.cmajr {
|
||||||
self.bmp.cr[y + x * self.bmp.h] as usize
|
self.bmp.cr[y + x * self.bmp.h]
|
||||||
} else {
|
} else {
|
||||||
self.bmp.cr[x + y * self.bmp.w] as usize
|
self.bmp.cr[x + y * self.bmp.w]
|
||||||
};
|
});
|
||||||
|
|
||||||
if self.bmp.alpha && cr == 0 {
|
if self.bmp.alpha && cr == 0 {
|
||||||
&TRANSLUCENT_COLOR
|
&TRANSLUCENT_COLOR
|
||||||
|
|
|
@ -9,10 +9,10 @@ pub fn read_sound(b: &[u8]) -> ResultS<Sound16>
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
21, BE in b =>
|
21, BE in b =>
|
||||||
len = u32[4] as usize;
|
len = u32[4] usize;
|
||||||
rate = u16[8];
|
rate = u16[8];
|
||||||
lp_beg = u32[12] as usize;
|
lp_beg = u32[12] usize;
|
||||||
lp_end = u32[16] as usize;
|
lp_end = u32[16] usize;
|
||||||
magic = u8[20];
|
magic = u8[20];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ pub fn read_sound(b: &[u8]) -> ResultS<Sound16>
|
||||||
0xFF => {
|
0xFF => {
|
||||||
read_data! {
|
read_data! {
|
||||||
63, BE in b =>
|
63, BE in b =>
|
||||||
len = u32[22] as usize;
|
len = u32[22] usize;
|
||||||
bps = u16[48];
|
bps = u16[48];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ pub fn read_sound_def(b: &[u8]) -> ResultS<Option<(Vec<usize>, u16, SoundDef)>>
|
||||||
chance = u16[6];
|
chance = u16[6];
|
||||||
pitch_lo = Fixed[8];
|
pitch_lo = Fixed[8];
|
||||||
pitch_hi = Fixed[12];
|
pitch_hi = Fixed[12];
|
||||||
n_sounds = u16[16] as usize;
|
n_sounds = u16[16] usize;
|
||||||
grp_ofs = u32[20] as usize;
|
grp_ofs = u32[20] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let flags = flag_ok!(SoundFlags, flags)?;
|
let flags = flag_ok!(SoundFlags, flags)?;
|
||||||
|
@ -74,7 +74,7 @@ pub fn read_sound_def(b: &[u8]) -> ResultS<Option<(Vec<usize>, u16, SoundDef)>>
|
||||||
let mut p = 36;
|
let mut p = 36;
|
||||||
|
|
||||||
for _ in 0..n_sounds {
|
for _ in 0..n_sounds {
|
||||||
ofs.push(grp_ofs + u32b(&b[p..]) as usize);
|
ofs.push(grp_ofs + usize_from_u32(u32b(&b[p..])));
|
||||||
p += 4;
|
p += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,8 +91,8 @@ pub fn read_sounds(b: &[u8]) -> ResultS<Vec<SoundTable>>
|
||||||
260, BE in b =>
|
260, BE in b =>
|
||||||
version = u32[0];
|
version = u32[0];
|
||||||
magic = Ident[4];
|
magic = Ident[4];
|
||||||
src_num = u16[8] as usize;
|
src_num = u16[8] usize;
|
||||||
snd_num = u16[10] as usize;
|
snd_num = u16[10] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if version != 1 || magic.0 != *b"snd2" {
|
if version != 1 || magic.0 != *b"snd2" {
|
||||||
|
|
|
@ -12,8 +12,8 @@ pub fn read_group(b: &[u8], text: &[u8]) -> ResultS<Group>
|
||||||
flags = u16[0];
|
flags = u16[0];
|
||||||
ttype = u16[2];
|
ttype = u16[2];
|
||||||
pdata = i16[4];
|
pdata = i16[4];
|
||||||
start = u16[6] as usize;
|
start = u16[6] usize;
|
||||||
size = u16[8] as usize;
|
size = u16[8] usize;
|
||||||
lines = u16[10];
|
lines = u16[10];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ pub fn read_face(b: &[u8]) -> ResultS<Face>
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
6, BE in b =>
|
6, BE in b =>
|
||||||
start = u16[0] as usize;
|
start = u16[0] usize;
|
||||||
face = u16[2];
|
face = u16[2];
|
||||||
color = u16[4];
|
color = u16[4];
|
||||||
}
|
}
|
||||||
|
@ -45,11 +45,11 @@ pub fn read_term(b: &[u8]) -> ResultS<(Terminal, usize)>
|
||||||
|
|
||||||
read_data! {
|
read_data! {
|
||||||
10, BE in b =>
|
10, BE in b =>
|
||||||
end = u16[0] as usize;
|
end = u16[0] usize;
|
||||||
encoded = u16[2];
|
encoded = u16[2];
|
||||||
lines = u16[4];
|
lines = u16[4];
|
||||||
group_n = u16[6] as usize;
|
group_n = u16[6] usize;
|
||||||
face_n = u16[8] as usize;
|
face_n = u16[8] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let encoded = encoded != 0;
|
let encoded = encoded != 0;
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub fn read_chunks(b: &[u8], old_dat: bool, siz_cnk: usize)
|
||||||
read_data! {
|
read_data! {
|
||||||
p + siz_cnk, BE in b =>
|
p + siz_cnk, BE in b =>
|
||||||
iden = Ident[p];
|
iden = Ident[p];
|
||||||
size = u32[p + 8] as usize;
|
size = u32[p + 8] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let beg = p + siz_cnk;
|
let beg = p + siz_cnk;
|
||||||
|
@ -69,8 +69,8 @@ pub fn read_entries(b: &[u8],
|
||||||
{
|
{
|
||||||
read_data! {
|
read_data! {
|
||||||
128, BE in b =>
|
128, BE in b =>
|
||||||
dirofs = u32[72] as usize;
|
dirofs = u32[72] usize;
|
||||||
numents = u16[76] as usize;
|
numents = u16[76] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut entries = BTreeMap::new();
|
let mut entries = BTreeMap::new();
|
||||||
|
@ -79,8 +79,8 @@ pub fn read_entries(b: &[u8],
|
||||||
for i in 0..numents {
|
for i in 0..numents {
|
||||||
read_data! {
|
read_data! {
|
||||||
p + siz_ent, BE in b =>
|
p + siz_ent, BE in b =>
|
||||||
offset = u32[p] as usize;
|
offset = u32[p] usize;
|
||||||
size = u32[p + 4] as usize;
|
size = u32[p + 4] usize;
|
||||||
index = u16[p + 8];
|
index = u16[p + 8];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,10 +104,10 @@ pub fn read_wad(b: &[u8]) -> ResultS<Wad>
|
||||||
128, BE in b =>
|
128, BE in b =>
|
||||||
ver_wad = u16[0];
|
ver_wad = u16[0];
|
||||||
ver_dat = u16[2];
|
ver_dat = u16[2];
|
||||||
name = mac_roman_conv[4..68] nt;
|
name = mac_roman_conv[4..68] no_try;
|
||||||
siz_app = u16[78] as usize;
|
siz_app = u16[78] usize;
|
||||||
siz_wcnk = u16[80] as usize;
|
siz_wcnk = u16[80] usize;
|
||||||
siz_went = u16[82] as usize;
|
siz_went = u16[82] usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
let ver_wad = Ver::from_repr(ver_wad)?;
|
let ver_wad = Ver::from_repr(ver_wad)?;
|
||||||
|
|
Loading…
Reference in New Issue