summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Weis <Pierre.Weis@inria.fr>2002-03-22 20:46:06 +0000
committerPierre Weis <Pierre.Weis@inria.fr>2002-03-22 20:46:06 +0000
commite40ea8f198f572451585c83c9b8f89fbd21594a1 (patch)
treef39aae6de1766507235d227bfcf6eaceab612c0e
parentc4b203f34c45c1f5974c21aad048bd06bc9faa2b (diff)
Generalization of Arg.parse into Arg.parse_array: we now can parse an
arbitrary string array built during program execution. git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4556 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--stdlib/arg.ml18
-rw-r--r--stdlib/arg.mli5
2 files changed, 15 insertions, 8 deletions
diff --git a/stdlib/arg.ml b/stdlib/arg.ml
index f2a660f84..69f868f73 100644
--- a/stdlib/arg.ml
+++ b/stdlib/arg.ml
@@ -51,11 +51,11 @@ let usage speclist errmsg =
let current = ref 0;;
-let parse speclist anonfun errmsg =
+let parse_array argv speclist anonfun errmsg =
let initpos = !current in
let stop error =
let progname =
- if initpos < Array.length Sys.argv then Sys.argv.(initpos) else "(?)" in
+ if initpos < Array.length argv then argv.(initpos) else "(?)" in
begin match error with
| Unknown "-help" -> ()
| Unknown "--help" -> ()
@@ -74,10 +74,10 @@ let parse speclist anonfun errmsg =
then exit 0
else exit 2
in
- let l = Array.length Sys.argv in
+ let l = Array.length argv in
incr current;
while !current < l do
- let s = Sys.argv.(!current) in
+ let s = argv.(!current) in
if String.length s >= 1 && String.get s 0 = '-' then begin
let action =
try assoc3 s speclist
@@ -89,24 +89,24 @@ let parse speclist anonfun errmsg =
| Set r -> r := true;
| Clear r -> r := false;
| String f when !current + 1 < l ->
- let arg = Sys.argv.(!current+1) in
+ let arg = argv.(!current+1) in
f arg;
incr current;
| Int f when !current + 1 < l ->
- let arg = Sys.argv.(!current+1) in
+ let arg = argv.(!current+1) in
begin try f (int_of_string arg)
with Failure "int_of_string" -> stop (Wrong (s, arg, "an integer"))
end;
incr current;
| Float f when !current + 1 < l ->
- let arg = Sys.argv.(!current+1) in
+ let arg = argv.(!current+1) in
begin try f (float_of_string arg);
with Failure "float_of_string" -> stop (Wrong (s, arg, "a float"))
end;
incr current;
| Rest f ->
while !current < l-1 do
- f Sys.argv.(!current+1);
+ f argv.(!current+1);
incr current;
done;
| _ -> stop (Missing s)
@@ -119,3 +119,5 @@ let parse speclist anonfun errmsg =
end;
done;
;;
+
+let parse = parse_array Sys.argv;;
diff --git a/stdlib/arg.mli b/stdlib/arg.mli
index a4be84d58..cea753a50 100644
--- a/stdlib/arg.mli
+++ b/stdlib/arg.mli
@@ -78,6 +78,11 @@ val parse :
own [-help] and [--help] options in [speclist].
*)
+val parse_array : string array ->
+ (string * spec * string) list -> (string -> unit) -> string -> unit
+(** [Arg.parse_array a speclist anonfun usage_msg] parses array [a] as
+ if it were the the command line. *)
+
exception Bad of string
(** Functions in [spec] or [anonfun] can raise [Arg.Bad] with an error
message to reject invalid arguments. *)