#!/bin/sh -efu
### This file is covered by the GNU General Public License
### version 2 or later.
###
### Copyright (C) 2019  ALT Linux Team
### Author: Leonid Krivoshein <klark@altlinux.org>

number=
prefix=
entry=0
itemno=0

grubcfg=${1-/boot/grub/grub.cfg}

cat "$grubcfg" | sed \
	-re '/^\s*(menuentry\s+|submenu\s+|})/!d'     \
	-re "s/^\s*menuentry\s+'([^']+)'.*\$/M	\1/g" \
	-re 's/^\s*menuentry\s+"([^"]+)".*$/M	\1/g' \
	-re "s/^\s*submenu\s+'([^']+)'.*\$/S	\1/g" \
	-re 's/^\s*submenu\s+"([^"]+)".*$/S	\1/g' \
	-re "s/^\s*}\s*\$/E	-/g" | \
while read mode title
do
	case "$mode" in
	M)	echo "${number}${itemno}	${prefix}${title}"
		itemno=$(($itemno + 1))
		entry=1
		;;
	S)	number="${number}${itemno}>"
		prefix="${prefix}${title}>"
		itemno=0
		;;
	*)	if [ $entry -ne 0 ]; then
			entry=0
		elif [ -n "$number" ]; then
			number="${number%>}"
			prefix="${prefix%>}"
			case "$number" in
			*">"*)	itemno="${number##*>}"
				number="${number%>*}>"
				prefix="${prefix%>*}>"
				itemno=$(($itemno + 1))
				;;
			*)	itemno=$number
				itemno=$(($itemno + 1))
				prefix=
				number=
				;;
			esac
		fi
		;;
	esac
done

