#!/bin/sh -

# atls - list spooled at(1) job commands
# Steve Kinzler, steve@kinzler.com, Feb 05/Nov 16
# https://kinzler.com/me/home.html#unix

# NOTE: Only fully tested with at-3.1.8-46.1 (FC1) and at-3.1.8-82.1 (RHEL5)

hash=; env=; queue=; bad=

while :
do
	case $# in
	0)	break;;
	*)	case "$1" in
		-#)	hash=$1;;
		-e)	env=$1;;
		-q)	shift; queue="$1";;

		--)	shift; break;;
		-h)	bad=t; break;;
		-*)	bad=t; echo "$0: unknown option ($1)" 1>&2;;
		*)	break;;
		esac
		shift;;
	esac
done

case "$#,$bad" in
0,)	;;
*)	cat << EOF 1>&2
usage: $0 [ -# ] [ -e ] [ -q queue ]
	-#	print an initial hash-bang line
	-e	also output the environment setup commands if available
	-q	list the given queue versus the default
EOF
	exit 1;;
esac

case "$queue" in
'')		;;
[a-zA-Z=])	queue="-q $queue";;
*)		echo "$0: aborting, invalid queue ($queue)" 1>&2; exit 2;;
esac

case "$hash" in
?*)	echo '#!/bin/sh';;
esac

old=
case "`at -V 2>&1`" in
*[Uu]sage:*)	old=t;;		# HACK KLUDGE guess on how to get spooled cmds
esac

at -l $queue | sort -k 2 |
while read job
do
	echo "## $job ####################################"
	case "$old" in
	?*)	at -l -v `echo "$job" | sed 's/ .*//'` |
			sed '1,3d' | cat -s;;			# HACK KLUDGE
	*)	at -c `echo "$job" | sed 's/	.*//'` |
		case "$env" in
		?*)	cat;;
		*)	sed '1,/^}$/d; /^[ 	]*$/d' |	# HACK KLUDGE
			sed '/^\${SHELL:-.*urandom/d';;		# HACK KLUDGE
		esac
		echo '';;
	esac
done
