#!/bin/sh

# last update: 15-NOV-2008

echo 'CLEX configuration utility'
echo '=========================='
echo

umask 022
COMPLETE_LIST='B_PANEL_SIZE C_PANEL_SIZE D_PANEL_SIZE H_PANEL_SIZE
	CMD_F3 CMD_F4 CMD_F5 CMD_F6 CMD_F7 CMD_F8 CMD_F9 CMD_F10 CMD_F11 CMD_F12
	TIME_FMT DATE_FMT LAYOUT_ACTIVE LAYOUT1 LAYOUT2 LAYOUT3
	CMD_LINES DIR2 FRAME KILOBYTE PROMPT QUOTE XTERM_TITLE'

confirmation()
{
	echo -n "$1 (y/N) ? "
	read answer junk
	if [ x"$answer" != x'y' -a x"$answer" != x'Y' ] ; then
		echo "Exiting"
		exit 1
	fi
	echo
}

reset_config() {
	local var

	for var in $COMPLETE_LIST ; do
		unset CLEX_$var
	done
}

read_config() {
	local line var val

	clex3cfg='yes'
	while read line ; do
		if ! echo $line | LC_ALL=C grep -q '^[A-Z][A-Z0-9_]*=.*$' ; then
			continue
		fi
		var=`echo $line | sed -e 's/=.*$//'`
		val=`echo $line | LC_ALL=C sed -e 's/^[A-Z0-9_]*=//'`
		eval CLEX_$var='"$val"'
	done < "$1"
}

convert_config() {
	echo 'Converting data from version 3 to version 4'
	if [ x"$CLEX_FMT_DATE" != x ] ; then
		CLEX_DATE_FMT=`echo $CLEX_FMT_DATE | sed -e 's/d/%d/;s/D/%e/;s/m/%m/;s/M/%b/;s/y/%y/;s/Y/%Y/'`
	fi
	if [ x"$CLEX_FMT_TIME" = x'1' ] ; then
		CLEX_TIME_FMT='%I:%M%p'
	elif [ x"$CLEX_FMT_TIME" = x'2' ] ; then
		CLEX_TIME_FMT='%H:%M'
	fi
	if [ x"$CLEX_ACTIVE_LAYOUT" != x ] ; then
		CLEX_LAYOUT_ACTIVE=`expr $CLEX_ACTIVE_LAYOUT + 1`
	fi
	if [ x"$CLEX_XTERM_TITLE" == x'2' ] ; then
		CLEX_XTERM_TITLE='1'
	fi
	if [ x"$CLEX_LAYOUT1" != x ] ; then
		CLEX_LAYOUT1=`echo $CLEX_LAYOUT1 | sed -e 's/|  /|/'`
	fi
	if [ x"$CLEX_LAYOUT2" != x ] ; then
		CLEX_LAYOUT2=`echo $CLEX_LAYOUT2 | sed -e 's/|  /|/'`
	fi
	if [ x"$CLEX_LAYOUT3" != x ] ; then
		CLEX_LAYOUT3=`echo $CLEX_LAYOUT3 | sed -e 's/|  /|/'`
	fi
}

detect_programs() {
	local opt var val prog arg

	unset PROG3 PROG4 PROG5 PROG6 PROG7 PROG8 PROG9
	ARG3='$f'
	ARG4='$f'
	if cp -- "$0" /dev/null >/dev/null 2>&1 ; then
		echo "End of options mark '--' is supported"
		opt=' --'
		PROG3='more'
		PROG4='vi'
		PROG5='cp'		; ARG5='-ir $f $2'
		PROG6='mv'		; ARG6='$f $2'
		PROG7='mkdir'	; ARG7=''
		PROG8='rm'		; ARG8='$f'
		PROG9='lpr'		; ARG9='$f'
	else
		echo "End of options mark '--' is NOT supported"
		opt=''
	fi

	if [ x"$CLEX_CMD_F3" = x ] ; then
		if [ x"$PAGER" != x ] ; then
			PROG3="$PAGER"
		elif less -V  >/dev/null 2>&1; then
			PROG3='less'
		fi
	fi
	echo "Pager program: $PROG3"

	if [ x"$CLEX_CMD_F4" = x ] ; then
		if [ x"$EDITOR" != x ] ; then
			PROG4="$EDITOR"
		elif vim --version  >/dev/null 2>&1; then
			PROG4='vim'
		fi
	fi
	echo "Text editor: $PROG4"

	for cmd in 3 4 5 6 7 8 9 ; do
		var=CLEX_CMD_F$cmd
		eval val="\$$var"
		if [ x"$val" != x ] ; then
			continue
		fi
		eval prog="\$PROG$cmd"
		if [ x"$prog" = x ] ; then
			continue
		fi
		eval arg="\$ARG$cmd"
		eval $var='"$prog$opt $arg"'
	done
}
 
print_config() {
	local var val

	for var in $COMPLETE_LIST ; do
		eval val="\$CLEX_$var"
		if [ x"$val" != x ] ; then
			echo $var=$val
		fi
	done
}

reset_config
clex3cfg='no'
for file in '/etc/clexrc' '/usr/local/etc/clexrc' ; do
	if [ -f "$file" ] ; then
		echo 'System wide configuration file from previous version 3 found'
		read_config "$file"
	fi
done
file=~/.clexrc
if [ -f "$file" ] ; then
	echo 'Personal configuration file from previous version 3 found'
	read_config "$file"
fi
if [ "$clex3cfg" != 'no' ] ; then
	convert_config
fi
detect_programs

echo
echo '=== BEGIN =================='
print_config
echo '=== END ===================='
echo

CLEX4=~/.clexcfg
if [ -f "$CLEX4" ] ; then
	confirmation 'Configuration file exists. Do you want to overwrite it'
else
	confirmation 'Save this configuration'
fi
{
	echo '#'
	echo '# CLEX configuration file'
	echo '#'
	print_config 
} > "$CLEX4"
if [ "$?" -ne 0 ] ; then
	echo 'Error saving configuration'
	exit 1
fi
echo "Configuration saved to $CLEX4"
echo "Please restart CLEX"
exit 0
