grosse avancee, fin de cipher
This commit is contained in:
parent
968f4b16e8
commit
38346009e7
|
|
@ -29,4 +29,8 @@ setup.log
|
||||||
_opam/
|
_opam/
|
||||||
|
|
||||||
# Local files
|
# Local files
|
||||||
*~
|
*~
|
||||||
|
|
||||||
|
*.log
|
||||||
|
*.cache
|
||||||
|
*caml-toplevel*
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
# OASIS_START
|
||||||
|
# DO NOT EDIT (digest: a3c674b4239234cbbe53afe090018954)
|
||||||
|
|
||||||
|
SETUP = ocaml setup.ml
|
||||||
|
|
||||||
|
build: setup.data
|
||||||
|
$(SETUP) -build $(BUILDFLAGS)
|
||||||
|
|
||||||
|
doc: setup.data build
|
||||||
|
$(SETUP) -doc $(DOCFLAGS)
|
||||||
|
|
||||||
|
test: setup.data build
|
||||||
|
$(SETUP) -test $(TESTFLAGS)
|
||||||
|
|
||||||
|
all:
|
||||||
|
$(SETUP) -all $(ALLFLAGS)
|
||||||
|
|
||||||
|
install: setup.data
|
||||||
|
$(SETUP) -install $(INSTALLFLAGS)
|
||||||
|
|
||||||
|
uninstall: setup.data
|
||||||
|
$(SETUP) -uninstall $(UNINSTALLFLAGS)
|
||||||
|
|
||||||
|
reinstall: setup.data
|
||||||
|
$(SETUP) -reinstall $(REINSTALLFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(SETUP) -clean $(CLEANFLAGS)
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
$(SETUP) -distclean $(DISTCLEANFLAGS)
|
||||||
|
|
||||||
|
setup.data:
|
||||||
|
$(SETUP) -configure $(CONFIGUREFLAGS)
|
||||||
|
|
||||||
|
configure:
|
||||||
|
$(SETUP) -configure $(CONFIGUREFLAGS)
|
||||||
|
|
||||||
|
.PHONY: build doc test all install uninstall reinstall clean distclean configure
|
||||||
|
|
||||||
|
# OASIS_STOP
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
(** Basic arithmetics with built-in integers *)
|
(** Basic arithmetics with built-in integers *)
|
||||||
|
(**#use "builtin.ml";;**)
|
||||||
open Builtin
|
open Builtin
|
||||||
|
|
||||||
|
|
||||||
(* Greater common divisor and smaller common multiple
|
(* Greater common divisor and smaller common multiple
|
||||||
implemetations.
|
implemetations.
|
||||||
*)
|
*)
|
||||||
|
|
@ -10,7 +11,11 @@ open Builtin
|
||||||
@param a non-zero integers
|
@param a non-zero integers
|
||||||
@param b non-zero integer
|
@param b non-zero integer
|
||||||
*)
|
*)
|
||||||
let rec gcd a b = 0
|
let rec gcd a b =
|
||||||
|
let r = modulo (sign a*a) (sign b*b)
|
||||||
|
in if r > 0 then
|
||||||
|
gcd (sign b *b) r
|
||||||
|
else b;;
|
||||||
|
|
||||||
(* Extended Euclidean algorithm. Computing Bezout Coefficients. *)
|
(* Extended Euclidean algorithm. Computing Bezout Coefficients. *)
|
||||||
|
|
||||||
|
|
@ -20,4 +25,13 @@ let rec gcd a b = 0
|
||||||
@param a non-zero integer
|
@param a non-zero integer
|
||||||
@param b non-zero integer.
|
@param b non-zero integer.
|
||||||
*)
|
*)
|
||||||
let bezout a b = (0, 0, 0)
|
|
||||||
|
let rec bezout a b =
|
||||||
|
let rec bezout_rec u v r u1 v1 r1=
|
||||||
|
if r1 = 0 then
|
||||||
|
(u, v, a*u + b*v)
|
||||||
|
else
|
||||||
|
let q = r/r1 in
|
||||||
|
bezout_rec u1 v1 r1 (u-q*u1) (v-q*v1) (r-q*r1)
|
||||||
|
in bezout_rec 1 0 a 0 1 b;;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,31 @@ open Power
|
||||||
@param m word to cipher.
|
@param m word to cipher.
|
||||||
@param b base ; for ASCII codes should be set to 255.
|
@param b base ; for ASCII codes should be set to 255.
|
||||||
*)
|
*)
|
||||||
let encrypt_cesar k m b = []
|
let encrypt_cesar k m b =
|
||||||
|
let rec encrypt_cesar_rec l =
|
||||||
|
match l with
|
||||||
|
[] -> []
|
||||||
|
| e::l -> begin
|
||||||
|
let rot = modulo (e + k) b in
|
||||||
|
rot::encrypt_cesar_rec l
|
||||||
|
end
|
||||||
|
in encrypt_cesar_rec m;;
|
||||||
|
|
||||||
|
|
||||||
(** Cesar's cipher decryption
|
(** Cesar's cipher decryption
|
||||||
@param k is an integer corresponding to key
|
@param k is an integer corresponding to key
|
||||||
@param m encrypted word.
|
@param m encrypted word.
|
||||||
@param b base ; for ASCII code should be set to 255.
|
@param b base ; for ASCII code should be set to 255.
|
||||||
*)
|
*)
|
||||||
let decrypt_cesar k m b = []
|
let decrypt_cesar k m b =
|
||||||
|
let rec decrypt_cesar_rec l =
|
||||||
|
match l with
|
||||||
|
[] -> []
|
||||||
|
| e::l -> begin
|
||||||
|
let rot = modulo (e - k) b in
|
||||||
|
rot::decrypt_cesar_rec l
|
||||||
|
end
|
||||||
|
in decrypt_cesar_rec m;;
|
||||||
|
|
||||||
(********** RSA Cipher **********)
|
(********** RSA Cipher **********)
|
||||||
|
|
||||||
|
|
@ -30,21 +47,25 @@ let decrypt_cesar k m b = []
|
||||||
@param p prime number
|
@param p prime number
|
||||||
@param q prime number
|
@param q prime number
|
||||||
*)
|
*)
|
||||||
let generate_keys_rsa p q = ((0,0), (0,0))
|
let generate_keys_rsa p q =
|
||||||
|
let n = p * q in
|
||||||
|
let phi = (p-1) * (q-1) in
|
||||||
|
let e = phi - 1 in
|
||||||
|
let (d, _, _) = bezout e phi in
|
||||||
|
((n, e), (n, d));;
|
||||||
|
|
||||||
|
|
||||||
(** Encryption using RSA cryptosystem.
|
(** Encryption using RSA cryptosystem.
|
||||||
@param m integer hash of message
|
@param m integer hash of message
|
||||||
@param pub_key a tuple (n, e) composing public key of RSA cryptosystem.
|
@param pub_key a tuple (n, e) composing public key of RSA cryptosystem.
|
||||||
*)
|
*)
|
||||||
let encrypt_rsa m (n, e) = 0
|
let encrypt_rsa m (n, e) = mod_power m e n;;
|
||||||
|
|
||||||
(** Decryption using RSA cryptosystem.
|
(** Decryption using RSA cryptosystem.
|
||||||
@param m integer hash of encrypter message.
|
@param m integer hash of encrypter message.
|
||||||
@param pub_key a tuple (n, d) composing private key of RSA cryptosystem.
|
@param pub_key a tuple (n, d) composing private key of RSA cryptosystem.
|
||||||
*)
|
*)
|
||||||
let decrypt_rsa m (n , d) = 0
|
let decrypt_rsa m (n , d) = mod_power m d n;;
|
||||||
;;
|
|
||||||
|
|
||||||
(********** ElGamal Cipher **********)
|
(********** ElGamal Cipher **********)
|
||||||
|
|
||||||
|
|
@ -52,23 +73,32 @@ let decrypt_rsa m (n , d) = 0
|
||||||
where p is prime and g having high enough order modulo p.
|
where p is prime and g having high enough order modulo p.
|
||||||
@param p is prime having form 2*q + 1 for prime q.
|
@param p is prime having form 2*q + 1 for prime q.
|
||||||
*)
|
*)
|
||||||
let rec public_data_g p = (0, 0)
|
let rec public_data_g p =
|
||||||
|
let g = (p - 1)/2 in
|
||||||
|
(g, p);;
|
||||||
|
|
||||||
(** Generate ElGamal public data.
|
(** Generate ElGamal public data.
|
||||||
@param pub_data a tuple (g, p) of public data for ElGamal cryptosystem.
|
@param pub_data a tuple (g, p) of public data for ElGamal cryptosystem.
|
||||||
*)
|
*)
|
||||||
let generate_keys_g (g, p) = (0, 0)
|
let generate_keys_g (g, p) =
|
||||||
|
let r = modulo (787581985456192323) g in
|
||||||
|
let pub = mod_power g r p in (pub, r);;
|
||||||
|
|
||||||
(** ElGamal encryption process.
|
(** ElGamal encryption process.
|
||||||
@param msg message to be encrypted.
|
@param msg message to be encrypted.
|
||||||
@param pub_data a tuple (g, p) of ElGamal public data.
|
@param pub_data a tuple (g, p) of ElGamal public data.
|
||||||
@param kA ElGamal public key.
|
@param kA ElGamal public key.
|
||||||
*)
|
*)
|
||||||
let encrypt_g msg (g, p) kA = (0, 0)
|
let encrypt_g msg (g, p) kA =
|
||||||
|
let r = modulo (787581985456192323) g in
|
||||||
|
let c = mod_power g r p in
|
||||||
|
let d = msg * mod_power kA r p in
|
||||||
|
(c, d);;
|
||||||
|
|
||||||
(** ElGamal decryption process.
|
(** ElGamal decryption process.
|
||||||
@param msg a tuple (msgA, msgB) forming an encrypted ElGamal message.
|
@param msg a tuple (msgA, msgB) forming an encrypted ElGamal message.
|
||||||
@param a private key
|
@param a private key
|
||||||
@param pub_data a tuple (g, p) of public data for ElGamal cryptosystem.
|
@param pub_data a tuple (g, p) of public data for ElGamal cryptosystem.
|
||||||
*)
|
*)
|
||||||
let decrypt_g (msgA, msgB) a (g, p) = 0
|
let decrypt_g (msgA, msgB) a (g, p) =
|
||||||
|
msgB / (mod_power msgA a p);;
|
||||||
|
|
|
||||||
|
|
@ -10,27 +10,61 @@ open Basic_arithmetics
|
||||||
(** List composed of 2 and then odd integers starting at 3.
|
(** List composed of 2 and then odd integers starting at 3.
|
||||||
@param n number of elements in the list of integers.
|
@param n number of elements in the list of integers.
|
||||||
*)
|
*)
|
||||||
let init_eratosthenes n = []
|
let init_eratosthenes n =
|
||||||
|
let rec init_eratosthenes_rec i =
|
||||||
|
match i with
|
||||||
|
i when i > n -> []
|
||||||
|
| i when modulo i 2 = 1 -> i::init_eratosthenes_rec (i+2)
|
||||||
|
| i -> init_eratosthenes_rec (i+1)
|
||||||
|
in if n > 1 then
|
||||||
|
2::init_eratosthenes_rec 3
|
||||||
|
else [];;
|
||||||
|
|
||||||
(* Eratosthenes sieve. *)
|
(* Eratosthenes sieve. *)
|
||||||
|
|
||||||
(** Eratosthene sieve.
|
(** Eratosthene sieve.
|
||||||
@param n limit of list of primes, starting at 2.
|
@param n limit of list of primes, starting at 2.
|
||||||
*)
|
*)
|
||||||
let eratosthenes n = []
|
let rec remove_multiples_from_list e l =
|
||||||
|
match l with
|
||||||
|
[] -> []
|
||||||
|
| e1::l1 -> begin
|
||||||
|
match modulo e1 e with
|
||||||
|
0 -> remove_multiples_from_list e l1
|
||||||
|
| _ -> e1::remove_multiples_from_list e l1
|
||||||
|
end;;
|
||||||
|
|
||||||
|
let eratosthenes n =
|
||||||
|
let list = init_eratosthenes n in
|
||||||
|
let rec eratosthenes_rec l =
|
||||||
|
match l with
|
||||||
|
[] -> []
|
||||||
|
| e::l1 -> begin
|
||||||
|
let l1 = remove_multiples_from_list e l1 in
|
||||||
|
e::eratosthenes_rec l1
|
||||||
|
end
|
||||||
|
in eratosthenes_rec list
|
||||||
|
|
||||||
(* Write and read into file functions for lists. *)
|
(* Write and read into file functions for lists. *)
|
||||||
|
|
||||||
(** Write a list into a file. Element seperator is newline.
|
(** Write a list into a file. Element seperator is newline.
|
||||||
@param file path to write to.
|
@param file path to write to.
|
||||||
*)
|
*)
|
||||||
let write_list li file = ()
|
let write_list li file =
|
||||||
|
let oc = open_out file in
|
||||||
|
let rec write l =
|
||||||
|
match l with
|
||||||
|
[] -> close_out oc
|
||||||
|
| e::l1 -> Printf.fprintf oc "%d\n" e; write l1
|
||||||
|
in write li;;
|
||||||
|
|
||||||
(** Write a list of prime numbers up to limit into a txt file.
|
(** Write a list of prime numbers up to limit into a txt file.
|
||||||
@param n limit of prime numbers up to which to build up a list of primes.
|
@param n limit of prime numbers up to which to build up a list of primes.
|
||||||
@param file path to write to.
|
@param file path to write to.
|
||||||
*)
|
*)
|
||||||
let write_list_primes n file = ()
|
let write_list_primes n file =
|
||||||
|
let list = eratosthenes n in
|
||||||
|
write_list list file;;
|
||||||
|
|
||||||
(** Read file safely ; catch End_of_file exception.
|
(** Read file safely ; catch End_of_file exception.
|
||||||
@param in_c input channel.
|
@param in_c input channel.
|
||||||
|
|
@ -42,12 +76,23 @@ let input_line_opt in_c =
|
||||||
(** Create a list out of reading a line per line channel.
|
(** Create a list out of reading a line per line channel.
|
||||||
@param in_c input channel.
|
@param in_c input channel.
|
||||||
*)
|
*)
|
||||||
let create_list in_c = ()
|
let create_list in_c =
|
||||||
|
let rec read acc =
|
||||||
|
match input_line_opt in_c with
|
||||||
|
None -> acc
|
||||||
|
| Some l -> l::read acc
|
||||||
|
in read [];;
|
||||||
|
|
||||||
(** Load list of primes into OCaml environment.
|
(** Load list of primes into OCaml environment.
|
||||||
@param file path to load from.
|
@param file path to load from.
|
||||||
*)
|
*)
|
||||||
let read_list_primes file = []
|
let read_list_primes file =
|
||||||
|
let list = create_list (open_in file) in
|
||||||
|
let rec put list =
|
||||||
|
match list with
|
||||||
|
[] -> []
|
||||||
|
| e::l -> (int_of_string e)::put l
|
||||||
|
in put list;;
|
||||||
|
|
||||||
(* Auxiliary functions to extract big prime numbers for testing
|
(* Auxiliary functions to extract big prime numbers for testing
|
||||||
purposes.
|
purposes.
|
||||||
|
|
@ -80,11 +125,37 @@ let rec last_two l = match l with
|
||||||
plus 1.
|
plus 1.
|
||||||
@param limit positive integer bounding searched for primes.
|
@param limit positive integer bounding searched for primes.
|
||||||
@param isprime function testing for (pseudo)primality.
|
@param isprime function testing for (pseudo)primality.
|
||||||
*)
|
*)
|
||||||
let double_primes limit isprime = []
|
|
||||||
|
|
||||||
|
let double_primes limit isprime =
|
||||||
|
let list = eratosthenes limit in
|
||||||
|
let rec double_primes_rec l =
|
||||||
|
match l with
|
||||||
|
[] -> []
|
||||||
|
| e::l1 -> begin
|
||||||
|
let double = e * 2 + 1 in
|
||||||
|
if isprime double then
|
||||||
|
(e, double)::double_primes_rec l1
|
||||||
|
else
|
||||||
|
double_primes_rec l1
|
||||||
|
end
|
||||||
|
in double_primes_rec list;;
|
||||||
|
|
||||||
(** Finding twin primes.
|
(** Finding twin primes.
|
||||||
@param limit positive integer bounding searched for primes.
|
@param limit positive integer bounding searched for primes.
|
||||||
@param isprime function testing for (pseudo)primality.
|
@param isprime function testing for (pseudo)primality.
|
||||||
*)
|
*)
|
||||||
let twin_primes limit isprime = []
|
let twin_primes limit isprime =
|
||||||
|
let list = eratosthenes limit in
|
||||||
|
let rec double_primes_rec l =
|
||||||
|
match l with
|
||||||
|
[] -> []
|
||||||
|
| e::l1 -> begin
|
||||||
|
let double = e + 2 in
|
||||||
|
if isprime double then
|
||||||
|
(e, double)::double_primes_rec l1
|
||||||
|
else
|
||||||
|
double_primes_rec l1
|
||||||
|
end
|
||||||
|
in double_primes_rec list;;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
(** Power function implementations for built-in integers *)
|
(** Power function implementations for built-in integers *)
|
||||||
|
|
||||||
open Builtin
|
open Builtin
|
||||||
open Basic_arithmetics
|
open Basic_arithmetics;;
|
||||||
|
|
||||||
(* Naive and fast exponentiation ; already implemented in-class.
|
(* Naive and fast exponentiation ; already implemented in-class.
|
||||||
*)
|
*)
|
||||||
|
|
@ -10,13 +10,25 @@ open Basic_arithmetics
|
||||||
@param x base
|
@param x base
|
||||||
@param n exponent
|
@param n exponent
|
||||||
*)
|
*)
|
||||||
let pow x n = 0
|
let pow x n =
|
||||||
|
let rec pow_rec x1 n =
|
||||||
|
match n with
|
||||||
|
0 -> x1
|
||||||
|
| n -> pow_rec (x1*x) (n-1)
|
||||||
|
in pow_rec 1 n;;
|
||||||
|
|
||||||
(** Fast integer exponentiation function. Logarithmic complexity.
|
(** Fast integer exponentiation function. Logarithmic complexity.
|
||||||
@param x base
|
@param x base
|
||||||
@param n exponent
|
@param n exponent
|
||||||
*)
|
*)
|
||||||
let power x n = 0
|
let power x n =
|
||||||
|
if n = 0 then 1 else
|
||||||
|
let rec power_rec x1 n =
|
||||||
|
match n with
|
||||||
|
1 -> x1
|
||||||
|
| n when modulo n 2 = 0 -> power_rec (x1 * x1) (n/2)
|
||||||
|
| n -> x1 * power_rec (x1 * x1) ((n-1)/2)
|
||||||
|
in power_rec x n;;
|
||||||
|
|
||||||
(* Modular expnonentiation ; modulo a given natural number smaller
|
(* Modular expnonentiation ; modulo a given natural number smaller
|
||||||
max_int we never have integer-overflows if implemented properly.
|
max_int we never have integer-overflows if implemented properly.
|
||||||
|
|
@ -27,7 +39,17 @@ let power x n = 0
|
||||||
@param n exponent
|
@param n exponent
|
||||||
@param m modular base
|
@param m modular base
|
||||||
*)
|
*)
|
||||||
let mod_power x n m = 0
|
let mod_power x n m =
|
||||||
|
if n = 0 then
|
||||||
|
1
|
||||||
|
else
|
||||||
|
let rec mod_power_rec c e =
|
||||||
|
let c = modulo (x * c) m
|
||||||
|
in if e < n then
|
||||||
|
mod_power_rec c (e+1)
|
||||||
|
else
|
||||||
|
c
|
||||||
|
in mod_power_rec 1 1;;
|
||||||
|
|
||||||
(* Making use of Fermat Little Theorem for very quick exponentation
|
(* Making use of Fermat Little Theorem for very quick exponentation
|
||||||
modulo prime number.
|
modulo prime number.
|
||||||
|
|
@ -39,4 +61,8 @@ let mod_power x n m = 0
|
||||||
@param n exponent
|
@param n exponent
|
||||||
@param p prime modular base
|
@param p prime modular base
|
||||||
*)
|
*)
|
||||||
let prime_mod_power x n p = 0
|
let prime_mod_power x n p =
|
||||||
|
if x = 0 then
|
||||||
|
0
|
||||||
|
else
|
||||||
|
mod_power x (modulo n (p - 1)) p;;
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,36 @@ open Basic_arithmetics
|
||||||
open Power
|
open Power
|
||||||
|
|
||||||
(** Deterministic primality test *)
|
(** Deterministic primality test *)
|
||||||
let is_prime n = true
|
let is_prime n =
|
||||||
|
if n = 2 || n = 3 then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
if modulo n 2 = 0 || modulo n 3 = 0 then
|
||||||
|
false
|
||||||
|
else
|
||||||
|
let rec is_prime_rec k =
|
||||||
|
if (6*k-1) * (6*k-1) > n then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
match (6*k-1, 6*k+1) with
|
||||||
|
(a, b) when modulo n a = 0 || modulo n b = 0 -> false
|
||||||
|
| _ -> is_prime_rec (k+1)
|
||||||
|
in is_prime_rec 1;;
|
||||||
|
|
||||||
(** Pseudo-primality test based on Fermat's Little Theorem
|
(** Pseudo-primality test based on Fermat's Little Theorem
|
||||||
@param p tested integer
|
@param p tested integer
|
||||||
@param testSeq sequence of integers againt which to test
|
@param testSeq sequence of integers againt which to test
|
||||||
*)
|
*)
|
||||||
let is_pseudo_prime p test_seq = true
|
|
||||||
|
let is_pseudo_prime p test_seq =
|
||||||
|
let rec is_pseudo_prime_rec l =
|
||||||
|
match l with
|
||||||
|
[] -> true
|
||||||
|
| e::l1 when mod_power e (p-1) p <> 1 -> begin
|
||||||
|
if gcd e p = 1 then
|
||||||
|
false
|
||||||
|
else
|
||||||
|
is_pseudo_prime_rec l1
|
||||||
|
end
|
||||||
|
| _::l1 -> is_pseudo_prime_rec l1
|
||||||
|
in is_pseudo_prime_rec test_seq;;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# OASIS_START
|
||||||
|
# DO NOT EDIT (digest: dc86c2ad450f91ca10c931b6045d0499)
|
||||||
|
set -e
|
||||||
|
|
||||||
|
FST=true
|
||||||
|
for i in "$@"; do
|
||||||
|
if $FST; then
|
||||||
|
set --
|
||||||
|
FST=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $i in
|
||||||
|
--*=*)
|
||||||
|
ARG=${i%%=*}
|
||||||
|
VAL=${i##*=}
|
||||||
|
set -- "$@" "$ARG" "$VAL"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set -- "$@" "$i"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
ocaml setup.ml -configure "$@"
|
||||||
|
# OASIS_STOP
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
(* setup.ml generated for the first time by OASIS v0.4.11 *)
|
||||||
|
|
||||||
|
(* OASIS_START *)
|
||||||
|
(* DO NOT EDIT (digest: a426e2d026defb34183b787d31fbdcff) *)
|
||||||
|
(******************************************************************************)
|
||||||
|
(* OASIS: architecture for building OCaml libraries and applications *)
|
||||||
|
(* *)
|
||||||
|
(* Copyright (C) 2011-2016, Sylvain Le Gall *)
|
||||||
|
(* Copyright (C) 2008-2011, OCamlCore SARL *)
|
||||||
|
(* *)
|
||||||
|
(* This library is free software; you can redistribute it and/or modify it *)
|
||||||
|
(* under the terms of the GNU Lesser General Public License as published by *)
|
||||||
|
(* the Free Software Foundation; either version 2.1 of the License, or (at *)
|
||||||
|
(* your option) any later version, with the OCaml static compilation *)
|
||||||
|
(* exception. *)
|
||||||
|
(* *)
|
||||||
|
(* This library is distributed in the hope that it will be useful, but *)
|
||||||
|
(* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *)
|
||||||
|
(* or FITNESS FOR A PARTICULAR PURPOSE. See the file COPYING for more *)
|
||||||
|
(* details. *)
|
||||||
|
(* *)
|
||||||
|
(* You should have received a copy of the GNU Lesser General Public License *)
|
||||||
|
(* along with this library; if not, write to the Free Software Foundation, *)
|
||||||
|
(* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *)
|
||||||
|
(******************************************************************************)
|
||||||
|
|
||||||
|
let () =
|
||||||
|
try
|
||||||
|
Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
|
||||||
|
with Not_found -> ()
|
||||||
|
;;
|
||||||
|
#use "topfind";;
|
||||||
|
#require "oasis.dynrun";;
|
||||||
|
open OASISDynRun;;
|
||||||
|
|
||||||
|
let setup_t = BaseCompat.Compat_0_4.adapt_setup_t setup_t
|
||||||
|
open BaseCompat.Compat_0_4
|
||||||
|
(* OASIS_STOP *)
|
||||||
|
let () = setup ();;
|
||||||
Loading…
Reference in New Issue