file = ".domtool"}
end
+fun libnameOpt () =
+ let
+ val libname = OS.Path.joinDirFile {dir = domtoolRoot (),
+ file = "lib.dtl"}
+ in
+ if Posix.FileSys.access (libname, []) then
+ SOME libname
+ else
+ NONE
+ end
+
val (doit, doitDir, args) =
case CommandLine.arguments () of
- "-tc" :: args => (fn fname => (Main.setupUser (); ignore (Main.check (Main.basis ()) fname)),
+ "-tc" :: args => (fn fname =>
+ let
+ val _ : string = Main.setupUser ()
+ val env = Main.basis ()
+ val env =
+ case libnameOpt () of
+ NONE => env
+ | SOME libname => #1 (Main.check env libname)
+ in
+ ignore (Main.check env fname)
+ end,
Main.checkDir,
args)
- | args => (Main.request,
+ | args => (fn fname => Main.request (fname, libnameOpt ()),
Main.requestDir,
args)
val reduce : Env.env -> string -> Env.env * Ast.exp option
val eval : Env.env -> Env.env_vars -> string -> Env.env * Env.env_vars
- val request : string -> unit
+ val request : string * string option -> unit
val requestDir : string -> unit
val requestPing : unit -> OS.Process.status
fun requestSlaveBio () = requestSlaveBio' true
-fun request fname =
+fun request (fname, libOpt) =
let
- val (user, bio) = requestBio (fn () => ignore (check (basis ()) fname))
-
- val inf = TextIO.openIn fname
+ val (user, bio) = requestBio (fn () =>
+ let
+ val env = basis ()
+ val env = case libOpt of
+ NONE => env
+ | SOME lib => #1 (check env lib)
+ in
+ ignore (check env fname)
+ end)
+
+ fun readFile fname =
+ let
+ val inf = TextIO.openIn fname
- fun loop lines =
- case TextIO.inputLine inf of
- NONE => String.concat (List.rev lines)
- | SOME line => loop (line :: lines)
+ fun loop lines =
+ case TextIO.inputLine inf of
+ NONE => String.concat (rev lines)
+ | SOME line => loop (line :: lines)
+ in
+ loop []
+ before TextIO.closeIn inf
+ end
- val code = loop []
+ val code = readFile fname
+ val msg = case libOpt of
+ NONE => MsgConfig code
+ | SOME fname' => MsgMultiConfig [readFile fname', code]
in
- TextIO.closeIn inf;
- Msg.send (bio, MsgConfig code);
+ Msg.send (bio, msg);
case Msg.recv bio of
NONE => print "Server closed connection unexpectedly.\n"
| SOME m =>