blind-skip-pattern.c - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
blind-skip-pattern.c (1172B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include "common.h"
3
4 USAGE("(skipped-frames | +included-frames) ...")
5
6 int
7 main(int argc, char *argv[])
8 {
9 struct stream stream;
10 int i, include, outfd;
11 size_t f, n, total = 0;
12 char *includes;
13 size_t *ns;
14
15 UNOFLAGS(!argc);
16
17 eopen_stream(&stream, NULL);
18
19 includes = emalloc((size_t)argc);
20 ns = ecalloc((size_t)argc, sizeof(*ns));
21
22 for (i = 0; i < argc; i++) {
23 include = argv[i][0] == '+';
24 n = etozu_arg(include ? "included frame count" : "skipped frame count",
25 argv[i] + include, 0, SIZE_MAX);
26 total += ns[i] = n;
27 includes[i] = (char)include;
28 }
29 if (!total)
30 eprintf("null pattern is not allowed");
31
32 for (i = 0, total = 0, f = stream.frames; f; i = (i + 1) % argc) {
33 include = (int)includes[i];
34 for (n = ns[i]; n-- && f--;)
35 total += (size_t)include;
36 }
37
38 stream.frames = total;
39 echeck_dimensions(&stream, WIDTH, NULL);
40 fprint_stream_head(stdout, &stream);
41 efflush(stdout, "<stdout>");
42
43 for (i = 0;; i = (i + 1) % argc) {
44 outfd = includes[i] ? STDOUT_FILENO : -1;
45 if (!esend_frames(&stream, outfd, ns[i], "<stdout>"))
46 break;
47 }
48
49 free(includes);
50 free(ns);
51 return 0;
52 }