use std::fs::File;
use std::io::Read;
use shift_or_euc::Detector;
fn main() {
let mut args = std::env::args_os();
if args.next().is_none() {
eprintln!("Error: Program name missing from arguments.");
std::process::exit(-1);
}
if let Some(path) = args.next() {
if args.next().is_some() {
eprintln!("Error: Too many arguments.");
std::process::exit(-3);
}
if let Ok(mut file) = File::open(path) {
let mut buffer = [0u8; 4096];
let mut detector = Detector::new(true);
loop {
if let Ok(num_read) = file.read(&mut buffer[..]) {
let opt_enc = if num_read == 0 {
detector.feed(b"", true)
} else {
detector.feed(&buffer[..num_read], false)
};
if let Some(encoding) = opt_enc {
println!("{}", encoding.name());
return;
} else if num_read == 0 {
println!("Undecided");
return;
}
} else {
eprintln!("Error: Error reading file.");
std::process::exit(-5);
}
}
} else {
eprintln!("Error: Could not open file.");
std::process::exit(-4);
}
} else {
eprintln!("Error: One path argument needed.");
std::process::exit(-2);
}
}