equal
deleted
inserted
replaced
39 fn () => brk (99999, 0), en); |
39 fn () => brk (99999, 0), en); |
40 |
40 |
41 |
41 |
42 (* ML command execution -- 'eval' *) |
42 (* ML command execution -- 'eval' *) |
43 |
43 |
44 fun use_text txt = |
44 fun use_text verbose txt = |
45 let |
45 let |
46 val buffer = ref (explode txt); |
46 val in_buffer = ref (explode txt); |
|
47 val out_buffer = ref ([]: string list); |
|
48 |
47 fun get () = |
49 fun get () = |
48 (case ! buffer of |
50 (case ! in_buffer of |
49 [] => "" |
51 [] => "" |
50 | c :: cs => (buffer := cs; c)); |
52 | c :: cs => (in_buffer := cs; c)); |
|
53 fun put s = out_buffer := s :: ! out_buffer; |
|
54 |
51 fun exec () = |
55 fun exec () = |
52 (case ! buffer of |
56 (case ! in_buffer of |
53 [] => () |
57 [] => () |
54 | _ => (PolyML.compiler (get, print) (); exec ())); |
58 | _ => (PolyML.compiler (get, put) (); exec ())); |
55 in exec () end; |
59 |
|
60 fun show_output () = print (implode (rev (! out_buffer))); |
|
61 in |
|
62 exec () handle exn => (show_output (); raise exn); |
|
63 if verbose then show_output () else () |
|
64 end; |
56 |
65 |
57 |
66 |
58 |
67 |
59 (** OS related **) |
68 (** OS related **) |
60 |
69 |