ftp://ftp.uni-heidelberg.de/pub/X11/contrib/applications/xscreensaver-2.07.tar.gz
[xscreensaver] / hacks / bubbles.h
diff --git a/hacks/bubbles.h b/hacks/bubbles.h
new file mode 100644 (file)
index 0000000..89935f4
--- /dev/null
@@ -0,0 +1,214 @@
+/* bubbles.h - definitions for bubbles screensaver */
+
+/* $Id: bubbles.h,v 1.2 1997/05/19 03:26:05 jwz Exp $ */
+
+#ifndef _BUBBLES_H_
+#define _BUBBLES_H_
+
+#ifdef HAVE_XPM
+#include <X11/xpm.h>
+#endif
+
+/***************************************************************************
+ *   Options you might like to change to affect the program's behaviour    *
+ ***************************************************************************/
+
+/*
+ *   Uncommenting the following will enable support for reading bubbles from 
+ * files (using the -file and -directory options to bubbles).  This is
+ * disabled by default since such operations are inherently non-portable
+ * and we want the program to compile on as many systems as possible.  
+ *
+ *   If you uncomment this and you figure out how to get it working, please
+ * let me (J.Macnicol@student.anu.edu.au) know.  Diffs against the standard
+ * distribution would be appreciated.  Possible sources of problems are
+ * dirent and possibly the use of tmpnam().
+ */
+
+/* #define BUBBLES_IO */
+
+/*
+ *   The following only makes sense if BUBBLES_IO above is defined.
+ * 
+ *   Uncomment the following if you always want to use the -file or
+ * -directory options on the command line and never to use a default bubble
+ * compiled into the program.  This way you would save memory and disk space
+ * since if you do use -file or -directory only one bubble will be loaded
+ * into memory at any one time (and remember the default bubble is really
+ * uncompressed, unlike bubbles in files which can be compressed).  This
+ * is disabled by default only so people running the program for the first
+ * time with no knowldege of the command line options don't get error
+ * messages ;)
+ *
+ * NOTE: You will still need to have a bubbles_default.c file, else the
+ * build sequence will fail.  Well constructed bubbles_default.c files
+ * have #ifdef's which simply exclude everything else in the file at
+ * compile time.  The bubblestodefault script does this.
+ */
+
+/* #define NO_DEFAULT_BUBBLE */
+
+/*
+ * This turns on any debugging messages and sanity checks.  Hopefully you
+ * won't need this :)  It slows things down a bit, too.
+ *
+ * NOTE: If you uncomment this you will get some messages about unused
+ * functions when you compile.  You can ignore these - they refer to 
+ * convenient checking routines which simply aren't called but are left
+ * in case someone wants to use them.
+ */
+
+/* #define DEBUG */
+
+/***************************************************************************
+ *      Things you might need to change to get things working right        *
+ ***************************************************************************/
+
+/*
+ *  Name of the gzip binary.  You shouldn't need to change this unless it's
+ * not in your PATH when the program is run, in which case you will need to
+ * substitute the full path here.  Keep the double quotes else things won't
+ * compile!
+ */
+
+#define GZIP               "gzip"
+
+/*
+ *  Likewise for the Bourne shell.
+ */
+
+#define BOURNESH           "sh"
+
+/*
+ * The name of the directory entry structure is different under Linux
+ * (under which this code is being developed) than other systems.  The case
+ * alternate form here is that given in Kernighan & Ritchie's C book (which
+ * must be authoratitive, no?) 
+ *
+ * 04/07/96 : People will have to hack this to get it working on some
+ * systems.  I believe it doesn't work on SGI, for example.
+ */
+
+#ifdef _POSIX_SOURCE
+#define STRUCT_DIRENT      struct dirent
+#else
+#define STRUCT_DIRENT      Dirent
+#endif
+
+/* 
+ * The naming of fields in struct dirent also seems to differ from system to
+ * system.  This may have to be extended to make things truly portable.
+ * What we want here is the name field from a dirent struct pointed to
+ * by "dp". 
+ *
+ * 04/07/96 : See above.  This may need to be changed too.
+ */
+
+#ifdef _POSIX_SOURCE
+#define DIRENT_NAME       dp->d_name
+#else
+#define DIRENT_NAME       dp->name
+#endif
+
+/* I don't know why this isn't defined. */
+#ifdef linux
+/* apparently it is defined in recent linuxes.  who knows. */
+/*extern char *tempnam(char *, char *);*/
+#endif
+
+/****************************************************************************
+ *      Buffer lengths and things you probably won't need to touch          *
+ ****************************************************************************/
+
+/* Maximum length of a full path name we can deal with */
+#define PATH_BUF_SIZE      1024
+
+/* Size of string passed to shell as command */
+#define COMMAND_BUF_SIZE   2500
+
+/* Size increments for read_line() buffers */
+#define READ_LINE_BUF_SIZE 24
+
+/****************************************************************************
+ *                        End of options                                    *
+ ****************************************************************************/
+
+/* Some machines define M_PI and not PI.  If they don't define either, use
+own own.  Really, the accuracy of this is _not_ very important. */
+#ifndef PI
+# define PI  M_PI
+# ifndef M_PI
+#  define M_PI 3.1415926535
+# endif
+#endif
+
+/* for delete_bubble_in_mesh() */
+#define DELETE_BUBBLE      0
+#define KEEP_BUBBLE        1
+
+/* Status codes for read_line */
+#define LINE_READ          0
+#define EOF_REACHED        1
+#define IO_ERROR           2
+
+/* 
+ * Magic number for Bubble struct, in case it's trashed when debugging code
+ * (which happened to me often.... :(  
+ */
+
+#define BUBBLE_MAGIC       5674
+
+/* Useful macros */
+#define MAX(A, B) ((A) > (B) ? (A) : (B))
+#define MIN(A, B) ((A) < (B) ? (A) : (B))
+
+/* How we represent bubbles */
+struct bub {
+  int radius;
+  int step;  /* for rendered bubbles */
+  long area;
+  int x;
+  int y;
+  int magic;
+  int cell_index;
+  int visible;
+  struct bub *next;
+  struct bub *prev;
+};
+
+typedef struct bub Bubble;
+
+/*
+ * How we represent pixmaps of rendered bubbles.  Because the range of radii
+ * available may not be continuous, we call each a step (for the lack of a
+ * better name...)
+ */
+
+#ifdef HAVE_XPM
+struct bub_step {
+  int radius;
+  long area;
+  Pixmap ball, shape_mask;
+  GC draw_gc, erase_gc;
+  XpmAttributes xpmattrs;
+  struct bub_step *next;
+};
+
+typedef struct bub_step Bubble_Step;
+#endif /* HAVE_XPM */
+
+/* Make sure default bubble isn't compiled when we don't have XPM
+Disable file I/O code too. */
+#ifndef HAVE_XPM
+# define NO_DEFAULT_BUBBLE
+# undef BUBBLES_IO
+#endif /* HAVE_XPM */
+
+/* Make sure default bubble is compiled in when we have XPM and no file I/O */
+#ifdef HAVE_XPM
+# ifndef BUBBLES_IO
+#  undef NO_DEFAULT_BUBBLE
+# endif /* BUBBLES_IO */
+#endif /* HAVE_XPM */
+
+#endif /* _BUBBLES_H_ */