#!/bin/sh

chainsz=0
width=80
blocksz=1024

while test $# -gt 0; do
	case "$1" in
		-c ) 	chainsz=$2; shift;;
		-c*)	chainsz=`echo $1 | sed 's/-c//'`;;
		-w ) 	width=$2; shift;;
		-w*)	width=`echo $1 | sed 's/-w//'`;;
		-b ) 	blocksz=$2; shift;;
		-b*)	blocksz=`echo $1 | sed 's/-b//'`;;
		--)	shift; break;;
		*)	break;;
	esac
	shift
done

if test $# -ne 0; then
	echo "usage: mprhi [-c N] [-w N] [-b N]" >&2
	exit 1
fi

awk -F: -v blocksz=$blocksz -v chainsz=$chainsz -v width=$width '

	function histo(	n,i) {
		n = int(total/blocksz)
		if (n == lastn && !chainsz)
			return
		for (i=0; i<n; i++)
			printf "*"
		if (chainsz) {
			f = $1
			for (j=2; j<=chainsz && j<=NF; j++)
				f = f ":" $j
			printf("%*s\n", width-i, f)
		}
		else
			printf "\n"
		lastn = n
	}

	function malloc(n, p) {
		if (p) {
			size[p] = n
			total += n
			histo()
		}
	}

	function free(p) {
		total -= size[p]
		delete size[p]
		histo()
	}

	/^m/ { malloc($(NF-1), $NF) }
	/^f/ { free($NF) }
	/^r/ { free($(NF-1)); malloc($(NF-2), $NF) }'

exit 0
