(huff: &[(u16, u16)], source: &[u8], length: usize)
| 328 | } |
| 329 | |
| 330 | fn huff_expand(huff: &[(u16, u16)], source: &[u8], length: usize) -> Vec<u8> { |
| 331 | let mut dest: Vec<u8> = Vec::new(); |
| 332 | let headptr = 254; // head node is always node 254 |
| 333 | let mut huffptr = headptr; |
| 334 | let mut i = 0; |
| 335 | |
| 336 | let mut mask = 1; |
| 337 | let mut nodeval; |
| 338 | |
| 339 | loop { |
| 340 | if (source[i] & mask) == 0 { |
| 341 | nodeval = huff[huffptr].0; |
| 342 | } else { |
| 343 | nodeval = huff[huffptr].1; |
| 344 | } |
| 345 | if mask == 0x80 { |
| 346 | i += 1; |
| 347 | mask = 1; |
| 348 | } else { |
| 349 | mask <<= 1; |
| 350 | } |
| 351 | if nodeval < 256 { |
| 352 | dest.push(nodeval.try_into().unwrap()); |
| 353 | huffptr = headptr; |
| 354 | if dest.len() >= length { |
| 355 | break; |
| 356 | } |
| 357 | } else { |
| 358 | huffptr = nodeval as usize - 256; |
| 359 | } |
| 360 | } |
| 361 | dest |
| 362 | } |
| 363 | |
| 364 | fn load_graphic(source: &[u8], headers: &[u32], huff: &[(u16, u16)], chunk: usize) -> Vec<u8> { |
| 365 | let pos = headers[chunk] as usize; |
no outgoing calls
no test coverage detected