ND=/etc/conf/node.d
ETH_CNT=0

#
# Prompt with mesg, return non-zero on q. Also allows setting -x and +x,
# shell escapes and the passing of default values
#
# Usage: prompt "message" [default]
# Argument is a quoted message
# Dependencies: expr
# Notes: returns 1 if the user answers q or Q, returns 0 otherwise
#        if $quit is not set, it is set to "quit"
#        $cmd is set to whatever is input by the user, and then can
#               subsequently be used in the shell script.
#
prompt() {
        _mesg=$1
        _default=$2
        while   echo "\n${_mesg} [${_default}]: \c" >&2
        do      read cmd < /dev/tty
                case $cmd in
                +x|-x)  set $cmd                                        ;;
                !*)     eval `expr "$cmd" : "!\(.*\)"`                  ;;
                "")     # If there is an second argument use it
                        # as the default else loop until 'cmd' is set
                        [ "$2" ] && {
                                cmd=$2
                                return 0
                        }
                        : continue
                        ;;
                *)      unset _mesg
                        return 0                                        ;;
                esac
        done
}

# Prompt for yes or no answer - returns non-zero for no
getyn() {
        while   read yn < /dev/tty
        do      case $yn in
                [yY]*)  return 0                        ;;
                [nN]*)  return 1                        ;;
                *)      echo "please enter either y or n"       ;;
                esac
        done
}

#
# get ip address
#

ETH_IP_ADDR="192.9.211.10"
IP=

getipaddr() {
        ETH_IP_PROMPT="\nInterface $drv[$ETH_CNT] IP address [$ETH_IP_ADDR]: \c"
        while   echo  $ETH_IP_PROMPT
        do      read ip < /dev/tty
                case "$ip" in
                [0-9]*) IP=$ip
                        break
                        ;;
                "")     IP=$ETH_IP_ADDR
                        break
                        ;;
                *)      p "Address must have n.n.n.n form, i.e., 192.9.211.2"
                        ;;
                esac
        done

        # Make sure this IP address is in /etc/hosts as us
        grep $IP /etc/hosts > /dev/null 2>&1 || {
            if [ ! -f /etc/hosts ] ; then
                /bin/echo "127.0.0.1\tlocalhost loopback lb" > /etc/hosts
                chmod 644 /etc/hosts
                chown bin /etc/hosts
                chgrp bin /etc/hosts
            fi
            if [ -z "$HOSTNAME" ] ; then
                set -- `cat /etc/systemid`
                HOSTNAME=${1:-$2}
            fi
            /bin/echo "$IP\t$HOSTNAME" >> /etc/hosts
        }
}

#
# main
#
DRVLIST="ether"

while true ; do
    while true ; do
          tput clear
          echo "\t\t\tTCP/IP Ethernet Driver Configuration"
          drv="$DRVLIST"
          break
    done

    getipaddr

    #
    # Do configuration
    #
    echo "Configuring TCP/IP for $drv.  Please Wait."

    #
    # Determine node file
    #
    SYSTEM="ATT"

    grep 'SCO' /etc/motd > /dev/nul
    stat=$?
    if [ "$stat" -eq "1" ]; then
           IFCONFIG="ifconfig \"ether$ETH_CNT\" `uname` up "
    else
           IFCONFIG="        ifconfig ether$ETH_CNT \`uname -n\` \$NETMASK -trailers \$BROADCAST"
           SYSTEM="SCO"
    fi
    NODE=$ND/ether$ETH_CNT

    #
    # Determine whether nodes are cloning or not
    #

    if [ ! -f $NODE ]; then
        echo "$drv[$ETH_CNT] is not installed on this system."
        echo "Please install the driver and re-run $0"
        exit 1
    fi

    exec < $NODE
    read major node type minor
    if [ $major = clone ]; then
         if [ "$SYSTEM" = "SCO" ]; then
            OUTPUT="        cenetb ip /dev/$node ether$ETH_CNT"
         else
            OUTPUT1="eth_arp = \"/dev/ether$ETH_CNT\" lsap 0x806"  # stream for ARP messages
            OUTPUT2="eth_ip  = \"/dev/ether$ETH_CNT\" lsap 0x800" # stream for IP messages
            OUTPUT3="link arp under ip_tcp name \"ether$ETH_CNT\""
         fi
         ETH_CNT=`expr $ETH_CNT + 1`
    else
        echo "THIS IS NOT A CLONE DRIVER, TCP/IP DRIVER CONFIGURATION FAIL !!"
    fi


    #
    # Modify strcf
    #
    if [ "$SYSTEM" = "SCO" ]; then
       if [ -n "$OUTPUT" ] ; then
           ed -s /etc/strcf << TOAST > /dev/null
$
?loopback ip?
i
$OUTPUT
.
w
q
TOAST
       fi

       #
       # Modify /etc/tcp
       #

       if [ -n "$IFCONFIG" ] ; then
           ed -s /etc/tcp << TOAST > /dev/null
/ifconfig/
a
$IFCONFIG
.
w
q
TOAST
       fi

       rm -f /etc/rc2.d/S85tcp /etc/rc0.d/K85tcp
       ln /etc/tcp /etc/rc2.d/S85tcp
       ln /etc/tcp /etc/rc0.d/K85tcp

    else
           cp /accdrv/net.cf /accdrv/tmp
           ed -s /accdrv/tmp << TOAST > /dev/null
/open link/
a
$OUTPUT1
$OUTPUT2
.
/link loop/
a
$OUTPUT3
.
/ifconfig/
i
$IFCONFIG
.
w
q
TOAST
           if [ -f /etc/netd.cf ]; then
              if [ ! -f /etc/netd.cf.bak ]; then
                 cp /etc/netd.cf /etc/netd.cf.bak
              fi
           fi
           cp /accdrv/tmp /etc/netd.cf
           rm /accdrv/tmp

    fi

break 2
done            # end while true do

echo "TCP/IP Configuration Complete."
exit 0
