/* -*- Mode: C; tab-width: 4 -*- */
/* laser --- spinning lasers */
-#if !defined( lint ) && !defined( SABER )
+#if 0
static const char sccsid[] = "@(#)laser.c 5.00 2000/11/01 xlockmore";
-
#endif
/*-
*/
#ifdef STANDALONE
-#define MODE_laser
-#define PROGCLASS "Laser"
-#define HACK_INIT init_laser
-#define HACK_DRAW draw_laser
-#define laser_opts xlockmore_opts
-#define DEFAULTS "*delay: 40000 \n" \
- "*count: 10 \n" \
- "*cycles: 200 \n" \
- "*ncolors: 64 \n"
-#define BRIGHT_COLORS
-#include "xlockmore.h" /* in xscreensaver distribution */
+# define MODE_laser
+# define DEFAULTS "*delay: 40000 \n" \
+ "*count: 10 \n" \
+ "*cycles: 200 \n" \
+ "*ncolors: 64 \n" \
+ "*fpsSolid: true \n" \
+
+# define BRIGHT_COLORS
+# define release_laser 0
+# define reshape_laser 0
+# define laser_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_laser
-ModeSpecOpt laser_opts =
+ENTRYPOINT ModeSpecOpt laser_opts =
{0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL};
#ifdef USE_MODULES
ModStruct laser_description =
-{"laser", "init_laser", "draw_laser", "release_laser",
- "refresh_laser", "init_laser", (char *) NULL, &laser_opts,
+{"laser", "init_laser", "draw_laser", (char *) NULL,
+ "refresh_laser", "init_laser", "free_laser", &laser_opts,
20000, -10, 200, 1, 64, 1.0, "",
"Shows spinning lasers", 0, NULL};
static lasersstruct *lasers = (lasersstruct *) NULL;
-static void
-free_laser(Display *display, lasersstruct *lp)
+ENTRYPOINT void
+free_laser(ModeInfo * mi)
{
+ Display *display = MI_DISPLAY(mi);
+ lasersstruct *lp = &lasers[MI_SCREEN(mi)];
+
if (lp->laser != NULL) {
(void) free((void *) lp->laser);
lp->laser = (laserstruct *) NULL;
}
}
-void
+ENTRYPOINT void
init_laser(ModeInfo * mi)
{
Display *display = MI_DISPLAY(mi);
int i, c = 0;
lasersstruct *lp;
- if (lasers == NULL) {
- if ((lasers = (lasersstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (lasersstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, lasers);
lp = &lasers[MI_SCREEN(mi)];
lp->width = MI_WIDTH(mi);
if (lp->laser == NULL) {
if ((lp->laser = (laserstruct *) malloc(lp->ln *
sizeof (laserstruct))) == NULL) {
- free_laser(display, lp);
+ free_laser(mi);
return;
}
}
lp->gcv_black.foreground = MI_BLACK_PIXEL(mi);
if ((lp->stippledGC = XCreateGC(display, MI_WINDOW(mi),
GCForeground | GCBackground, &gcv)) == None) {
- free_laser(display, lp);
+ free_laser(mi);
return;
}
+# ifdef HAVE_JWXYZ
+ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), lp->stippledGC, False);
+# endif
}
MI_CLEARWINDOW(mi);
lp->so = (lp->so + 1) % lp->lw;
}
-void
+ENTRYPOINT void
draw_laser(ModeInfo * mi)
{
int i;
init_laser(mi);
}
-void
-release_laser(ModeInfo * mi)
-{
- if (lasers != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_laser(MI_DISPLAY(mi), &lasers[screen]);
- (void) free((void *) lasers);
- lasers = (lasersstruct *) NULL;
- }
-}
-
-void
+#ifndef STANDALONE
+ENTRYPOINT void
refresh_laser(ModeInfo * mi)
{
MI_CLEARWINDOW(mi);
}
+#endif
+
+XSCREENSAVER_MODULE ("Laser", laser)
#endif /* MODE_laser */