AWK program to Report Video Use

# video.awk
# 2009-08-27
# Takes dumped item data from III and formats it for the web
# Part of a pipeline that starts with the data sorted by using sort command
BEGIN { FS = "\t"
    OFS = "\t";
    indexes = "count,circs,uses"
    split(indexes, cd, ",")
    split(indexes, dvd, ",")
    split(indexes, video, ",")
    print startDtml() > "c_cds.html"
    print startTable() > "c_cds.html"
    print startDtml() > "c_dvds.html"
    print startTable() > "c_dvds.html"
    print startDtml() > "c_videos.html"
    print startTable() > "c_videos.html"
}
function startHtml(title) {
    s = "<html>\n<head>\n<title>" title "</title>\n"
    s = s  "<link rel=\"stylesheet\" type=\"text/css\" href=\"/bk.css\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"style_sheet\" />" 
    s = s "</head>\n<body>\n<img src=\"/images/2rf.gif\" align=\"middle\" hspace=\"10\" ><h1>" title "</h1>\n"
    return s
}
function endHtml() {
    s = "</body>\n</html>"
    return s
}
function startDtml(title) {
    s = "<dtml-var standard_html_header>\n<img src=\"/images/2rf.gif\" align=\"middle\" hspace=\"10\" ><h1>"title"</h1>"
    return s
}
function endDtml() {
    s = "<dtml-var standard_html_footer>"
    return s
}
function startTable() {
    s = "<table>\n"
    return s
}
function endTable() {
    s = "</table>\n"
    return s
}
function printRow(count, title) {
    s = "<tr><td>"count"</td><td>"title"</td></tr>"
    return s
}
function commas(n) {
    gsub(/,/,"",n)
    point = index(n,".") - 1
    if (point < 0) point = length(n)
    while (point > 3) {
        point -= 3
        n = substr(n,1,point)","substr(n,point + 1)
    }
    return n
}
function outputResults(type, counter) {
    totalcnt = counter["count"]
    tc = commas(totalcnt)
    circs = counter["circs"]
    noncirccount = counter["count"] - counter["uses"]
    noncircpercent = (noncirccount / totalcnt) * 100
    s = "<h1>Report for " type "</h1>\n"
    s = s "<h3>Total Item Count: " commas(totalcnt) " </h3>\n"
    s = s "<h3>Count of Non Circulating Items: " commas(noncirccount) "</h3>\n"
    s = s "<h3>Percent Non Circulating Items: " noncircpercent "</h3>\n"
    s = s "<h3>Total Circs: " commas(circs) "</h3>\n"
    return s
}
$3 ~ /whcd/ {
    cd["count"]++
    cd["circs"]+=$2
    if ($2 > 0)  
        cd["uses"]++
    print printRow($2,$1) > "c_cds.html"
}
$3 ~ /whdvd/ {
    dvd["count"]++
    dvd["circs"]+=$2
    if ($2 > 0)  
        dvd["uses"]++
    print printRow($2,$1) > "c_dvds.html"
}
$3 ~ /whv/ {
    video["count"]++
    video["circs"]+=$2
    if ($2 > 0)  
        video["uses"]++
    print printRow($2,$1) > "c_videos.html"
}
END {
    print startDtml() > "c_summary.html"
    print outputResults("CDs", cd) > "c_summary.html"
    print "<a href=\"c_cds.html\">View CD Data</a>  (in decending order)\n\n" > "c_summary.html"
    print  outputResults("DVDs", dvd) > "c_summary.html"
    print "<a href=\"c_dvds.html\">View DVD Data</a>  (in decending order)\n\n" > "c_summary.html"
    print  outputResults("Videos", video) > "c_summary.html"
    print "<a href=\"c_videos.html\">View Video Tape Data</a>  (in decending order)\n\n" > "c_summary.html"
    print endDtml()  > "c_summary.html"
    print endTable() > "c_cds.html"
    print endDtml() > "c_cds.html"
    print endTable() > "c_dvds.html"
    print endDtml() > "c_dvds.html"
    print endTable() > "c_videos.html"
    print endDtml() > "c_videos.html"
}