#!/bin/bash

A1=A
A2=("SYSTEM CONFIGURATION")


function specify_config {
    DATA=
    inputbox "Enter data"
    TMPDATA=$INPUT
}

function create_directory {
    if [ ! -d "$TMPDATA" ]; then
	yesnobox "Wrong path or file does not exist. Create ?"
	[ "$YNRETVAL" = "0" ] && mkdir -p $TMPDATA
    fi
    DATA=$TMPDATA
}

function create_devices {
    if [ ! -b "$TMPDATA" ] && [ ! -c "$TMPDATA" ]; then
	yesnobox "Wrong path or file does not exist. Create \"$TMPDATA\" ?"
	if [ "$YNRETVAL" = "0" ]; then
	    case $TMPDATA in
		/dev/fd0) mknod /dev/fd0 b 2 0
			  chmod 660 /dev/fd0;;
		/dev/fd1) mknod /dev/fd1 b 2 1
			  chmod 660 /dev/fd1;;
		/dev/sr0) mknod /dev/sr0 b 11 0;;
		/dev/sr1) mknod /dev/sr1 b 11 1;;
		/dev/sga|/dev/sg0) rm -f /dev/sga
				   mknod /dev/sga c 21 0
				   ln -sf /dev/sga /dev/sg0;;
		/dev/sgb|/dev/sg1) rm -f /dev/sgb
			    	   mknod /dev/sgb c 21 1
			    	   ln -sf /dev/sgb /dev/sg1;;
		/dev/ttyS0) mknod /dev/ttyS0 c 4 64
			    chmod 666 /dev/ttyS0;;
		/dev/ttyS1) mknod /dev/ttyS1 c 4 65
			    chmod 666 /dev/ttyS1;;
		/dev/ttyS2) mknod /dev/ttyS2 c 4 66
			    chmod 666 /dev/ttyS2;;
	    esac
	fi
    fi
    DATA=$TMPDATA
}

function set_distro {
    case $CHOICE in
	A) INITDIR="/etc/rc.d/init.d"
	   DISTRO="Redhat, Mandrake, Caldera";;
	B) INITDIR="/etc/init.d"
	   DISTRO="DLD, Debian, Corel";;
	C) INITDIR="/sbin/init.d"
	   DISTRO="SuSE, EasyLinux";;
	D) INITDIR="/etc/rc.d"
	   DISTRO="Slackware";;
    esac
}

function choose_distro {
    RAD="Choose your Linux-distribution"
    STRING=("A" "Redhat, Mandrake, Caldera" on \
	    "B" "DLD, Debian, Corel" off \
	    "C" "SuSE, EasyLinux" off \
	    "D" "Slackware" off)
    INPUT=set_distro
    radiolist "${STRING[@]}"
}

function write_fstab {
	if [ "$YNRETVAL" = "0" ]; then
	    backup_conf /etc/fstab
	    echo $LINE >> /etc/fstab
	fi
}

function read_fstab {

	local FSTYPE=auto
    if [ ! "`grep "$FLOP" /etc/fstab`" -a ! "`grep "$A" /etc/fstab`" -a ! "`grep "$FSTYPE" /etc/fstab`" ]; then
	yesnobox "$FLOP and $A are not in fstab, create a line ?"
	LINE="$FLOP $A $FSTYPE user,exec,dev,suid,rw,noauto 0 0"
	write_fstab
    fi
	local FSTYPE=msdos
    if [ ! "`grep "$FLOP" /etc/fstab`" -a ! "`grep "$B" /etc/fstab`" -a ! "`grep "$FSTYPE" /etc/fstab`" ]; then
	yesnobox "$FLOP and $B are not in fstab, create a line ?"
	LINE="$FLOP $B msdos user,suid,rw,noauto,uid=0,gid=100,umask=007 0 0"
	write_fstab
    fi
    if [ ! "`grep "$CDROM" /etc/fstab`" -a ! "`grep "$E" /etc/fstab`" ]; then
	yesnobox "$CDROM and $E are not in fstab, create a line ?"
	LINE="$CDROM $E iso9660 user,exec,dev,suid,ro,noauto 0 0"
	write_fstab
    fi
    if [ ! "`grep "$CDRW" /etc/fstab`" -a ! "`grep "$F" /etc/fstab`" ]; then
	yesnobox "$CDRW and $F are not in fstab, create a line ?"
	LINE="$CDRW $F iso9660 user,exec,dev,suid,ro,noauto 1 1"
	write_fstab
    fi
}

