let rec print_orals_table_line_html (hpr:string -> unit) (start:Unix.tm)
      (step:int) (tnums:int list list) = 
    let rec is_empty tlist = match tlist with 
      | []   -> true
      | x::c -> (x = []) && is_empty c in 
    let rec handle_line tlist = match tlist with 
      | [] -> hpr "</tr>\n"; [] (* end of line *)
      | x::c -> if (List.length x = 0) then begin
          hpr "<td/>";
          x::(handle_line c)
        end else begin
          hpr (Printf.sprintf "<td align='center'>%d</td>\n" (List.hd x));
          (List.tl x)::(handle_line c) 
        end in 
      if not(is_empty tnums) then begin
        (* Beginning of line *)
        let (sectime,_) = Unix.mktime start in
        let newtime     = Unix.localtime (sectime+.(float step)) in
          hpr (Printf.sprintf "<tr><td align='center'>%s</td>\n" (time_to_string start));
          print_orals_table_line_html hpr newtime step (handle_line tnums);
      end