[png2uri] Version 1.0.4, added check whether to use base64 or uuencode

depending on whether "uname" returns Linux or not.
diff --git a/png2uri b/png2uri
index 8feba9d..d14ffdc 100755
--- a/png2uri
+++ b/png2uri
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# png2uri version 1.0.3, July 5, 2012.
+# png2uri version 1.0.4, July 6, 2012.
 #
 # NO COPYRIGHT RIGHTS ARE CLAIMED TO THIS SOFTWARE.
 #
@@ -40,15 +40,29 @@
 #                 omit the surrounding "img" tag and only write the
 #                 data URI.
 #
-# Requires /bin/sh and a uuencode(1) that takes the "-m" option to mean
-# to encode in base64 according to RFC-3548, and a working "sed".
+# Requires /bin/sh and a "base64" or "uuencode -m" that encodes its input
+# in base64 according to RFC-3548 and writes the result on standard output,
+# "uname", and a working "sed".
 #
 # If you prefer a web-based converter or a java application, this isn't
 # it. Use your search engine and look for "data uri" to find one.
 #
+# I guess we need a "configure" script to figure out which of base64(1)
+# or uuencode(1) to use, since neither is always present (uuencode must
+# be installed as part of "sharutils" on Gnu/Linux platforms, which often
+# hasn't happened). Here is a minimal "configure":
 
-PNG2URI_URI="true"
+case X`uname` in
+  XLinux)
+    PNG2URI_BASE64=use_base64
+    ;;
+  *)
+    PNG2URI_BASE64=use_uuencode
+    ;;
+esac
+
 PNG2URI_FMT="unknown"
+PNG2URI_URI="true"
 
 while true
 do
@@ -96,12 +110,26 @@
       case X$PNG2URI_URI in
         Xfalse)
           echo "data:$PNG2URI_FMT;base64,"
-          uuencode -m ==== | grep -v ====
+          case X$PNG2URI_BASE64 in
+            Xuse_base64)
+              base64
+              ;;
+            Xuse_uuencode)
+              uuencode -m ==== | grep -v ====
+              ;;
+          esac
           ;;
 
         *)
           echo "<img alt=\"PNG\" title=\"PNG\" src=\"data:$PNG2URI_FMT;base64,"
-          uuencode -m ==== | grep -v ====
+          case X$PNG2URI_BASE64 in
+            Xuse_base64)
+              base64
+              ;;
+            Xuse_uuencode)
+              uuencode -m ==== | grep -v ====
+              ;;
+          esac
           echo "\">"
           ;;
       esac
@@ -134,11 +162,25 @@
       case X$PNG2URI_URI in
         Xfalse)
             echo "data:$PNG2URI_FMT;base64,"
-            uuencode -m $1 ==== | grep -v ====
+            case X$PNG2URI_BASE64 in
+              Xuse_base64)
+                base64 < $1
+                ;;
+              Xuse_uuencode)
+                uuencode -m $1 ==== | grep -v ====
+                ;;
+            esac
             ;;
         *)
             echo "<img alt=\"$1\" title=\"$1\" src=\"data:$PNG2URI_FMT;base64,"
-            uuencode -m $1 ==== | grep -v ====
+            case X$PNG2URI_BASE64 in
+              Xuse_base64)
+                base64 < $1
+                ;;
+              Xuse_uuencode)
+                uuencode -m $1 ==== | grep -v ====
+                ;;
+            esac
             echo "\">"
             ;;
       esac
diff --git a/png2uri-README.txt b/png2uri-README.txt
index 19e4823..c91d7c0 100644
--- a/png2uri-README.txt
+++ b/png2uri-README.txt
@@ -38,9 +38,14 @@
                  omit the surrounding "img" tag and only write the
                  data URI.
 
- Requires /bin/sh and a uuencode(1) that takes the "-m" option to mean
- to encode in base64.  A surprising number of machines that I've tried
- (3 out of 9) don't have uuencode installed.
+ Requires /bin/sh and a base64(1) that encodes its input in base64
+ according to RFC-3548 and writes the result on standard output, and
+ a working "sed".  Versions 1.0.0 through 1.0.3 used uuencode(1) instead
+ of base64(), but a surprising number of machines that I've tried
+ (5 out of 11) don't have uuencode installed, while all 11 had base64(1)
+ which is a "core utility" rather than a "shar utility".  Using base64()
+ has an additional advantage that the lines are always folded to the same
+ width, 76 characters wide, while uuencode sometimes writes shorter lines.
 
  REFERENCES:
     http://en.wikipedia.org/wiki/Data_URI_scheme
