let print_gradelist_html (hpr : string -> unit) (gl:student list) (padd:paddress) = 
    hpr "<center>\n<table width='90%%' frame='hsides' \nrules='groups' border='3' summary='Groupes' style='font-size:xx-small;'>\n<colgroup align='left' span='2'/>\n";
    let pas = pa_to_string padd in
    let thisbool = ref true in 
    (* Print headers *)
    hpr (Printf.sprintf "<tr>\n<th><a href='gradelist.html?sort=alpha&amp;projnum=%s'>Nom</a></th><th>Pr\233nom</th>\n<th><a href='gradelist.html?sort=grade%s&amp;projnum=%s'>Note</a></th></tr>\n\n" 
           pas pas pas);
    (* Print all grades *)
    List.iter (fun stu -> thisbool := not(!thisbool);
                 let gra = student_grade stu padd in
                 let sra = (if (gra >=0.) then (Printf.sprintf "%.1f" gra) else ""in
                   hpr (Printf.sprintf "<tr bgcolor='%s'><td>%s</td>\n<td>%s</td><td align='center'>%s</td></tr>\n" (if (!thisbool) then "#E6F1FF" else "#FFFFFF")
                          stu.name stu.pren sra)) gl;
    (* End table *)
    hpr "</table>\n</center>"