36 lines
966 B
Rust
36 lines
966 B
Rust
#![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;
|
|
}
|
|
}
|