"*ncolors: 200 \n" \
"*bitmap: \n" \
"*font: " DEF_FONT "\n" \
- "*text: \n"
+ "*text: \n" \
+ "*fpsSolid: true \n" \
+ "*lowrez: true \n" \
+
# define BRIGHT_COLORS
# define UNIFORM_COLORS
+# define release_flag 0
# define reshape_flag 0
# define flag_handle_event 0
# include "xlockmore.h" /* from the xscreensaver distribution */
char *bitmap_name = get_string_resource (dpy, "bitmap", "Bitmap");
char *text = get_string_resource (dpy, "text", "Text");
-#ifdef HAVE_COCOA
+#ifdef HAVE_JWXYZ
bitmap_name = 0; /* #### always use default */
#endif
strlen(uts.sysname) +
strlen(uts.version) +
strlen(uts.release) + 10);
-# ifdef _AIX
+# if defined(_AIX)
sprintf(text, "%s\n%s %s.%s",
uts.nodename, uts.sysname, uts.version, uts.release);
-# else /* !_AIX */
+# elif defined(__APPLE__) && !defined(USE_IPHONE) /* MacOS X + XDarwin */
+ {
+ const char *file =
+ "/System/Library/CoreServices/SystemVersion.plist";
+ FILE *f = fopen (file, "r");
+ char *pbv = 0, *pn = 0, *puvv = 0;
+ if (f) {
+ char *s, buf[255];
+
+ while (fgets (buf, sizeof(buf)-1, f)) {
+# define GRAB(S,V) \
+ if (strstr(buf, S)) { \
+ fgets (buf, sizeof(buf)-1, f); \
+ if ((s = strchr (buf, '>'))) V = strdup(s+1); \
+ if ((s = strchr (V, '<'))) *s = 0; \
+ }
+ GRAB ("ProductName", pn)
+ GRAB ("ProductBuildVersion", pbv)
+ GRAB ("ProductUserVisibleVersion", puvv)
+# undef GRAB
+ }
+ }
+ if (pbv)
+ sprintf (text, "%s\n%s\n%s",
+ uts.nodename, pn, puvv /*, uts.machine*/);
+ else
+ sprintf(text, "%s\n%s %s",
+ uts.nodename, uts.sysname, uts.release);
+ }
+# else
sprintf(text, "%s\n%s %s",
uts.nodename, uts.sysname, uts.release);
-# endif /* !_AIX */
+# endif /* special system types */
}
#else /* !HAVE_UNAME */
# ifdef VMS
fp->image = XGetImage(dpy, bitmap, 0, 0, width, height, 1L, XYPixmap);
XFreePixmap(dpy, bitmap);
}
- else
+
+
+ if (! fp->image)
{
char *bits = (char *) malloc (sizeof(bob_bits));
memcpy (bits, bob_bits, sizeof(bob_bits));
int size = MI_SIZE(mi);
flagstruct *fp;
- if (flags == NULL) {
- if ((flags = (flagstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (flagstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, flags);
fp = &flags[MI_SCREEN(mi)];
make_flag_bits(mi);
+ if (!fp->image) abort();
fp->width = MI_WIN_WIDTH(mi);
fp->height = MI_WIN_HEIGHT(mi);
if (!fp->initialized) {
fp->dbufp = True;
-# ifdef HAVE_COCOA /* Don't second-guess Quartz's double-buffering */
+# ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */
fp->dbufp = False;
#endif
fp->initialized = True;
XClearWindow(display, MI_WINDOW(mi));
}
-ENTRYPOINT void release_flag(ModeInfo * mi);
-
-
ENTRYPOINT void
draw_flag(ModeInfo * mi)
{
Window window = MI_WINDOW(mi);
flagstruct *fp = &flags[MI_SCREEN(mi)];
+ if (!fp->image) abort();
if (fp->cache == window) { /* not double-buffering */
XClearWindow (display, window);
} else if (fp->width <= MAXW(fp) || fp->height <= MAXH(fp)) {
fp->sidx %= (ANGLES * MI_NPIXELS(mi));
fp->timer++;
if ((MI_CYCLES(mi) > 0) && (fp->timer >= MI_CYCLES(mi)))
- {
- release_flag(mi);
init_flag(mi);
- }
}
ENTRYPOINT void
-release_flag(ModeInfo * mi)
+free_flag(ModeInfo * mi)
{
- if (flags != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- {
- if (flags[screen].cache && flags[screen].dbufp)
- XFreePixmap(MI_DISPLAY(mi), flags[screen].cache);
- if (flags[screen].image)
- XDestroyImage(flags[screen].image);
- }
- (void) free((void *) flags);
- flags = NULL;
- }
+ int screen = MI_SCREEN(mi);
+
+ if (flags == NULL)
+ return;
+
+ if (flags[screen].cache && flags[screen].dbufp)
+ XFreePixmap(MI_DISPLAY(mi), flags[screen].cache);
+ if (flags[screen].image)
+ XDestroyImage(flags[screen].image);
}
+#ifndef STANDALONE
ENTRYPOINT void
refresh_flag(ModeInfo * mi)
{
/* Do nothing, it will refresh by itself */
}
+#endif
XSCREENSAVER_MODULE ("Flag", flag)