From 0c375acd686f2e7f3116e243bf9c89a836d5be99 Mon Sep 17 00:00:00 2001
From: pacien
Date: Fri, 30 Nov 2018 21:16:04 +0100
Subject: rename main file
---
gziplike.nimble | 2 +-
readme.md | 3 +--
src/gziplike.nim | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++
src/main.nim | 56 -----------------------------------------------------
tests/tgziplike.nim | 40 ++++++++++++++++++++++++++++++++++++++
tests/tmain.nim | 40 --------------------------------------
6 files changed, 98 insertions(+), 99 deletions(-)
create mode 100644 src/gziplike.nim
delete mode 100644 src/main.nim
create mode 100644 tests/tgziplike.nim
delete mode 100644 tests/tmain.nim
diff --git a/gziplike.nimble b/gziplike.nimble
index b985f7d..cbcd7b9 100644
--- a/gziplike.nimble
+++ b/gziplike.nimble
@@ -5,7 +5,7 @@ author = "pacien"
description = "gzip-like LZSS compressor"
license = "AGPL-3.0-or-later"
srcDir = "src"
-bin = @["main"]
+bin = @["gziplike"]
# Dependencies
diff --git a/readme.md b/readme.md
index be2587c..95fe641 100644
--- a/readme.md
+++ b/readme.md
@@ -10,7 +10,7 @@ Test and build
Building this project requires Nim and Nimble version 0.19.0 or later.
-* `nimble build` produces a binary named `main`
+* `nimble build` produces a binary named `gziplike`
* `nimble test` runs the included unit tests
@@ -32,4 +32,3 @@ License
Copyright (C) 2018 Pacien TRAN-GIRARD.
This project is distributed under the terms of the GNU Affero General Public License v3.0, as detailed in the provided `license.md` file.
-
diff --git a/src/gziplike.nim b/src/gziplike.nim
new file mode 100644
index 0000000..cf76f5e
--- /dev/null
+++ b/src/gziplike.nim
@@ -0,0 +1,56 @@
+# gzip-like LZSS compressor
+# Copyright (C) 2018 Pacien TRAN-GIRARD
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+
+import os, streams, sugar
+import bitio/bitreader, bitio/bitwriter, blocks/streamblock
+
+proc transform*(operation: (BitReader, BitWriter) -> void, input, output: string) =
+ let inputStream = openFileStream(input, fmRead)
+ defer: inputStream.close()
+ let outputStream = openFileStream(output, fmWrite)
+ defer: outputStream.close()
+ operation(inputStream.bitReader(), outputStream.bitWriter())
+
+proc compress*(bitReader: BitReader, bitWriter: BitWriter) =
+ while not bitReader.atEnd():
+ let streamBlock = streamblock.readRaw(bitReader)
+ streamBlock.writeSerialisedTo(bitWriter)
+ bitWriter.flush()
+
+proc decompress*(bitReader: BitReader, bitWriter: BitWriter) =
+ var hasMore = true
+ while hasMore:
+ let streamBlock = streamblock.readSerialised(bitReader)
+ streamBlock.writeRawTo(bitWriter)
+ hasMore = not streamBlock.isLast()
+ bitWriter.flush()
+
+proc printUsage(output: File) =
+ output.writeLine("Usage: " & paramStr(0) & "