let file_type_of_file filename =
let rec iter = function
[] -> ft_unknown
| (ft,command) :: q ->
let args = Cam_commands.string_to_argv command in
let len = Array.length args in
if len < 1 then
iter q
else
let rule_name = args.(0) in
let params = Array.sub args 1 (len - 1) in
try
let r = Hashtbl.find rules rule_name in
if r.rule_f params filename then ft else iter q
with
Not_found ->
prerr_endline (Printf.sprintf "Unknown file type rule %s" rule_name);
iter q
in
iter ft_rules#get