#!/bin/csh -f
set X = $0
set Y = ${X:h}
if ("$X" == "$Y") then
    set ETC = ../etc
else
    set ETC = $Y/../etc
endif
set things = ( \
    idle \
    process \
    boundary \
    event \
    x \
    map \
    msg \
    eth \
    ip \
    udp \
    tcp \
    rpc \
    other \
)
set patterns = ( \
    '_Idle ActivateReadyqHead' \
    'callException DestroyProcess BusError CreateKernelProcess ICreateProcess RemoveReady' \
    'callUserRoutine AfterCallUser callUserDemux UserPush asmEKTrap startUserAt UserCall isapage' \
    'event expandEvents clock_ih' \
    '_x_' \
    '_map_' \
    '_msg_ _nmsg_ _msgf_ bcopy malloc _free$ _free_it' \
    '_eth_ extractMsgFromFrame handleCuLeavingActiveState postCmd ethCtlrXmit handleRcvdFrame makeXbdListFrom handleIeIntr handleIeIntrAsm informIeDevLocalEthAd configIeDev printXmitErrs intelStatus' \
    '_ip_ my_cksum ocsum ntoh_iphdr' \
    '_udp' \
    '_tcp _sb _cksum _in_cksum _checkdemux _remque _insque sorwakeup _in_' \
    '_rpc _xdr _decode _encode' \
    '\.' \
)
if ($#argv < 1) then
    echo "Usage countstuff [-v] filename"
    exit (1)
endif
if ($argv[1] == "-v") then
    set beverbose
    shift argv
else
    unset beverbose
endif
set tmpa = tmpa
set tmpb = tmpb
set tmpc = tmpc
cp $1 $tmpa

set i = 1
while ($i <= $#patterns)
    echo $things[$i]
    set pat = `echo $patterns[$i] | sed -e 's/ /|/g'`
    egrep -v "$pat" $tmpa > $tmpb
    egrep "$pat" $tmpa > $tmpc
    if ($?beverbose) then
	cat $tmpc | colrm 16 41 | colrm 1 6
    endif
    set this = `cat $tmpc | colrm 16 | colrm 1 6 | sed -e 's/$/ +/' | cat $ETC/count_start - $ETC/count_end | dc`
    cp $tmpb $tmpa
    if ($i == 1) then
	set total = `egrep '\.' $tmpa | colrm 16 | colrm 1 6 | sed -e 's/$/ +/' | cat $ETC/count_start - $ETC/count_end | dc`
	echo $this , total = $total
    else
	set pct = `echo "3k $this 100 * $total / p" | dc`
	echo $this = $pct \%
    endif
    @ i++
end
rm $tmpa $tmpb $tmpc
