Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/benchmarks/programs/b-hut/getparam.sml
ViewVC logotype

Annotation of /sml/trunk/benchmarks/programs/b-hut/getparam.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 193 - (view) (download)

1 : monnier 193 (* getparam.sml
2 :     *
3 :     * COPYRIGHT (c) 1993, AT&T Bell Laboratories.
4 :     *)
5 :    
6 :     structure GetParam : sig
7 :    
8 :     exception EOF
9 :    
10 :     val initParam : (string list * string list) -> unit
11 :     val getParam : string -> string
12 :     val getIParam : string -> int
13 :     val getRParam : string -> real
14 :     val getBParam : string -> bool
15 :    
16 :     end = struct
17 :    
18 :     exception EOF
19 :    
20 :     val defaults = ref ([] : string list)
21 :    
22 :     (* ignore arg vector, remember defaults. *)
23 :     fun initParam (argv, defl) = defaults := defl
24 :    
25 :     fun prompt items = (
26 :     TextIO.output(TextIO.stdOut, String.concat items);
27 :     TextIO.flushOut TextIO.stdOut)
28 :    
29 :     structure SS = Substring
30 :    
31 :     (* export version prompts user for value. *)
32 :     fun getParam name = let
33 :     fun scanBind [] = NONE
34 :     | scanBind (s::r) = let
35 :     val (_, suffix) = SS.position name (SS.all s)
36 :     in
37 :     if (SS.isEmpty suffix)
38 :     then scanBind r
39 :     else SOME(SS.string(SS.triml (size name+1) suffix))
40 :     end
41 :     fun get default = (case (TextIO.inputLine TextIO.stdIn)
42 :     of "" => raise EOF
43 :     | "\n" => default
44 :     | s => substring(s, 0, size s - 1)
45 :     (* end case *))
46 :     in
47 :     if (null (! defaults))
48 :     then raise Fail "getParam called before initParam"
49 :     else ();
50 :     case (scanBind (! defaults))
51 :     of (SOME s) => (
52 :     prompt ["enter ", name, " [", s, "]: "];
53 :     get s)
54 :     | NONE => (prompt ["enter ", name, ": "]; get "")
55 :     (* end case *)
56 :     end
57 :    
58 :     local
59 :     fun cvt scanFn = let
60 :     fun cvt' name = let
61 :     fun get () = (case getParam name of "" => get () | s => s)
62 :     val param = get ()
63 :     in
64 :     (valOf (scanFn param)) handle _ => (cvt' name)
65 :     end
66 :     in
67 :     cvt'
68 :     end
69 :     in
70 :     (* get integer parameter *)
71 :     val getIParam = cvt Int.fromString
72 :     (* get real parameter *)
73 :     val getRParam = cvt Real.fromString
74 :     (* get bool parameter *)
75 :     val getBParam = cvt Bool.fromString
76 :     end (* local *)
77 :    
78 :     end; (* GetParam *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0