@@ 28,7 28,8 @@ enum Error {
Adapter(adapter::Error),
WriteOut(std::io::Error),
TerminationHandlerSetting(ctrlc::Error),
- FileOpening(std::io::Error),
+ InputFileOpening(std::io::Error),
+ OutputFileCreating(std::io::Error),
}
type Result<T> = std::result::Result<T, Error>;
@@ 77,6 78,14 @@ fn retrofit() -> Result<()> {
.default_value("8bit"),
)
.arg(
+ Arg::with_name("output")
+ .short("o")
+ .long("output")
+ .value_name("FILE")
+ .help("Redirects the output to a file instead of the standard output")
+ .takes_value(true)
+ )
+ .arg(
Arg::with_name("ice-colors")
.short("i")
.long("ice-colors")
@@ 109,7 118,7 @@ fn retrofit() -> Result<()> {
let source = match matches.value_of("FILE") {
Some(filename) => {
- let file = File::open(filename).map_err(Error::FileOpening)?;
+ let file = File::open(filename).map_err(Error::InputFileOpening)?;
Box::new(file) as Box<dyn Read>
}
None => Box::new(stdin()) as Box<dyn Read>,
@@ 120,7 129,15 @@ fn retrofit() -> Result<()> {
let hide_cursor = baud.is_some() || matches.occurrences_of("hide-cursor") > 0;
let ice_colors = matches.occurrences_of("ice-colors") > 0;
- let mut output = BufWriter::new(stdout());
+ let target = match matches.value_of("output") {
+ Some(filename) => {
+ let file = File::create(filename).map_err(Error::OutputFileCreating)?;
+ Box::new(file) as Box<dyn Write>
+ }
+ None => Box::new(stdout()) as Box<dyn Write>
+ };
+
+ let mut output = BufWriter::new(target);
BufReader::new(source)
.bytes()