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