diff options
| author | Mattias Andrée <maandree@kth.se> | 2017-07-16 00:59:42 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2017-07-16 00:59:42 +0200 |
| commit | c216ac3049102422a41ba2c9476b0dbf4f3e4034 (patch) | |
| tree | 809793e1f01fafcb67422f654b6e9dbcab897660 /src/blind-spiral-gradient.c | |
| parent | Install the scripts (diff) | |
| download | blind-c216ac3049102422a41ba2c9476b0dbf4f3e4034.tar.gz blind-c216ac3049102422a41ba2c9476b0dbf4f3e4034.tar.bz2 blind-c216ac3049102422a41ba2c9476b0dbf4f3e4034.tar.xz | |
Use #include instead of #define
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/blind-spiral-gradient.c')
| -rw-r--r-- | src/blind-spiral-gradient.c | 208 |
1 files changed, 106 insertions, 102 deletions
diff --git a/src/blind-spiral-gradient.c b/src/blind-spiral-gradient.c index efb5655..3835bf2 100644 --- a/src/blind-spiral-gradient.c +++ b/src/blind-spiral-gradient.c @@ -1,4 +1,5 @@ /* See LICENSE file for copyright and license details. */ +#ifndef TYPE #include "common.h" USAGE("[-s spirals | t] [-al] -w width -h height") @@ -12,108 +13,8 @@ static size_t height = 0; static int with_params; static int with_vector; -#define PROCESS(TYPE, SUFFIX)\ - static void\ - process_##SUFFIX(struct stream *stream)\ - {\ - typedef TYPE pixel_t[4];\ - pixel_t buf[BUFSIZ / sizeof(pixel_t)];\ - TYPE *params, x1, y1, x2, y2, b, r, u, v;\ - TYPE x, y, a = 0, e = 1, p = 1, k = 1, ep = 1;\ - TYPE x3 = 1, y3 = 0, rd = 1, P, R, Rx, Ry, Pe = 2, Re = 2, PRe = 0.5;\ - size_t ix, iy, ptr = 0;\ - for (;;) {\ - while (stream->ptr < stream->frame_size) {\ - if (!eread_stream(stream, stream->frame_size - stream->ptr)) {\ - ewriteall(STDOUT_FILENO, buf, ptr * sizeof(*buf), "<stdout>");\ - return;\ - }\ - }\ - params = (TYPE *)stream->buf;\ - x1 = (params)[0];\ - y1 = (params)[1];\ - x2 = (params)[4];\ - y2 = (params)[5];\ - if (with_vector) {\ - x3 = (params)[8];\ - y3 = (params)[9];\ - Pe = (params)[12];\ - Re = (params)[13];\ - rd = (params)[14];\ - PRe = 1 / sqrt(Pe * Re);\ - b = sqrt(x3 * x3 + y3 * y3);\ - x3 /= b;\ - y3 /= b;\ - }\ - if (with_params) {\ - a = (params)[with_vector ? 16 : 8];\ - e = (params)[with_vector ? 17 : 9];\ - p = (params)[with_vector ? 18 : 10];\ - k = (params)[with_vector ? 19 : 11];\ - ep = 1 / (e * p);\ - }\ - memmove(stream->buf, stream->buf + stream->frame_size,\ - stream->ptr -= stream->frame_size);\ - \ - x2 -= x1;\ - y2 -= y1;\ - u = atan2(y2, x2);\ - b = sqrt(x2 * x2 + y2 * y2);\ - b *= (TYPE)spirals;\ - if (logarithmic)\ - b = log(b);\ - b /= pow(2 * (TYPE)M_PI, e);\ - \ - for (iy = 0; iy < height; iy++) {\ - y = (TYPE)iy - y1;\ - for (ix = 0; ix < width; ix++) {\ - x = (TYPE)ix - x1;\ - if (!x && !y) {\ - v = 0;\ - } else {\ - v = atan2(y, x);\ - if (anticlockwise)\ - v = -v;\ - v -= u;\ - v += 4 * (TYPE)M_PI;\ - v = mod(v, 2 * (TYPE)M_PI);\ - }\ - if (!with_vector) {\ - r = sqrt(x * x + y * y);\ - } else {\ - P = x * x3 + y * y3;\ - Rx = x - P * x3;\ - Ry = y - P * y3;\ - R = sqrt(Rx * Rx + Ry * Ry) / rd;\ - P = pow(abs(P), Pe);\ - R = pow(abs(R), Re);\ - r = pow(P + R, PRe);\ - }\ - r -= a;\ - if (!logarithmic) {\ - r = pow(r / b, ep);\ - r = (r - v) / (2 * (TYPE)M_PI);\ - } else if (r) {\ - r = log(r / k);\ - r = pow(r / b, ep);\ - r = (r - v) / (2 * (TYPE)M_PI);\ - }\ - if (angle)\ - r = (TYPE)(int)(r + 1) + v / (2 * (TYPE)M_PI); \ - else\ - r = mod(r, 1 / (TYPE)spirals) * (TYPE)spirals + r - mod(r, (TYPE)1);\ - buf[ptr][0] = buf[ptr][1] = buf[ptr][2] = buf[ptr][3] = r;\ - if (++ptr == ELEMENTSOF(buf)) {\ - ewriteall(STDOUT_FILENO, buf, sizeof(buf), "<stdout>");\ - ptr = 0;\ - }\ - }\ - }\ - }\ - } - -PROCESS(double, lf) -PROCESS(float, f) +#define FILE "blind-spiral-gradient.c" +#include "define-functions.h" int main(int argc, char *argv[]) @@ -173,3 +74,106 @@ main(int argc, char *argv[]) process(&stream); return 0; } + +#else + +static void +PROCESS(struct stream *stream) +{ + typedef TYPE pixel_t[4]; + pixel_t buf[BUFSIZ / sizeof(pixel_t)]; + TYPE *params, x1, y1, x2, y2, b, r, u, v; + TYPE x, y, a = 0, e = 1, p = 1, k = 1, ep = 1; + TYPE x3 = 1, y3 = 0, rd = 1, P, R, Rx, Ry, Pe = 2, Re = 2, PRe = 0.5; + size_t ix, iy, ptr = 0; + for (;;) { + while (stream->ptr < stream->frame_size) { + if (!eread_stream(stream, stream->frame_size - stream->ptr)) { + ewriteall(STDOUT_FILENO, buf, ptr * sizeof(*buf), "<stdout>"); + return; + } + } + params = (TYPE *)stream->buf; + x1 = (params)[0]; + y1 = (params)[1]; + x2 = (params)[4]; + y2 = (params)[5]; + if (with_vector) { + x3 = (params)[8]; + y3 = (params)[9]; + Pe = (params)[12]; + Re = (params)[13]; + rd = (params)[14]; + PRe = 1 / sqrt(Pe * Re); + b = sqrt(x3 * x3 + y3 * y3); + x3 /= b; + y3 /= b; + } + if (with_params) { + a = (params)[with_vector ? 16 : 8]; + e = (params)[with_vector ? 17 : 9]; + p = (params)[with_vector ? 18 : 10]; + k = (params)[with_vector ? 19 : 11]; + ep = 1 / (e * p); + } + memmove(stream->buf, stream->buf + stream->frame_size, + stream->ptr -= stream->frame_size); + + x2 -= x1; + y2 -= y1; + u = atan2(y2, x2); + b = sqrt(x2 * x2 + y2 * y2); + b *= (TYPE)spirals; + if (logarithmic) + b = log(b); + b /= pow(2 * (TYPE)M_PI, e); + + for (iy = 0; iy < height; iy++) { + y = (TYPE)iy - y1; + for (ix = 0; ix < width; ix++) { + x = (TYPE)ix - x1; + if (!x && !y) { + v = 0; + } else { + v = atan2(y, x); + if (anticlockwise) + v = -v; + v -= u; + v += 4 * (TYPE)M_PI; + v = mod(v, 2 * (TYPE)M_PI); + } + if (!with_vector) { + r = sqrt(x * x + y * y); + } else { + P = x * x3 + y * y3; + Rx = x - P * x3; + Ry = y - P * y3; + R = sqrt(Rx * Rx + Ry * Ry) / rd; + P = pow(abs(P), Pe); + R = pow(abs(R), Re); + r = pow(P + R, PRe); + } + r -= a; + if (!logarithmic) { + r = pow(r / b, ep); + r = (r - v) / (2 * (TYPE)M_PI); + } else if (r) { + r = log(r / k); + r = pow(r / b, ep); + r = (r - v) / (2 * (TYPE)M_PI); + } + if (angle) + r = (TYPE)(int)(r + 1) + v / (2 * (TYPE)M_PI); + else + r = mod(r, 1 / (TYPE)spirals) * (TYPE)spirals + r - mod(r, (TYPE)1); + buf[ptr][0] = buf[ptr][1] = buf[ptr][2] = buf[ptr][3] = r; + if (++ptr == ELEMENTSOF(buf)) { + ewriteall(STDOUT_FILENO, buf, sizeof(buf), "<stdout>"); + ptr = 0; + } + } + } + } +} + +#endif |
