1 structure Util
:> UTIL
=
4 datatype 'a flat_element
=
8 type 'a flat_tree
= 'a flat_element list
11 Web
.print (if n
< 0 then
12 "-" ^
Int.toString (~n
)
17 Web
.print (if n
< 0.0 then
18 "-" ^
Real.fmt (StringCvt.FIX (SOME
2)) (~n
)
20 Real.fmt (StringCvt.FIX (SOME
2)) n
)
27 |
[usr
] => "(" ^ f usr ^
")"
28 | usr
::rest
=> foldl (fn (usr
, s
) => s ^
", " ^ f usr
) ("(" ^ f usr
) rest ^
")"
30 fun neg (r
: real) = ~r
31 fun add (r1
: real, r2
) = r1
+ r2
32 fun mult (r1
, r2
) = real r1
* r2
34 fun isIdent ch
= Char.isLower ch
orelse Char.isDigit ch
orelse ch
= #
"-"
37 size s
> 0 andalso size s
< 40 andalso List.all
isIdent (String.explode s
)
40 size s
> 0 andalso size s
< 100 andalso List.all
validHost (String.fields (fn ch
=> ch
= #
".") s
)
43 size s
> 0 andalso size s
< 50 andalso List.all
44 (fn ch
=> isIdent ch
orelse ch
= #
"." orelse ch
= #
"_" orelse ch
= #
"-" orelse ch
= #
"+")
47 fun validEmailUser s
=
48 size s
> 0 andalso size s
< 50 andalso List.all
49 (fn ch
=> Char.isAlphaNum ch
orelse ch
= #
"." orelse ch
= #
"_" orelse ch
= #
"-" orelse ch
= #
"+")
53 (case String.fields (fn ch
=> ch
= #
"@") s
of
54 [user
, host
] => validEmailUser user
andalso validDomain host
57 fun whoisUrl dom
= String.concat
["http://reports.internic.net/cgi/whois?whois_nic=", dom
, "&type=domain"]
59 val rnd
= ref (Random
.rand (0, 0))
61 fun init () = rnd
:= Random
.rand (SysWord
.toInt (Posix
.Process
.pidToWord (Posix
.ProcEnv
.getpid ())),
62 SysWord
.toInt (Posix
.Process
.pidToWord (Posix
.ProcEnv
.getpid ())))
64 fun randomPassword () = Int.toString (Int.abs (Random
.randInt (!rnd
)))
67 String.concatWith
"/" ("/etc/domains" :: String.fields (fn ch
=> ch
= #
".") dom
)
71 val inf
= TextIO.openIn fname
74 case TextIO.inputLine inf
of
75 NONE
=> String.concat (List.rev lines
)
76 | SOME line
=> readLines (line
:: lines
)
79 before TextIO.closeIn inf
82 fun mem (x
, ls
) = List.exists (fn y
=> y
= x
) ls
84 val allLower
= CharVector
.map
Char.toLower
86 fun normEmail s
= case String.tokens
Char.isSpace (allLower s
) of