http://www.jwz.org/xscreensaver/xscreensaver-5.07.tar.gz
[xscreensaver] / hacks / noseguy.c
index f6502bef5621059f5214e5291c52bf0debcfd939..970c6d4f25ef349251869d8f4f40fe979b39438f 100644 (file)
@@ -1,5 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1996, 1997, 1998, 2005, 2006
- *  Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -196,6 +195,17 @@ move (struct state *st)
                st->move_length = st->Width / 100 + random() % 90, tries = 8;
            else
                tries--;
+           /* There maybe the case that we won't be able to exit from
+              this routine (especially when the geometry is too small)!!
+
+              Ensure that we can exit from this routine.
+            */
+#if 1
+           if (!tries && (st->move_length <= 1)) {
+             st->move_length = 1;
+             break;
+           }
+#endif
            switch (random() % 8)
            {
            case 0:
@@ -239,7 +249,8 @@ move (struct state *st)
            }
        } while (!st->move_dir);
     }
-    walk(st, st->move_dir);
+    if (st->move_dir)
+      walk(st, st->move_dir);
     --st->move_length;
     st->next_fn = move;
 }
@@ -557,6 +568,7 @@ static const char *noseguy_defaults [] = {
   ".foreground:            #CCCCCC",
   "*textForeground: black",
   "*textBackground: #CCCCCC",
+  "*fpsSolid:  true",
   "*program:    xscreensaver-text --cols 40 | head -n15",
   ".font:       -*-new century schoolbook-*-r-*-*-*-180-*-*-*-*-*-*",
   0