+let split s =
+try
+ let i = String.rindex s '.' in
+ if i = 0 then s, "" else
+ String.sub s 0 i, String.sub s i (String.length s - i)
+with Not_found -> s, ""
+
+let compare s1 s2 =
+ let n1, e1 = split s1 in
+ let n2, e2 = split s2 in
+ let e = String.compare e1 e2 in
+ if e = 0 then String.compare n1 n2 else e
+