1.1 --- a/src/Pure/General/symbol.scala Sat Dec 27 11:54:08 2008 +0100
1.2 +++ b/src/Pure/General/symbol.scala Sat Dec 27 14:57:30 2008 +0100
1.3 @@ -78,7 +78,7 @@
1.4
1.5 /** Symbol interpretation **/
1.6
1.7 - class Interpretation {
1.8 + class Interpretation(isabelle_system: IsabelleSystem) {
1.9
1.10 private var symbols = new HashMap[String, HashMap[String, String]]
1.11 private var decoder: Recoder = null
1.12 @@ -125,7 +125,7 @@
1.13 }
1.14
1.15 private def read_symbols(path: String) = {
1.16 - val file = new File(IsabelleSystem.platform_path(path))
1.17 + val file = new File(isabelle_system.platform_path(path))
1.18 if (file.canRead) {
1.19 for (line <- Source.fromFile(file).getLines) read_line(line)
1.20 }
2.1 --- a/src/Pure/Isar/isar.scala Sat Dec 27 11:54:08 2008 +0100
2.2 +++ b/src/Pure/Isar/isar.scala Sat Dec 27 14:57:30 2008 +0100
2.3 @@ -9,7 +9,8 @@
2.4 import java.util.Properties
2.5
2.6
2.7 -class Isar(args: String*) extends IsabelleProcess(args: _*) {
2.8 +class Isar(isabelle_system: IsabelleSystem, args: String*) extends
2.9 + IsabelleProcess(isabelle_system, args: _*) {
2.10
2.11 /* basic editor commands */
2.12
3.1 --- a/src/Pure/Tools/isabelle_process.scala Sat Dec 27 11:54:08 2008 +0100
3.2 +++ b/src/Pure/Tools/isabelle_process.scala Sat Dec 27 14:57:30 2008 +0100
3.3 @@ -12,8 +12,6 @@
3.4 import java.io.{BufferedReader, BufferedWriter, InputStreamReader, OutputStreamWriter,
3.5 InputStream, OutputStream, IOException}
3.6
3.7 -import isabelle.{Symbol, XML}
3.8 -
3.9
3.10 object IsabelleProcess {
3.11
3.12 @@ -69,7 +67,7 @@
3.13
3.14 class Result(val kind: Kind.Value, val props: Properties, val result: String) {
3.15 override def toString = {
3.16 - val res = XML.content(YXML.parse_failsafe(result)).mkString("")
3.17 + val res = XML.content(YXML.parse_failsafe(result)).mkString
3.18 if (props == null) kind.toString + " [[" + res + "]]"
3.19 else kind.toString + " " + props.toString + " [[" + res + "]]"
3.20 }
3.21 @@ -81,11 +79,16 @@
3.22 }
3.23
3.24
3.25 -class IsabelleProcess(args: String*) {
3.26 +class IsabelleProcess(isabelle_system: IsabelleSystem, args: String*) {
3.27
3.28 import IsabelleProcess._
3.29
3.30
3.31 + /* alternative constructors */
3.32 +
3.33 + def this(args: String*) = this(new IsabelleSystem, args: _*)
3.34 +
3.35 +
3.36 /* process information */
3.37
3.38 private var proc: Process = null
3.39 @@ -122,7 +125,7 @@
3.40 if (pid == null) put_result(Kind.SYSTEM, null, "Cannot interrupt: unknown pid")
3.41 else {
3.42 try {
3.43 - if (IsabelleSystem.exec("kill", "-INT", pid).waitFor == 0)
3.44 + if (isabelle_system.exec("kill", "-INT", pid).waitFor == 0)
3.45 put_result(Kind.SIGNAL, null, "INT")
3.46 else
3.47 put_result(Kind.SYSTEM, null, "Cannot interrupt: kill command failed")
3.48 @@ -185,7 +188,7 @@
3.49
3.50 private class StdinThread(out_stream: OutputStream) extends Thread("isabelle: stdin") {
3.51 override def run() = {
3.52 - val writer = new BufferedWriter(new OutputStreamWriter(out_stream, IsabelleSystem.charset))
3.53 + val writer = new BufferedWriter(new OutputStreamWriter(out_stream, isabelle_system.charset))
3.54 var finished = false
3.55 while (!finished) {
3.56 try {
3.57 @@ -215,7 +218,7 @@
3.58
3.59 private class StdoutThread(in_stream: InputStream) extends Thread("isabelle: stdout") {
3.60 override def run() = {
3.61 - val reader = new BufferedReader(new InputStreamReader(in_stream, IsabelleSystem.charset))
3.62 + val reader = new BufferedReader(new InputStreamReader(in_stream, isabelle_system.charset))
3.63 var result = new StringBuilder(100)
3.64
3.65 var finished = false
3.66 @@ -253,7 +256,7 @@
3.67
3.68 private class MessageThread(fifo: String) extends Thread("isabelle: messages") {
3.69 override def run() = {
3.70 - val reader = IsabelleSystem.fifo_reader(fifo)
3.71 + val reader = isabelle_system.fifo_reader(fifo)
3.72 var kind: Kind.Value = null
3.73 var props: Properties = null
3.74 var result = new StringBuilder
3.75 @@ -337,7 +340,7 @@
3.76 /* isabelle version */
3.77
3.78 {
3.79 - val (msg, rc) = IsabelleSystem.isabelle_tool("version")
3.80 + val (msg, rc) = isabelle_system.isabelle_tool("version")
3.81 if (rc != 0) error("Version check failed -- bad Isabelle installation:\n" + msg)
3.82 put_result(Kind.SYSTEM, null, msg)
3.83 }
3.84 @@ -345,8 +348,8 @@
3.85
3.86 /* message fifo */
3.87
3.88 - val message_fifo = IsabelleSystem.mk_fifo()
3.89 - def rm_fifo() = IsabelleSystem.rm_fifo(message_fifo)
3.90 + val message_fifo = isabelle_system.mk_fifo()
3.91 + def rm_fifo() = isabelle_system.rm_fifo(message_fifo)
3.92
3.93 val message_thread = new MessageThread(message_fifo)
3.94 message_thread.start
3.95 @@ -356,8 +359,8 @@
3.96
3.97 try {
3.98 val cmdline =
3.99 - List(IsabelleSystem.getenv_strict("ISABELLE_PROCESS"), "-W", message_fifo) ++ args
3.100 - proc = IsabelleSystem.exec2(cmdline: _*)
3.101 + List(isabelle_system.getenv_strict("ISABELLE_PROCESS"), "-W", message_fifo) ++ args
3.102 + proc = isabelle_system.exec2(cmdline: _*)
3.103 }
3.104 catch {
3.105 case e: IOException =>
4.1 --- a/src/Pure/Tools/isabelle_system.scala Sat Dec 27 11:54:08 2008 +0100
4.2 +++ b/src/Pure/Tools/isabelle_system.scala Sat Dec 27 14:57:30 2008 +0100
4.3 @@ -12,7 +12,7 @@
4.4 import scala.io.Source
4.5
4.6
4.7 -object IsabelleSystem {
4.8 +class IsabelleSystem {
4.9
4.10 val charset = "UTF-8"
4.11
4.12 @@ -98,7 +98,7 @@
4.13 try { exec2((List(getenv_strict("ISABELLE_TOOL")) ++ args): _*) }
4.14 catch { case e: IOException => error(e.getMessage) }
4.15 proc.getOutputStream.close
4.16 - val output = Source.fromInputStream(proc.getInputStream, charset).mkString("")
4.17 + val output = Source.fromInputStream(proc.getInputStream, charset).mkString
4.18 val rc = proc.waitFor
4.19 (output, rc)
4.20 }