blind-flop.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-flop.c (1097B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include "common.h"
3
4 USAGE("")
5
6 static struct stream stream;
7 static char *buf, *image;
8 static size_t n, m, ps;
9
10 #define PROCESS(TYPE)\
11 do {\
12 size_t i, j;\
13 for (i = 0; i < ps; i++)\
14 for (j = 0; j < n; j += ps)\
15 ((TYPE *)image)[m - j + i] = ((TYPE *)buf)[i + j];\
16 } while (0)
17
18 static void process_long(void) {PROCESS(long);}
19 static void process_char(void) {PROCESS(char);}
20
21 int
22 main(int argc, char *argv[])
23 {
24 void (*process)(void) = process_char;
25
26 UNOFLAGS(argc);
27
28 eopen_stream(&stream, NULL);
29 echeck_dimensions(&stream, WIDTH, NULL);
30 fprint_stream_head(stdout, &stream);
31 efflush(stdout, "<stdout>");
32 buf = emalloc(stream.row_size);
33 image = emalloc(stream.row_size);
34
35 m = (n = stream.row_size) - (ps = stream.pixel_size);
36 if (!(stream.pixel_size % sizeof(long))) {
37 process = process_long;
38 m /= sizeof(long);
39 n /= sizeof(long);
40 ps /= sizeof(long);
41 }
42
43 while (eread_row(&stream, buf)) {
44 process();
45 ewriteall(STDOUT_FILENO, image, stream.row_size, "<stdout>");
46 }
47
48 free(buf);
49 free(image);
50 return 0;
51 }