+ int i, j;
+ pixack_frame(st, st->pd);
+ for (i = 0; i < st->array_width; i += st->width)
+ for (j = 0; j < st->array_height; j += st->height)
+ put_xshm_image(st->dpy, st->window, st->gc, st->image, 0, 0, i+st->array_x, j+st->array_y,
+ st->width, st->height, &st->shm_info);
+
+ st->array_x += st->array_dx;
+ st->array_y += st->array_dy;
+ if (st->array_x < 0) {
+ st->array_x = 0;
+ st->array_dx = -st->array_dx;
+ bump = True;
+ } else if (st->array_x > (st->xgwa.width - st->array_width)) {
+ st->array_x = (st->xgwa.width - st->array_width);
+ st->array_dx = -st->array_dx;
+ bump = True;
+ }
+ if (st->array_y < 0) {
+ st->array_y = 0;
+ st->array_dy = -st->array_dy;
+ bump = True;
+ } else if (st->array_y > (st->xgwa.height - st->array_height)) {
+ st->array_y = (st->xgwa.height - st->array_height);
+ st->array_dy = -st->array_dy;
+ bump = True;
+ }
+
+ if (bump) {
+ if (random() & 1) {
+ double swap = st->array_dx;
+ st->array_dx = st->array_dy;
+ st->array_dy = swap;