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) & " ") + +when isMainModule: + if paramCount() != 3: + stderr.writeLine("Error: invalid argument count.") + printUsage(stderr) + quit(1) + + case paramStr(1): + of "compress": compress.transform(paramStr(2), paramStr(3)) + of "decompress": decompress.transform(paramStr(2), paramStr(3)) + else: + stderr.writeLine("Error: invalid operation.") + printUsage(stderr) + quit(1) diff --git a/src/main.nim b/src/main.nim deleted file mode 100644 index cf76f5e..0000000 --- a/src/main.nim +++ /dev/null @@ -1,56 +0,0 @@ -# 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) & " ") - -when isMainModule: - if paramCount() != 3: - stderr.writeLine("Error: invalid argument count.") - printUsage(stderr) - quit(1) - - case paramStr(1): - of "compress": compress.transform(paramStr(2), paramStr(3)) - of "decompress": decompress.transform(paramStr(2), paramStr(3)) - else: - stderr.writeLine("Error: invalid operation.") - printUsage(stderr) - quit(1) diff --git a/tests/tgziplike.nim b/tests/tgziplike.nim new file mode 100644 index 0000000..2b79240 --- /dev/null +++ b/tests/tgziplike.nim @@ -0,0 +1,40 @@ +# 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 unittest, os, ospaths, osproc +import gziplike + +const tempDir = "tmp" + +suite "main": + setup: createDir(tempDir) + teardown: removeDir(tempDir) + + test "identity (text)": + let input = "license.md" + let intermediate = tempDir / "compressed" + let final = tempDir / "decompressed" + compress.transform(input, intermediate) + decompress.transform(intermediate, final) + check startProcess("cmp", args=[input, final], options={poUsePath}).waitForExit() == 0 + + test "identity (binary)": + let input = "tests" / "tgziplike" + let intermediate = tempDir / "compressed" + let final = tempDir / "decompressed" + compress.transform(input, intermediate) + decompress.transform(intermediate, final) + check startProcess("cmp", args=[input, final], options={poUsePath}).waitForExit() == 0 diff --git a/tests/tmain.nim b/tests/tmain.nim deleted file mode 100644 index 07d9c35..0000000 --- a/tests/tmain.nim +++ /dev/null @@ -1,40 +0,0 @@ -# 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 unittest, os, ospaths, osproc -import main - -const tempDir = "tmp" - -suite "main": - setup: createDir(tempDir) - teardown: removeDir(tempDir) - - test "identity (text)": - let input = "license.md" - let intermediate = tempDir / "compressed" - let final = tempDir / "decompressed" - compress.transform(input, intermediate) - decompress.transform(intermediate, final) - check startProcess("cmp", args=[input, final], options={poUsePath}).waitForExit() == 0 - - test "identity (binary)": - let input = "tests" / "tmain" - let intermediate = tempDir / "compressed" - let final = tempDir / "decompressed" - compress.transform(input, intermediate) - decompress.transform(intermediate, final) - check startProcess("cmp", args=[input, final], options={poUsePath}).waitForExit() == 0 -- cgit v1.2.3