method print_stats fmt =
    let print_item e =
      let _, func, (a,b,c,d,e,f,g,h) = e in
      Metrics_parameters.debug
        "stats: func: %s@\nval: ifs %d@\nassigns %d@\nloops %d@\ncalls %d@\ngotos %d@\nmems %d@\nexits %d@\ncyclo %d"
        func a b c d e f g h;
      fprintf fmt "<tr>\n";
      fprintf fmt "<td> %s </td>\n" func;
      fprintf fmt "<td> %d </td>\n" a;
      fprintf fmt "<td> %d </td>\n" b;
      fprintf fmt "<td> %d </td>\n" c;
      fprintf fmt "<td> %d </td>\n" d;
      fprintf fmt "<td> %d </td>\n" e;
      fprintf fmt "<td> %d </td>\n" f;
      fprintf fmt "<td> %d </td>\n" g;
      fprintf fmt "<td> %d </td>\n" h;
      fprintf fmt "</tr>\n";
    in
    while List.length !stats > 0 do
      let first = List.hd !stats in
      let (fic,_,_) = first in
      let fic_stats = (self#stats_of_fic fic) in
      (* print header specific to fic *)
      fprintf fmt "<h3> %s </h3>\n" fic;
      fprintf fmt "        <br>\n";
      fprintf fmt "<table style=\"width: 252px; height: 81px;\" border=\"1\">\n";
      fprintf fmt "  <tbody>\n";
      fprintf fmt "    <tr>\n";
      fprintf fmt "      <th>Function</th>\n";
      fprintf fmt "      <th>#If stmts<br>\n";
      fprintf fmt "      <th>#Assignments<br>\n";
      fprintf fmt "      <th>#Loops<br>\n";
      fprintf fmt "      <th>#Calls<br>\n";
      fprintf fmt "      <th>#Gotos<br>\n";
      fprintf fmt "      <th>#Pointer accesses<br>\n";
      fprintf fmt "      <th>#Exits<br>\n";
      fprintf fmt "      <th>Cyclomatic value<br>\n";
      fprintf fmt "      </th>\n";
      fprintf fmt "    </tr>\n";
      List.iter print_item fic_stats;
      (* print trailer specific to fic *)
      fprintf fmt "  </tbody>\n";
      fprintf fmt "</table>\n"
    done