<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -12,7 +12,7 @@ module Infinity.Plugins (
  Plugin(..),
  -- $pfuncs
  ircPrivmsg,
- runProc,
+ runProc, runUtil,
  pRunHelp,
  pListHelp,
  -- $plugactions
@@ -32,6 +32,7 @@ import System.Timeout
 import Data.Version
 import System.Info
 import qualified Network.IRC as IRC
+import Infinity.Core (Server)
 import Infinity.State
 import Infinity.Util
 import Infinity.Log
@@ -39,7 +40,6 @@ import Text.Printf
 import Data.Binary
 import System.IO
 import Data.List
-import {-# SOURCE #-} Config
 
 -- | An existential for hiding plugins
 data IModule = forall p s. (Show p, Plugin p s) =&gt; IModule (p,s,TMVar Bool)
@@ -113,6 +113,14 @@ runProc :: FilePath                 -- ^ Executable name
         -&gt; IPluginT (String,String) -- ^ The command output and output from stderr, respectively
 runProc f av str = io (run f av str)
 
+-- | Runs a utility (designed to be OS-aware), arguments are identical to that of 'runProc'
+runUtil :: FilePath -&gt; [String] -&gt; Maybe String -&gt; IPluginT (String,String)
+#ifndef WIN32
+runUtil f av str = io $ run (&quot;util&quot; &lt;/&gt; f) av str
+#else
+runUtil f av str = io $ run (&quot;util&quot; &lt;/&gt; (f ++ &quot;.exe&quot;)) av str
+#endif
+
 -- | Gets help for a command, used by 'Infinity.Plugins.System'
 pRunHelp :: String          -- ^ Command name
          -&gt; IPluginT String -- ^ Help</diff>
      <filename>Infinity/Plugins.hs</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ import Infinity.Plugins
 import System.FilePath
 import Data.Char
 
-bin = &quot;util&quot; &lt;/&gt; &quot;unlambda&quot;
+bin = &quot;unlambda&quot;
 
 data Unlambda = Unlambda
  deriving (Eq,Show)
@@ -16,7 +16,11 @@ instance Plugin Unlambda () where
 
     exec _ _ &quot;unlambda&quot; Nothing  = return ((), &quot;Needs an expression&quot;)
     exec _ _ &quot;unlambda&quot; (Just x) = do
-      (o,e) &lt;- runProc bin [] $ Just x
-      let s = clean $ if (null e) then o else e
+      (o,e) &lt;- runUtil bin [] $ Just x
+      let s = clean (check o e)
       return ((),s)
           where clean = map (\x -&gt; if isControl x then ' ' else x)
+                check o e
+                      | (null e &amp;&amp; null o) = &quot;Done.&quot;
+                      | (null o) = e
+                      | (null e) = o</diff>
      <filename>Infinity/Plugins/Unlambda.hs</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 in no particular order:
- * Take advantage of bytestring-0.9.0.4's instance
-   of IsString and GHC's Overloaded strings to move
-   much of the internals to ByteString.
+ * Take advantage of Bryan O'Sullivan's bytestringparser
+   library, to move internals to ByteStrings for efficiency.
  * Take advantage of network-bytestring as well.
  * Enhance IPluginT monad, most likely by writing our
    own instance for it, rather than letting newtype </diff>
      <filename>TODO</filename>
    </modified>
    <modified>
      <diff>@@ -32,7 +32,7 @@ extra-source-files:  README,
 
 flag static
   description:       Enables a static build of the bot, i.e. no reboot facilities
-  default:           False
+  default:           True
 
 flag coverage
   description:       Enables code coverage, implies '-fstatic'
@@ -42,15 +42,18 @@ flag debug
   description:       Enables static build with code coverage and debug output
   default:           False
 
+
 -- the bot executable
 executable infinity
   main-is:           Main.hs
-  build-depends:     binary &gt;= 0.4, filepath, irc &gt;= 0.4, base,
-                      QuickCheck &gt;= 2.0, directory, process, old-time, 
+  build-depends:     binary &gt;= 0.4, filepath, irc &gt;= 0.4, bytestring &gt; 0.9.0.1,
+                      QuickCheck &gt;= 2.0, base, directory, process, old-time, 
                       stm, containers, mtl, network, readline
   extensions:        ExistentialQuantification, GeneralizedNewtypeDeriving,
                       MultiParamTypeClasses, CPP, PatternGuards
 
+  if os(win32)
+    ghc-options:     -DWIN32
 
   if flag(debug)
     ghc-options:     -O0 -threaded -DDEBUG
@@ -74,4 +77,7 @@ executable infinity
 executable unlambda
   main-is:           util/Unlambda.hs
   build-depends:     base &gt;= 3.0.1.0
-  ghc-options:       -o util/unlambda
+  if os(win32)
+    ghc-options:     -o util/unlambda.exe
+  else
+    ghc-options:     -o util/unlambda
\ No newline at end of file</diff>
      <filename>infinity.cabal</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>297dbcdc48b9b8cf4d53880a9b9992fb4b646c40</id>
    </parent>
  </parents>
  <author>
    <name>Austin Seipp</name>
    <email>austin@youareinferior.net</email>
  </author>
  <url>http://github.com/thoughtpolice/infinity/commit/01ebeebaaf7ab5b3aef5d1d215e5087cc255d795</url>
  <id>01ebeebaaf7ab5b3aef5d1d215e5087cc255d795</id>
  <committed-date>2008-01-27T15:19:44-08:00</committed-date>
  <authored-date>2008-01-27T15:19:44-08:00</authored-date>
  <message>Implemented runUtil; updated TODO and cabal file
runUtil is a version of runProc that takes OS into
account (plans are to have infinity build on windows as
well) and runs utilities in the util/ directory, the cabal
file has been changed to detect win32 as well.</message>
  <tree>fdf5f830b001a3c253d1bad509f76749785e0b5e</tree>
  <committer>
    <name>Austin Seipp</name>
    <email>austin@youareinferior.net</email>
  </committer>
</commit>
