- XSetWindowBackground(dpy, win, colors[255 % ncolors].pixel);
- XClearWindow(dpy, win);
-
- s = w2 * height/2 + width/2;
- radius = get_integer_resource ("radius", "Integer");
- if (radius < 0)
- radius = 1 + ((R%10) ? (R%5) : (R % (width/2-2)));
- for (i = -radius; i < (radius+1); i++)
- for (j = -radius; j < (radius+1); j++)
- r2[s + i + j*w2] = mx - (R&63);
- reaction = get_integer_resource ("reaction", "Integer");
- if (reaction < 0 || reaction > 2) reaction = R&1;
- diffusion = get_integer_resource ("diffusion", "Integer");
- if (diffusion < 0 || diffusion > 2)
- diffusion = (R%5) ? ((R%3)?0:1) : 2;
- if (2 == reaction && 2 == diffusion)
- reaction = diffusion = 0;
-
-/* if (verbose)
- printf("reaction = %d\ndiffusion = %d\n"
- "palette = %d\nradius = %d\n",
- reaction, diffusion, palette, radius);
-*/
- }
- for (i = 0; i <= width+1; i++) {
- r1[i] = r1[i + w2 * height];
- r2[i] = r2[i + w2 * height];
- r1[i + w2 * (height + 1)] = r1[i + w2];
- r2[i + w2 * (height + 1)] = r2[i + w2];
- }
- for (i = 0; i <= height+1; i++) {
- r1[w2 * i] = r1[width + w2 * i];
- r2[w2 * i] = r2[width + w2 * i];
- r1[w2 * i + width + 1] = r1[w2 * i + 1];
- r2[w2 * i + width + 1] = r2[w2 * i + 1];
- }
- for (i = 0; i < height; i++) {
- int ii = i + 1;
- char *q = p + width * i;
- short *qq = ((short *) p) + width * i;
- long *qqq = ((long *) p) + width * i;
- ushort *i1 = r1 + 1 + w2 * ii;
- ushort *i2 = r2 + 1 + w2 * ii;
- ushort *o1 = r1b + 1 + w2 * ii;
- ushort *o2 = r2b + 1 + w2 * ii;
- for (j = 0; j < width; j++) {
-#if test_pattern_hyper
- int r1 = (i * j + (frame&127)*frame)&65535;
-#else
- int uvv, r1 = 0, r2 = 0;
- switch (diffusion) {
- case 0:
- r1 = i1[j] + i1[j+1] + i1[j-1] + i1[j+w2] + i1[j-w2];
- r1 = r1 / 5;
- r2 = (i2[j]<<3) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2];
- r2 = r2 / 12;
- break;
- case 1:
- r1 = i1[j+1] + i1[j-1] + i1[j+w2] + i1[j-w2];
- r1 = r1 >> 2;
- r2 = (i2[j]<<2) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2];
- r2 = r2 >> 3;
- break;
- case 2:
- r1 = (i1[j]<<1) + (i1[j+1]<<1) + (i1[j-1]<<1) + i1[j+w2] + i1[j-w2];
- r1 = r1 >> 3;
- r2 = (i2[j]<<2) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2];
- r2 = r2 >> 3;
- break;
- }
- uvv = (((r1 * r2) >> bps) * r2) >> bps;
- switch (reaction) { /* costs 4% */
- case 0:
- r1 += 4 * (((28 * (mx-r1)) >> 10) - uvv);
- r2 += 4 * (uvv - ((80 * r2) >> 10));
- break;
- case 1:
- r1 += 3 * (((27 * (mx-r1)) >> 10) - uvv);
- r2 += 3 * (uvv - ((80 * r2) >> 10));
- break;
- case 2:
- r1 += 2 * (((28 * (mx-r1)) >> 10) - uvv);
- r2 += 3 * (uvv - ((80 * r2) >> 10));
- break;
- }
- if (r1 > mx) r1 = mx;
- if (r2 > mx) r2 = mx;
- if (r1 < 0) r1 = 0;
- if (r2 < 0) r2 = 0;
- o1[j] = r1;
- o2[j] = r2;
-#endif