more better macro usage

png-branch
an 2019-02-21 14:24:20 -05:00
parent 18c221019b
commit b87ce92d22
4 changed files with 20 additions and 32 deletions

View File

@ -39,6 +39,10 @@ macro_rules! rd_1 {
rd_1!($b u16::from_be_bytes, $nam 2 $n);
let $nam = Unit::from_bits($nam);
};
(BE $b:ident $nam:ident ObjID $n:expr) => {
rd_1!($b u16::from_be_bytes, $nam 2 $n);
let $nam = ObjID::from_repr($nam);
};
// little endian
(LE $b:ident $nam:ident u16 $n:expr) => {

View File

@ -44,11 +44,9 @@ pub fn read_sidetex(b: &[u8]) -> ResultS<SideTex>
read_data! {
6, BE in b =>
offs = read_point[0..4];
tex_id = u16[4];
tex_id = ObjID[4];
}
let tex_id = ObjID::from_repr(tex_id);
Ok(SideTex{offs, tex_id})
}
@ -85,17 +83,13 @@ pub fn read_lins(b: &[u8]) -> ResultS<(Line, usize)>
pnt_beg = u16[0];
pnt_end = u16[2];
flags = u16[4];
side_fr = u16[12];
side_bk = u16[14];
poly_fr = u16[16];
poly_bk = u16[18];
side_fr = ObjID[12];
side_bk = ObjID[14];
poly_fr = ObjID[16];
poly_bk = ObjID[18];
}
let flags = ok!(LineFlags::from_bits(flags), "bad LineFlags")?;
let side_fr = ObjID::from_repr(side_fr);
let side_bk = ObjID::from_repr(side_bk);
let poly_fr = ObjID::from_repr(poly_fr);
let poly_bk = ObjID::from_repr(poly_bk);
Ok((Line{flags, pnt_beg, pnt_end, side_fr, side_bk, poly_fr, poly_bk}, 32))
}
@ -133,8 +127,8 @@ pub fn read_poly(b: &[u8]) -> ResultS<(Polygon, usize)>
128, BE in b =>
ptype = u16[0];
pdata = i16[4];
tex_flr = u16[40];
tex_cei = u16[42];
tex_flr = ObjID[40];
tex_cei = ObjID[42];
hei_flr = Unit[44];
hei_cei = Unit[46];
lit_flr = u16[48];
@ -143,21 +137,16 @@ pub fn read_poly(b: &[u8]) -> ResultS<(Polygon, usize)>
xfr_cei = u16[66];
ori_flr = read_point[108..112];
ori_cei = read_point[112..116];
med_ind = u16[116];
med_ind = ObjID[116];
med_ctl = u16[118];
snd_ind = u16[120];
snd_amb = u16[122];
snd_rnd = u16[124];
snd_amb = ObjID[122];
snd_rnd = ObjID[124];
}
let xfr_flr = TransferMode::from_repr(xfr_flr)?;
let xfr_cei = TransferMode::from_repr(xfr_cei)?;
let ptype = PolyType::from_repr(ptype)?;
let tex_flr = ObjID::from_repr(tex_flr);
let tex_cei = ObjID::from_repr(tex_cei);
let snd_amb = ObjID::from_repr(snd_amb);
let snd_rnd = ObjID::from_repr(snd_rnd);
let med_ind = ObjID::from_repr(med_ind);
Ok((Polygon{ptype, pdata, tex_flr, tex_cei, hei_flr, hei_cei, lit_flr,
lit_cei, xfr_flr, xfr_cei, ori_flr, ori_cei, med_ind, med_ctl,
@ -273,13 +262,12 @@ pub fn read_medi(b: &[u8]) -> ResultS<(Media, usize)>
orig = read_point[14..18];
hei_nrm = Unit[18];
min_lt = Fixed[20];
texture = u16[24];
texture = ObjID[24];
xfer = u16[26];
}
let mtype = MediaType::from_repr(mtype)?;
let xfer = TransferMode::from_repr(xfer)?;
let texture = ObjID::from_repr(texture);
let flr_obs = flags != 0;
Ok((Media{mtype, flr_obs, control, dir, mag, hei_lo, hei_hi, orig, hei_nrm,

View File

@ -147,18 +147,15 @@ fn sequence(b: &[u8]) -> ResultS<Sequence>
key = u16[44];
xfer = u16[46];
xfer_pd = u16[48];
snd_beg = u16[50];
snd_key = u16[52];
snd_end = u16[54];
snd_beg = ObjID[50];
snd_key = ObjID[52];
snd_end = ObjID[54];
loop_f = u16[58];
}
let name = mac_roman_conv(ok!(pascal_str(name), "bad string")?);
let xfer = TransferMode::from_repr(xfer)?;
let v_type = ViewType::from_repr(v_type)?;
let snd_beg = ObjID::from_repr(snd_beg);
let snd_key = ObjID::from_repr(snd_key);
let snd_end = ObjID::from_repr(snd_end);
Ok(Sequence{name, v_type, frames, ticks, key, xfer, xfer_pd, snd_beg,
snd_key, snd_end, loop_f})

View File

@ -12,7 +12,7 @@ impl Wad<'_>
128, BE in b =>
wadver = u16[0];
dataver = u16[2];
origname = u8[4..68] array;
origname = mac_roman_conv[4..68] nt;
dirofs = u32[72] as usize;
numents = u16[76] as usize;
appsize = u16[78] as usize;
@ -20,8 +20,7 @@ impl Wad<'_>
wentsize = u16[82] as usize;
}
let wadver = Ver::from_repr(wadver)?;
let origname = mac_roman_conv(origname);
let wadver = Ver::from_repr(wadver)?;
let is_old = match wadver {
Ver::Base => true,