From bd0ff5a8b58439fe4a02f632a9fc4d1cf37a8fe4 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Wed, 22 Dec 2021 21:54:31 -0500 Subject: Support reading gzipped data in merge --- merge.c | 18 ++++++++++++------ torus.1 | 7 ++++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/merge.c b/merge.c index 5db1a58..340bff6 100644 --- a/merge.c +++ b/merge.c @@ -23,6 +23,7 @@ #include #include #include +#include #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 -- cgit 1.4.1