Blame build-aux/pmccabe2html

Packit aea12f
# pmccabe2html - AWK script to convert pmccabe output to html       -*- awk -*-
Packit aea12f
Packit Service 991b93
# Copyright (C) 2007-2020 Free Software Foundation, Inc.
Packit aea12f
Packit aea12f
# This program is free software: you can redistribute it and/or modify
Packit aea12f
# it under the terms of the GNU General Public License as published by
Packit aea12f
# the Free Software Foundation, either version 3 of the License, or
Packit aea12f
# (at your option) any later version.
Packit aea12f
#
Packit aea12f
# This program is distributed in the hope that it will be useful,
Packit aea12f
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit aea12f
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit aea12f
# GNU General Public License for more details.
Packit aea12f
#
Packit aea12f
# You should have received a copy of the GNU General Public License
Packit aea12f
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
Packit aea12f
Packit aea12f
# Written by Jose E. Marchesi <jemarch@gnu.org>.
Packit aea12f
# Adapted for gnulib by Simon Josefsson <simon@josefsson.org>.
Packit aea12f
# Added support for C++ by Giuseppe Scrivano <gscrivano@gnu.org>.
Packit aea12f
Packit aea12f
# Typical Invocation is from a Makefile.am:
Packit aea12f
#
Packit aea12f
# CYCLO_SOURCES = ${top_srcdir}/src/*.[ch]
Packit aea12f
#
Packit aea12f
# cyclo-$(PACKAGE).html: $(CYCLO_SOURCES)
Packit aea12f
# 	$(PMCCABE) $(CYCLO_SOURCES) \
Packit aea12f
# 		| sort -nr \
Packit aea12f
# 		| $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
Packit aea12f
# 			-v lang=html -v name="$(PACKAGE_NAME)" \
Packit aea12f
# 			-v vcurl="https://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \
Packit aea12f
# 			-v url="https://www.gnu.org/software/$(PACKAGE)/" \
Packit aea12f
# 			-v css=${top_srcdir}/build-aux/pmccabe.css \
Packit aea12f
# 			-v cut_dir=${top_srcdir}/ \
Packit aea12f
# 			> $@-tmp
Packit aea12f
# 	mv $@-tmp $@
Packit aea12f
#
Packit aea12f
# The variables available are:
Packit aea12f
#   lang     output language, either 'html' or 'wiki'
Packit aea12f
#   name     project name
Packit aea12f
#   url      link to project's home page
Packit aea12f
#   vcurl    URL to version controlled source code browser,
Packit aea12f
#            a %FILENAME% in the string is replaced with the relative
Packit aea12f
#            source filename
Packit aea12f
#   css      CSS stylesheet filename, included verbatim in HTML output
Packit aea12f
#   css_url  link to CSS stylesheet, an URL
Packit aea12f
Packit aea12f
# Prologue & configuration
Packit aea12f
BEGIN {
Packit aea12f
    # Portable lookup of present time.
Packit aea12f
    "date +%s" | getline epoch_time
Packit aea12f
    "date" | getline chronos_time
Packit aea12f
Packit aea12f
    section_global_stats_p = 1
Packit aea12f
    section_function_cyclo_p = 1
Packit aea12f
Packit aea12f
    # "html" or "wiki"
Packit aea12f
    package_name = name
Packit aea12f
    output_lang = lang
Packit aea12f
Packit aea12f
    # General Options
Packit aea12f
    cyclo_simple_max = 10
Packit aea12f
    cyclo_moderate_max = 20
Packit aea12f
    cyclo_high_max = 50
Packit aea12f
    source_file_link_tmpl = vcurl
Packit aea12f
Packit aea12f
    # HTML options
Packit aea12f
    if (url != "")
Packit aea12f
    {
Packit aea12f
	html_prolog = "Back to " package_name " Homepage

"
Packit aea12f
    }
Packit aea12f
    html_epilog = "
\
Packit aea12f
Copyright (c) 2007, 2008 Free Software Foundation, Inc."
Packit aea12f
    html_doctype = "
Packit aea12f
\"http://www.w3.org/TR/html401/loose.dtd\">"
Packit aea12f
    html_comment = ""
Packit aea12f
    html_title = "Cyclomatic Complexity report for " package_name
Packit aea12f
Packit aea12f
    # Wiki options
Packit aea12f
    wiki_prolog = "{{Note|This page has been automatically generated}}"
Packit aea12f
    wiki_epilog = ""
Packit aea12f
Packit aea12f
    # Internal variables
Packit aea12f
    nfuncs = 0;
Packit aea12f
}
Packit aea12f
Packit aea12f
# Functions
Packit aea12f
Packit aea12f
function build_stats()
Packit aea12f
{
Packit aea12f
    # Maximum modified cyclo
Packit aea12f
    for (fcn in mcyclo)
Packit aea12f
    {
Packit aea12f
        num_of_functions++
Packit aea12f
        if (mcyclo[fcn] > max_mcyclo)
Packit aea12f
        {
Packit aea12f
            max_mcyclo = mcyclo[fcn]
Packit aea12f
        }
Packit aea12f
Packit aea12f
        if (mcyclo[fcn] > cyclo_high_max)
Packit aea12f
        {
Packit aea12f
            num_of_untestable_functions++
Packit aea12f
        }
Packit aea12f
        else if (mcyclo[fcn] > cyclo_moderate_max)
Packit aea12f
        {
Packit aea12f
            num_of_high_functions++
Packit aea12f
        }
Packit aea12f
        else if (mcyclo[fcn] > cyclo_simple_max)
Packit aea12f
        {
Packit aea12f
            num_of_moderate_functions++
Packit aea12f
        }
Packit aea12f
        else
Packit aea12f
        {
Packit aea12f
            num_of_simple_functions++
Packit aea12f
        }
Packit aea12f
    }
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_fnc_table_complete (caption)
Packit aea12f
{
Packit aea12f
    html_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1)
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_fnc_table_abbrev (caption)
Packit aea12f
{
Packit aea12f
    html_fnc_table(caption, 1, 1, 0, 0, 1, 0, 0)
Packit aea12f
}
Packit aea12f
Packit aea12f
Packit aea12f
function html_fnc_table (caption,
Packit aea12f
                         fname_p,
Packit aea12f
                         mcyclo_p,
Packit aea12f
                         cyclo_p,
Packit aea12f
                         num_statements_p,
Packit aea12f
                         num_lines_p,
Packit aea12f
                         first_line_p,
Packit aea12f
                         file_p)
Packit aea12f
{
Packit aea12f
    print ""
Packit aea12f
    if (caption != "")
Packit aea12f
    {
Packit aea12f
        print "<caption class=\"function_table_caption\">" caption "</caption>"
Packit aea12f
    }
Packit aea12f
    html_fnc_header(fname_p,
Packit aea12f
                    mcyclo_p,
Packit aea12f
                    cyclo_p,
Packit aea12f
                    num_statements_p,
Packit aea12f
                    num_lines_p,
Packit aea12f
                    first_line_p,
Packit aea12f
                    file_p)
Packit aea12f
    for (nfnc = 1; nfnc <= nfuncs; nfnc++)
Packit aea12f
    {
Packit aea12f
        html_fnc(nfnc,
Packit aea12f
                 fname_p,
Packit aea12f
                 mcyclo_p,
Packit aea12f
                 cyclo_p,
Packit aea12f
                 num_statements_p,
Packit aea12f
                 num_lines_p,
Packit aea12f
                 first_line_p,
Packit aea12f
                 file_p)
Packit aea12f
    }
Packit aea12f
    print ""
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_header ()
Packit aea12f
{
Packit aea12f
    print html_doctype
Packit aea12f
    print "<html>"
Packit aea12f
    print html_comment
Packit aea12f
    print "<head>"
Packit aea12f
    print "<title>" html_title "</title>"
Packit aea12f
    print ""
Packit aea12f
    print "<meta name=\"description\" content=\"" html_title "\">"
Packit aea12f
    print "<meta name=\"keywords\" content=\"" html_title "\">"
Packit aea12f
    print "<meta name=\"resource-type\" content=\"document\">"
Packit aea12f
    print "<meta name=\"distribution\" content=\"global\">"
Packit aea12f
    print "<meta name=\"Generator\" content=\"pmccabe2html\">"
Packit aea12f
    print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
Packit aea12f
    print "<script language=\"javascript\" type=\"text/javascript\">"
Packit aea12f
    print "function show_hide(idCapa, idButton, fuerzaVisibilidad)\
Packit aea12f
{\
Packit aea12f
        var button = document.getElementById(idButton);\
Packit aea12f
	var capa = document.getElementById(idCapa);\
Packit aea12f
	if (capa)\
Packit aea12f
	{\
Packit aea12f
		if (fuerzaVisibilidad && fuerzaVisibilidad!=\"\") {\
Packit aea12f
			if (fuerzaVisibilidad==\"visible\") capa.style.display=\"\";\
Packit aea12f
			else capa.style.display=\"none\";\
Packit aea12f
		}\
Packit aea12f
		else\
Packit aea12f
		{\
Packit aea12f
			if (capa.style.display == \"none\") {\
Packit aea12f
				capa.style.display = \"\";\
Packit aea12f
                                button.innerHTML = \"↑\";\
Packit aea12f
			} else {\
Packit aea12f
				capa.style.display = \"none\";\
Packit aea12f
                                button.innerHTML = \"↓\";     \
Packit aea12f
			}\
Packit aea12f
		}\
Packit aea12f
	}\
Packit aea12f
}"
Packit aea12f
    print "</script>"
Packit aea12f
Packit aea12f
Packit aea12f
    if (css_url != "")
Packit aea12f
    {
Packit aea12f
        print "<link rel=\"stylesheet\" href=\"" css_url "\" type =\"text/css\" media=\"screen\"/>"
Packit aea12f
    }
Packit aea12f
    if (css != "")
Packit aea12f
    {
Packit aea12f
        print "<style type =\"text/css\" media=\"screen\">"
Packit aea12f
	print "
Packit aea12f
        while ((getline cssline < css) > 0)
Packit aea12f
        {
Packit aea12f
	    print cssline
Packit aea12f
	}
Packit aea12f
        print "-->"
Packit aea12f
	print "</style>"
Packit aea12f
	close(css)
Packit aea12f
    }
Packit aea12f
    print "</head>"
Packit aea12f
    print "
Packit aea12f
vlink=\"#800080\" alink=\"#FF0000\">"
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_footer ()
Packit aea12f
{
Packit aea12f
    print "</body>"
Packit aea12f
    print "</html>"
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_fnc_header (fname_p,
Packit aea12f
                          mcyclo_p,
Packit aea12f
                          cyclo_p,
Packit aea12f
                          num_statements_p,
Packit aea12f
                          num_lines_p,
Packit aea12f
                          first_line_p,
Packit aea12f
                          file_p)
Packit aea12f
{
Packit aea12f
    print ""
Packit aea12f
    if (fname_p)
Packit aea12f
    {
Packit aea12f
        # Function name
Packit aea12f
        print ""
Packit aea12f
        print ""
Packit aea12f
        print ""
Packit aea12f
Packit aea12f
        print ""
Packit aea12f
        print "Function Name"
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (mcyclo_p)
Packit aea12f
    {
Packit aea12f
        # Modified cyclo
Packit aea12f
        print ""
Packit aea12f
        print "Modified Cyclo"
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (cyclo_p)
Packit aea12f
    {
Packit aea12f
        # Cyclo
Packit aea12f
        print ""
Packit aea12f
        print "Cyclomatic"
Packit aea12f
        print "
"
Packit aea12f
        print "Complexity"
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (num_statements_p)
Packit aea12f
    {
Packit aea12f
        print ""
Packit aea12f
        print "Number of"
Packit aea12f
        print "
"
Packit aea12f
        print "Statements"
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (num_lines_p)
Packit aea12f
    {
Packit aea12f
        print ""
Packit aea12f
        print "Number of"
Packit aea12f
        print "
"
Packit aea12f
        print "Lines"
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (first_line_p)
Packit aea12f
    {
Packit aea12f
        print ""
Packit aea12f
        print "First Line"
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (file_p)
Packit aea12f
    {
Packit aea12f
        print ""
Packit aea12f
        print "Source File"
Packit aea12f
        print ""
Packit aea12f
Packit aea12f
    }
Packit aea12f
    print ""
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_fnc (nfun,
Packit aea12f
                   fname_p,
Packit aea12f
                   mcyclo_p,
Packit aea12f
                   cyclo_p,
Packit aea12f
                   num_statements_p,
Packit aea12f
                   num_lines_p,
Packit aea12f
                   first_line_p,
Packit aea12f
                   file_p)
Packit aea12f
{
Packit aea12f
    fname = fnames[nfun]
Packit aea12f
Packit aea12f
    # Function name
Packit aea12f
    trclass = "function_entry_simple"
Packit aea12f
    if (mcyclo[nfun] > cyclo_high_max)
Packit aea12f
    {
Packit aea12f
        trclass="function_entry_untestable"
Packit aea12f
    }
Packit aea12f
    else if (mcyclo[nfun] > cyclo_moderate_max)
Packit aea12f
    {
Packit aea12f
        trclass="function_entry_high"
Packit aea12f
    }
Packit aea12f
    else if (mcyclo[nfun] > cyclo_simple_max)
Packit aea12f
    {
Packit aea12f
        trclass="function_entry_moderate"
Packit aea12f
    }
Packit aea12f
Packit aea12f
    print ""
Packit aea12f
    if (fname_p)
Packit aea12f
    {
Packit aea12f
        print ""
Packit aea12f
        if (file_p && mcyclo[nfun] > cyclo_simple_max)
Packit aea12f
        {
Packit aea12f
            print "\
Packit aea12f
"
Packit aea12f
        }
Packit aea12f
        else
Packit aea12f
        {
Packit aea12f
            print " "
Packit aea12f
        }
Packit aea12f
        print ""
Packit aea12f
Packit aea12f
        print ""
Packit aea12f
        print fname
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (mcyclo_p)
Packit aea12f
    {
Packit aea12f
        # Modified cyclo
Packit aea12f
        print ""
Packit aea12f
        print mcyclo[nfun]
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (cyclo_p)
Packit aea12f
    {
Packit aea12f
        # Cyclo
Packit aea12f
        print ""
Packit aea12f
        print cyclo[nfun]
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (num_statements_p)
Packit aea12f
    {
Packit aea12f
        # Number of statements
Packit aea12f
        print ""
Packit aea12f
        print num_statements[nfun]
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (num_lines_p)
Packit aea12f
    {
Packit aea12f
        # Number of lines
Packit aea12f
        print ""
Packit aea12f
        print num_lines[nfun]
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (first_line_p)
Packit aea12f
    {
Packit aea12f
        # First line
Packit aea12f
        print ""
Packit aea12f
        print first_line[nfun]
Packit aea12f
        print ""
Packit aea12f
    }
Packit aea12f
    if (file_p)
Packit aea12f
    {
Packit aea12f
        href = ""
Packit aea12f
        if (source_file_link_tmpl != "")
Packit aea12f
        {
Packit aea12f
            # Get href target
Packit aea12f
            href = source_file_link_tmpl
Packit aea12f
            sub(/%FILENAME%/, file[nfun], href)
Packit aea12f
        }
Packit aea12f
Packit aea12f
        # Source file
Packit aea12f
        print ""
Packit aea12f
        if (href != "")
Packit aea12f
        {
Packit aea12f
            print "" file[nfun] ""
Packit aea12f
        }
Packit aea12f
        else
Packit aea12f
        {
Packit aea12f
            print file[nfun]
Packit aea12f
        }
Packit aea12f
Packit aea12f
        print ""
Packit aea12f
Packit aea12f
Packit aea12f
        print ""
Packit aea12f
Packit aea12f
        if (mcyclo[nfun] > cyclo_simple_max)
Packit aea12f
        {
Packit aea12f
            print ""
Packit aea12f
Packit aea12f
            num_columns = 1;
Packit aea12f
            if (fname_p) { num_columns++ }
Packit aea12f
            if (mcyclo_p) { num_columns++ }
Packit aea12f
            if (cyclo_p) { num_columns++ }
Packit aea12f
            if (num_statements_p) { num_columns++ }
Packit aea12f
            if (num_lines_p) { num_columns++ }
Packit aea12f
            if (first_line_p) { num_columns++ }
Packit aea12f
            if (file_p) { num_columns++ }
Packit aea12f
Packit aea12f
            print ""
Packit aea12f
            print "
"
Packit aea12f
            print "
"
Packit aea12f
Packit aea12f
            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
Packit aea12f
            {
Packit aea12f
                gsub(/&/, "\\&", codeline)	# Must come first.
Packit aea12f
                gsub(/</, "\\<", codeline)
Packit aea12f
                gsub(/>/, "\\>", codeline)
Packit aea12f
Packit aea12f
                print codeline
Packit aea12f
            }
Packit aea12f
            close(fname nfun "_fn.txt")
Packit aea12f
            system("rm " "'" fname "'" nfun "_fn.txt")
Packit aea12f
            print ""
Packit aea12f
            print ""
Packit aea12f
            print ""
Packit aea12f
            print ""
Packit aea12f
        }
Packit aea12f
Packit aea12f
    }
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_global_stats ()
Packit aea12f
{
Packit aea12f
    print "
Summary
"
Packit aea12f
Packit aea12f
    print ""
Packit aea12f
    # Total number of functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Total number of functions"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print num_of_functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Number of simple functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Number of low risk functions"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print num_of_simple_functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Number of moderate functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Number of moderate risk functions"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print num_of_moderate_functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Number of high functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Number of high risk functions"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print num_of_high_functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Number of untestable functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Number of untestable functions"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print num_of_untestable_functions
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "
"
Packit aea12f
}
Packit aea12f
Packit aea12f
function html_function_cyclo ()
Packit aea12f
{
Packit aea12f
    print "
Details for all functions
"
Packit aea12f
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print " "
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Cyclomatic Complexity"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Risk Evaluation"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Simple
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print " "
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "0 - " cyclo_simple_max
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Simple module, without much risk"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Moderate
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print " "
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print cyclo_simple_max + 1 " - " cyclo_moderate_max
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "More complex module, moderate risk"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # High
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print " "
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print cyclo_moderate_max + 1 " - " cyclo_high_max
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Complex module, high risk"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    # Untestable
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print " "
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "greater than " cyclo_high_max
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "Untestable module, very high risk"
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    print "
"
Packit aea12f
    html_fnc_table_complete("")
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_global_stats ()
Packit aea12f
{
Packit aea12f
    print "{| class=\"cyclo_summary_table\""
Packit aea12f
    # Total number of functions
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_summary_header_entry\" | Total number of functions"
Packit aea12f
    print "| class=\"cyclo_summary_number_entry\" |" num_of_functions
Packit aea12f
    # Number of simple functions
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions"
Packit aea12f
    print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions
Packit aea12f
    # Number of moderate functions
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions"
Packit aea12f
    print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions
Packit aea12f
    # Number of high functions
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions"
Packit aea12f
    print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions
Packit aea12f
    # Number of untestable functions
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions"
Packit aea12f
    print "| class=\"cyclo_summary_number_entry\" |" num_of_untestable_functions
Packit aea12f
    print "|}"
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_function_cyclo ()
Packit aea12f
{
Packit aea12f
    print "==Details for all functions=="
Packit aea12f
Packit aea12f
    print "Used ranges:"
Packit aea12f
Packit aea12f
    print "{| class =\"cyclo_ranges_table\""
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_ranges_header_entry\" | "
Packit aea12f
    print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity"
Packit aea12f
    print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation"
Packit aea12f
    # Simple
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_ranges_entry_simple\" | "
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk"
Packit aea12f
    # Moderate
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_ranges_entry_moderate\" | "
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " cyclo_moderate_max
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk"
Packit aea12f
    # High
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_ranges_entry_high\" | "
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " cyclo_high_max
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" | Complex module, high risk"
Packit aea12f
    # Untestable
Packit aea12f
    print "|-"
Packit aea12f
    print "| class=\"cyclo_ranges_entry_untestable\" | "
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max
Packit aea12f
    print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk"
Packit aea12f
    print "|}"
Packit aea12f
Packit aea12f
    print ""
Packit aea12f
    print ""
Packit aea12f
    wiki_fnc_table_complete("")
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_fnc_table_complete (caption)
Packit aea12f
{
Packit aea12f
    wiki_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1)
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_fnc_table_abbrev (caption)
Packit aea12f
{
Packit aea12f
    wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0)
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_fnc_table (caption,
Packit aea12f
                         fname_p,
Packit aea12f
                         mcyclo_p,
Packit aea12f
                         cyclo_p,
Packit aea12f
                         num_statements_p,
Packit aea12f
                         num_lines_p,
Packit aea12f
                         first_line_p,
Packit aea12f
                         file_p)
Packit aea12f
{
Packit aea12f
    print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" cellspacing=\"0\">"
Packit aea12f
    if (caption != "")
Packit aea12f
    {
Packit aea12f
        print "|+" caption
Packit aea12f
    }
Packit aea12f
    wiki_fnc_header(fname_p,
Packit aea12f
                    mcyclo_p,
Packit aea12f
                    cyclo_p,
Packit aea12f
                    num_statements_p,
Packit aea12f
                    num_lines_p,
Packit aea12f
                    first_line_p,
Packit aea12f
                    file_p)
Packit aea12f
    for (nfnc = 1; nfnc <= nfuncs; nfnc++)
Packit aea12f
    {
Packit aea12f
        wiki_fnc(nfnc,
Packit aea12f
                 fname_p,
Packit aea12f
                 mcyclo_p,
Packit aea12f
                 cyclo_p,
Packit aea12f
                 num_statements_p,
Packit aea12f
                 num_lines_p,
Packit aea12f
                 first_line_p,
Packit aea12f
                 file_p)
Packit aea12f
    }
Packit aea12f
    print "|}"
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_fnc_header (fname_p,
Packit aea12f
                          mcyclo_p,
Packit aea12f
                          cyclo_p,
Packit aea12f
                          num_statements_p,
Packit aea12f
                          num_lines_p,
Packit aea12f
                          first_line_p,
Packit aea12f
                          file_p)
Packit aea12f
{
Packit aea12f
    if (fname_p)
Packit aea12f
    {
Packit aea12f
        # Function name
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | Function Name"
Packit aea12f
    }
Packit aea12f
    if (mcyclo_p)
Packit aea12f
    {
Packit aea12f
        # Modified cyclo
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo"
Packit aea12f
    }
Packit aea12f
    if (cyclo_p)
Packit aea12f
    {
Packit aea12f
        # Cyclo
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic Complexity"
Packit aea12f
    }
Packit aea12f
    if (num_statements_p)
Packit aea12f
    {
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | Number of Statements"
Packit aea12f
    }
Packit aea12f
    if (num_lines_p)
Packit aea12f
    {
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | Number of Lines"
Packit aea12f
    }
Packit aea12f
    if (first_line_p)
Packit aea12f
    {
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | First Line"
Packit aea12f
    }
Packit aea12f
    if (file_p)
Packit aea12f
    {
Packit aea12f
        print "! class=\"cyclo_function_table_header_entry\" | Source File"
Packit aea12f
    }
Packit aea12f
}
Packit aea12f
Packit aea12f
function wiki_fnc (nfnc,
Packit aea12f
                   fname_p,
Packit aea12f
                   mcyclo_p,
Packit aea12f
                   cyclo_p,
Packit aea12f
                   num_statements_p,
Packit aea12f
                   num_lines_p,
Packit aea12f
                   first_line_p,
Packit aea12f
                   file_p)
Packit aea12f
{
Packit aea12f
   fname = fnames[nfnc]
Packit aea12f
Packit aea12f
    # Function name
Packit aea12f
    trclass = "cyclo_function_entry_simple"
Packit aea12f
    if (mcyclo[nfnc] > cyclo_high_max)
Packit aea12f
    {
Packit aea12f
        trclass="cyclo_function_entry_untestable"
Packit aea12f
    }
Packit aea12f
    else if (mcyclo[nfnc] > cyclo_moderate_max)
Packit aea12f
    {
Packit aea12f
        trclass="cyclo_function_entry_high"
Packit aea12f
    }
Packit aea12f
    else if (mcyclo[nfnc] > cyclo_simple_max)
Packit aea12f
    {
Packit aea12f
        trclass="cyclo_function_entry_moderate"
Packit aea12f
    }
Packit aea12f
Packit aea12f
    print "|- class=\"" trclass "\""
Packit aea12f
    if (fname_p)
Packit aea12f
    {
Packit aea12f
        print "| class=\"cyclo_function_entry_name\" |" fname
Packit aea12f
    }
Packit aea12f
    if (mcyclo_p)
Packit aea12f
    {
Packit aea12f
        # Modified cyclo
Packit aea12f
        print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc]
Packit aea12f
    }
Packit aea12f
    if (cyclo_p)
Packit aea12f
    {
Packit aea12f
        # Cyclo
Packit aea12f
        print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc]
Packit aea12f
    }
Packit aea12f
    if (num_statements_p)
Packit aea12f
    {
Packit aea12f
        # Number of statements
Packit aea12f
        print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc]
Packit aea12f
    }
Packit aea12f
    if (num_lines_p)
Packit aea12f
    {
Packit aea12f
        # Number of lines
Packit aea12f
        print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc]
Packit aea12f
    }
Packit aea12f
    if (first_line_p)
Packit aea12f
    {
Packit aea12f
        # First line
Packit aea12f
        print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc]
Packit aea12f
    }
Packit aea12f
    if (file_p)
Packit aea12f
    {
Packit aea12f
        href = ""
Packit aea12f
        if (source_file_link_tmpl != "")
Packit aea12f
        {
Packit aea12f
            # Get href target
Packit aea12f
            href = source_file_link_tmpl
Packit aea12f
            sub(/%FILENAME%/, file[nfnc], href)
Packit aea12f
        }
Packit aea12f
Packit aea12f
        # Source file
Packit aea12f
        print "| class=\"cyclo_function_entry_filename\" |" \
Packit aea12f
            ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]")
Packit aea12f
    }
Packit aea12f
}
Packit aea12f
Packit aea12f
# Scan data from a line
Packit aea12f
{
Packit aea12f
    function_name = $7
Packit aea12f
Packit aea12f
    nfuncs++;
Packit aea12f
    fnames[nfuncs] = function_name
Packit aea12f
    mcyclo[nfuncs] = $1
Packit aea12f
    cyclo[nfuncs] = $2
Packit aea12f
    num_statements[nfuncs] = $3
Packit aea12f
    first_line[nfuncs] = $4
Packit aea12f
    num_lines[nfuncs] = $5
Packit aea12f
Packit aea12f
    # Build the filename from the file_spec ($6)
Packit aea12f
    begin_util_path = index($6, cut_dir)
Packit aea12f
    tmpfilename = substr($6, begin_util_path + length(cut_dir))
Packit aea12f
    sub(/\([0-9]+\):/, "", tmpfilename)
Packit aea12f
    file[nfuncs] = tmpfilename
Packit aea12f
Packit aea12f
    if (mcyclo[nfuncs] > cyclo_simple_max)
Packit aea12f
    {
Packit aea12f
        # Extract function contents to a fn_txt file
Packit aea12f
        filepath = $6
Packit aea12f
Packit aea12f
        sub(/\([0-9]+\):/, "", filepath)
Packit aea12f
        num_line = 0
Packit aea12f
Packit aea12f
        while ((getline codeline < filepath) > 0)
Packit aea12f
        {
Packit aea12f
            num_line++;
Packit aea12f
            if ((num_line >= first_line[nfuncs]) &&
Packit aea12f
                (num_line < first_line[nfuncs] + num_lines[nfuncs]))
Packit aea12f
            {
Packit aea12f
                print codeline > (function_name nfuncs "_fn.txt")
Packit aea12f
            }
Packit aea12f
        }
Packit aea12f
        close (function_name nfuncs "_fn.txt")
Packit aea12f
        close(filepath)
Packit aea12f
    }
Packit aea12f
Packit aea12f
    # Initial values for statistics variables
Packit aea12f
    num_of_functions = 0
Packit aea12f
    max_mcyclo = 0
Packit aea12f
    max_function_length = 0
Packit aea12f
    num_of_simple_functions = 0
Packit aea12f
    num_of_moderate_functions = 0
Packit aea12f
    num_of_high_functions = 0
Packit aea12f
    num_of_untestable_functions = 0
Packit aea12f
}
Packit aea12f
Packit aea12f
# Epilogue
Packit aea12f
END {
Packit aea12f
    # Print header (only for html)
Packit aea12f
    if (output_lang == "html")
Packit aea12f
    {
Packit aea12f
        html_header()
Packit aea12f
    }
Packit aea12f
Packit aea12f
    # Print prolog
Packit aea12f
    if ((output_lang == "html") &&
Packit aea12f
        (html_prolog != ""))
Packit aea12f
    {
Packit aea12f
        print html_prolog
Packit aea12f
    }
Packit aea12f
    if ((output_lang == "wiki") &&
Packit aea12f
        (wiki_prolog != ""))
Packit aea12f
    {
Packit aea12f
        print wiki_prolog
Packit aea12f
    }
Packit aea12f
Packit aea12f
    if (output_lang == "html")
Packit aea12f
    {
Packit aea12f
        print "
" package_name " Cyclomatic Complexity Report
"
Packit aea12f
        print "

Report generated at: " chronos_time "

"
Packit aea12f
    }
Packit aea12f
    if (output_lang == "wiki")
Packit aea12f
    {
Packit aea12f
        print "==" package_name " Cyclomatic Complexity Report=="
Packit aea12f
        print "Report generated at: '''" chronos_time "'''"
Packit aea12f
    }
Packit aea12f
Packit aea12f
    if (section_global_stats_p)
Packit aea12f
    {
Packit aea12f
        build_stats()
Packit aea12f
Packit aea12f
        if (output_lang == "html")
Packit aea12f
        {
Packit aea12f
            html_global_stats()
Packit aea12f
        }
Packit aea12f
        if (output_lang == "wiki")
Packit aea12f
        {
Packit aea12f
            wiki_global_stats()
Packit aea12f
        }
Packit aea12f
    }
Packit aea12f
    if (section_function_cyclo_p)
Packit aea12f
    {
Packit aea12f
        if (output_lang == "html")
Packit aea12f
        {
Packit aea12f
            html_function_cyclo()
Packit aea12f
        }
Packit aea12f
        if (output_lang == "wiki")
Packit aea12f
        {
Packit aea12f
            wiki_function_cyclo()
Packit aea12f
        }
Packit aea12f
    }
Packit aea12f
Packit aea12f
    # Print epilog
Packit aea12f
    if ((output_lang == "html") &&
Packit aea12f
        (html_epilog != ""))
Packit aea12f
    {
Packit aea12f
        print html_epilog
Packit aea12f
    }
Packit aea12f
    if ((output_lang == "wiki") &&
Packit aea12f
        (wiki_epilog != ""))
Packit aea12f
    {
Packit aea12f
        print wiki_epilog
Packit aea12f
    }
Packit aea12f
Packit aea12f
    # Print footer (html only)
Packit aea12f
    if (output_lang == "html")
Packit aea12f
    {
Packit aea12f
        html_footer()
Packit aea12f
    }
Packit aea12f
}
Packit aea12f
Packit aea12f
# End of pmccabe2html