-static Colormap cmap;
-static int ncolors;
-static XColor *colors;
-static Bool cycle_p;
-static int cycle_direction;
-static Bool extra_krinkly_p;
-
-static int delay, cycle_delay;
-static signed char *cell = NULL;
-static int xmax, ymax;
-static int iterations;
-
-static void
-init_map (Display *dpy, Window window)
-{
- unsigned long fg_pixel = 0, bg_pixel = 0;
- int fg_h, bg_h;
- double fg_s, fg_v, bg_s, bg_v;
-
- enum mode_t this_mode;
- static Bool rv_p;
-
- XGCValues gcv;
-
- XGetWindowAttributes (dpy, window, &xgwa);
- cmap = xgwa.colormap;
-
- if (!ncolors)
- {
- char *mode_str = get_string_resource ("mode", "Mode");
- rv_p = get_boolean_resource ("reverseVideo", "ReverseVideo");
- cycle_p = get_boolean_resource ("cycle", "Cycle");
- ncolors = get_integer_resource ("ncolors", "Integer");
- delay = get_integer_resource ("delay", "Integer");
- cycle_delay = get_integer_resource ("cycleDelay", "Integer");
- iterations = get_integer_resource ("iterations", "Integer");
- if (iterations < 0) iterations = 0;
- else if (iterations > 7) iterations = 7;
-
- if (ncolors <= 2) ncolors = 0;
- if (ncolors == 0) mono_p = True;
-
- fg_pixel = get_pixel_resource ("background", "Background", dpy, cmap);
- bg_pixel = get_pixel_resource ("foreground", "Foreground", dpy, cmap);
-
- if (fg_pixel == bg_pixel)
- {
- XColor black, white;
- black.red = black.green = black.blue = 0;
- white.red = white.green = white.blue = 0xFFFF;
- black.flags = white.flags = DoRed|DoGreen|DoBlue;
- XAllocColor(dpy, cmap, &black);
- XAllocColor(dpy, cmap, &white);
- if (bg_pixel == black.pixel)
- fg_pixel = white.pixel;
- else
- fg_pixel = black.pixel;
- }
-
- if (mono_p) cycle_p = False;
-
- gcv.foreground = fg_pixel;
- gcv.background = bg_pixel;
- gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv);
- gcv.foreground = bg_pixel;
- gc2 = XCreateGC (dpy, window, GCForeground, &gcv);
-
- if (!mode_str || !strcmp (mode_str, "random"))
- mode = MODE_RANDOM;
- else if (!strcmp (mode_str, "h") || !strcmp (mode_str, "hue"))
- mode = MODE_H;
- else if (!strcmp (mode_str, "s") || !strcmp (mode_str, "saturation"))
- mode = MODE_S;
- else if (!strcmp (mode_str, "v") || !strcmp (mode_str, "value"))
- mode = MODE_V;
- else
- {
- fprintf (stderr,
- "%s: mode must be hue, saturation, value, or random, not \"%s\"\n",
- progname, mode_str);
- mode = MODE_RANDOM;
- }
- }
-
- this_mode = mode;
- if (!mono_p && mode == MODE_RANDOM)
- switch (random () % 6) {
- case 0: this_mode = MODE_H; break;
- case 1: this_mode = MODE_S; break;
- case 2: this_mode = MODE_V; break;
- default: break;
- }