URI: 
       Add mod to blind-arithm - blind - suckless command-line video editing utility
  HTML git clone git://git.suckless.org/blind
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit c91c5cb8e892f1c19c970cef033cc03c9f47f98a
   DIR parent b3042abffb9f4e4c7edd16934af99716bcdc2901
  HTML Author: Mattias Andrée <maandree@kth.se>
       Date:   Sun,  2 Jul 2017 17:30:22 +0200
       
       Add mod to blind-arithm
       
       Signed-off-by: Mattias Andrée <maandree@kth.se>
       
       Diffstat:
         M man/blind-arithm.1                  |       4 ++++
         M src/blind-arithm.c                  |       1 +
         M src/video-math.h                    |      16 ++++++++++++++++
       
       3 files changed, 21 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/man/blind-arithm.1 b/man/blind-arithm.1
       @@ -41,6 +41,10 @@ Calculate the product of the operands.
        .B div
        Divide the left-hand operand by the right-hand operand.
        .TP
       +.B mod
       +Calculate the modulus of left-hand operand and the right-hand operand.
       +The result is always non-negative.
       +.TP
        .B exp
        Raise the left-hand operand to the
        .IR n th
   DIR diff --git a/src/blind-arithm.c b/src/blind-arithm.c
       @@ -16,6 +16,7 @@ typedef void (*process_func)(struct stream *left, struct stream *right, size_t n
                X(sub, *lh -= rh,                  PIXFMT, TYPE)\
                X(mul, *lh *= rh,                  PIXFMT, TYPE)\
                X(div, *lh /= rh,                  PIXFMT, TYPE)\
       +        X(mod, *lh = posmod(*lh, rh),      PIXFMT, TYPE)\
                X(exp, *lh = pow(*lh, rh),         PIXFMT, TYPE)\
                X(log, *lh = log2(*lh) / log2(rh), PIXFMT, TYPE)\
                X(min, *lh = MIN(*lh, rh),         PIXFMT, TYPE)\
   DIR diff --git a/src/video-math.h b/src/video-math.h
       @@ -17,6 +17,20 @@ nnpowf(float a, float b)
                return neg ? -a : a;
        }
        
       +static inline double
       +posmod(double a, double b)
       +{
       +        double x = fmod(a, b);
       +        return x < 0 ? x + b : x;
       +}
       +
       +static inline float
       +posmodf(float a, float b)
       +{
       +        float x = fmodf(a, b);
       +        return x < 0 ? x + b : x;
       +}
       +
        #define GENERIC(TYPE, FUNC, ...)\
                TYPE:           FUNC(__VA_ARGS__),\
                TYPE *:         FUNC(__VA_ARGS__),\
       @@ -52,6 +66,8 @@ nnpowf(float a, float b)
        #define g_isinf(...)     MATH_GENERIC_1(isinf,    __VA_ARGS__)
        #define g_isfinite(...)  MATH_GENERIC_1(isfinite, __VA_ARGS__)
        #define nnpow(...)       MATH_GENERIC_N(nnpow,    __VA_ARGS__)
       +#define mod(...)         MATH_GENERIC_N(fmod,     __VA_ARGS__)
       +#define posmod(...)      MATH_GENERIC_N(posmod,   __VA_ARGS__)
        
        #define srgb_encode(...) BLIND_GENERIC_1(srgb_encode, __VA_ARGS__)
        #define srgb_decode(...) BLIND_GENERIC_1(srgb_decode, __VA_ARGS__)