-void
-screenhack (Display *dpy, Window window)
-{
- GC fgc, bgc;
- XGCValues gcv;
- XWindowAttributes xgwa;
- int delay = get_integer_resource ("delay", "Integer");
- int cycle_delay = get_integer_resource ("cycleDelay", "Integer");
- Bool writable = get_boolean_resource ("cycle", "Boolean");
-
- max_depth = get_integer_resource ("maxDepth", "Integer");
- if (max_depth < 1) max_depth = 1;
- else if (max_depth > 1000) max_depth = 1000;
-
- min_width = get_integer_resource ("minWidth", "Integer");
- if (min_width < 2) min_width = 2;
- min_height = get_integer_resource ("minHeight", "Integer");
- if (min_height < 2) min_height = 2;
-
- XGetWindowAttributes (dpy, window, &xgwa);
-
- gcv.foreground = get_pixel_resource("foreground", "Foreground",
- dpy, xgwa.colormap);
- fgc = XCreateGC (dpy, window, GCForeground, &gcv);
-
- gcv.foreground = get_pixel_resource("background", "Background",
- dpy, xgwa.colormap);
- bgc = XCreateGC (dpy, window, GCForeground, &gcv);
-
- ncolors = get_integer_resource ("ncolors", "Integer");
-
- make_random_colormap (dpy, xgwa.visual, xgwa.colormap, colors, &ncolors,
- False, True, &writable, True);
-
- if (ncolors <= 2)
- mono_p = True;
-
- if (!mono_p)
- {
- GC tmp = fgc;
- fgc = bgc;
- bgc = tmp;
- }
-
- while (1)
- {
- XGetWindowAttributes (dpy, window, &xgwa);
- XFillRectangle(dpy, window, bgc, 0, 0, xgwa.width, xgwa.height);
- deco (dpy, window, xgwa.colormap, fgc, bgc,
- 0, 0, xgwa.width, xgwa.height, 0);
- XSync (dpy, False);
- screenhack_handle_events (dpy);
-
- if (!delay) continue;
- if (!writable)
- sleep (delay);
- else
- {
- time_t start = time((time_t) 0);
- while (start - delay < time((time_t) 0))
- {
- rotate_colors (dpy, xgwa.colormap, colors, ncolors, 1);
- XSync (dpy, False);
- screenhack_handle_events (dpy);
- if (cycle_delay)
- usleep (cycle_delay);
- }
- }
- }
-}