about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--merge.c18
-rw-r--r--torus.17
2 files changed, 18 insertions, 7 deletions
diff --git a/merge.c b/merge.c
index 66a7a5e..42ef2c1 100644
--- a/merge.c
+++ b/merge.c
@@ -23,6 +23,7 @@
 #include <stdio.h>
 #include <sysexits.h>
 #include <wchar.h>
+#include <zlib.h>
 
 #include "torus.h"
 
@@ -83,10 +84,10 @@ static void drawTile(int offsetY, const struct Tile *tile) {
 int main(int argc, char *argv[]) {
 	if (argc != 4) return EX_USAGE;
 
-	FILE *fileA = fopen(argv[1], "r");
+	gzFile fileA = gzopen(argv[1], "r");
 	if (!fileA) err(EX_NOINPUT, "%s", argv[1]);
 
-	FILE *fileB = fopen(argv[2], "r");
+	gzFile fileB = gzopen(argv[2], "r");
 	if (!fileB) err(EX_NOINPUT, "%s", argv[2]);
 
 	FILE *fileC = fopen(argv[3], "w");
@@ -94,13 +95,18 @@ int main(int argc, char *argv[]) {
 
 	curse();
 
+	int error;
 	struct Tile tileA, tileB;
 	for (;;) {
-		size_t countA = fread(&tileA, sizeof(tileA), 1, fileA);
-		if (ferror(fileA)) err(EX_IOERR, "%s", argv[1]);
+		size_t countA = gzfread(&tileA, sizeof(tileA), 1, fileA);
+		if (!countA && gzerror(fileA, &error)) {
+			errx(EX_IOERR, "%s: %s", argv[1], gzerror(fileA, &error));
+		}
 
-		size_t countB = fread(&tileB, sizeof(tileB), 1, fileB);
-		if (ferror(fileB)) err(EX_IOERR, "%s", argv[2]);
+		size_t countB = gzfread(&tileB, sizeof(tileB), 1, fileB);
+		if (!countB && gzerror(fileB, &error)) {
+			errx(EX_IOERR, "%s: %s", argv[2], gzerror(fileB, &error));
+		}
 
 		if (!countA && !countB) break;
 		if (!countA || !countB) errx(EX_DATAERR, "different size inputs");
diff --git a/torus.1 b/torus.1
index 9bf4b52..ddf79a4 100644
--- a/torus.1
+++ b/torus.1
@@ -1,4 +1,4 @@
-.Dd September 20, 2021
+.Dd December 22, 2021
 .Dt torus 1
 .Os "Causal Agency"
 .
@@ -82,6 +82,11 @@ and
 .Ar data2
 into
 .Ar data3 .
+.Ar data1
+and
+.Ar data2
+may be compressed with
+.Xr gzip 1 .
 Differing tiles are presented in a
 .Xr curses 3
 interface