@@ -99,47 +104,62 @@
       of name conflict, and changed "uri_only" to PNG2URI_URI.  Fixed some
       indentation.
 
+   Version 1.0.4, July 6, 2012:
+
+      Use "base64" instead of "uuencode" when "uname" returns "Linux" to
+      generate the output, because "base64" seems to be more prevalently
+      available. On Gnu/Linux platforms, uuencode must be installed as part
+      of "sharutils", which often doesnn't happen.  SunOS and FreeBSD don't
+      supply "base64" so we use "uuencode" instead.
+
  TO DO
 
- 1. Test on various platforms. The following have been tried
+ 1. Test on various other platforms. I assume we'll soon find one that has
+    neither "uuencode" nor "base64".  The following have been tried
 
-    Ubuntu 10.04 (data is folded to 60 characters)
+    Ubuntu 10.04 (uuencode output was folded to 60 characters)
        Linux glenn.rp 2.6.32-41-generic #91-Ubuntu SMP Wed Jun 13 11:43:55
           UTC 2012 x86_64 GNU/Linux
        Linux nancy.rp 2.6.32-41-generic #91-Ubuntu SMP Wed Jun 13 11:43:55
           UTC 2012 x86_64 GNU/Linux (uuencode not found.  Fixed that with
-          "sudo aptitude install sharutils", then data folded to 60 chars)
+          "sudo aptitude install sharutils", then finally fixed by using
+          base64() instead of uuencode())
 
-    Ubuntu 12.04 (FAILED: uuencode not found but manpage for POSIX uuencode
-    exists)
+    Ubuntu 12.04 (uuencode not found but manpage for POSIX uuencode exists;
+       base64 works)
        Linux scooby 3.0.0-22-generic #36-Ubuntu SMP Tue Jun 12 17:37:42 UTC 2012
           x86_64 x86_64 x86_64 GNU/Linux
 
-    SunOS 5.10 (data is folded to 68 characters)
+    SunOS 5.10 (uuencode data is folded to 68 characters)
+       Does not work with "base64"!  Reconfigured png2uri to use "uuencode".
+       on non-Linux platforms.
        SunOS freddy 5.10 Generic_147441-13 i86pc i386 i86pc
        SunOS blade 5.10 Generic_144488-12 sun4u sparc SUNW,Sun-Blade-2500
 
-    Sunos 5.11 (data is folded to 68 characters)
+    Sunos 5.11 (uuencode data is folded to 68 characters)
        SunOS weerd 5.11 oi_151a4 i86pc i386 i86pc
 
-    FreeBSD 8.0 (data is folded to 76 characters)
+    FreeBSD 8.0 (uuencode data is folded to 76 characters)
+       "base64 not found"; use uuencode.
        FreeBSD shaggy.simplesystems.org 8.0-RELEASE-p1 FreeBSD 8.0-RELEASE-p1
            #1: Mon Dec 21 11:26:14 CST 2009
            zsh@shaggy.simplesystems.org:/usr/src/sys/i386/compile/GENERIC
            i386
 
-    Red Hat? (FAILED: uuencode not found but manpage for POSIX uuencode
-    exists)
+    Red Hat? (uuencode not found but manpage for POSIX uuencode
+    exists; worked when base64 was used instead of uuencode)
        Linux studio.imagemagick.org 2.6.18-308.4.1.el5xen #1 SMP Tue Apr 17
            17:49:15 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
        Linux magick.imagemagick.org 3.4.4-3.fc17.x86_64 #1 SMP Tue Jun 26
            20:54:56 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
+       Two other Redhat Enterprise platforms also worked with base64, but
+           uuencode was not installed.
 
  2. Find out if the script works on Windows and Mac or can be modified to
  do so.
 
  3. Make it work as a drag-and-drop application.
 
- 4. But keep it simple!
+ 4. But keep it simple! 
 
 */