- Display *display = MI_DISPLAY(mi);
- Window window = MI_WINDOW(mi);
- GC gc = MI_GC(mi);
- int i;
- FRACTAL *Fractal;
-
- if (Root == NULL) {
- Root = (FRACTAL *) calloc(
- MI_NUM_SCREENS(mi), sizeof (FRACTAL));
- if (Root == NULL)
- return;
- }
- Fractal = &Root[MI_SCREEN(mi)];
-
- free_ifs_buffers(Fractal);
- i = (NRAND(4)) + 2; /* Number of centers */
- switch (i) {
- case 3:
- Fractal->Depth = MAX_DEPTH_3;
- Fractal->r_mean = .6;
- Fractal->dr_mean = .4;
- Fractal->dr2_mean = .3;
- break;
-
- case 4:
- Fractal->Depth = MAX_DEPTH_4;
- Fractal->r_mean = .5;
- Fractal->dr_mean = .4;
- Fractal->dr2_mean = .3;
- break;
-
- case 5:
- Fractal->Depth = MAX_DEPTH_5;
- Fractal->r_mean = .5;
- Fractal->dr_mean = .4;
- Fractal->dr2_mean = .3;
- break;
-
- default:
- case 2:
- Fractal->Depth = MAX_DEPTH_2;
- Fractal->r_mean = .7;
- Fractal->dr_mean = .3;
- Fractal->dr2_mean = .4;
- break;
- }
- /* (void) fprintf( stderr, "N=%d\n", i ); */
- Fractal->Nb_Simi = i;
- Fractal->Max_Pt = Fractal->Nb_Simi - 1;
- for (i = 0; i <= Fractal->Depth + 2; ++i)
- Fractal->Max_Pt *= Fractal->Nb_Simi;
-
- if ((Fractal->Buffer1 = (XPoint *) calloc(Fractal->Max_Pt,
- sizeof (XPoint))) == NULL) {
- free_ifs(display, Fractal);
- return;
- }
- if ((Fractal->Buffer2 = (XPoint *) calloc(Fractal->Max_Pt,
- sizeof (XPoint))) == NULL) {
- free_ifs(display, Fractal);
- return;
- }
- Fractal->Speed = 6;
- Fractal->Width = MI_WIDTH(mi);
- Fractal->Height = MI_HEIGHT(mi);
- Fractal->Cur_Pt = 0;
- Fractal->Count = 0;
- Fractal->Lx = (Fractal->Width - 1) / 2;
- Fractal->Ly = (Fractal->Height - 1) / 2;
- Fractal->Col = NRAND(MI_NPIXELS(mi) - 1) + 1;
-
- Random_Simis(Fractal, Fractal->Components, 5 * MAX_SIMI);
-
-#ifndef NO_DBUF
- if (Fractal->dbuf != None)
- XFreePixmap(display, Fractal->dbuf);
- Fractal->dbuf = XCreatePixmap(display, window,
- Fractal->Width, Fractal->Height, 1);
- /* Allocation checked */
- if (Fractal->dbuf != None) {
- XGCValues gcv;
-
- gcv.foreground = 0;
- gcv.background = 0;
- gcv.graphics_exposures = False;
- gcv.function = GXcopy;
-
- if (Fractal->dbuf_gc != None)
- XFreeGC(display, Fractal->dbuf_gc);
- if ((Fractal->dbuf_gc = XCreateGC(display, Fractal->dbuf,
- GCForeground | GCBackground | GCGraphicsExposures | GCFunction,
- &gcv)) == None) {
- XFreePixmap(display, Fractal->dbuf);
- Fractal->dbuf = None;
- } else {
- XFillRectangle(display, Fractal->dbuf,
- Fractal->dbuf_gc, 0, 0, Fractal->Width, Fractal->Height);
- XSetBackground(display, gc, MI_BLACK_PIXEL(mi));
- XSetFunction(display, gc, GXcopy);
- }
- }
-#endif
- MI_CLEARWINDOW(mi);
-
- /* don't want any exposure events from XCopyPlane */
- XSetGraphicsExposures(display, gc, False);
-