src/Pure/ML-Systems/smlnj-0.93.ML
author wenzelm
Wed, 13 Oct 1999 19:42:46 +0200
changeset 7855 092a6435afad
parent 7149 d0c2168f7704
child 12108 b6f10dcde803
permissions -rw-r--r--
system; use_text: pass print function;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/ML-Systems/smlnj-0.93.ML
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     3
    Author:     Carsten Clasohm, TU Muenchen
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     4
    Copyright   1996  TU Muenchen
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     5
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     6
Compatibility file for Standard ML of New Jersey version 0.93.
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     7
*)
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
     8
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
     9
(*needs the Basis Library emulation*)
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    10
use "basis.ML";
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    11
7149
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    12
structure String =
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    13
struct
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    14
  fun substring args = String.substring args
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    15
    handle String.Substring => raise Subscript;
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    16
  fun isPrefix s1 s2 = (s1 = substring(s2,0, size s1))
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    17
    handle Subscript => false;
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    18
end;
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    19
d0c2168f7704 provide String structure;
wenzelm
parents: 6227
diff changeset
    20
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    21
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    22
(** ML system related **)
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    23
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    24
(* New Jersey ML parameters *)
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    25
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    26
System.Control.Runtime.gcmessages := 0;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    27
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    28
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    29
(* Poly/ML emulation *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    30
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    31
fun quit () = exit 0;
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    32
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    33
(*limit the printing depth -- divided by 2 for comparibility with Poly/ML*)
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    34
fun print_depth n =
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    35
 (System.Control.Print.printDepth := n div 2;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    36
  System.Control.Print.printLength := n);
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    37
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    38
4506
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    39
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    40
(* timing *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    41
4506
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    42
(*Note start point for timing*)
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    43
fun startTiming() = System.Timer.start_timer();
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    44
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    45
(*Finish timing and return string*)
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    46
local
3631
88a279998f90 renamed use_string to use_strings;
wenzelm
parents: 3595
diff changeset
    47
  (*print microseconds, suppressing trailing zeroes*)
88a279998f90 renamed use_string to use_strings;
wenzelm
parents: 3595
diff changeset
    48
  fun umakestring 0 = ""
88a279998f90 renamed use_string to use_strings;
wenzelm
parents: 3595
diff changeset
    49
    | umakestring n =
88a279998f90 renamed use_string to use_strings;
wenzelm
parents: 3595
diff changeset
    50
        chr (ord "0" + n div 100000) ^ umakestring (10 * (n mod 100000));
4506
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    51
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    52
  fun string_of_time (System.Timer.TIME {sec, usec}) =
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    53
      makestring sec ^ "." ^ (if usec=0 then "0" else umakestring usec)
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    54
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    55
in
4506
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    56
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    57
fun endTiming start =
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    58
  let val nongc = System.Timer.check_timer(start)
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    59
      and gc    = System.Timer.check_timer_gc(start);
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    60
      val both  = System.Timer.add_time(nongc, gc)
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    61
  in  "Non GC " ^ string_of_time nongc ^
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    62
      "   GC " ^ string_of_time gc ^
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    63
      "  both "^ string_of_time both ^ " secs\n"
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    64
  end
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    65
end;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    66
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    67
4977
6cec2c0ffdbf added ml_prompts;
wenzelm
parents: 4506
diff changeset
    68
(* prompts *)
6cec2c0ffdbf added ml_prompts;
wenzelm
parents: 4506
diff changeset
    69
6cec2c0ffdbf added ml_prompts;
wenzelm
parents: 4506
diff changeset
    70
fun ml_prompts p1 p2 = ();
4506
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    71
f21ec26b2265 Declared startTiming and endTiming
paulson
parents: 4494
diff changeset
    72
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    73
(* toplevel pretty printing (see also Pure/install_pp.ML) *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    74
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    75
fun make_pp path pprint =
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    76
  let
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    77
    open System.PrettyPrint;
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    78
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    79
    fun pp pps obj =
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    80
      pprint obj
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    81
        (add_string pps, begin_block pps INCONSISTENT,
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    82
          fn wd => add_break pps (wd, 0), fn () => add_newline pps,
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    83
          fn () => end_block pps);
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    84
  in
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    85
    (path, pp)
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    86
  end;
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    87
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    88
fun install_pp (path, pp) = System.PrettyPrint.install_pp path pp;
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    89
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    90
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    91
(* ML command execution *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    92
7855
092a6435afad system;
wenzelm
parents: 7149
diff changeset
    93
fun use_text _ _ = System.Compile.use_stream o open_string;
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
    94
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    95
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
    96
5816
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
    97
(** interrupts **)
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
    98
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
    99
local
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   100
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   101
datatype 'a result =
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   102
  Result of 'a |
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   103
  Exn of exn;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   104
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   105
fun capture f x = Result (f x) handle exn => Exn exn;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   106
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   107
fun release (Result x) = x
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   108
  | release (Exn exn) = raise exn;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   109
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   110
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   111
val sig_int = System.Signals.SIGINT;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   112
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   113
val interruptible = not o System.Signals.masked;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   114
fun mask_signals () = System.Signals.maskSignals true;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   115
fun unmask_signals () = System.Signals.maskSignals false;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   116
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   117
fun change_mask ok change unchange f x =
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   118
  if ok () then f x
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   119
  else
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   120
    let
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   121
      val _ = change ();
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   122
      val result = capture f x;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   123
      val _ = unchange ();
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   124
    in release result end;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   125
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   126
in
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   127
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   128
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   129
(* mask / unmask interrupt *)
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   130
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   131
fun mask_interrupt f = change_mask (not o interruptible) mask_signals unmask_signals f;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   132
fun unmask_interrupt f = change_mask interruptible unmask_signals mask_signals f;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   133
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   134
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   135
(* exhibit interrupt (via exception) *)
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   136
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   137
exception Interrupt;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   138
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   139
fun exhibit_interrupt f x =
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   140
  let
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   141
    val orig_handler = System.Signals.inqHandler sig_int;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   142
    fun reset_handler () = (System.Signals.setHandler (sig_int, orig_handler); ());
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   143
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   144
    val interrupted = ref false;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   145
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   146
    fun set_handler cont =
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   147
      System.Signals.setHandler (sig_int, SOME (fn _ => (interrupted := true; cont)));
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   148
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   149
    fun proceed cont =
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   150
      let
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   151
        val _ = set_handler cont;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   152
        val result = unmask_interrupt (capture f) x;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   153
        val _ = reset_handler ();
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   154
      in release result end;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   155
  in
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   156
    callcc proceed;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   157
    reset_handler ();
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   158
    if ! interrupted then raise Interrupt else ()
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   159
   end;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   160
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   161
end;
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   162
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   163
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   164
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   165
(** OS related **)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   166
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   167
(* system command execution *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   168
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   169
(*execute Unix command which doesn't take any input from stdin and
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   170
  sends its output to stdout; could be done more easily by IO.execute,
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   171
  but that function seems to be buggy in SML/NJ 0.93*)
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   172
fun execute command =
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   173
  let
4494
7e5611945959 fixed execute;
wenzelm
parents: 4428
diff changeset
   174
    val tmp_name = "/tmp/isabelle-execute";
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   175
    val is = (System.system (command ^ " > " ^ tmp_name); open_in tmp_name);
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   176
    val result = input (is, 999999);
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   177
  in
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   178
    close_in is;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   179
    System.Unsafe.SysIO.unlink tmp_name;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   180
    result
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   181
  end;
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   182
7855
092a6435afad system;
wenzelm
parents: 7149
diff changeset
   183
(*plain version; with return code*)
092a6435afad system;
wenzelm
parents: 7149
diff changeset
   184
fun system cmd = System.system cmd div 256;
092a6435afad system;
wenzelm
parents: 7149
diff changeset
   185
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   186
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   187
(* file handling *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   188
6227
3198f547f8af fixed file_info;
wenzelm
parents: 5816
diff changeset
   189
(*get time of last modification*)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   190
local
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   191
  open System.Timer System.Unsafe.SysIO;
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   192
in
6227
3198f547f8af fixed file_info;
wenzelm
parents: 5816
diff changeset
   193
  fun file_info name = makestring (mtime (PATH name)) handle _ => "";
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   194
end;
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   195
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   196
structure OS =
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   197
struct
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   198
  structure FileSys =
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   199
  struct
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   200
    val chDir = System.Directory.cd;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   201
    val remove = System.Unsafe.SysIO.unlink;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   202
    val getDir = System.Directory.getWD;
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   203
  end;
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   204
end;
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   205
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   206
(*redefine to flush its output immediately -- temporary patch suggested
5816
6f3cb53502fa smart interrupt handler;
wenzelm
parents: 5090
diff changeset
   207
  by Kim Dam Petersen*)         (* FIXME !? *)
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   208
val output = fn (s, t) => (output (s, t); flush_out s);
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   209
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   210
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   211
(* getenv *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   212
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   213
local
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   214
  fun drop_last [] = []
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   215
    | drop_last [x] = []
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   216
    | drop_last (x :: xs) = x :: drop_last xs;
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   217
3594
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   218
  val drop_last_char = implode o drop_last o explode;
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   219
in
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   220
  fun getenv var = drop_last_char
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   221
    (execute ("env | grep '^" ^ var ^ "=' | sed -e 's/" ^ var ^ "=//'"));
193cc37e6f60 tuned comments;
wenzelm
parents: 2413
diff changeset
   222
end;
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   223
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   224
4428
5c26253b8a2e tuned comment;
wenzelm
parents: 4340
diff changeset
   225
(* non-ASCII input (see also Thy/use.ML) *)
2413
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   226
a00f0476e189 SML/NJ startup script (for 0.93).
wenzelm
parents:
diff changeset
   227
val needs_filtered_use = false;