#!/bin/bash
#
# @echo off
#
# Calculate the current state of all bugs
# and report the summary tables.
#
# Paremeters:
#
# arg1 - the first multi-result directory
# arg2 - the second multi-result directory
#
#    Note: fictitious invalid name could be applied instead of either arg1 or arg2.
#
# arg3 - ALLBUGS file which is a manually prepared description of all bugs,
#        those features of current state of bugs which could not be obtained
#        automatically
# arg4 - kernel bugzilla Bug List file
# arg5 - local bugzilla Bug List file
#
# (for additional comments see Do and asltsrun utilities).

# Includes

. common
. settings

print_complete_list_per_comp=yes

# Opcodes of TEST-RESULT
PASS=0
FAIL=1
BLOCKED=2
SKIPPED=3
UNDEFINED=4

ST_FAIL=" FAIL       "
ST_BLCK=" BLOCKED    "
ST_PASS=" PASS       "
ST_SKIP=" SKIPPED    "
ST_UNDF=" UNDEFINED  "
ST_EMPT="            "

# Opcodes of (STATE-MANUALLY)
Man_REJECTED=0
Man_FIXED=1
Man_INTEGRATED=2
Man_FIXED_INTEGRATED=3
Man_EMPTY=4
Man_UNDEFINED=5

# Overall status
REJ_STATUS=0
PASS_STATUS=1
FAIL_STATUS=2

# Opcodes of component
I_COMP=0
C_COMP=1
M_COMP=2
U_COMP=3
S_COMP=4
UNDEF_COMP=5


# Return opcode of TEST-RESULT according to weights
gen_stat()
{
	if [ "x$1" != x ]; then
		stat=`echo "$1" | awk -F: '{ print $4}'`
		if [ "$stat" != 0 ]; then
			rval=$FAIL
		else
			stat=`echo "$1" | awk -F: '{ print $5}'`
			if [ "$stat" != 0 ]; then
				if [ "$rval" != $FAIL ]; then
					rval=$BLOCKED
				fi
			else
				stat=`echo "$1" | awk -F: '{ print $6}'`
				if [ "$stat" != 0 ]; then
					if [ "$rval" != $FAIL -a "$rval" != $BLOCKED ]; then
						rval=$PASS
					fi
				else
					stat=`echo "$1" | awk -F: '{ print $7}'`
					if [ "$stat" != 0 ]; then
						if [ "$rval" != $FAIL -a "$rval" != $BLOCKED -a "$rval" != $PASS ]; then
							rval=$SKIPPED
						fi
					fi
				fi
			fi
		fi
	fi
}

# Inputs/outputs are 'Opcodes of TEST-RESULT'
generate_status()
{
	rval="$UNDEFINED"

	gen_stat "$c32n_GL"
	gen_stat "$c64n_GL"
	gen_stat "$c32s_GL"
	gen_stat "$c64s_GL"
	gen_stat "$l32n_GL"
	gen_stat "$l64n_GL"
	gen_stat "$l32s_GL"
	gen_stat "$l64s_GL"

	return $rval
}

# Get name of 'Opcode of TEST-RESULT'
get_test_result_name()
{
	case $1 in
		0) echo "$ST_PASS";;
		1) echo "$ST_FAIL";;
		2) echo "$ST_BLCK";;
		3) echo "$ST_SKIP";;
		4) echo "$ST_UNDF";;
		*)  echo "?"
	esac
}

get_state_result()
{
	if [ "x$2" != x ]; then
		State=`get_element_of_line  "$1" ":" $2 0`
		Result=`get_element_of_line "$1" ":" $2 1`
		if [ "x$State" == x ]; then
			StateResult="         "
		elif [ "$State" == NEW ]; then
			StateResult="$State      "
		elif [ "x$Result" == x ]; then
			StateResult="$State     "
		else
			StateResult="$State $Result"
		fi
	else
		StateResult="         "
	fi

	echo "$StateResult"
}

# Check(STATE-MANUALLY) == {REJECTED|FIXED|INTEGRATED|FIXED INTEGRATED|<empty>}
check_state_manually()
{
	rval=$Man_UNDEFINED

	x=`echo "$1" | awk -F" " '{print $1}'`
	y=`echo "$1" | awk -F" " '{print $2}'`

	# FIXED INTEGRATED
	if [ "x$y" != x ]; then
		if [ "$x" != FIXED -o "$y" != INTEGRATED ]; then
			CerrSTMAN=h
		else
			rval=$Man_FIXED_INTEGRATED
			z=`echo "$1" | awk -F" " '{print NF}'`
			if [ "$z" != 2 ]; then
				CerrSTMAN=i
			fi
		fi
	elif [ "$x" == REJECTED ]; then
		rval=$Man_REJECTED
	elif [ "$x" == FIXED ]; then
		rval=$Man_FIXED
	elif [ "$x" == INTEGRATED ]; then
		rval=$Man_INTEGRATED
	elif [ "x$x" == x ]; then
		rval=$Man_EMPTY
	else
		CerrSTMAN=j
	fi

	return $rval
}

# Check(TEST-RESULT) == {PASS|FAIL|BLOCKED|SKIPPED|UNDEFINED}
check_test_result()
{
	if [ "$1" != $PASS\
		-a "$1" != $FAIL\
		-a "$1" != $BLOCKED\
		-a "$1" != $SKIPPED\
		-a "$1" != $UNDEFINED ]; then
		CerrTSRESID=k
	fi
}

check_conformity()
{
	entry=7
	rval=$FAIL_STATUS

	if [ "$1" == $Man_REJECTED ]; then
		entry=0
		rval=$REJ_STATUS
	elif [ "$1" == $Man_FIXED -a "$2" == $UNDEFINED ]; then
		entry=1
		rval=$PASS_STATUS
	elif [ "$1" == $Man_FIXED_INTEGRATED -a "$2" == $UNDEFINED ]; then
		entry=1
		rval=$PASS_STATUS
	elif [ "$1" == $Man_EMPTY -o "$1" == $Man_INTEGRATED ]; then
		if [ "$2" == $PASS ]; then
			entry=2
			rval=$PASS_STATUS
		elif [ "$2" == $FAIL ]; then
			entry=4
			rval=$FAIL_STATUS
		elif [ "$2" == $BLOCKED ]; then
			entry=5
			rval=$FAIL_STATUS
		elif [ "$2" == $SKIPPED ]; then
			entry=3
			rval=$PASS_STATUS
		elif [ "$2" == $UNDEFINED ]; then
			entry=6
			rval=$FAIL_STATUS
		else
			CerrCONFORMITY=l
		fi
	else
		entry=7
		echo "ERROR 0: check_conformity, <$1> <$2>"
		InternalErrCount=$[ $InternalErrCount + 1 ]
		CerrCONFORMITY=m
	fi

	if [ "$1" == $Man_FIXED_INTEGRATED -o "$1" == $Man_INTEGRATED ]; then
		if [ "x$LBZID" == x -a "x$KBZID" == x ]; then
			CerrCONFORMITY=u
		fi
	fi

	entry_of_table=$entry

	return $rval
}

