1 
2 #include <grass/gis.h>
3 #include <grass/raster.h>
4 #include <grass/calc.h>
5 
6 /****************************************************************
7 bitxor(a,b,c,...) = a ^ b ^ c ^ ...
8 ****************************************************************/
9 
f_bitxor(int argc,const int * argt,void ** args)10 int f_bitxor(int argc, const int *argt, void **args)
11 {
12     CELL *res = args[0];
13     CELL **argz = (CELL **) args;
14     int i, j;
15 
16     if (argc < 1)
17 	return E_ARG_LO;
18 
19     if (argt[0] != CELL_TYPE)
20 	return E_RES_TYPE;
21 
22     for (i = 1; i <= argc; i++)
23 	if (argt[i] != CELL_TYPE)
24 	    return E_ARG_TYPE;
25 
26     for (i = 0; i < columns; i++) {
27 	res[i] = 0;
28 	for (j = 1; j <= argc; j++) {
29 	    if (IS_NULL_C(&argz[j][i])) {
30 		SET_NULL_C(&res[i]);
31 		break;
32 	    }
33 	    res[i] ^= argz[j][i];
34 	}
35     }
36 
37     return 0;
38 }
39