#endif
/*-
- * Copyright (c) 1996 by Tim Auckland <Tim.Auckland@Procket.com>
+ * Copyright (c) 1996 by Tim Auckland <tda10.geo@yahoo.com>
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted,
*/
#ifdef STANDALONE
-#define MODE_thornbird
-#define PROGCLASS "Thornbird"
-#define HACK_INIT init_thornbird
-#define HACK_DRAW draw_thornbird
-#define thornbird_opts xlockmore_opts
-#define DEFAULTS "*delay: 10000 \n" \
- "*count: 800 \n" \
- "*cycles: 16 \n" \
- "*ncolors: 64 \n"
-#define SMOOTH_COLORS
-#include "xlockmore.h" /* in xscreensaver distribution */
+# define MODE_thornbird
+#define DEFAULTS "*delay: 10000 \n" \
+ "*count: 100 \n" \
+ "*cycles: 400 \n" \
+ "*ncolors: 64 \n" \
+ "*fpsSolid: true \n" \
+ "*ignoreRotation: True \n" \
+ "*lowrez: True \n" \
+
+# define BRIGHT_COLORS
+# define release_thornbird 0
+# define reshape_thornbird 0
+# define thornbird_handle_event 0
+# include "xlockmore.h" /* in xscreensaver distribution */
#else /* STANDALONE */
-#include "xlock.h" /* in xlockmore distribution */
+# include "xlock.h" /* in xlockmore distribution */
#endif /* STANDALONE */
#ifdef MODE_thornbird
-ModeSpecOpt thornbird_opts =
+ENTRYPOINT ModeSpecOpt thornbird_opts =
{0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL};
#ifdef USE_MODULES
ModStruct thornbird_description =
-{"thornbird", "init_thornbird", "draw_thornbird", "release_thornbird",
- "refresh_thornbird", "init_thornbird", (char *) NULL, þbird_opts,
+{"thornbird", "init_thornbird", "draw_thornbird", (char *) NULL,
+ "refresh_thornbird", "init_thornbird", "free_thornbird", þbird_opts,
1000, 800, 16, 1, 64, 1.0, "",
"Shows an animated Bird in a Thorn Bush fractal map", 0, NULL};
static thornbirdstruct *thornbirds = (thornbirdstruct *) NULL;
-static void
-free_thornbird(thornbirdstruct *hp)
+ENTRYPOINT void
+free_thornbird(ModeInfo * mi)
{
+ thornbirdstruct *hp = þbirds[MI_SCREEN(mi)];
if (hp->pointBuffer != NULL) {
int buffer;
}
}
-void
-init_thornbird(ModeInfo * mi)
+ENTRYPOINT void
+init_thornbird (ModeInfo * mi)
{
thornbirdstruct *hp;
- if (thornbirds == NULL) {
- if ((thornbirds =
- (thornbirdstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (thornbirdstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, thornbirds);
hp = þbirds[MI_SCREEN(mi)];
if (hp->pointBuffer == NULL)
if ((hp->pointBuffer = (XPoint **) calloc(MI_CYCLES(mi),
sizeof (XPoint *))) == NULL) {
- free_thornbird(hp);
+ free_thornbird(mi);
return;
}
if (hp->pointBuffer[0] == NULL)
if ((hp->pointBuffer[0] = (XPoint *) malloc(MI_COUNT(mi) *
sizeof (XPoint))) == NULL) {
- free_thornbird(hp);
+ free_thornbird(mi);
return;
}
}
-void
+ENTRYPOINT void
draw_thornbird(ModeInfo * mi)
{
Display *dsp = MI_DISPLAY(mi);
MI_IS_DRAWN(mi) = True;
+ if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1;
if (hp->pointBuffer[erase] == NULL) {
if ((hp->pointBuffer[erase] = (XPoint *) malloc(MI_COUNT(mi) *
sizeof (XPoint))) == NULL) {
- free_thornbird(hp);
+ free_thornbird(mi);
return;
}
} else {
}
if (MI_NPIXELS(mi) > 2) {
XSetForeground(dsp, gc, MI_PIXEL(mi, hp->pix));
+#if 0
if (erase == 0) /* change colours after "cycles" cycles */
+#else
+ if (!((hp->inc + 1) % (1 + (MI_CYCLES(mi) / 3)))) /* jwz: sooner */
+#endif
if (++hp->pix >= MI_NPIXELS(mi))
hp->pix = 0;
} else
XDrawPoints(dsp, win, gc, hp->pointBuffer[current],
batchcount, CoordModeOrigin);
hp->inc++;
-
}
-void
-release_thornbird(ModeInfo * mi)
-{
- if (thornbirds != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_thornbird(þbirds[screen]);
- (void) free((void *) thornbirds);
- thornbirds = (thornbirdstruct *) NULL;
- }
-}
-
-void
-refresh_thornbird(ModeInfo * mi)
+#ifndef STANDALONE
+ENTRYPOINT void
+refresh_thornbird (ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+#endif
+
+
+XSCREENSAVER_MODULE ("Thornbird", thornbird)
#endif /* MODE_thornbird */