function saverc_global {
	[ -d /etc/conmen ] || mkdir /etc/conmen

	[ -f $GLOBALRC ] && cp -f $GLOBALRC $GLOBALRC.global
	backup_conf --force $GLOBALRC.global
	rm -f $GLOBALRC.global

	[ -f "$DIALOG" ] && echo DIALOG="'"${DIALOG}"'" > $GLOBALRC
        [ -d "$A" ] && echo A="'"$A"'" >> $GLOBALRC
        [ -d "$B" ] && echo B="'"$B"'" >> $GLOBALRC
        [ -d "$C" ] && echo C="'"$C"'" >> $GLOBALRC
        [ -d "$D" ] && echo D="'"$D"'" >> $GLOBALRC
        [ -d "$E" ] && echo E="'"$E"'" >> $GLOBALRC
        [ -d "$F" ] && echo F="'"$F"'" >> $GLOBALRC
        [ -d "$Z" ] && echo Z="'"$Z"'" >> $GLOBALRC
        [ -b "$FLOP" ] && echo FLOP="'"$FLOP"'" >> $GLOBALRC
        [ -b "$CDROM" ] && echo CDROM="'"$CDROM"'" >> $GLOBALRC
        [ -b "$CDRW" ] && echo CDRW="'"$CDRW"'" >> $GLOBALRC
        [ -c "$GENERIC" ] && echo GENERIC="'"$GENERIC"'" >> $GLOBALRC
        [ -c "$MOUSE" ] && echo MOUSE="'"$MOUSE"'" >> $GLOBALRC
	[ ! -z "$DISTRO" ] && echo DISTRO="'"$DISTRO"'" >> $GLOBALRC
	[ -d "$INITDIR" ] && echo INITDIR="'"$INITDIR"'" >> $GLOBALRC
	echo DBFILE="'"/etc/conmen/conmen.db"'" >> $GLOBALRC
	echo CONLIBDIR="'"/usr/lib/conmen"'" >> $GLOBALRC
	echo PATH="'"/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin"'" >> $GLOBALRC
	echo XTRM="'"xterm"'" >> $GLOBALRC
}

function menuchoices2 {
    case $choice in
	A) specify_config; create_directory; A=$DATA;;
	B) specify_config; create_directory; B=$DATA;;
	C) specify_config; create_directory; C=$DATA;;
	D) specify_config; create_directory; D=$DATA;;
	E) specify_config; create_directory; E=$DATA;;
	F) specify_config; create_directory; F=$DATA;;
	G) specify_config; create_directory; Z=$DATA;;
	H) specify_config; create_devices; FLOP=$DATA;;
	I) specify_config; create_devices; CDROM=$DATA
	   [ -b "$CDROM" ] && ln -sf $CDROM /dev/cdrom;;
	J) specify_config; create_devices; CDRW=$DATA;;
	K) specify_config; create_devices; GENERIC=$DATA
	   [ -b "$CDRW" ] && ln -sf $CDRW /dev/cdrecorder;;
	L) specify_config; create_devices; MOUSE=$DATA
	   [ -c "$MOUSE" ] && ln -sf $MOUSE /dev/mouse;;
	M) choose_distro;;
	N) read_fstab
	   saverc_global;;
    esac
    install
}

function install {
    MENU="CONFIGURE CONMEN"
    MENUCHOICES=menuchoices2
    INSTMENU=("A" "Floppy mountpoint.......[$A]" \
	      "B" "DOS-Floppy mountpoint...[$B]" \
	      "C" "DOS C:\\ mountpoint.....[$C]" \
	      "D" "DOS D:\\ mountpoint.....[$D]" \
	      "E" "CD-ROM mountpoint.......[$E]" \
	      "F" "CD-RW mountpoint........[$F]" \
	      "G" "Loop Device mountpoint..[$Z]" \
	      "H" "Floppy devicefile.......[$FLOP]" \
	      "I" "CD-ROM devicefile.......[$CDROM]" \
	      "J" "CD-RW devicefile........[$CDRW]" \
	      "K" "Generic SCSI devicefile.[$GENERIC]" \
	      "L" "Mouse devicefile........[$MOUSE]" \
	      "M" "Linux Distribution......[$DISTRO]" \
	      "N" "Save settings to $GLOBALRC")
    menubox "${INSTMENU[@]}"
}


function search {
. $GLOBALRC
DIALOG=`which dialog 2> /dev/null`
if [ ! "$DIALOG" ]; then
    clear
    echo "Dialog not found! Install dialog and try again"
    hit_enter
fi
install
}

function configure_conmen {
    if [ "$USER" = "root" ]; then
	[ -f "/etc/shells" ] && \
	grep -q /usr/bin/conmen /etc/shells || \
	echo "/usr/bin/conmen" >> /etc/shells

	search
    else
	clear
	echo "You must be root !!"
	hit_enter
    fi
}
