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