src/Pure/ML-Systems/alice.ML
author wenzelm
Fri, 03 Oct 2008 21:06:36 +0200
changeset 28488 18fea7e88ea1
parent 27004 616c553c7cf1
child 29564 f8b933a62151
permissions -rw-r--r--
removed obsolete Posix/Signal compatibility wrappers; plain process_id function;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/ML-Systems/alice.ML
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
     3
22837
82cceaf768c8 updated Alice version;
wenzelm
parents: 22576
diff changeset
     4
Compatibility file for Alice 1.4.
23826
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
     5
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
     6
NOTE: there is no wrapper script; may run it interactively as follows:
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
     7
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
     8
$ cd Isabelle/src/Pure
27004
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
     9
$ env ALICE_JIT_MODE=0 ISABELLE_HOME=$(cd ../..; pwd) alice
23835
1990e9acc7d1 tuned comment;
wenzelm
parents: 23826
diff changeset
    10
- val ml_system = "alice";
24807
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    11
- use "ML-Systems/exn.ML";
26226
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
    12
- use "ML-Systems/universal.ML";
24807
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    13
- use "ML-Systems/multithreading.ML";
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    14
- use "ML-Systems/time_limit.ML";
23826
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
    15
- use "ML-Systems/alice.ML";
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
    16
- use "ROOT.ML";
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
    17
- Session.finish ();
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    18
*)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    19
24597
cbf2c5cf335e added ml_system_fix_ints;
wenzelm
parents: 24329
diff changeset
    20
val ml_system_fix_ints = false;
cbf2c5cf335e added ml_system_fix_ints;
wenzelm
parents: 24329
diff changeset
    21
26474
94735cff132c added forget_structure;
wenzelm
parents: 26385
diff changeset
    22
fun forget_structure _ = ();
94735cff132c added forget_structure;
wenzelm
parents: 26385
diff changeset
    23
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    24
fun exit 0 = (OS.Process.exit OS.Process.success): unit
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    25
  | exit _ = OS.Process.exit OS.Process.failure;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    26
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    27
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    28
(** ML system related **)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    29
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    30
(*low-level pointer equality*)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    31
fun pointer_eq (_: 'a, _: 'a) = false;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    32
24809
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    33
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    34
(* integer compatibility -- downgraded IntInf *)
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    35
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    36
structure Time =
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    37
struct
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    38
  open Time;
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    39
  val fromMilliseconds = Time.fromMilliseconds o IntInf.fromInt;
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    40
  val fromSeconds = Time.fromSeconds o IntInf.fromInt;
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    41
end;
41a21f59f74d integer compatibility: added wrapper for structure Time;
wenzelm
parents: 24807
diff changeset
    42
