X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fstarwars.c;h=3853007f449f2afd4bf731fc687bf7b03f0b6fdb;hb=6a1da724858673ac40aa13a9612340d8bed8c7b9;hp=96c77753bac124bf705f30c92287e06a24ae2c79;hpb=8eb2873d7054e705c4e83f22d18c40946a9e2529;p=xscreensaver diff --git a/hacks/glx/starwars.c b/hacks/glx/starwars.c index 96c77753..3853007f 100644 --- a/hacks/glx/starwars.c +++ b/hacks/glx/starwars.c @@ -87,12 +87,17 @@ extern XtAppContext app; #ifdef USE_GL /* whole file */ +#include #include #include #include "glutstroke.h" #include "glut_roman.h" #define GLUT_FONT (&glutStrokeRoman) +#ifdef HAVE_UNAME +# include +#endif /* HAVE_UNAME */ + typedef struct { GLXContext *glx_context; @@ -258,18 +263,48 @@ launch_text_generator (sws_configuration *sc) if (!strcasecmp(oprogram, "(default)")) { + oprogram = FORTUNE_PROGRAM; + #ifdef __linux__ - static int done_once = 0; - struct stat st; - char *cmd = "cat /usr/src/linux/README"; - if (!(done_once++) && !stat (cmd+4, &st)) - oprogram = cmd; - else -#endif - oprogram = FORTUNE_PROGRAM; + { + static int done_once = 0; + if (!done_once) + { + struct utsname uts; + struct stat st; + done_once = 1; + if (uname (&uts) == 0) + { + static char cmd[200]; + char *s; + /* strip version at the first non-digit-dash-dot, to + lose any "SMP" crap at the end. */ + for (s = uts.release; *s; s++) + if (!isdigit(*s) && *s != '.' && *s != '-') + *s = 0; + sprintf (cmd, "cat /usr/src/linux-%s/README", uts.release); + if (!stat (cmd+4, &st)) + oprogram = cmd; + } + } + } +#endif /* __linux__ */ + +#ifdef __APPLE__ /* MacOS X + XDarwin */ + { + static int done_once = 0; + if (!done_once) + { + struct stat st; + static char *cmd = "cat /usr/X11R6/README"; + if (!stat (cmd+4, &st)) + oprogram = cmd; + } + } +#endif /* __APPLE__ */ } - program = (char *) malloc (strlen (oprogram) + 10); + program = (char *) malloc (strlen (oprogram) + 10); strcpy (program, "( "); strcat (program, oprogram); strcat (program, " ) 2>&1"); @@ -863,7 +898,9 @@ draw_sws (ModeInfo *mi) } if (alignment >= 0) - xoff = 1.0 - (glutStrokeLength(GLUT_FONT, line) * sc->font_scale); + xoff = 1.0 - (glutStrokeLength(GLUT_FONT, + (unsigned char *) line) + * sc->font_scale); if (alignment == 0) xoff /= 2;