# Check(COMP) == {I|C|M|U|S}
check_component()
{
	rval=$UNDEF_COMP

	if [[ "$1" == I* ]]; then
		rval=$I_COMP
	elif [[ "$1" == C* ]]; then
		rval=$C_COMP
	elif [[ "$1" == M* ]]; then
		rval=$M_COMP
	elif [[ "$1" == U* ]]; then
		rval=$U_COMP
	elif [[ "$1" == S* ]]; then
		rval=$S_COMP
	else
		CerrCOMP=g
		echo "ERROR 0: check_component, <$1>"
		InternalErrCount=$[ $InternalErrCount + 1 ]
	fi

	return $rval
}

report_state_of_bugs()
{
	local second_file=

	rintinbzcnt=0
	notresolvedcnt=0
	rnotintcnt=0
	rjinbzilla=0
	rstateinbzilla=0
	rstateinbzillafail=0

	init_summary_table

	echo ""
	echo ""
	echo ""
	echo "Table 1  (Complete list of per-bug states)"
	echo ""

	report_head_of_table

	OLD_IFS=$IFS
	IFS="|"

	cat\
		"$BDEMO_SUM"\
		"$ALLBUGS" |\
	while [ 1 ]
	do
		read number s0 s1 s2 s3 s4 s5 s6 s7
		if [ $? -ne 0 ] ; then
			do_report_summary
			echo ""
			report_errors_encountered
			echo ""
			echo ""
			echo ""
			report_bug_summary
			echo ""
			echo ""
			echo ""
			report_rejected_in_bzilla
			echo ""
			echo ""
			echo ""
			report_resolved_integrated
			echo ""
			echo ""
			echo ""
			report_resolved_not_integrated
			echo ""
			echo ""
			echo ""
			report_not_resolved
			echo ""
			echo ""
			echo ""
			report_resolved_state_in_bzilla
			echo ""
			echo ""
			echo ""
			report_resolved_state_in_bzilla_but_fail
			echo ""
			echo ""
			echo ""
			report_bzilla_summary
			echo ""
			echo ""
			echo ""
			report_internal_bugs_number

			break
		fi

		if [ "$number" == ALLBUGS ] ; then
			second_file=yes
			continue
		fi

		if [ "$second_file" == yes ] ; then

			if [ "x$number" == x ]; then
				continue
			fi

			CerrMISC=" "

			# Local/kernel bugzilla State/Result parameters

			LBZID=`echo $s1 | sed 's/ //'g`
			lst=`get_state_result "$LBSUM_PARSED"  "$LBZID"`

			KBZID=`echo $s2 | sed 's/ //'g`
			kst=`get_state_result "$KBSUM_PARSED"  "$KBZID"`

			lState=`echo "$lst" | awk -F" " '{print $1}'`
			lResult=`echo "$lst" | awk -F" " '{print $2}'`

			kState=`echo "$kst" | awk -F" " '{print $1}'`
			kResult=`echo "$kst" | awk -F" " '{print $2}'`

			resolved_state_in_bzilla=
			resolved_state_in_bzilla_but_fail=

			if [ "$lState" == RESO\
				-o "$lState" == REJE\
				-o "$lState" == CLOS\
				-o "$kState" == RESO\
				-o "$kState" == REJE\
				-o "$kState" == CLOS ]; then
				resolved_state_in_bzilla=yes
			fi


			# Check consistancy of bug-data.
			#
			# Check that the state of bugs reported by local and kernel
			# bugzilla dont contradict with the actual state of bugs
			# reported by test runs and manually provided data.

			# Check STATE-MANUALLY (error # 1)

			CerrSTMAN=" "
			check_state_manually "$s3"
			MANstat=$?

			# Check TEST-RESULT (error # 1)

			TSRESstat="${SUMMARY[$number]}"

			CerrTSRESID=" "
			check_test_result "$TSRESstat"

			# Check Component (error # 2,3,4,5,6)

			LerrCOMP=" "
			KerrCOMP=" "
			CerrCOMP=" "

			Component=`echo $s0 | sed 's/ //'g`
			check_component "$Component"
			Component=$?

			if [ "x$KBZID" != x ]; then
				if [ "x$kState" == x ]; then
					KerrCOMP=s
				else
					Comp=`get_element_of_line  "$KBSUM_PARSED" ":" "$KBZID" 2`
					if [ "$Comp" != "ACPI" ]; then
						KerrCOMP=v
					elif [[ "$Component" != $I_COMP ]]; then
						KerrCOMP=f
					fi
				fi
			fi
			if [ "x$LBZID" != x ]; then

				if [ "x$lState" == x ]; then
					LerrCOMP=s
				else
					Comp=`get_element_of_line  "$LBSUM_PARSED" ":" "$LBZID" 2`
					if [ "$Comp" == "Core/Int" ]; then
						if [[ "$Component" != $I_COMP ]]; then
							LerrCOMP=a
						fi
					elif [ "$Comp" == "iASL Com" ]; then
						if [[ "$Component" != $C_COMP ]]; then
							LerrCOMP=b
						fi
					elif [ "$Comp" == "ACPI Spe" ]; then
						if [[ "$Component" != $S_COMP ]]; then
							LerrCOMP=c
						fi
					elif [ "$Comp" == "Utilitie" ]; then
						if [ "$Component" != $U_COMP -a "$Component" != $M_COMP ]; then
							LerrCOMP=d
						fi
					else
						LerrCOMP=e
					fi
				fi
			fi

			# Check conformity of STATE-MANUALLY & TEST-RESULT (error # 1)

			CerrCONFORMITY=" "
			entry_of_table=100
			check_conformity "$MANstat" "$TSRESstat"
			overall_status=$?


			# Increment the relevant entry of the summary table
			if [ "$Component" != $UNDEF_COMP ]; then
				increment_summary_table "$Component" "$entry_of_table"
			else
				CerrMISC=t
				echo "ERROR 0: report_state_of_bugs, <$number> <$Component> <$entry_of_table>"
				InternalErrCount=$[ $InternalErrCount + 1 ]
			fi


			if [ "$overall_status" == $FAIL_STATUS ]; then
				tobefixed="*"
			else
				tobefixed=" "
			fi

			# Check REJECTED (error # 1)

			LerrRJ=" "
			KerrRJ=" "

			if [ "x$LBZID" != x -o "x$KBZID" != x ]; then

				MNrejected=
				if [ "$overall_status" == $REJ_STATUS ]; then
					MNrejected=yes
				fi

				# Local bugzilla

				if [ "x$LBZID" != x ]; then
					rejected=
					if [ "$lResult" == INVA ]; then
						rejected=yes
					fi
					if [ "$rejected" != "$MNrejected" ]; then
						LerrRJ=A
					fi
				fi

				# Kernel bugzilla

				if [ "x$KBZID" != x ]; then
					rejected=
					if [ "$kState" == REJE ]; then
						rejected=yes
					fi
					if [ "$rejected" != "$MNrejected" ]; then
						KerrRJ=F
					fi
				fi
			fi

			# Check State-Result (error # 7,8,9,a,b,c,d,e)

			intgr=
			if [[ "$s3" == *INTEGRATED* ]]; then
				intgr=yes
			fi

			LerrSTAT=" "
			LerrRES=" "
			KerrSTAT=" "
			KerrRES=" "
			CerrPRIOR=" "

			x=`echo $s4 | sed 's/ //'g`

			if [ "$overall_status" == $REJ_STATUS ]; then
				if [ "x$x" != x ]; then
					CerrPRIOR=n
				fi
			elif [ "$overall_status" == $PASS_STATUS ]; then
				if [ "x$LBZID" != x ]; then
					if [ "$lState" == CLOS -a "x$intgr" == x ]; then
						LerrSTAT=L
					elif [ "$lState" != RESO -a "$lState" != CLOS ]; then
						LerrSTAT=R
					elif [ "$lState" == RESO ]; then
						LerrSTAT=C
						if [ "$lResult" != FIXE ]; then
							LerrRES=D
						fi
					else
						if [ "$lResult" != FIXE ]; then
							LerrRES=D
						fi
					fi
				fi
				if [ "x$KBZID" != x ]; then
					if [ "$kState" == CLOS -a "x$intgr" == x ]; then
						KerrSTAT=L
					elif [ "$kState" != RESO -a "$kState" != CLOS ]; then
						KerrSTAT=R
					elif [ "$kState" == RESO ]; then
						KerrSTAT=C
						if [ "$kResult" != CODE -a "$kResult" != PATC ]; then
							KerrRES=H
						fi
					else
						if [ "$kResult" != CODE -a "$kResult" != PATC ]; then
							KerrRES=H
						fi
					fi
				fi
				if [ "x$x" != x ]; then
					CerrPRIOR=o
				fi
			else
				if [ "x$LBZID" != x ]; then
					if [ "$lState" == RESO\
						-o "$lState" == CLOS ]; then
						LerrSTAT=B
					elif [ "$lResult" == FIXE\
							-o "$lResult" == CODE\
							-o "$lResult" == PATC ]; then
						LerrRES=E
					fi
				fi
				if [ "x$KBZID" != x ]; then
					if [ "$kState" == RESO\
						-o "$kState" == CLOS ]; then
						KerrSTAT=G
					elif [ "$kResult" == FIXE\
							-o "$kResult" == CODE\
							-o "$kResult" == PATC ]; then
						KerrRES=J
					fi
				fi

				if [ "x$LBZID" == x -a "x$KBZID" == x ]; then
					LerrSTAT=r
					KerrSTAT=r
				fi
				if [ "x$x" == x ]; then
					CerrPRIOR=p
				fi
			fi

			# Check INTEGRATED (error # f,g,h,i)

			CerrINTEGR=" "

			rejected_in_bz=
			rejected_not_in_bz=
			not_resolved=
			resolved_integrated_in_bz=
			resolved_not_integrated_in_bz=

			if [ "$overall_status" == $REJ_STATUS ]; then
				if [ "x$KBZID" != x -o "x$LBZID" != x ]; then
					rejected_in_bz=yes
				else
					rejected_not_in_bz=yes
				fi
			elif [ "$overall_status" == $FAIL_STATUS ]; then
				not_resolved=yes
				if [ "x$LBZID" != x -o "x$KBZID" != x ]; then
					if [ "$resolved_state_in_bzilla" == yes ]; then
						resolved_state_in_bzilla_but_fail=yes
					fi
					if [ "x$intgr" != x ]; then
						CerrINTEGR=K
					fi
				fi
			else
				if [ "x$LBZID" != x -o "x$KBZID" != x ]; then
					if [ "x$intgr" == x ]; then
						CerrINTEGR=I
						resolved_not_integrated_in_bz=yes
					else
						resolved_integrated_in_bz=yes
					fi
				fi
			fi

			# Local & Kernel bugzilla summary

			if [ "x$LBZID" != x -o "x$KBZID" != x ]; then

				if [ "$kState" == NEW ]; then
					KBarr[0]=$[ ${KBarr[0]} + 1 ]
				elif [ "$kState" == ASSI ]; then
					KBarr[1]=$[ ${KBarr[1]} + 1 ]
				elif [ "$kState" == NEED ]; then
					KBarr[2]=$[ ${KBarr[2]} + 1 ]
				elif [ "$kState" == RESO ]; then
					if [ "$kResult" == CODE ]; then
						KBarr[3]=$[ ${KBarr[3]} + 1 ]
					elif [ "$kResult" == PATC ]; then
						KBarr[4]=$[ ${KBarr[4]} + 1 ]
					elif [ "$kResult" == FIXE ]; then
						KBarr[5]=$[ ${KBarr[5]} + 1 ]
					elif [ "$kResult" == INVA ]; then
						KBarr[6]=$[ ${KBarr[6]} + 1 ]
					else
						KBarr[9]=$[ ${KBarr[9]} + 1 ]
					fi
				elif [ "$kState" == REJE ]; then
					if [ "$kResult" == DOCU ]; then
						KBarr[7]=$[ ${KBarr[7]} + 1 ]
					else
						KBarr[9]=$[ ${KBarr[9]} + 1 ]
					fi
				elif [ "$kState" == CLOS ]; then
					if [ "$kResult" == CODE ]; then
						KBarr[8]=$[ ${KBarr[8]} + 1 ]
					else
						KBarr[9]=$[ ${KBarr[9]} + 1 ]
					fi
				fi

				if [ "$lState" == NEW ]; then
					LBarr[0]=$[ ${LBarr[0]} + 1 ]
				elif [ "$lState" == ASSI ]; then
					LBarr[1]=$[ ${LBarr[1]} + 1 ]
				elif [ "$lState" == NEED ]; then
					LBarr[2]=$[ ${LBarr[2]} + 1 ]
				elif [ "$lState" == RESO ]; then
					if [ "$lResult" == CODE ]; then
						LBarr[3]=$[ ${LBarr[3]} + 1 ]
					elif [ "$lResult" == PATC ]; then
						LBarr[4]=$[ ${LBarr[4]} + 1 ]
					elif [ "$lResult" == FIXE ]; then
						LBarr[5]=$[ ${LBarr[5]} + 1 ]
					elif [ "$lResult" == INVA ]; then
						LBarr[6]=$[ ${LBarr[6]} + 1 ]
					else
						LBarr[9]=$[ ${LBarr[9]} + 1 ]
					fi
				elif [ "$lState" == REJE ]; then
					if [ "$lResult" == DOCU ]; then
						LBarr[7]=$[ ${LBarr[7]} + 1 ]
					else
						LBarr[9]=$[ ${LBarr[9]} + 1 ]
					fi
				elif [ "$lState" == CLOS ]; then
					if [ "$lResult" == CODE ]; then
						LBarr[8]=$[ ${LBarr[8]} + 1 ]
					else
						LBarr[9]=$[ ${LBarr[9]} + 1 ]
					fi
				fi

				if [ "$overall_status" == $REJ_STATUS ]; then
					if [ "x$LBZID" != x ]; then
						LBarr[10]=$[ ${LBarr[10]} + 1 ]
					fi
					if [ "x$KBZID" != x ]; then
						KBarr[10]=$[ ${KBarr[10]} + 1 ]
					fi
				elif [ "$overall_status" == $PASS_STATUS ]; then
					if [ "x$LBZID" != x ]; then
						LBarr[11]=$[ ${LBarr[11]} + 1 ]
					fi
					if [ "x$KBZID" != x ]; then
						KBarr[11]=$[ ${KBarr[11]} + 1 ]
					fi
				else
					if [ "x$LBZID" != x ]; then
						LBarr[12]=$[ ${LBarr[12]} + 1 ]
					fi
					if [ "x$KBZID" != x ]; then
						KBarr[12]=$[ ${KBarr[12]} + 1 ]
					fi
				fi
			fi

			TSRESname=`get_test_result_name "$TSRESstat"`
			if [ "$overall_status" == $REJ_STATUS ]; then
				TSRESname="$ST_EMPT"
			fi

			# Summary error string

			LErrStr="$LerrRJ$LerrCOMP$LerrSTAT$LerrRES"
			KErrStr="$KerrRJ$KerrCOMP$KerrSTAT$KerrRES"
			CommonErrStr="$CerrCOMP$CerrSTMAN$CerrTSRESID$CerrCONFORMITY$CerrPRIOR$CerrINTEGR"
			AllErrors="$LErrStr$KErrStr$CommonErrStr$CerrMISC $tobefixed"
			x=`echo "$AllErrors" | sed 's/ //'g`
			AccumulateErrors="$AccumulateErrors$x"
			line="$AllErrors|$number|$s0|$s1|$lst|$s2|$kst|$TSRESname|$s3|$s4| $tobefixed$s5"
			SUMMARY[$number]="$line"

			if [ "x$print_complete_list_per_comp" != x ]; then
				if [[ "$Component" == $I_COMP ]]; then
					SUMMARY_I="$SUMMARY_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					SUMMARY_C="$SUMMARY_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					SUMMARY_M="$SUMMARY_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					SUMMARY_U="$SUMMARY_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					SUMMARY_S="$SUMMARY_S:$number"
				else
					SUMMARY_UNDEF="$SUMMARY_UNDEF:$number"
				fi
			fi

			if [ "$not_resolved" == yes ]; then
				if [[ "$Component" == $I_COMP ]]; then
					NOT_RESOLVED_I="$NOT_RESOLVED_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					NOT_RESOLVED_C="$NOT_RESOLVED_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					NOT_RESOLVED_M="$NOT_RESOLVED_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					NOT_RESOLVED_U="$NOT_RESOLVED_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					NOT_RESOLVED_S="$NOT_RESOLVED_S:$number"
				else
					NOT_RESOLVED_UNDEF="$NOT_RESOLVED_UNDEF:$number"
				fi
				notresolvedcnt=$[ $notresolvedcnt + 1 ]
			elif [ "$resolved_integrated_in_bz" == yes ]; then
				if [[ "$Component" == $I_COMP ]]; then
					RESOLVED_INTEGRATED_IN_BZ_I="$RESOLVED_INTEGRATED_IN_BZ_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					RESOLVED_INTEGRATED_IN_BZ_C="$RESOLVED_INTEGRATED_IN_BZ_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					RESOLVED_INTEGRATED_IN_BZ_M="$RESOLVED_INTEGRATED_IN_BZ_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					RESOLVED_INTEGRATED_IN_BZ_U="$RESOLVED_INTEGRATED_IN_BZ_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					RESOLVED_INTEGRATED_IN_BZ_S="$RESOLVED_INTEGRATED_IN_BZ_S:$number"
				else
					RESOLVED_INTEGRATED_IN_BZ_UNDEF="$RESOLVED_INTEGRATED_IN_BZ_UNDEF:$number"
				fi
				rintinbzcnt=$[ $rintinbzcnt + 1 ]
			elif [ "$resolved_not_integrated_in_bz" == yes ]; then
				if [[ "$Component" == $I_COMP ]]; then
					RESOLVED_NOT_INTEGRATED_IN_BZ_I="$RESOLVED_NOT_INTEGRATED_IN_BZ_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					RESOLVED_NOT_INTEGRATED_IN_BZ_C="$RESOLVED_NOT_INTEGRATED_IN_BZ_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					RESOLVED_NOT_INTEGRATED_IN_BZ_M="$RESOLVED_NOT_INTEGRATED_IN_BZ_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					RESOLVED_NOT_INTEGRATED_IN_BZ_U="$RESOLVED_NOT_INTEGRATED_IN_BZ_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					RESOLVED_NOT_INTEGRATED_IN_BZ_S="$RESOLVED_NOT_INTEGRATED_IN_BZ_S:$number"
				else
					RESOLVED_NOT_INTEGRATED_IN_BZ_UNDEF="$RESOLVED_NOT_INTEGRATED_IN_BZ_UNDEF:$number"
				fi
				rnotintcnt=$[ $rnotintcnt + 1 ]
			elif [ "$rejected_in_bz" == yes ]; then
				REJECTED_IN_BZILLA="$REJECTED_IN_BZILLA:$number"
				rjinbzilla=$[ $rjinbzilla + 1 ]
			elif [ "$rejected_not_in_bz" == yes ]; then
				if [[ "$Component" == $I_COMP ]]; then
					REJECTED_NOT_IN_BZILLA_I="$REJECTED_NOT_IN_BZILLA_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					REJECTED_NOT_IN_BZILLA_C="$REJECTED_NOT_IN_BZILLA_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					REJECTED_NOT_IN_BZILLA_M="$REJECTED_NOT_IN_BZILLA_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					REJECTED_NOT_IN_BZILLA_U="$REJECTED_NOT_IN_BZILLA_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					REJECTED_NOT_IN_BZILLA_S="$REJECTED_NOT_IN_BZILLA_S:$number"
				else
					REJECTED_NOT_IN_BZILLA_UNDEF="$REJECTED_NOT_IN_BZILLA_UNDEF:$number"
				fi
				rjnotinbzilla=$[ $rjnotinbzilla + 1 ]
			fi

			if [ "$resolved_state_in_bzilla" == yes ]; then
				if [[ "$Component" == $I_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_I="$RESOLVED_STATE_IN_BZILLA_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_C="$RESOLVED_STATE_IN_BZILLA_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_M="$RESOLVED_STATE_IN_BZILLA_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_U="$RESOLVED_STATE_IN_BZILLA_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_S="$RESOLVED_STATE_IN_BZILLA_S:$number"
				else
					RESOLVED_STATE_IN_BZILLA_UNDEF="$RESOLVED_STATE_IN_BZILLA_UNDEF:$number"
				fi
				rstateinbzilla=$[ $rstateinbzilla + 1 ]
			fi

			if [ "$resolved_state_in_bzilla_but_fail" == yes ]; then
				if [[ "$Component" == $I_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_BUT_FAIL_I="$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_I:$number"
				elif [[ "$Component" == $C_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_BUT_FAIL_C="$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_C:$number"
				elif [[ "$Component" == $M_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_BUT_FAIL_M="$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_M:$number"
				elif [[ "$Component" == $U_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_BUT_FAIL_U="$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_U:$number"
				elif [[ "$Component" == $S_COMP ]]; then
					RESOLVED_STATE_IN_BZILLA_BUT_FAIL_S="$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_S:$number"
				else
					RESOLVED_STATE_IN_BZILLA_BUT_FAIL_UNDEF="$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_UNDEF:$number"
				fi
				rstateinbzillafail=$[ $rstateinbzillafail + 1 ]
			fi

		else
			c32n_GL="$s0"
			c64n_GL="$s1"
			c32s_GL="$s2"
			c64s_GL="$s3"
			l32n_GL="$s4"
			l64n_GL="$s5"
			l32s_GL="$s6"
			l64s_GL="$s7"

			generate_status "$number"
			status=$?

			if [ "x$number" != x ]; then
				SUMMARY[$number]="$status"
			fi
		fi

	done

	IFS=$OLD_IFS
}

init_summary_table()
{
# Elements of arrays:
#    0 - rejected
#    1 - undef_fixed
#    2 - pass
#    3 - skipped
#    4 - failed
#    5 - blocked
#    6 - undef_not_fixed

	InternalErrCount=0

# Interpreter
	StINT[0]=0
	StINT[1]=0
	StINT[2]=0
	StINT[3]=0
	StINT[4]=0
	StINT[5]=0
	StINT[6]=0
	StINT[7]=0

# iASL
	StASL[0]=0
	StASL[1]=0
	StASL[2]=0
	StASL[3]=0
	StASL[4]=0
	StASL[5]=0
	StASL[6]=0
	StASL[7]=0

# Simulation
	StSIM[0]=0
	StSIM[1]=0
	StSIM[2]=0
	StSIM[3]=0
	StSIM[4]=0
	StSIM[5]=0
	StSIM[6]=0
	StSIM[7]=0

# Utilities
	StUTIL[0]=0
	StUTIL[1]=0
	StUTIL[2]=0
	StUTIL[3]=0
	StUTIL[4]=0
	StUTIL[5]=0
	StUTIL[6]=0
	StUTIL[7]=0

# Specs 
	StSPEC[0]=0
	StSPEC[1]=0
	StSPEC[2]=0
	StSPEC[3]=0
	StSPEC[4]=0
	StSPEC[5]=0
	StSPEC[6]=0
	StSPEC[7]=0

# LBarr

	LBarr[0]=0
	LBarr[1]=0
	LBarr[2]=0
	LBarr[3]=0
	LBarr[4]=0
	LBarr[5]=0
	LBarr[6]=0
	LBarr[7]=0
	LBarr[8]=0
	LBarr[9]=0
	LBarr[10]=0
	LBarr[11]=0
	LBarr[12]=0

# KBarr

	KBarr[0]=0
	KBarr[1]=0
	KBarr[2]=0
	KBarr[3]=0
	KBarr[4]=0
	KBarr[5]=0
	KBarr[6]=0
	KBarr[7]=0
	KBarr[8]=0
	KBarr[9]=0
	KBarr[10]=0
	KBarr[11]=0
	KBarr[12]=0
}

increment_summary_table()
{
	if [ "$1" == $I_COMP ]; then
		StINT[$2]=$[ ${StINT[$2]} + 1 ]
	elif [ "$1" == $C_COMP ]; then
		StASL[$2]=$[ ${StASL[$2]} + 1 ]
	elif [ "$1" == $S_COMP ]; then
		StSPEC[$2]=$[ ${StSPEC[$2]} + 1 ]
	elif [ "$1" == $M_COMP ]; then
		StSIM[$2]=$[ ${StSIM[$2]} + 1 ]
	elif [ "$1" == $U_COMP ]; then
		StUTIL[$2]=$[ ${StUTIL[$2]} + 1 ]
	fi
}

report_bug_summary()
{
y0=$[ ${StINT[0]} + ${StASL[0]} + ${StSIM[0]} + ${StUTIL[0]} + ${StSPEC[0]} ]
y1=$[ ${StINT[1]} + ${StASL[1]} + ${StSIM[1]} + ${StUTIL[1]} + ${StSPEC[1]} ]
y2=$[ ${StINT[2]} + ${StASL[2]} + ${StSIM[2]} + ${StUTIL[2]} + ${StSPEC[2]} ]
y3=$[ ${StINT[3]} + ${StASL[3]} + ${StSIM[3]} + ${StUTIL[3]} + ${StSPEC[3]} ]

x="           "
echo "Table 2  (Summary of bugs)"
echo ""
echo "                             | Interpreter iASL        Simulation  Utilities   Specs   |   TOTAL   |"
echo "=============================|=========================================================|===========|"
echo "F      |*         & REJECTED | ${StINT[0]}$x${StASL[0]}$x${StSIM[0]}$x${StUTIL[0]}$x${StSPEC[0]}       | $y0"
echo " I     |UNDEFINED & FIXED    | ${StINT[1]}$x${StASL[1]}$x${StSIM[1]}$x${StUTIL[1]}$x${StSPEC[1]}       | $y1"
echo "  X    |PASS                 | ${StINT[2]}$x${StASL[2]}$x${StSIM[2]}$x${StUTIL[2]}$x${StSPEC[2]}       | $y2"
echo "   ED  |SKIPPED              | ${StINT[3]}$x${StASL[3]}$x${StSIM[3]}$x${StUTIL[3]}$x${StSPEC[3]}       | $y3"
echo "-----------------------------|---------------------------------------------------------|"

y4=$[ ${StINT[4]} + ${StASL[4]} + ${StSIM[4]} + ${StUTIL[4]} + ${StSPEC[4]} ]
y5=$[ ${StINT[5]} + ${StASL[5]} + ${StSIM[5]} + ${StUTIL[5]} + ${StSPEC[5]} ]
y6=$[ ${StINT[6]} + ${StASL[6]} + ${StSIM[6]} + ${StUTIL[6]} + ${StSPEC[6]} ]
# y7=$[ ${StINT[7]} + ${StASL[7]} + ${StSIM[7]} + ${StUTIL[7]} + ${StSPEC[7]} ]

x00=$[ ${StINT[0]} + ${StINT[1]} + ${StINT[2]} + ${StINT[3]} ]
x01=$[ ${StASL[0]} + ${StASL[1]} + ${StASL[2]} + ${StASL[3]} ]
x02=$[ ${StSIM[0]} + ${StSIM[1]} + ${StSIM[2]} + ${StSIM[3]} ]
x03=$[ ${StUTIL[0]} + ${StUTIL[1]} + ${StUTIL[2]} + ${StUTIL[3]} ]
x04=$[ ${StSPEC[0]} + ${StSPEC[1]} + ${StSPEC[2]} + ${StSPEC[3]} ]
x05=$[ $x00 + $x01 + $x02 + $x03 + $x04 ]

echo "        Total (fixed)        | $x00$x$x01$x$x02$x$x03$x$x04       | $x05"

echo "-----------------------------|---------------------------------------------------------|"
echo "TO     |FAIL                 | ${StINT[4]}$x${StASL[4]}$x${StSIM[4]}$x${StUTIL[4]}$x${StSPEC[4]}       | $y4"
echo " BE    |BLOCKED              | ${StINT[5]}$x${StASL[5]}$x${StSIM[5]}$x${StUTIL[5]}$x${StSPEC[5]}       | $y5"
echo "  FIXED|UNDEFINED & !FIXED   | ${StINT[6]}$x${StASL[6]}$x${StSIM[6]}$x${StUTIL[6]}$x${StSPEC[6]}       | $y6"
# echo "     |  Other  (must be 0) | ${StINT[7]}$x${StASL[7]}$x${StSIM[7]}$x${StUTIL[7]}$x${StSPEC[7]}       | $y7"
echo "-----------------------------|---------------------------------------------------------|"


x10=$[ ${StINT[4]} + ${StINT[5]} + ${StINT[6]} ]
x11=$[ ${StASL[4]} + ${StASL[5]} + ${StASL[6]} ]
x12=$[ ${StSIM[4]} + ${StSIM[5]} + ${StSIM[6]} ]
x13=$[ ${StUTIL[4]} + ${StUTIL[5]} + ${StUTIL[6]} ]
x14=$[ ${StSPEC[4]} + ${StSPEC[5]} + ${StSPEC[6]} ]
x15=$[ $x10 + $x11 + $x12 + $x13 + $x14 ]

echo "        Total (NOT fixed)    | $x10$x$x11$x$x12$x$x13$x$x14       | $x15"

x20=$[ $x00 + $x10 ]
x21=$[ $x01 + $x11 ]
x22=$[ $x02 + $x12 ]
x23=$[ $x03 + $x13 ]
x24=$[ $x04 + $x14 ]
x25=$[ $x20 + $x21 + $x22 + $x23 + $x24 ]

echo "-----------------------------|---------------------------------------------------------|"
echo "        TOTAL ($MAXBDEMO)          | $x20$x$x21$x$x22$x$x23$x$x24       | $x25"
echo "===================================================================================================|"

	if [ "$x25" != "$MAXBDEMO" ]; then
		echo "ERROR 0: report_bug_summary, incorrect TOTAL, expected <$MAXBDEMO> received <$x25>"
		InternalErrCount=$[ $InternalErrCount + 1 ]
	fi
}

report_internal_bugs_number()
{
	echo "Number of data inconsistency internal errors: InternalErrCount = $InternalErrCount (program to be updated)"
}

status_calculation_comment()
{
echo "Calculate status of bug according to the results of bdemo-tests run on two systems"
echo "for all modes (norm-32,norm-64,slack-32,slack-64):"
echo ""
echo "   UNDEFINED & FIXED == PASS"
echo ""
echo "   UNDEFINED & {FAIL|BLOCKED|         |PASS|SKIPPED} == UNDEFINED == FAIL"
echo "   REJECTED  & {FAIL|BLOCKED|UNDEFINED|PASS|SKIPPED} == REJECTED  == PASS"
echo "   FAIL      & {     BLOCKED|UNDEFINED|PASS|SKIPPED} == FAIL      == FAIL"
echo "   BLOCKED   & {             UNDEFINED|PASS|SKIPPED} == BLOCKED   == FAIL"
echo "   PASS      & {                            SKIPPED} == PASS      == PASS"
}

status_entries_comment()
{
echo "Bug status entries:"
echo ""
echo "   REJECTED          : bug is rejected - no matter what are the results of bdemo-test runs"
echo "   UNDEFINED & FIXED : no runtime bdemo-test for this bug (impossible), status FIXED was set up manually"
echo "   FAIL              : some of runs of the relevant bdemo-test on either system in different modes failed"
echo "   BLOCKED           : no failures for the bdemo-test but it was not run in some of modes (see FAIL) (blocked temporary for some reason)"
echo "   PASS              : the bdemo-test doesn't failed or blocked and some runs resulted in PASS"
echo "   SKIPPED           : no FAIL/BLOCKED/PASS for this bdemo-test and some run was SKIPPED (no conditions to run the test)"
echo "   UNDEFINED         : no result of bdemo-test for this bug (either temporary or impossible to generate runtime test conditions at all)"
}


# arg1 - the first multi-result directory
# arg2 - the second multi-result directory
init_bdemo_sum()
{
	if [ -d "$DIR0" ]; then
		BDEMO_SUM="$DIR0/__STATUS_OF_ALL_BDEMO_TESTS"
	elif [ -d "$DIR1" ]; then
		BDEMO_SUM="$DIR1/__STATUS_OF_ALL_BDEMO_TESTS"
	else
		do_exit 1 "No one directory specified by both parameters"
	fi
}

report_head_of_table()
{
	echo "Errors            IID  COMP    LBZID  ST/RES    KBZID  ST/RES    TEST-RESULT  STATE-MANUALLY     PR      SUMMARY"
	echo "=====================================================================================================|"
}

report_end_of_table()
{
	echo "=====================================================================================================|"
}

report_mid_line()
{
		echo "                 |---|-------|------|---------|------|---------|------------|------------------|-----|"
}

do_report_summary()
{
	if [ "x$print_complete_list_per_comp" != x ]; then
		report_subset_of_summary "$SUMMARY_S"
		report_subset_of_summary "$SUMMARY_C"
		report_subset_of_summary "$SUMMARY_M"
		report_subset_of_summary "$SUMMARY_U"
		report_subset_of_summary "$SUMMARY_UNDEF"
		report_subset_of_summary "$SUMMARY_I"
	else
		index=0
		while [ 1 ]
		do
			if [[ $index -ge $MAXBDEMO ]]; then
				break
			fi
			echo "${SUMMARY[$index]}"
			index=$[ $index + 1 ]
		done
	fi

	report_end_of_table
}

# arg1 - numbers of bugs - ":n0:n1:...:nX"
report_subset_of_summary()
{
	if [ "x$1" != x ]; then
		echo "$1" | awk -F: '{ for (i=2; i<=NF; i++) { print $i}}' |\
		while [ 1 ]
		do
			read number
			if [ $? -ne 0 ] ; then
				break
			fi
			echo "${SUMMARY[$number]}"
		done
	fi
}

report_rejected_in_bzilla()
{
	x=$[ $rjnotinbzilla + $rjinbzilla ]

	echo "Table 3  (Rejected, $rjnotinbzilla + $rjinbzilla == $x)"
	echo ""
	report_head_of_table

	report_subset_of_summary "$REJECTED_NOT_IN_BZILLA_S"
	report_subset_of_summary "$REJECTED_NOT_IN_BZILLA_C"
	report_subset_of_summary "$REJECTED_NOT_IN_BZILLA_M"
	report_subset_of_summary "$REJECTED_NOT_IN_BZILLA_U"
	report_subset_of_summary "$REJECTED_NOT_IN_BZILLA_UNDEF"
	report_subset_of_summary "$REJECTED_NOT_IN_BZILLA_I"

	if [ $rjnotinbzilla -gt 0 ]; then
		report_mid_line
	fi

	report_subset_of_summary "$REJECTED_IN_BZILLA"

	report_end_of_table
}

report_resolved_integrated()
{
	echo "Table 4  (PASS-state and INTEGRATED (of BZ), $rintinbzcnt)"

	echo ""
	report_head_of_table

	report_subset_of_summary "$RESOLVED_INTEGRATED_IN_BZ_S"
	report_subset_of_summary "$RESOLVED_INTEGRATED_IN_BZ_C"
	report_subset_of_summary "$RESOLVED_INTEGRATED_IN_BZ_M"
	report_subset_of_summary "$RESOLVED_INTEGRATED_IN_BZ_U"
	report_subset_of_summary "$RESOLVED_INTEGRATED_IN_BZ_UNDEF"
	report_subset_of_summary "$RESOLVED_INTEGRATED_IN_BZ_I"

	report_end_of_table
}

report_resolved_not_integrated()
{
	echo "Table 5  (PASS-state but NOT INTEGRATED (of BZ), $rnotintcnt)"
	echo ""
	report_head_of_table

	report_subset_of_summary "$RESOLVED_NOT_INTEGRATED_IN_BZ_S"
	report_subset_of_summary "$RESOLVED_NOT_INTEGRATED_IN_BZ_C"
	report_subset_of_summary "$RESOLVED_NOT_INTEGRATED_IN_BZ_M"
	report_subset_of_summary "$RESOLVED_NOT_INTEGRATED_IN_BZ_U"
	report_subset_of_summary "$RESOLVED_NOT_INTEGRATED_IN_BZ_UNDEF"
	report_subset_of_summary "$RESOLVED_NOT_INTEGRATED_IN_BZ_I"

	report_end_of_table
}

report_not_resolved()
{
	echo "Table 6  (FAIL-state, $notresolvedcnt)"
	echo ""
	report_head_of_table

	report_subset_of_summary "$NOT_RESOLVED_S"
	report_subset_of_summary "$NOT_RESOLVED_C"
	report_subset_of_summary "$NOT_RESOLVED_M"
	report_subset_of_summary "$NOT_RESOLVED_U"
	report_subset_of_summary "$NOT_RESOLVED_UNDEF"
	report_subset_of_summary "$NOT_RESOLVED_I"

	report_end_of_table
}

report_resolved_state_in_bzilla()
{
	echo "Table 7  (RESOLVED-Bugzilla-State, $rstateinbzilla)"
	echo ""
	report_head_of_table

	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_S"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_C"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_M"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_U"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_UNDEF"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_I"

	report_end_of_table
}

report_resolved_state_in_bzilla_but_fail()
{
	echo "Table 8  (RESOLVED-Bugzilla-State BUT FAIL-state, $rstateinbzillafail)"
	echo ""
	report_head_of_table

	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_S"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_C"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_M"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_U"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_UNDEF"
	report_subset_of_summary "$RESOLVED_STATE_IN_BZILLA_BUT_FAIL_I"

	report_end_of_table
}

report_bzilla_summary()
{
	y=$[ ${LBarr[0]} + ${LBarr[1]} + ${LBarr[2]} + ${LBarr[3]}\
		+ ${LBarr[4]} + ${LBarr[5]} + ${LBarr[6]} + ${LBarr[7]}\
		+ ${LBarr[8]} + ${LBarr[9]} ]

	z=$[ ${KBarr[0]} + ${KBarr[1]} + ${KBarr[2]} + ${KBarr[3]}\
		+ ${KBarr[4]} + ${KBarr[5]} + ${KBarr[6]} + ${KBarr[7]}\
		+ ${KBarr[8]} + ${KBarr[9]} ]

	x="           "
	echo "Table 9  (Summary per-State-Result in BZ)"
	echo ""

	echo "State Result |  LBZ         KBZ"
	echo "=============|==================="
	echo "NEW          |  ${LBarr[0]}$x${KBarr[0]}"
	echo "ASSI         |  ${LBarr[1]}$x${KBarr[1]}"
	echo "NEED         |  ${LBarr[2]}$x${KBarr[2]}"
	echo "RESO CODE    |  ${LBarr[3]}$x${KBarr[3]}"
	echo "RESO PATC    |  ${LBarr[4]}$x${KBarr[4]}"
	echo "RESO FIXE    |  ${LBarr[5]}$x${KBarr[5]}"
	echo "RESO INVA    |  ${LBarr[6]}$x${KBarr[6]}"
	echo "REJE DOCU    |  ${LBarr[7]}$x${KBarr[7]}"
	echo "CLOS CODE    |  ${LBarr[8]}$x${KBarr[8]}"
	echo "Other        |  ${LBarr[9]}$x${KBarr[9]}"
	echo "-------------|-------------------"
	echo "Total        |  $y$x$z"
	echo "=============|==================="

	y=$[ ${LBarr[10]} + ${LBarr[11]} + ${LBarr[12]} ]
	z=$[ ${KBarr[10]} + ${KBarr[11]} + ${KBarr[12]} ]

	echo ""
	echo ""
	echo ""
	echo "Table 10  (Summary state of bugs (of BZ))"
	echo ""
	echo "    State    |  LBZ         KBZ"
	echo "=============|==================="
	echo "REJECTED     |  ${LBarr[10]}$x${KBarr[10]}"
	echo "PASS-state   |  ${LBarr[11]}$x${KBarr[11]}"
	echo "FAIL-state   |  ${LBarr[12]}$x${KBarr[12]}"
	echo "-------------|-------------------"
	echo "Total        |  $y$x$z"
	echo "================================="
}

report_errors_encountered()
{
	echo "A list of encountered errors:"
	echo ""

	if [ -f "$ERROR_OPCODES" ]; then
		z=`echo "$AccumulateErrors" | transform_to_single_chars`
		report_lines_per_char "$ERROR_OPCODES" "$z"
	else
		echo "Error: ERROR_OPCODES is not file: <$ERROR_OPCODES>"
	fi
}

# ############################## MAIN ###############################

date

DIR0="$1"
DIR1="$2"
ALLBUGS="$3"
KBSUM="$4"
LBSUM="$5"
BUG_STATE_DIR="$6"

BDEMO_SUM=
KBSUM_PARSED=
LBSUM_PARSED=

c32n_GL=
c64n_GL=
c32s_GL=
c64s_GL=
l32n_GL=
l64n_GL=
l32s_GL=
l64s_GL=

UTILSTATUS=0
SUMMARY=

# NOT_RESOLVED=
# RESOLVED_INTEGRATED_IN_BZ=
# RESOLVED_NOT_INTEGRATED_IN_BZ=
# RESOLVED_STATE_IN_BZILLA=
# REJECTED_IN_BZILLA=
# REJECTED_NOT_IN_BZILLA=

LBarr=
KBarr=

ERROR_OPCODES="$BUG_STATE_DIR/ERROR_OPCODES"


# Opcodes of errors
# REJECTED_ERR=1
# COMP_ERR=9


# Arrays for summary information for Interpreter, iASL, Simulation, Utilities, Specs.

StINT=
StASL=
StSIM=
StUTIL=
StSPEC=


# Prepare the summary table of bdemo summary files of two multi-results:

echo "Preparing the summary table of bdemo summary files of two multi-results:"
echo "   the first  : $DIR0"
echo "   the second : $DIR1"
echo "   ALLBUGS    : $ALLBUGS"
echo "   kernel bugzilla Bug List file : $KBSUM"
echo "   local bugzilla Bug List file  : $LBSUM"

# Initialization

INIT_MAX_BDEMO

system0=
system1=
if [ -d "$DIR0" ]; then
	COMMONLOGFILE="$DIR0/Summary"
	if [ ! -f "$COMMONLOGFILE" ]; then
		do_exit 1 "COMMONLOGFILE is not file: <$COMMONLOGFILE>"
	else
		system0=`get_name_of_system "$COMMONLOGFILE"`
	fi
fi
if [ -d "$DIR1" ]; then
	COMMONLOGFILE="$DIR1/Summary"
	if [ ! -f "$COMMONLOGFILE" ]; then
		do_exit 1 "COMMONLOGFILE is not file: <$COMMONLOGFILE>"
	else
		system1=`get_name_of_system "$COMMONLOGFILE"`
	fi
fi

if [ ! -f "$KBSUM" ]; then
	do_exit 1 "KBSUM is not file: <$KBSUM>"
fi

if [ ! -f "$LBSUM" ]; then
	do_exit 1 "LBSUM is not file: <$LBSUM>"
fi

if [ -d "$DIR0" ]; then
	KBSUM_PARSED="$DIR0/__KERNEL_ASLTS_BUG_LIST"
	LBSUM_PARSED="$DIR0/__LOCAL_ASLTS_BUG_LIST"
elif [ -d "$DIR1" ]; then
	KBSUM_PARSED="$DIR1/__KERNEL_ASLTS_BUG_LIST"
	LBSUM_PARSED="$DIR1/__LOCAL_ASLTS_BUG_LIST"
fi

if [ "x$KBSUM_PARSED" == x -o "x$LBSUM_PARSED" == x ]; then
	do_exit 1 "Failed to initialize KBSUM_PARSED & LBSUM_PARSED"
fi

if [ ! -f "$ALLBUGS" ]; then
	do_exit 1 "ALLBUGS is not file: <$ALLBUGS>"
fi

init_bdemo_sum

# Parse the Bug List files (kernel and local bugzilla)

echo "Parse the Bug List files (kernel and local bugzilla)"
echo "   kernel bugzilla Bug List file : $KBSUM"
echo "   local bugzilla Bug List file  : $LBSUM"

parsebuglist "$KBSUM" > "$KBSUM_PARSED"
if [ $? -ne 0 ]; then
	do_exit 1 "Failed to parse KBSUM: <$KBSUM>"
fi

parsebuglist "$LBSUM" > "$LBSUM_PARSED"
if [ $? -ne 0 ]; then
	do_exit 1 "Failed to parse LBSUM: <$LBSUM>"
fi

# Concatenate the summary files of bdemos of two multi-results

bdemosconc "$DIR0" "$DIR1"

if [ ! -f "$BDEMO_SUM" ]; then
	do_exit 1 "BDEMO_SUM is not file: <$BDEMO_SUM>"
fi

echo ""
echo ""
echo "The tables below represent the current state of all bugs encountered by ASLTS project."
echo ""
echo "The underlying systems the aslts tests were run:"
echo ""
echo "   the first  <$system0>"
echo "   the second <$system1>"
echo ""
echo "The aslts tests multi-results analyzed:"
echo ""
echo "   the first multi-result directory  : <$DIR0>"
echo "   the second multi-result directory : <$DIR1>"
echo ""


report_state_of_bugs

if [ 0 -eq 1 ]; then
	echo ""
	status_calculation_comment
	echo ""
	status_entries_comment
fi

echo ""

date

exit $UTILSTATUS



