Add ff2pam(1): convert farbfeld to 16-bit RGBA Portable Arbitrary Map - farbfel… | |
git clone git://git.suckless.org/farbfeld | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3d80d7237d18bdbf53e327a576b52b35b36af3ad | |
parent e9db1f49b75b183c8aeda321ca54aff5b436a4f6 | |
Author: Mattias Andrée <[email protected]> | |
Date: Mon, 9 Jan 2017 05:23:27 +0100 | |
Add ff2pam(1): convert farbfeld to 16-bit RGBA Portable Arbitrary Map | |
Laslo: Minor changes | |
Signed-off-by: Mattias Andrée <[email protected]> | |
Diffstat: | |
M Makefile | 2 +- | |
A ff2pam.1 | 41 +++++++++++++++++++++++++++++… | |
A ff2pam.c | 74 +++++++++++++++++++++++++++++… | |
3 files changed, 116 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
@@ -2,7 +2,7 @@ | |
# See LICENSE file for copyright and license details | |
include config.mk | |
-BIN = png2ff ff2png jpg2ff ff2jpg ff2ppm | |
+BIN = png2ff ff2png jpg2ff ff2jpg ff2pam ff2ppm | |
SCRIPTS = 2ff | |
SRC = ${BIN:=.c} | |
HDR = arg.h | |
diff --git a/ff2pam.1 b/ff2pam.1 | |
@@ -0,0 +1,41 @@ | |
+.Dd 2017-01-09 | |
+.Dt FF2PAM 1 | |
+.Os suckless.org | |
+.Sh NAME | |
+.Nm ff2pam | |
+.Nd convert farbfeld to PAM | |
+.Sh SYNOPSIS | |
+.Nm | |
+.Sh DESCRIPTION | |
+.Nm | |
+reads a | |
+.Xr farbfeld 5 | |
+image from stdin, converts it to a 16-bit RGBA PAM and writes the result | |
+to stdout. | |
+.Pp | |
+In case of an error | |
+.Nm | |
+writes a diagnostic message to stderr. | |
+.Sh EXIT STATUS | |
+.Bl -tag -width Ds | |
+.It 0 | |
+Image processed successfully. | |
+.It 1 | |
+An error occurred. | |
+.El | |
+.Sh EXAMPLES | |
+$ | |
+.Nm | |
+< image.ff > image.pam | |
+.Pp | |
+$ bunzip2 < image.ff.bz2 | | |
+.Nm | |
+> image.pam | |
+.Sh SEE ALSO | |
+.Xr 2ff 1 , | |
+.Xr bunzip2 1 , | |
+.Xr bzip2 1 , | |
+.Xr png2ff 1 , | |
+.Xr farbfeld 5 | |
+.Sh AUTHORS | |
+.An Mattias Andrée Aq Mt [email protected] | |
diff --git a/ff2pam.c b/ff2pam.c | |
@@ -0,0 +1,74 @@ | |
+/* See LICENSE file for copyright and license details. */ | |
+#include <arpa/inet.h> | |
+ | |
+#include <errno.h> | |
+#include <inttypes.h> | |
+#include <stdint.h> | |
+#include <stdio.h> | |
+#include <string.h> | |
+#include <unistd.h> | |
+ | |
+static char *argv0; | |
+ | |
+int | |
+main(int argc, char *argv[]) | |
+{ | |
+ uint32_t hdr[4], width, height; | |
+ char buf[BUFSIZ]; | |
+ size_t n, t; | |
+ | |
+ argv0 = argv[0], argc--, argv++; | |
+ | |
+ if (argc) { | |
+ fprintf(stderr, "usage: %s\n", argv0); | |
+ return 1; | |
+ } | |
+ | |
+ /* header */ | |
+ if (fread(hdr, sizeof(*hdr), 4, stdin) != 4) { | |
+ fprintf(stderr, "%s: file too short\n", argv0); | |
+ return 1; | |
+ } | |
+ if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) { | |
+ fprintf(stderr, "%s: invalid magic value\n", argv0); | |
+ return 1; | |
+ } | |
+ width = ntohl(hdr[2]); | |
+ height = ntohl(hdr[3]); | |
+ | |
+ /* write header */ | |
+ printf("P7\n" | |
+ "WIDTH %" PRIu32 "\n" | |
+ "HEIGHT %" PRIu32 "\n" | |
+ "DEPTH 4\n" /* number of channels */ | |
+ "MAXVAL 65535\n" | |
+ "TUPLTYPE RGB_ALPHA\n" | |
+ "ENDHDR\n", | |
+ width, height); | |
+ | |
+ /* write image */ | |
+ t = (size_t)width * (size_t)height * sizeof(uint16_t) * (sizeof("RGBA"… | |
+ for (; (n = fread(buf, 1, sizeof(buf) <= t ? sizeof(buf) : t, stdin));… | |
+ t -= n; | |
+ fwrite(buf, 1, n, stdout); | |
+ | |
+ if (feof(stdin)) { | |
+ break; | |
+ } | |
+ if (ferror(stdin)) { | |
+ fprintf(stderr, "%s: read: %s\n", argv0, strerror(errn… | |
+ return 1; | |
+ } | |
+ if (ferror(stdout)) { | |
+ fprintf(stderr, "%s: write: %s\n", argv0, strerror(err… | |
+ return 1; | |
+ } | |
+ } | |
+ | |
+ if (t > 0) { | |
+ fprintf(stderr, "%s: file too short\n", argv0); | |
+ return 1; | |
+ } | |
+ | |
+ return 0; | |
+} |