#!/bin/sh

I_WANT_A_BROKEN_PS=yes
export I_WANT_A_BROKEN_PS
all=no
if [ "x$1" = "x-a" ]
then
	all=yes
fi
export all

cat >/tmp/awk.xxx$$ <<'!'
BEGIN{
	state["D"] = "Spinwait";
	state["I"] = "Idle";
	state["J"] = "Jail";
	state["R"] = "Ready";
	state["O"] = "Running";
	state["S"] = "Sleep";
	state["T"] = "Stopped";
	state["Z"] = "Zombie";
	state["W"] = "Fault";
	state["X"] = "Moribund";
}

function statestr(s, wchan)
{
	if(wchan != s && wchan != "?" && wchan != "-")
		return wchan;
	t = state[substr(s, 1, 1)];
	if(t == "")
		return s;
	return t;
}

# rsc  36706   starttime 0:00.17  1076 Is+  -bash (bash)
{
	i=1
	user=$i; i++
	pid=$i; i++
	start=$i; i++
	if(start ~ /^[A-Z][a-z][a-z]$/){
		start = start "-" $i; i++
	}
	cputime=$i; i++
	mem=$i; i++
	stat=$i; i++
	wchan=$i; i++
	cmd=$i; i++	
	if(ENVIRON["all"] == "yes"){
		for(; i<=NF; i++)
			cmd = cmd " " $i;
	}else{
		sub(/.*\//, "", cmd);
		sub(/:$/, "", cmd);
		sub(/^-/, "", cmd);
		s = " " cmd;
	}
	sub(/\.[0-9][0-9]$/, "", cputime);	# drop .hundredths of second
	if(cputime ~ /..:..:../){	# convert hh:mm:ss into mm:ss
		split(cputime, a, ":");
		cputime = sprintf("%d:%02d", a[1]*60+a[2], a[3]);
	}
	if(start ~ /..:..:../){	# drop :ss
		sub(/:..$/, "", start);
	}
	printf("%-8s  %11d %8s %8s %8dK %-8s %s\n",
		user, pid, start, cputime, mem, statestr(stat, wchan), cmd);
}
!

case "${SYSNAME:-`uname`}" in 
SunOS)
	/bin/ps -aA -o 'user,pid,stime,time,rss,s,s,args' | sed 1d |
		nawk -f /tmp/awk.xxx$$ | sort -n +1
	;;
*)
	/bin/ps -axww -o 'user,pid,start,time,rss,stat,wchan,command' | sed 1d |
		awk -f /tmp/awk.xxx$$ | sort -n +1
	;;
esac

rm -f /tmp/awk.xxx$$

