use super::tables::{Table, charn, nchar};
pub fn encode_free_text(text: &str) -> Option<[u8; 9]> {
if text.len() > 13 {
return None;
}
let mut b71 = [0u8; 9];
let mut chars = Vec::with_capacity(13);
for c in text.chars() {
chars.push(c);
}
while chars.len() < 13 {
chars.push(' ');
}
for &c in &chars {
let cid = nchar(c, Table::Full)? as u16;
let mut rem = cid;
for i in (0..9usize).rev() {
rem += b71[i] as u16 * 42;
b71[i] = (rem & 0xFF) as u8;
rem >>= 8;
}
}
Some(b71)
}
pub fn decode_free_text(b71: &[u8; 9]) -> String {
let mut b = *b71;
let mut chars = [' '; 13];
for i in (0..13usize).rev() {
let mut rem: u16 = 0;
for byte in &mut b {
rem = (rem << 8) | *byte as u16;
*byte = (rem / 42) as u8;
rem %= 42;
}
chars[i] = charn(rem as u8, Table::Full);
}
let s: String = chars.iter().collect();
s.trim_end_matches(' ').to_string()
}