there is handedness at both the initial condition and the transition rule.
*/
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
# define DO_STIPPLE
#endif
"*count: -5 \n" \
"*cycles: 1600 \n" \
"*size: -12 \n" \
- "*ncolors: 15 \n"
-# define UNIFORM_COLORS
+ "*ncolors: 15 \n" \
+ "*fpsSolid: true \n" \
+ "*ignoreRotation: True \n" \
+ ".lowrez: True \n" \
+
# define reshape_loop 0
# define loop_handle_event 0
+# define UNIFORM_COLORS
# include "xlockmore.h" /* in xscreensaver distribution */
#else /* STANDALONE */
# include "xlock.h" /* in xlockmore distribution */
#ifdef USE_MODULES
ModStruct loop_description =
{"loop", "init_loop", "draw_loop", "release_loop",
- "refresh_loop", "init_loop", (char *) NULL, &loop_opts,
+ "refresh_loop", "init_loop", "free_loop", &loop_opts,
100000, 5, 1600, -12, 64, 1.0, "",
"Shows Langton's self-producing loops", 0, NULL};
#define LOOPBITS(n,w,h)\
if ((lp->pixmaps[lp->init_bits]=\
- XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1))==None){\
- free_loop(display,lp); return;} else {lp->init_bits++;}
+ XCreatePixmapFromBitmapData(MI_DISPLAY(mi),window,(char *)n,w,h,1,0,1))==None){\
+ free_loop(mi); return;} else {lp->init_bits++;}
static int local_neighbors = 0;
#define HEX_ADAM_LOOPY 7
#endif
#define HEX_MINGRIDSIZE (6*HEX_ADAM_LOOPX)
-#define MINSIZE ((MI_NPIXELS(mi)>=COLORS)?1:(2+(local_neighbors==6)))
+/* #define MINSIZE ((MI_NPIXELS(mi)>=COLORS)?1:(2+(local_neighbors==6))) */
+#define MINSIZE 5
#define NEIGHBORKINDS 2
#define ANGLES 360
#define MAXNEIGHBORS 6
free_state(lp, state);
}
-static void
-free_loop(Display *display, loopstruct * lp)
+ENTRYPOINT void
+free_loop(ModeInfo * mi)
{
+ Display *display = MI_DISPLAY(mi);
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
int shade;
for (shade = 0; shade < lp->init_bits; shade++)
if ((lp->cellList[state] = (CellList *) malloc(sizeof (CellList))) ==
NULL) {
lp->cellList[state] = current;
- free_loop(MI_DISPLAY(mi), lp);
+ free_loop(mi);
return False;
}
lp->cellList[state]->pt.x = col;
ENTRYPOINT void
release_loop (ModeInfo * mi)
{
- if (loops != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_loop(MI_DISPLAY(mi), &loops[screen]);
- (void) free((void *) loops);
- loops = (loopstruct *) NULL;
- }
if (table != NULL) {
(void) free((void *) table);
table = (unsigned int *) NULL;
ENTRYPOINT void
init_loop (ModeInfo * mi)
{
- Display *display = MI_DISPLAY(mi);
int i, size = MI_SIZE(mi);
loopstruct *lp;
stop_warning_about_triangleUnit_already = (void *) &triangleUnit;
- if (loops == NULL) {
- if ((loops = (loopstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (loopstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, loops);
lp = &loops[MI_SCREEN(mi)];
lp->redrawing = 0;
+ if (MI_WIDTH(mi) < 100 || MI_HEIGHT(mi) < 100) /* tiny window */
+ size = MIN(MI_WIDTH(mi), MI_HEIGHT(mi));
+
#ifdef DO_STIPPLE
if ((MI_NPIXELS(mi) < COLORS) && (lp->init_bits == 0)) {
Window window = MI_WINDOW(mi);
XGCValues gcv;
if (lp->stippledGC == None) {
gcv.fill_style = FillOpaqueStippled;
- if ((lp->stippledGC = XCreateGC(display, window,
+ if ((lp->stippledGC = XCreateGC(MI_DISPLAY(mi), window,
GCFillStyle, &gcv)) == None) {
- free_loop(display, lp);
+ free_loop(mi);
return;
}
}
}
if ((lp->oldcells = (unsigned char *) calloc(lp->bncols * lp->bnrows,
sizeof (unsigned char))) == NULL) {
- free_loop(display, lp);
+ free_loop(mi);
return;
}
if (lp->newcells != NULL) {
}
if ((lp->newcells = (unsigned char *) calloc(lp->bncols * lp->bnrows,
sizeof (unsigned char))) == NULL) {
- free_loop(display, lp);
+ free_loop(mi);
return;
}
if (!init_table()) {
}
for (i = 0; i < COLORS; i++)
if (!draw_state(mi, i)) {
- free_loop(MI_DISPLAY(mi), lp);
+ free_loop(mi);
return;
}
if (++lp->generation > MI_CYCLES(mi) || lp->dead) {
}
}
+#ifndef STANDALONE
ENTRYPOINT void
refresh_loop (ModeInfo * mi)
{
lp->redrawing = 1;
lp->redrawpos = lp->by * lp->ncols + lp->bx;
}
+#endif
XSCREENSAVER_MODULE ("Loop", loop)