#!/usr/local/bin/cbsd
#v10.1.2
MYARG="name controlmaster"
MYOPTARG=""
MYDESC="Generate chosen package list from repository"
ADDHELP="out=path_to_file with result, instead of random\n\
repo= use this repository\n\
conf= use this pkg.conf\n"

. ${subrdir}/nc.subr

. ${cbsdinit}

. ${dialog}

f_dialog_title "$msg_system_console_configuration"
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
f_mustberoot_init

dialog_menu_main()
{
	local title=""
	local btitle="Select packages"
	local prompt=""
	local defaultitem=
	local hline="Hit ENTER for SELECT"
	local prompt=" Use 'ENTER' to mark packages "
	local kversion

	local f_dialog_title=" CBSD FreeBSD Images Repository "

	local _menufile="${tmpdir}/pkg/${name}.mnu"

	f_dialog_default_fetch defaultitem

	[ ! -f "${_menufile}" ] && err 1 "NO such menufile ${_menufile}"

	. ${_menufile}

	[ -z "${menu_list}" ] && return 0

	cbsd_menubox
	retval=$?

	f_dialog_data_sanitize menu_choice
	f_dialog_menutag_store "$menu_choice"
	f_dialog_default_store "$menu_choice"

	return $retval
}

### MAIN ###
PKGCONF=""
PKGOPT=""
PKG_MODIFIED="${tmpdir}/pkg_updated.txt"
UPDATED="0"

[ ! -f "${tmpdir}/pkg/${name}.idx.gz" ] && err 1 "${N1_COLOR}No index file${N0_COLOR}"

CONTROLMASTER="${controlmaster}"

if [ ! -f "${CONTROLMASTER}" ]; then
	CONTROLMASTER=$( ${MKTEMP_CMD} )
	/usr/bin/touch ${CONTROLMASTER}
fi

. ${CONTROLMASTER}

trap "/bin/rm -f ${CONTROLMASTER}" HUP INT ABRT BUS TERM EXIT

REPOFILE="repo"
LISTFILE="${tmpdir}/pkg_${REPOFILE}.list"

while :; do
	dialog_menu_main || break

	[ -z "${mtag}" ] && exit $SUCCESS

	case "$mtag" in
		"EXIT")
			${TRUNCATE_CMD} -s0 ${CONTROLMASTER}
			for i in $( printenv |${GREP_CMD} pkgmark_ ); do
				index=${i%%=*}
				/usr/bin/zgrep "${index}_origin=" ${tmpdir}/pkg/${name}.idx.gz >> ${CONTROLMASTER}
				echo "export ${i}" >> ${CONTROLMASTER}
			done
			trap "" HUP INT ABRT BUS TERM EXIT
			exit 0
		;;
		"-")
			continue
			;;
		*)
			index=${mtag%% *}
			pkg=${mtag##* }
			markname=$( echo "${pkg}" |${TR_CMD} -d "\"()'\`-.+" )
			eval mark=\"\$pkgmark_${markname}\"
			if [ "${mark}" = "X" ];then
				unset pkgmark_${markname}
			else
				export pkgmark_${markname}="X"
			fi
			continue
			;;
	esac

	if [ "$command" ]; then
		$BSDCFG_LIBE/$APP_DIR/$command ${USE_XDIALOG:+-X}
	fi
done

return $SUCCESS
