http://packetstormsecurity.org/UNIX/admin/xscreensaver-3.29.tar.gz
[xscreensaver] / hacks / flag.c
index 643aff104e536d692dd534b377ee6c746dda6dbf..2ed9296e5aa50fed2872c54a5dd9b6b965b8e2c4 100644 (file)
@@ -27,7 +27,7 @@ static const char sccsid[] = "@(#)flag.c      4.02 97/04/01 xlockmore";
  * 22-Jan-98: jwz: made the flag wigglier; added xpm support.
  *            (I tried to do this by re-porting from xlockmore, but the
  *            current xlockmore version is completely inscrutable.)
- * 13-May-97: jwz@netscape.com: turned into a standalone program.
+ * 13-May-97: jwz@jwz.org: turned into a standalone program.
  *                       Made it able to animate arbitrary (runtime) text or bitmaps.
  * 01-May-96: written.
  */
@@ -71,10 +71,6 @@ static const char sccsid[] = "@(#)flag.c     4.02 97/04/01 xlockmore";
 #endif /* !STANDALONE */
 
 
-#if defined(VMS) && !defined(HAVE_UNAME) && (__VMS_VER >= 70000000)
-# define HAVE_UNAME 1
-#endif
-
 #ifdef HAVE_UNAME
 # include <sys/utsname.h>
 #endif /* HAVE_UNAME */
@@ -82,14 +78,15 @@ static const char sccsid[] = "@(#)flag.c    4.02 97/04/01 xlockmore";
 #ifdef STANDALONE
 static XrmOptionDescRec opts[] =
 {
-  { "-bitmap", ".flag.bitmap", XrmoptionSepArg, 0 }
+  { "-bitmap", ".flag.bitmap", XrmoptionSepArg, 0 },
+  { "-text",   ".flag.text",   XrmoptionSepArg, 0 }
 };
 
 #endif /* STANDALONE */
 
 ModeSpecOpt flag_opts = {
 #ifdef STANDALONE
-  1, opts, 0, NULL, NULL
+  2, opts, 0, NULL, NULL
 #else  /* !STANDALONE */
   0, NULL, 0, NULL, NULL
 #endif /* STANDALONE */
@@ -349,9 +346,15 @@ make_flag_bits(ModeInfo *mi)
                                *s = 0;
                          text = (char *) malloc(strlen(uts.nodename) +
                                                                         strlen(uts.sysname) +
+                                                                        strlen(uts.version) +
                                                                         strlen(uts.release) + 10);
+# ifdef _AIX
+                         sprintf(text, "%s\n%s %s.%s",
+                                         uts.nodename, uts.sysname, uts.version, uts.release);
+# else  /* !_AIX */
                          sprintf(text, "%s\n%s %s",
                                          uts.nodename, uts.sysname, uts.release);
+# endif /* !_AIX */
                        }
 #else  /* !HAVE_UNAME */
 # ifdef VMS
@@ -435,8 +438,10 @@ make_flag_bits(ModeInfo *mi)
        }
   else
        {
+      char *bits = (char *) malloc (sizeof(bob_bits));
+      memcpy (bits, bob_bits, sizeof(bob_bits));
          fp->image = XCreateImage (dpy, MI_VISUAL(mi), 1, XYBitmap, 0,
-                                                               (char *) bob_bits, bob_width, bob_height,
+                                                               bits, bob_width, bob_height,
                                                                8, 0);
          fp->image->byte_order = LSBFirst;
          fp->image->bitmap_bit_order = LSBFirst;
@@ -538,6 +543,9 @@ init_flag(ModeInfo * mi)
        XClearWindow(display, MI_WINDOW(mi));
 }
 
+void release_flag(ModeInfo * mi);
+
+
 void
 draw_flag(ModeInfo * mi)
 {
@@ -569,7 +577,10 @@ draw_flag(ModeInfo * mi)
        XFlush(display);
        fp->timer++;
        if ((MI_CYCLES(mi) > 0) && (fp->timer >= MI_CYCLES(mi)))
+      {
+        release_flag(mi);
                init_flag(mi);
+      }
 }
 
 void