blind-triangular-wave.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-triangular-wave.c (1568B)
---
1 /* See LICENSE file for copyright and license details. */
2 #ifndef TYPE
3 #include "common.h"
4
5 USAGE("[-es]")
6
7 static int equal = 0;
8 static int spiral = 0;
9
10 #define FILE "blind-triangular-wave.c"
11 #include "define-functions.h"
12
13 int
14 main(int argc, char *argv[])
15 {
16 struct stream stream;
17 void (*process)(struct stream *stream);
18
19 ARGBEGIN {
20 case 'e':
21 equal = 1;
22 break;
23 case 's':
24 spiral = 1;
25 break;
26 default:
27 usage();
28 } ARGEND;
29
30 if (argc)
31 usage();
32
33 eopen_stream(&stream, NULL);
34
35 SELECT_PROCESS_FUNCTION(&stream);
36 fprint_stream_head(stdout, &stream);
37 efflush(stdout, "<stdout>");
38 process(&stream);
39 return 0;
40 }
41
42 #else
43
44 static void
45 PROCESS(struct stream *stream)
46 {
47 size_t i, j, n;
48 TYPE v, *p;
49 do {
50 if (equal) {
51 n = stream->ptr / stream->pixel_size;
52 for (i = 0; i < n; i++) {
53 p = (TYPE *)(stream->buf) + i * stream->n_chan;
54 v = posmod(*p, (TYPE)2);
55 v = v > 1 ? 2 - v : v;
56 if (spiral)
57 v = (v > (TYPE)0.5 ? 1 - v : v) * 2;
58 for (j = 0; j < stream->n_chan; j++)
59 p[j] = v;
60 }
61 n *= stream->pixel_size;
62 } else {
63 n = stream->ptr / stream->chan_size;
64 for (i = 0; i < n; i++) {
65 p = (TYPE *)(stream->buf) + i;
66 v = posmod(*p, (TYPE)2);
67 v = v > 1 ? 2 - v : v;
68 if (spiral)
69 v = (v > (TYPE)0.5 ? 1 - v : v) * 2;
70 *p = v;
71 }
72 n *= stream->chan_size;
73 }
74 ewriteall(STDOUT_FILENO, stream->buf, n, "<stdout>");
75 memmove(stream->buf, stream->buf + n, stream->ptr -= n);
76 } while (eread_stream(stream, SIZE_MAX));
77 if (stream->ptr)
78 eprintf("%s: incomplete frame\n", stream->file);
79 }
80
81 #endif