summaryrefslogtreecommitdiffstats
path: root/kscreensaver/xsavers/xlock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kscreensaver/xsavers/xlock.cpp')
-rw-r--r--kscreensaver/xsavers/xlock.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/kscreensaver/xsavers/xlock.cpp b/kscreensaver/xsavers/xlock.cpp
new file mode 100644
index 00000000..7e7634db
--- /dev/null
+++ b/kscreensaver/xsavers/xlock.cpp
@@ -0,0 +1,86 @@
+//----------------------------------------------------------------------------
+// This module contains code to interface original xlock savers to
+// kscreensave
+//
+
+#include <time.h>
+#include <qapplication.h>
+#include "xlock.h"
+
+
+int screen;
+Display *dsp;
+perscreen Scr[MAXSCREENS];
+int batchcount = 100;
+int cycles = 100;
+Bool mono = 0;
+//Bool allowroot = 0;
+char *ProgramName;
+/*
+Dr. Park's algorithm published in the Oct. '88 ACM
+"Random Number Generators: Good Ones Are Hard To Find"
+His version available at ftp://cs.wm.edu/pub/rngs.tar
+Present form by many authors.
+*/
+
+static int Seed = 1; /* This is required to be 32 bits long */
+
+/*
+ * Given an integer, this routine initializes the RNG seed.
+ */
+void SetRNG(long s)
+{
+ Seed = (int) s;
+}
+
+/*
+ * Returns an integer between 0 and 2147483647, inclusive.
+ */
+long LongRNG()
+{
+ if ((Seed = Seed % 44488 * 48271 - Seed / 44488 * 3399) < 0)
+ Seed += 2147483647;
+ return (long) (Seed - 1);
+}
+
+unsigned long
+allocpixel(Colormap cmap, const char *name, const char *def)
+{
+ XColor col;
+ XColor tmp;
+ XParseColor(dsp, cmap, name, &col);
+ if (!XAllocColor(dsp, cmap, &col))
+ {
+ fprintf(stderr, "couldn't allocate: %s, using %s instead\n", name, def);
+ XAllocNamedColor(dsp, cmap, def, &col, &tmp);
+ }
+
+ return col.pixel;
+}
+
+void initXLock( GC gc )
+{
+ SetRNG( time(NULL) );
+
+ dsp = qt_xdisplay();
+ screen = qt_xscreen();
+
+ Screen *scr = ScreenOfDisplay(dsp, screen);
+
+ Scr[0].gc = gc;
+ Scr[0].npixels = NUMCOLORS;
+ Scr[0].cmap = None;
+
+ Colormap cmap = DefaultColormapOfScreen(scr);
+ Scr[0].bgcol = allocpixel(cmap, "background", "White");
+ Scr[0].bgcol = allocpixel(cmap, "foreground", "Black");
+
+ QColor color;
+
+ for ( int i = 0; i < NUMCOLORS; i++ )
+ {
+ color.setHsv( i * 360 / NUMCOLORS, 255, 255 );
+ Scr[0].pixels[i] = color.alloc();
+ }
+}
+