128 } |
128 } |
129 |
129 |
130 |
130 |
131 /* Isabelle tool wrapper */ |
131 /* Isabelle tool wrapper */ |
132 |
132 |
133 val isabelle_tool = Isabelle_Tool("process", "raw ML process (batch mode)", |
133 def tool_body(args: List[String], internal: Boolean = false): Process_Result = { |
134 Scala_Project.here, |
134 var dirs: List[Path] = Nil |
135 { args => |
135 var eval_args: List[String] = Nil |
136 var dirs: List[Path] = Nil |
136 var logic = Isabelle_System.default_logic() |
137 var eval_args: List[String] = Nil |
137 var modes: List[String] = Nil |
138 var logic = Isabelle_System.default_logic() |
138 var options = Options.init() |
139 var modes: List[String] = Nil |
|
140 var options = Options.init() |
|
141 |
139 |
142 val getopts = Getopts(""" |
140 val getopts = Getopts(""" |
143 Usage: isabelle process [OPTIONS] |
141 Usage: isabelle process [OPTIONS] |
144 |
142 |
145 Options are: |
143 Options are: |
146 -d DIR include session directory |
144 -d DIR include session directory |
147 -e ML_EXPR evaluate ML expression on startup |
145 -e ML_EXPR evaluate ML expression on startup |
150 -m MODE add print mode for output |
148 -m MODE add print mode for output |
151 -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
149 -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
152 |
150 |
153 Run the raw Isabelle ML process in batch mode. |
151 Run the raw Isabelle ML process in batch mode. |
154 """, |
152 """, |
155 "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
153 "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
156 "e:" -> (arg => eval_args = eval_args ::: List("--eval", arg)), |
154 "e:" -> (arg => eval_args = eval_args ::: List("--eval", arg)), |
157 "f:" -> (arg => eval_args = eval_args ::: List("--use", arg)), |
155 "f:" -> (arg => eval_args = eval_args ::: List("--use", arg)), |
158 "l:" -> (arg => logic = arg), |
156 "l:" -> (arg => logic = arg), |
159 "m:" -> (arg => modes = arg :: modes), |
157 "m:" -> (arg => modes = arg :: modes), |
160 "o:" -> (arg => options = options + arg)) |
158 "o:" -> (arg => options = options + arg)) |
161 |
159 |
162 val more_args = getopts(args) |
160 val more_args = getopts(args, internal = internal) |
163 if (args.isEmpty || more_args.nonEmpty) getopts.usage() |
161 if (args.isEmpty || more_args.nonEmpty) getopts.usage(internal = internal) |
164 |
162 |
165 val store = Store(options) |
163 val store = Store(options) |
166 val session_background = Sessions.background(options, logic, dirs = dirs).check_errors |
164 val session_background = Sessions.background(options, logic, dirs = dirs).check_errors |
167 val session_heaps = store.session_heaps(session_background, logic = logic) |
165 val session_heaps = store.session_heaps(session_background, logic = logic) |
168 val result = |
166 ML_Process(options, session_background, session_heaps, args = eval_args, modes = modes) |
169 ML_Process(options, session_background, session_heaps, args = eval_args, modes = modes) |
167 .result( |
170 .result( |
168 progress_stdout = Output.writeln(_, stdout = true), |
171 progress_stdout = Output.writeln(_, stdout = true), |
169 progress_stderr = Output.writeln(_)) |
172 progress_stderr = Output.writeln(_)) |
170 } |
173 |
171 |
174 sys.exit(result.rc) |
172 val isabelle_tool = |
175 }) |
173 Isabelle_Tool("process", "raw ML process (batch mode)", Scala_Project.here, |
|
174 args => sys.exit(tool_body(args).rc)) |
|
175 |
|
176 object Scala_Fun extends Scala.Fun_Strings("ML_process", thread = true) { |
|
177 val here = Scala_Project.here |
|
178 def apply(args: List[String]): List[String] = |
|
179 Bash.Server.result(tool_body(args, internal = true)) |
|
180 } |
176 } |
181 } |