blind-coordinate-field.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-coordinate-field.c (1446B)
---
1 /* See LICENSE file for copyright and license details. */
2 #ifndef TYPE
3 #include "common.h"
4
5 USAGE("[-f frames | -f 'inf'] [-F pixel-format] -w width -h height")
6
7 static struct stream stream = { .width = 0, .height = 0, .frames = 1 };
8 static int inf = 0;
9
10 #define FILE "blind-coordinate-field.c"
11 #include "define-functions.h"
12
13 int
14 main(int argc, char *argv[])
15 {
16 char *arg;
17 const char *pixfmt = "xyza";
18 void (*process)(void);
19
20 ARGBEGIN {
21 case 'f':
22 arg = UARGF();
23 if (!strcmp(arg, "inf"))
24 inf = 1, stream.frames = 0;
25 else
26 stream.frames = etozu_flag('f', arg, 1, SIZE_MAX);
27 break;
28 case 'F':
29 pixfmt = UARGF();
30 break;
31 case 'w':
32 stream.width = etozu_flag('w', UARGF(), 1, SIZE_MAX);
33 break;
34 case 'h':
35 stream.height = etozu_flag('h', UARGF(), 1, SIZE_MAX);
36 break;
37 default:
38 usage();
39 } ARGEND;
40
41 if (!stream.width || !stream.height || argc)
42 usage();
43
44 if (inf)
45 einf_check_fd(STDOUT_FILENO, "<stdout>");
46
47 eset_pixel_format(&stream, pixfmt);
48 SELECT_PROCESS_FUNCTION(&stream);
49 CHECK_N_CHAN(&stream, 4, 4);
50
51 fprint_stream_head(stdout, &stream);
52 efflush(stdout, "<stdout>");
53 process();
54 return 0;
55 }
56
57 #else
58
59 static void
60 PROCESS(void)
61 {
62 TYPE buf[4] = {0, 0, 0, 0};
63 size_t x, y;
64 while (inf || stream.frames--) {
65 for (y = 0; y < stream.height; y++) {
66 buf[1] = (TYPE)y;
67 for (x = 0; x < stream.width; x++) {
68 buf[0] = (TYPE)x;
69 ewrite(STDOUT_FILENO, buf, sizeof(buf), "<stdout>");
70 }
71 }
72 }
73 }
74
75 #endif