blind-sawtooth-wave.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-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->n_chan;
           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