ftp://ftp.uni-heidelberg.de/pub/X11/contrib/applications/xscreensaver-1.27.tar.Z
[xscreensaver] / hacks / bubbles-tools / bubblestofile
diff --git a/hacks/bubbles-tools/bubblestofile b/hacks/bubbles-tools/bubblestofile
new file mode 100755 (executable)
index 0000000..4eaf5c9
--- /dev/null
@@ -0,0 +1,107 @@
+#!/usr/bin/perl
+#
+# $Id: bubblestofile,v 1.1 1996/09/08 01:35:52 jwz Exp $
+#
+#----------------------------------------------------------------------------
+#  Copyright (C) 1995-1996 James Macnicol
+#
+#   This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+#   This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#-----------------------------------------------------------------------------
+#
+# Contact me (J.Macnicol@student.anu.edu.au) if you have problems.
+#
+# [ The moral of this story is use a version of rm which safely backs up
+# files when you delete them in case you do something stupid like
+# "rm * xpm" which trashed all the scripts in this directory so I had
+# to write them again.  Grrrrrr..... ]
+#
+#-----------------------------------------------------------------------------
+#
+# This script takes a set of XPM files (from povbubbles, for example)
+# whose names are listed in file with extension .names (of same format
+# as output by povbubbles) and puts them together into a file which can
+# loaded with the -file option or place in a directory suitable for
+# use with the -directory option to bubbles.  Note that neither of these
+# options are available if you have just compiled bubbles as provided.
+# You must edit bubbles.h to enable these.  Files generated by this script
+# have by default the extension ".bub".
+#
+# To use it, provide as an argument the base-name of the .names file,
+# i.e. if you ran povbubbles on the file foo.pov by typing "povbubbles foo"
+# then this created a file "foo.names" so you can now make the loadable file
+# "foo.bub" by typing "bubblestofile foo".
+#
+
+sub die_help {
+    print STDERR "Usage: $0 [-help] base-name\n";
+    print STDERR "  -help\n";
+    print STDERR "    gives this message.\n";
+    print STDERR "  base-name is the name of the file used to generate\n";
+    print STDERR "    the XPM files, e.g. if you invoked povbubbles with\n";
+    print STDERR "              \"povbubbles foo\"\n";
+    print STDERR "    then you should invoke $0 with\n";
+    die("              \"$0 foo\"\n");
+}
+
+sub die_usage {
+    die "Usage: $0 [-help] base-name\n";
+}
+
+$infile = undef;
+
+# Process command line arguments
+while ($op = shift) {
+    if ($op eq "-help") {
+        &die_help;
+    } else {
+        $infile = $op;
+        # Ignore further arguments
+        break;
+    }
+}
+if ($infile eq undef) {
+    &die_usage;
+}
+
+$namesfile = $infile . ".names";
+$outfile = $infile . ".bub";
+
+if (! -f $namesfile) {
+    die("File list $namesfile doesn't exist\n");
+}
+
+if (-f $outfile) {
+    print "Backing up $outfile\n";
+    system("mv -f $outfile $outfile.bak");
+}
+
+open(OUT, ">$outfile") || die("Couldn't open $outfile\n");
+open(NAMES, $namesfile) || die ("Couldn't open $namesfile\n");
+$numbubbles = 0;
+while (<NAMES>) {
+    if (/\s*(\S+)\:(\S+)\s*/) {
+       $filename = $1;
+       $xpmname = $2;
+       open(CAT, $filename) || die("Couldn't open file $filename listed in\
+$namesfile\n");
+       while (<CAT>) {
+           print OUT;
+       }
+       close(CAT);
+    } else {
+       print STDERR "Can't understand the line \"$_\"\n";
+       print STDERR "  in $namesfile.  Ignoring...\n";
+    }
+}
+close(NAMES);
+close(OUT);
+
+