/* -*- Mode: C; tab-width: 4 -*-
* flag --- a waving flag
*/
-#if !defined( lint ) && !defined( SABER )
+#if 0
static const char sccsid[] = "@(#)flag.c 4.02 97/04/01 xlockmore";
#endif
* 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.
*/
# define DEF_TEXT ""
# include "xlockmore.h" /* from the xscreensaver distribution */
-# ifdef HAVE_XPM
-# include <X11/xpm.h>
-# ifndef PIXEL_ALREADY_TYPEDEFED
-# define PIXEL_ALREADY_TYPEDEFED /* Sigh, Xmu/Drawing.h needs this... */
-# endif
-# endif
-
-#ifdef HAVE_XMU
-# ifndef VMS
-# include <X11/Xmu/Drawing.h>
-# else /* VMS */
-# include <Xmu/Drawing.h>
-# endif /* VMS */
-#endif /* HAVE_XMU */
+#include "xpm-pixmap.h"
#include "images/bob.xbm"
#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 */
#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 */
*bitmap_name &&
!!strcmp(bitmap_name, "(default)"))
{
-#ifdef HAVE_XPM
- Window window = MI_WINDOW(mi);
- XWindowAttributes xgwa;
- XpmAttributes xpmattrs;
- int result;
Pixmap bitmap = 0;
- int width = 0, height = 0;
- xpmattrs.valuemask = 0;
-
- XGetWindowAttributes (dpy, window, &xgwa);
-
-# ifdef XpmCloseness
- xpmattrs.valuemask |= XpmCloseness;
- xpmattrs.closeness = 40000;
-# endif
-# ifdef XpmVisual
- xpmattrs.valuemask |= XpmVisual;
- xpmattrs.visual = xgwa.visual;
-# endif
-# ifdef XpmDepth
- xpmattrs.valuemask |= XpmDepth;
- xpmattrs.depth = xgwa.depth;
-# endif
-# ifdef XpmColormap
- xpmattrs.valuemask |= XpmColormap;
- xpmattrs.colormap = xgwa.colormap;
-# endif
-
- /* Uh, we don't need these now. We use the colors from the xpm.
- It kinda sucks that we already allocated them. */
- XFreeColors(dpy, xgwa.colormap, mi->pixels, mi->npixels, 0L);
-
- result = XpmReadFileToPixmap (dpy, window, bitmap_name, &bitmap, 0,
- &xpmattrs);
- switch (result)
- {
- case XpmColorError:
- fprintf (stderr, "%s: warning: xpm color substitution performed\n",
- progname);
- /* fall through */
- case XpmSuccess:
- width = xpmattrs.width;
- height = xpmattrs.height;
- break;
- case XpmFileInvalid:
- case XpmOpenFailed:
- bitmap = 0;
- break;
- case XpmColorFailed:
- fprintf (stderr, "%s: xpm: color allocation failed\n", progname);
- exit (-1);
- case XpmNoMemory:
- fprintf (stderr, "%s: xpm: out of memory\n", progname);
- exit (-1);
- default:
- fprintf (stderr, "%s: xpm: unknown error code %d\n", progname,
- result);
- exit (-1);
- }
+ int width = 0;
+ int height = 0;
+ bitmap = xpm_file_to_pixmap (dpy, MI_WINDOW (mi), bitmap_name,
+ &width, &height, 0);
if (bitmap)
{
fp->image = XGetImage(dpy, bitmap, 0, 0, width, height, ~0L,
ZPixmap);
XFreePixmap(dpy, bitmap);
}
- else
-#endif /* HAVE_XPM */
-
-#ifdef HAVE_XMU
- {
- int width, height, xh, yh;
- Pixmap bitmap =
- XmuLocateBitmapFile (DefaultScreenOfDisplay (dpy),
- bitmap_name, 0, 0, &width, &height, &xh, &yh);
- if (!bitmap)
- {
- fprintf(stderr, "%s: unable to load bitmap file %s\n",
- progname, bitmap_name);
- exit (1);
- }
- fp->image = XGetImage(dpy, bitmap, 0, 0, width, height,
- 1L, XYPixmap);
- XFreePixmap(dpy, bitmap);
- }
-
-#else /* !XMU */
- fprintf (stderr,
- "%s: your vendor doesn't ship the standard Xmu library.\n",
- progname);
- fprintf (stderr, "\tWe can't load XBM files without it.\n");
- exit (1);
-#endif /* !XMU */
-
}
else if (text && *text)
{
*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
}
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;
XClearWindow(display, MI_WINDOW(mi));
}
+void release_flag(ModeInfo * mi);
+
+
void
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