24807
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    43
structure IntInf =
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    44
struct
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    45
  fun divMod (x, y) = (x div y, x mod y);
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    46
  open Int;
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    47
end;
f66ab1dfbae1 downgraded IntInf with divMod;
wenzelm
parents: 24688
diff changeset
    48
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    49
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    50
(* restore old-style character / string functions *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    51
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    52
exception Ord;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    53
fun ord "" = raise Ord
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    54
  | ord s = Char.ord (String.sub (s, 0));
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    55
22575
2ed8a11f3172 fixed chr/explode;
wenzelm
parents: 22563
diff changeset
    56
val chr = String.str o chr;
2ed8a11f3172 fixed chr/explode;
wenzelm
parents: 22563
diff changeset
    57
val explode = map String.str o String.explode;
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    58
val implode = String.concat;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    59
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    60
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    61
(* Poly/ML emulation *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    62
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    63
fun quit () = exit 0;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    64
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24290
diff changeset
    65
fun get_print_depth () = ! Print.depth;
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    66
fun print_depth n = Print.depth := n;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    67
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    68
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    69
(* compiler-independent timing functions *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    70
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    71
structure Timer =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    72
struct
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    73
  open Timer;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    74
  type cpu_timer = unit;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    75
  fun startCPUTimer () = ();
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    76
  fun checkCPUTimer () = {sys = Time.zeroTime, usr = Time.zeroTime};
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    77
  fun checkGCTime () = Time.zeroTime;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    78
end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    79
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    80
fun start_timing () =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    81
  let val CPUtimer = Timer.startCPUTimer();
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    82
      val time = Timer.checkCPUTimer(CPUtimer)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    83
  in  (CPUtimer,time)  end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    84
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    85
fun end_timing (CPUtimer, {sys,usr}) =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    86
  let open Time  (*...for Time.toString, Time.+ and Time.- *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    87
      val {sys=sys2,usr=usr2} = Timer.checkCPUTimer(CPUtimer)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    88
  in  "User " ^ toString (usr2-usr) ^
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    89
      "  All "^ toString (sys2-sys + usr2-usr) ^
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    90
      " secs"
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    91
      handle Time => ""
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    92
  end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    93
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    94
fun check_timer timer =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    95
  let
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    96
    val {sys, usr} = Timer.checkCPUTimer timer;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    97
    val gc = Timer.checkGCTime timer;    (* FIXME already included in usr? *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    98
  in (sys, usr, gc) end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
    99
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   100
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   101
(*prompts*)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   102
fun ml_prompts p1 p2 = ();
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   103
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   104
(*dummy implementation*)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   105
fun profile (n: int) f x = f x;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   106
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   107
(*dummy implementation*)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   108
fun exception_trace f = f ();
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   109
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   110
(*dummy implementation*)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   111
fun print x = x;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   112
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   113
24290
5607b8b752bb tuned comments;
wenzelm
parents: 23965
diff changeset
   114
(* toplevel pretty printing (see also Pure/pure_setup.ML) *)
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   115
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   116
fun make_pp path pprint = (path, pprint);
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   117
fun install_pp (path, pp) = ();
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   118
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   119
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   120
(* ML command execution *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   121
26884
67c54c53da28 use_text/file: ignore str_of_pos argument;
wenzelm
parents: 26504
diff changeset
   122
fun use_text _ _ _ _ _ txt = (Compiler.eval txt; ());
67c54c53da28 use_text/file: ignore str_of_pos argument;
wenzelm
parents: 26504
diff changeset
   123
fun use_file _ _ _ _ name = use name;
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   124
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   125
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   126
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   127
(** interrupts **)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   128
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   129
exception Interrupt;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   130
26084
a7475459c740 replaced ignore/raise_interrupt by more flexible (un)interruptible combinators;
wenzelm
parents: 24809
diff changeset
   131
fun interruptible f x = f x;
a7475459c740 replaced ignore/raise_interrupt by more flexible (un)interruptible combinators;
wenzelm
parents: 24809
diff changeset
   132
fun uninterruptible f x = f (fn (g: 'c -> 'd) => g) x;
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   133
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   134
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   135
(* basis library fixes *)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   136
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   137
structure TextIO =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   138
struct
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   139
  open TextIO;
23139
aa899bce7c3b TextIO.inputLine: use present SML B library version;
wenzelm
parents: 22837
diff changeset
   140
  fun inputLine is = TextIO.inputLine is
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   141
    handle IO.Io _ => raise Interrupt;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   142
end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   143
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   144
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   145
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   146
(** OS related **)
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   147
27004
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   148
structure OS =
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   149
struct
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   150
  open OS;
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   151
  structure FileSys =
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   152
  struct
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   153
    open FileSys;
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   154
    fun tmpName () =
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   155
      let val name = FileSys.tmpName () in
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   156
        if String.isSuffix "\000" name
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   157
        then String.substring (name, 0, size name - 1)
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   158
        else name
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   159
      end;
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   160
  end;
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   161
end;
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   162
23826
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
   163
val cd = OS.FileSys.chDir;
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
   164
val pwd = OS.FileSys.getDir;
463903573934 moved cd/pwd to ML compatibility layer (simplifies bootstrapping with Alice);
wenzelm
parents: 23139
diff changeset
   165
26226
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   166
local
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   167
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   168
fun read_file name =
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   169
  let val is = TextIO.openIn name
26504
6e87c0a60104 before close: Exn.capture/release;
wenzelm
parents: 26474
diff changeset
   170
  in Exn.release (Exn.capture TextIO.inputAll is before TextIO.closeIn is) end;
26226
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   171
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   172
fun write_file name txt =
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   173
  let val os = TextIO.openOut name
26504
6e87c0a60104 before close: Exn.capture/release;
wenzelm
parents: 26474
diff changeset
   174
  in Exn.release (Exn.capture TextIO.output (os, txt) before TextIO.closeOut os) end;
26226
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   175
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   176
in
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   177
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   178
fun system_out script =
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   179
  let
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   180
    val script_name = OS.FileSys.tmpName ();
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   181
    val _ = write_file script_name script;
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   182
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   183
    val output_name = OS.FileSys.tmpName ();
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   184
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   185
    val status =
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   186
      OS.Process.system ("perl -w \"$ISABELLE_HOME/lib/scripts/system.pl\" nogroup " ^
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   187
        script_name ^ " /dev/null " ^ output_name);
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   188
    val rc = if OS.Process.isSuccess status then 0 else 1;
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   189
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   190
    val output = read_file output_name handle IO.Io _ => "";
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   191
    val _ = OS.FileSys.remove script_name handle OS.SysErr _ => ();
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   192
    val _ = OS.FileSys.remove output_name handle OS.SysErr _ => ();
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   193
  in (output, rc) end;
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   194
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   195
end;
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   196
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   197
structure OS =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   198
struct
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   199
  open OS;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   200
  structure FileSys =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   201
  struct
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   202
    fun fileId name =
26226
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   203
      (case system_out ("perl -e '@_ = stat(q:" ^ name ^ ":); print $_[1]'") of
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   204
        ("", _) => raise Fail "OS.FileSys.fileId"   (* FIXME IO.Io!? *)
7ddf8a34dbd5 use "ML-Systems/universal.ML";
wenzelm
parents: 26220
diff changeset
   205
      | (s, _) => (case Int.fromString s of NONE => raise Fail "OS.FileSys.fileId" | SOME i => i));
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   206
    val compare = Int.compare;
27004
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   207
    fun fullPath name =
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   208
      (case system_out ("FILE='" ^ name ^
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   209
        "' && cd \"$(dirname \"$FILE\")\" && echo -n \"$(pwd -P)/$(basename \"$FILE\")\"") of
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   210
        ("", _) => raise SysErr ("Bad file", NONE)
616c553c7cf1 added ISABELLE_HOME to startup;
wenzelm
parents: 26884
diff changeset
   211
      | (s, _) => s);
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   212
    open FileSys;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   213
  end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   214
end;
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   215
28488
18fea7e88ea1 removed obsolete Posix/Signal compatibility wrappers;
wenzelm
parents: 27004
diff changeset
   216
fun process_id () = raise Fail "process_id undefined";
26227
58790194116c added dummy version of string_of_pid;
wenzelm
parents: 26226
diff changeset
   217
22563
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   218
fun getenv var =
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   219
  (case OS.Process.getEnv var of
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   220
    NONE => ""
78fb2af1a5c3 Compatibility file for Alice 1.3 -- experimental!
wenzelm
parents:
diff changeset
   221
  | SOME txt => txt);