#![feature(str_checked_slicing)] use std::fs::File; use std::io::{BufRead, BufReader, Write}; fn main() { let input = File::open("unifont.hex").unwrap(); let mut output = File::create("unifont.font").unwrap(); let mut count = 0; for line_res in BufReader::new(input).lines() { let line = line_res.unwrap(); let mut parts = line.split(":"); let num = u32::from_str_radix(parts.next().unwrap(), 16).unwrap(); while count < num { output.write(&[0; 16]).unwrap(); count += 1; } assert_eq!(num, count); let mut data = [0; 16]; let data_part = parts.next().unwrap(); for i in 0..data.len() { let string = data_part.get(i * 2 .. i * 2 + 2).unwrap_or("00"); data[i] = u8::from_str_radix(string, 16).unwrap(); } println!("{:>04X}:{:?}", num, data); output.write(&data).unwrap(); count += 1; } }