# HG changeset patch
# Parent  37aa1a7887b0dfe4ebf74cf79d91d82eea221ce1
(WIP) Fix compilation for SYS:RUN-PROGRAM on JDK-6

diff -r 37aa1a7887b0 build.xml
--- a/build.xml	Sat Nov 26 07:08:10 2016 +0000
+++ b/build.xml	Sat Nov 26 13:00:45 2016 -0500
@@ -68,6 +68,7 @@
       <include name="org/armedbear/lisp/scripting/*.java" if="abcl.jsr-223.p"/>
       <include name="org/armedbear/lisp/scripting/util/*.java" if="abcl.jsr-223.p"/>
       <include name="org/armedbear/Main.java"/>
+      <include name="org/abcl/**/*.java"/>
     </patternset>
 
     <patternset id="abcl.source.lisp">
diff -r 37aa1a7887b0 src/org/abcl/util/ASyncIO.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/abcl/util/ASyncIO.java	Sat Nov 26 13:00:45 2016 -0500
@@ -0,0 +1,26 @@
+package org.abcl.util;
+
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.SynchronousQueue;
+
+public class ASyncIO
+{
+  static int poolSize = 1;
+  static int minPoolSize = 1;
+  static long keepAlive = 256;
+  static TimeUnit keepAliveUnit = TimeUnit.DAYS;
+  static BlockingQueue<Runnable> queue = null;
+
+  static ThreadPoolExecutor pool = null; 
+
+  public ASyncIO() {
+    if (queue == null) {
+      queue = new SynchronousQueue();
+      pool = new ThreadPoolExecutor(poolSize, minPoolSize, keepAlive, keepAliveUnit,
+                                    queue);
+    }
+  }
+}
+  
diff -r 37aa1a7887b0 src/org/abcl/util/StreamTask.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/abcl/util/StreamTask.java	Sat Nov 26 13:00:45 2016 -0500
@@ -0,0 +1,9 @@
+package org.abcl.util;
+
+public class StreamTask
+  implements Runnable
+{
+  public void run() {
+    int i = 42;
+  }
+}
diff -r 37aa1a7887b0 src/org/armedbear/lisp/run-program.lisp
--- a/src/org/armedbear/lisp/run-program.lisp	Sat Nov 26 07:08:10 2016 +0000
+++ b/src/org/armedbear/lisp/run-program.lisp	Sat Nov 26 13:00:45 2016 -0500
@@ -163,7 +163,11 @@
         process))))
 
 (defconstant +inherit+
-  (java:jfield "java.lang.ProcessBuilder$Redirect" "INHERIT"))
+  (ignore-errors
+    (java:jfield "java.lang.ProcessBuilder$Redirect" "INHERIT")))
+
+(defun jvm7-p ()
+  (not (null +inherit+)))
 
 (defun coerce-to-file (value)
   (java:jnew
@@ -179,8 +183,12 @@
           (error "Don't know how to set up null stream on this platform."))))))
 
 (defun setup-input-redirection (process-builder value if-does-not-exist)
+  "Returns boolean truth when input redirections has been successfully set up.
+
+As a second value, returns either nil if input should inherit from the
+parent process, or a java.io.File reference to the file to read input from."
   (let ((redirect (if (eq value T)
-                      +inherit+
+                      (when (jvm7-p) +inherit+) 
                       (let ((file (coerce-to-file value)))
                         (when value
                           (if (eq if-does-not-exist :create)
@@ -189,13 +197,17 @@
                                 (ecase if-does-not-exist
                                   (:error (error "Input file ~S does not exist." value))
                                   ((NIL) (return-from setup-input-redirection))))))
-                        (java:jstatic "from" "java.lang.ProcessBuilder$Redirect" file)))))
-    (java:jcall "redirectInput" process-builder redirect))
-  T)
+			(if (jvm7-p)
+			  (java:jstatic "from" "java.lang.ProcessBuilder$Redirect" file)
+                           file)))))
+
+    (when (jvm7-p)
+	(java:jcall "redirectInput" process-builder redirect))
+    (values t redirect)))
 
 (defun setup-output-redirection (process-builder value errorp if-does-exist)
   (let ((redirect (if (eq value T)
-                      +inherit+
+                      (when (jvm7-p) +inherit+)
                       (let ((file (coerce-to-file value))
                             appendp)
                         (when (and value (probe-file value))
@@ -207,13 +219,16 @@
                                                 :if-exists if-does-exist)))
                             (:append (setf appendp T))
                             ((NIL) (return-from setup-output-redirection))))
-                        (if appendp
-                            (java:jstatic "appendTo" "java.lang.ProcessBuilder$Redirect" file)
-                            (java:jstatic "to" "java.lang.ProcessBuilder$Redirect" file))))))
-    (if errorp
-        (java:jcall "redirectError" process-builder redirect)
-        (java:jcall "redirectOutput" process-builder redirect)))
-  T)
+			(if (jvm7-p)
+			  (if appendp
+			      (java:jstatic "appendTo" "java.lang.ProcessBuilder$Redirect" file)
+			      (java:jstatic "to" "java.lang.ProcessBuilder$Redirect" file))
+			  (list file appendp))))))
+    (when  (jvm7-p)
+      (if errorp
+	  (java:jcall "redirectError" process-builder redirect)
+	  (java:jcall "redirectOutput" process-builder redirect)))
+    (values t redirect errorp)))
 
 ;;; The process structure.
 (defstruct (process (:constructor %make-process (jprocess)))
