http://packetstormsecurity.org/UNIX/admin/xscreensaver-4.14.tar.gz
[xscreensaver] / hacks / glx / gltext.c
index 2ccae16165466b1b4a2916546db3772dc0b01b21..aa3e876e4e333d075b1e30220298f2b1cf977b83 100644 (file)
@@ -1,4 +1,4 @@
-/* gltext, Copyright (c) 2001, 2002 Jamie Zawinski <jwz@jwz.org>
+/* gltext, Copyright (c) 2001, 2002, 2003 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
@@ -92,7 +92,7 @@ static Bool do_wander;
 static XrmOptionDescRec opts[] = {
   { "-text",   ".text",   XrmoptionSepArg, 0 },
   { "-spin",   ".spin",   XrmoptionSepArg, 0 },
-  { "+spin",   ".spin",   XrmoptionNoArg, "False" },
+  { "+spin",   ".spin",   XrmoptionNoArg, "" },
   { "-wander", ".wander", XrmoptionNoArg, "True" },
   { "+wander", ".wander", XrmoptionNoArg, "False" }
 };
@@ -177,13 +177,16 @@ parse_text (ModeInfo *mi)
                                      strlen(uts.sysname) +
                                      strlen(uts.version) +
                                      strlen(uts.release) + 10);
-#  ifdef _AIX
+#  if defined(_AIX)
           sprintf(tp->text, "%s\n%s %s.%s",
                   uts.nodename, uts.sysname, uts.version, uts.release);
-#  else  /* !_AIX */
+#  elif defined(__APPLE__)  /* MacOS X + XDarwin */
+          sprintf(tp->text, "%s\n%s %s\n%s",
+                  uts.nodename, uts.sysname, uts.release, uts.machine);
+#  else
           sprintf(tp->text, "%s\n%s %s",
                   uts.nodename, uts.sysname, uts.release);
-#  endif /* !_AIX */
+#  endif /* special system types */
         }
 # else /* !HAVE_UNAME */
 #  ifdef VMS
@@ -269,16 +272,33 @@ init_text (ModeInfo *mi)
   }
 
   {
+    Bool spinx=False, spiny=False, spinz=False;
     double spin_speed   = 1.0;
     double wander_speed = 0.05;
     double spin_accel   = 1.0;
 
-    tp->rot = make_rotator (do_spin ? spin_speed : 0,
-                            do_spin ? spin_speed : 0,
-                            do_spin ? spin_speed : 0,
+    char *s = do_spin;
+    while (*s)
+      {
+        if      (*s == 'x' || *s == 'X') spinx = True;
+        else if (*s == 'y' || *s == 'Y') spiny = True;
+        else if (*s == 'z' || *s == 'Z') spinz = True;
+        else
+          {
+            fprintf (stderr,
+         "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
+                     progname, do_spin);
+            exit (1);
+          }
+        s++;
+      }
+
+    tp->rot = make_rotator (spinx ? spin_speed : 0,
+                            spiny ? spin_speed : 0,
+                            spinz ? spin_speed : 0,
                             spin_accel,
                             do_wander ? wander_speed : 0,
-                            True);
+                            False);
     tp->trackball = gltrackball_init ();
   }
 
@@ -335,7 +355,7 @@ fill_character (GLUTstrokeFont font, int c, Bool wire)
                     coord->x, coord->y, 0,
                     tube_width,
                     tube_width * 0.15,
-                    TUBE_FACES, smooth, wire);
+                    TUBE_FACES, smooth, True, wire);
             lx = coord->x;
             ly = coord->y;
           }
@@ -369,9 +389,9 @@ text_extents (const char *string, int *wP, int *hP)
 
         if (w > *wP) *wP = w;
         *hP += line_height;
-        s++;
         lines++;
         if (*s == 0) break;
+        s++;
       }
     else
       s++;