blind-transpose.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-transpose.c (1379B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include "common.h"
3
4 USAGE("")
5
6 static size_t srcw, srch, srcwps, srchps, ps, n;
7
8 #define PROCESS(TYPE)\
9 do {\
10 size_t x, i;\
11 char *src, *img;\
12 for (x = 0; x < srchps; x += ps) {\
13 img = row + x;\
14 src = col + x * srcw;\
15 for (i = 0; i < n; i++)\
16 ((TYPE *)img)[i] = ((TYPE *)src)[i];\
17 }\
18 } while (0)
19
20 static void process_long(char *row, char *col) {PROCESS(long);}
21 static void process_char(char *row, char *col) {PROCESS(char);}
22
23 int
24 main(int argc, char *argv[])
25 {
26 struct stream stream;
27 char *buf, *image;
28 size_t y;
29 void (*process)(char *row, char *col);
30
31 UNOFLAGS(argc);
32
33 eopen_stream(&stream, NULL);
34 echeck_dimensions(&stream, WIDTH | HEIGHT, NULL);
35 srch = stream.height, srchps = stream.col_size;
36 srcw = stream.width, srcwps = stream.row_size;
37 stream.height = srcw;
38 stream.width = srch;
39 fprint_stream_head(stdout, &stream);
40 efflush(stdout, "<stdout>");
41
42 buf = emalloc(stream.frame_size);
43 image = emalloc(srchps);
44
45 ps = stream.pixel_size;
46 process = ps % sizeof(long) ? process_char : process_long;
47 n = ps / (ps % sizeof(long) ? sizeof(char) : sizeof(long));
48 while (eread_frame(&stream, buf)) {
49 for (y = 0; y < srcwps; y += stream.pixel_size) {
50 process(image, buf + y);
51 ewriteall(STDOUT_FILENO, image, srchps, "<stdout>");
52 }
53 }
54
55 free(buf);
56 free(image);
57 return 0;
58 }