summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRangi <remy.oukaour+rangi42@gmail.com>2020-09-17 14:54:11 -0400
committerRangi <remy.oukaour+rangi42@gmail.com>2020-09-17 15:19:17 -0400
commita46a02097a0a00081dc2173aeb6bf3ca1187a868 (patch)
treef12ed48ae2f7860715d1bad0e66c353e86c82985
parent331c9043d2d6d39cb71d4460de97f22fb5ebab3c (diff)
Slight refactor to all xor_compress
-rw-r--r--.gitignore2
-rw-r--r--tools/tools.mk3
-rw-r--r--tools/xor_compress.c5
-rw-r--r--tools/xor_compress.py11
-rw-r--r--tools/xor_compress.rs47
5 files changed, 40 insertions, 28 deletions
diff --git a/.gitignore b/.gitignore
index e48f237..b987b33 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,7 +9,9 @@
__pycache__
*.pyc
*.exe
+*.pdb
/coverage.png
/picross.png
tools/scan_includes
tools/xor_compress
+tools/xor-compress
diff --git a/tools/tools.mk b/tools/tools.mk
index 0857fcb..da1041d 100644
--- a/tools/tools.mk
+++ b/tools/tools.mk
@@ -7,3 +7,6 @@ CFLAGS := -O3 -std=c99 -Wall -Wextra -pedantic
tools/%: tools/%.c
$(CC) $(CFLAGS) -o $@ $<
+
+tools/xor-compress: tools/xor_compress.rs
+ rustc -C opt-level=3 -o $@ $<
diff --git a/tools/xor_compress.c b/tools/xor_compress.c
index 48e5167..2e1f4fe 100644
--- a/tools/xor_compress.c
+++ b/tools/xor_compress.c
@@ -98,9 +98,8 @@ int write_compressed(const char *filename, unsigned char *data, size_t n, bool v
}
int main(int argc, char *argv[]) {
- bool verbose = false;
- if (argc > 1 && !strcmp(argv[1], "-v")) {
- verbose = true;
+ bool verbose = argc > 1 && !strcmp(argv[1], "-v");
+ if (verbose) {
argv++;
argc--;
}
diff --git a/tools/xor_compress.py b/tools/xor_compress.py
index 015c80e..1c3a2f1 100644
--- a/tools/xor_compress.py
+++ b/tools/xor_compress.py
@@ -2,15 +2,16 @@
import sys
+PROGRAM_NAME = "xor_compress.py"
+
sys.argv.pop(0)
-verbose = False
-if sys.argv and sys.argv[0] == '-v':
- verbose = True
+verbose = sys.argv and sys.argv[0] == '-v'
+if verbose:
sys.argv.pop(0)
if len(sys.argv) < 2:
- print('Usage: xor_compress.py [-v] file... files.xor', file=sys.stderr)
+ print('Usage: %s [-v] file... files.xor' % PROGRAM_NAME, file=sys.stderr)
exit(1)
out_filename = sys.argv.pop()
@@ -61,4 +62,4 @@ with open(out_filename, 'wb') as f:
f.write(output)
if verbose:
- print('%s: ld bc, $%x' % (out_filename, runs))
+ print('%s: %s: ld bc, $%x' % (PROGRAM_NAME, out_filename, runs))
diff --git a/tools/xor_compress.rs b/tools/xor_compress.rs
index 0d912ba..fd6c674 100644
--- a/tools/xor_compress.rs
+++ b/tools/xor_compress.rs
@@ -1,17 +1,25 @@
-const PROGRAM_NAME: &str = "xor_compress";
+use std::env::args;
+use std::process::exit;
+use std::fs::write;
+use std::io::{Read, Error};
-fn read_files(filenames: &[String]) -> Result<Vec<u8>, (&String, std::io::Error)> {
+const PROGRAM_NAME: &str = "xor-compress";
+
+fn read_files(filenames: &[String]) -> Result<Vec<u8>, (&String, Error)> {
let mut data = Vec::new();
- for filename in filenames.iter() {
- match std::fs::read(filename) {
- Ok(bytes) => data.extend(&bytes),
- Err(err) => return Err((filename, err)),
+ for filename in filenames {
+ match std::fs::File::open(filename) {
+ Ok(mut f) => match f.read_to_end(&mut data) {
+ Ok(_) => (),
+ Err(err) => return Err((filename, err)),
+ },
+ Err(err) => return Err((filename, err)),
}
}
Ok(data)
}
-fn write_compressed(filename: &String, data: Vec<u8>) -> Result<u32, std::io::Error> {
+fn write_compressed(filename: &String, data: &[u8]) -> Result<u32, Error> {
let n = data.len();
let mut output = Vec::new();
@@ -55,42 +63,41 @@ fn write_compressed(filename: &String, data: Vec<u8>) -> Result<u32, std::io::Er
}
}
- match std::fs::write(filename, &output[..]) {
+ match write(filename, &output[..]) {
Ok(()) => Ok(runs),
Err(err) => Err(err),
}
}
fn main() {
- let mut args: Vec<String> = std::env::args().skip(1).collect();
+ let mut argv: Vec<String> = args().skip(1).collect();
- let mut verbose = false;
- if !args.is_empty() && args[0] == "-v" {
- verbose = true;
- args.remove(0);
+ let verbose = !argv.is_empty() && argv[0] == "-v";
+ if verbose {
+ argv.remove(0);
}
- if args.len() < 2 {
+ if argv.len() < 2 {
eprintln!("Usage: {} [-v] file... files.xor", PROGRAM_NAME);
- std::process::exit(1);
+ exit(1);
}
- let out_filename = args.pop().unwrap();
- let data = match read_files(&args[..]) {
+ let out_filename = argv.pop().unwrap();
+ let data = match read_files(&argv[..]) {
Ok(data) => data,
Err((filename, err)) => {
eprintln!("{}: {}: {}", PROGRAM_NAME, filename, err);
- std::process::exit(err.raw_os_error().unwrap_or(1));
+ exit(err.raw_os_error().unwrap_or(1));
}
};
if !data.is_empty() {
- match write_compressed(&out_filename, data) {
+ match write_compressed(&out_filename, &data[..]) {
Ok(runs) => if verbose {
println!("{}: {}: ld bc, ${:x}", PROGRAM_NAME, out_filename, runs);
},
Err(err) => {
eprintln!("{}: {}: {}", PROGRAM_NAME, out_filename, err);
- std::process::exit(err.raw_os_error().unwrap_or(1));
+ exit(err.raw_os_error().unwrap_or(1));
},
}
}