#!/bin/sh
# NOTE: considers realloc(p, n) == malloc(n)

MPRAWK=${MPRAWK-awk}
percent=true
sortpos=2

for arg in "$@"; do
	case "$1" in
	-n)	percent=; sortpos=0;;
	--)	shift; break;;
	-*)	echo "mprsize: warning: ignoring unknown option $1" >&2;;
	*)	break;;
	esac
	shift
done

case "$#" in
0|1)	;;
*)	echo "usage: mprsize [log]" >&2
	exit 1;;
esac

MPRFILTER=`mprfilter mprsize "$@"` || exit 1

trap 'exit 0' 13

$MPRFILTER |

$MPRAWK -F: -v percent=$percent '
	/^m/ && $NF {
		size[$(NF-1)]++
		tot += $(NF-1)
	}
	/^r/ && $NF {
		size[$(NF-2)]++
		tot += $(NF-2)
	}
	END  {
		for (f in size) {
			printf "%d %d %f", f, size[f], f*size[f]
			if (percent != "")
				printf " %.02f%%", 100.0*f*size[f]/tot
			printf "\n"
		}
	}' |

sort -n +$sortpos |

$MPRAWK '
{
	printf "%-16d%-16d", $1, $2
	if ($3 <= 2147483647.0)		# 2^31-1
		printf "%-16d", $3
	else
		printf "%-16.5g", $3
	if (NF == 4)
		printf "%s", $4
	printf "\n"
}'

exit 0
