blind-from-text.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-from-text.c (1318B)
---
1 /* See LICENSE file for copyright and license details. */
2 #ifndef TYPE
3 #define INCLUDE_UINT16
4 #include "common.h"
5
6 USAGE("")
7
8 #define FILE "blind-from-text.c"
9 #include "define-functions.h"
10
11 int
12 main(int argc, char *argv[])
13 {
14 struct stream stream;
15 size_t size = 0;
16 char *line = NULL;
17 ssize_t len;
18 void (*process)(void);
19
20 UNOFLAGS(argc);
21
22 len = getline(&line, &size, stdin);
23 if (len < 0) {
24 if (ferror(stdin))
25 eprintf("getline <stdin>:");
26 else
27 eprintf("<stdin>: no input\n");
28 }
29 if (len && line[len - 1] == '\n')
30 line[--len] = '\0';
31 if ((size_t)len + 6 > sizeof(stream.buf))
32 eprintf("<stdin>: head is too long\n");
33 stream.fd = -1;
34 stream.file = "<stdin>";
35 memcpy(stream.buf, line, (size_t)len);
36 memcpy(stream.buf + len, "\n\0uivf", 6);
37 stream.ptr = (size_t)len + 6;
38 free(line);
39 ewriteall(STDOUT_FILENO, stream.buf, stream.ptr, "<stdout>");
40 einit_stream(&stream);
41
42 SELECT_PROCESS_FUNCTION(&stream);
43 process();
44
45 efshut(stdin, "<stdin>");
46 return 0;
47 }
48
49 #else
50
51 static void
52 PROCESS(void)
53 {
54 TYPE buf[BUFSIZ / sizeof(TYPE)];
55 size_t i;
56 int r, done = 0;
57 while (!done) {
58 for (i = 0; i < ELEMENTSOF(buf); i += (size_t)r) {
59 r = scanf("%"SCAN_TYPE, buf + i);
60 if (r == EOF) {
61 done = 1;
62 break;
63 }
64 }
65 ewriteall(STDOUT_FILENO, buf, i * sizeof(*buf), "<stdout>");
66 }
67 }
68
69 #endif