aboutsummaryrefslogtreecommitdiffstats
path: root/src/vu-next-frame.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vu-next-frame.c')
-rw-r--r--src/vu-next-frame.c43
1 files changed, 12 insertions, 31 deletions
diff --git a/src/vu-next-frame.c b/src/vu-next-frame.c
index f5ff4c0..667acf5 100644
--- a/src/vu-next-frame.c
+++ b/src/vu-next-frame.c
@@ -1,5 +1,4 @@
/* See LICENSE file for copyright and license details. */
-#include "arg.h"
#include "stream.h"
#include "util.h"
@@ -7,40 +6,28 @@
#include <string.h>
#include <unistd.h>
+#undef eprintf
#define eprintf(...) enprintf(2, __VA_ARGS__)
-static void
-usage(void)
-{
- eprintf("usage: %s width height pixel-format ...\n", argv0);
-}
+USAGE("width height pixel-format ...")
int
main(int argc, char *argv[])
{
struct stream stream;
- size_t ptr, n, w;
- ssize_t r;
+ size_t n, w;
int i, anything = 0;
char *p;
- ARGBEGIN {
- default:
- usage();
- } ARGEND;
-
- if (argc < 3)
- usage();
+ ENOFLAGS(argc < 3);
stream.frames = 1;
stream.fd = STDIN_FILENO;
stream.file = "<stdin>";
stream.pixfmt[0] = '\0';
- if (tozu(argv[0], 1, SIZE_MAX, &stream.width))
- eprintf("the width must be an integer in [1, %zu]\n", SIZE_MAX);
- if (tozu(argv[1], 1, SIZE_MAX, &stream.height))
- eprintf("the height must be an integer in [1, %zu]\n", SIZE_MAX);
+ stream.width = etozu_arg("the width", argv[0], 1, SIZE_MAX);
+ stream.height = etozu_arg("the height", argv[1], 1, SIZE_MAX);
argv += 2, argc -= 2;
n = (size_t)argc - 1;
@@ -57,28 +44,22 @@ main(int argc, char *argv[])
eset_pixel_size(&stream);
fprint_stream_head(stdout, &stream);
- fflush(stdout);
- if (ferror(stdout))
- eprintf("<stdout>:");
+ efflush(stdout, "<stdout>");
+ w = stream.width * stream.pixel_size;
while (stream.height) {
stream.height--;
- for (w = stream.width * stream.pixel_size; w; w -= n) {
+ for (n = w; n; n -= stream.ptr) {
stream.ptr = 0;
- n = eread_stream(&stream, w);
- if (n == 0)
+ if (!eread_stream(&stream, n))
goto done;
anything = 1;
- for (ptr = 0; ptr < stream.ptr; ptr += (size_t)r) {
- r = write(STDOUT_FILENO, stream.buf + ptr, stream.ptr - ptr);
- if (r < 0)
- eprintf("write <stdin>:");
- }
+ ewriteall(STDOUT_FILENO, stream.buf, stream.ptr, "<stdout>");
}
}
done:
- if (stream.height || w)
+ if (stream.height || n)
eprintf("incomplete frame\n");
return !anything;