#!/bin/sh
# Copyright 2003  Slackware Linux, Inc.,  Concord, CA  USA
#    All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

# Slackware 9.1 ή( ;-)ʣ CD ѤΥ󥹥ȡ륹
# ץ(cpkgtool Фåѡ)Ǥ Patrick ()Υ
# ץȤį᤿ɡ롼פ series.out  series.in ˽
# ƽʤ뤢Ȥ̾ͷݤȻפա
#
# Plamo Υ󥹥ȡôȤơPatrick ˺¤ηɰդɽĤġ
# ɬ׺Ǿ¤νήѤƤޤ (_ _)
#
# -- kojima 2004/01/10

# globals

TMP=/var/log/setup/tmp

# functions

updatetagfiles() {
    if [ $MODE = RECOM ]; then
	mkdir -p $TMP/tagfiles/$series
	cp $SRCPATH/$series/tagfile $TMP/tagfiles/$series/tagfile
    elif [ $MODE = EXPERT ]; then
	cat $TMP/series/series.in | while read series ; do
            if [ -r $SRCPATH/$series/maketag ]; then
		sh $SRCPATH/$series/maketag
            fi
	    if [ -r $TMP/SeTnewtag ]; then
		mkdir -p $TMP/tagfiles/$series
		mv $TMP/SeTnewtag $TMP/tagfiles/$series/tagfile
	    fi
	done
    fi
}

errorcode() {
  if [ $1 = 99 ]; then
    # User aborted installation
    exit 1
  else
    dialog --timeout 600 --title "ѥå顼 #$1" --msgbox \
"$2 ѥå򥤥󥹥ȡ뤹ݤ̿Ūʥ顼ȯޤ \
ѥåƤ롢󥹥ȡǥɤ \
ˤꡢѥåɤ߼뤳ȤǤޤǤ \
Enter 򲡤Ȥ˿ʤ뤳ȤϲǽǤƥ \
ưɬܤΥѥåξ硢󥹥ȡ뤷ƥब \
ưʤΤޤ" 11 72
  fi
}

installseries() {
  # echo "in installseries $1"
  # echo "SRCPATH:$SRCPATH"
  # sleep 5
  if [ -d $SRCPATH/$1 ]; then
    # First, make sure our tagfiles are in order:
    if [ ! -r $TMP/tagfiles/$1/tagfile -a ! $MODE = full ]; then
      updatetagfiles $1
    fi
    # First, make sure there's at least one package:
    if ! ls $SRCPATH/$series/*.tgz 1> /dev/null 2> /dev/null ; then
      return 1
    fi
    dialog --infobox "
Installing package series ==>$1<==
" 5 45
    sleep 1
    # Install the package series:
    for package in $SRCPATH/$series/*.tgz ; do
      if [ "$MODE" = "RECOM"  -o "$MODE" = "EXPERT" ]; then # install the package
        installpkg -root $ROOTDIR -menu -tagfile $TMP/tagfiles/$series/tagfile $package
        ERROR=$?
      fi
      if [ ! $ERROR = 0 ]; then
        errorcode $ERROR $package
      fi
    done
  else # requested, but not on media.  defer until later.
    echo $1 >> $TMP/series/series.out
  fi 
}

remount_disc() {
  umount $DEVICE
  eject $DEVICE
  dialog --title "ǥθ" --menu "󥹥ȡǥ򼡤ΤΤ˸򴹤 \
ENTER 򲡤Ƥ" \
10 62 2 \
  "Continue" "Υǥ饤󥹥ȡ³" \
  "Quit" "󥹥ȡλ" 2> $TMP/reply
  if [ ! $? = 0 ]; then
    REPLY="Quit"
  else
    REPLY="`cat $TMP/reply`"
  fi
  rm -f $TMP/reply
  if [ "$REPLY" = "Quit" ]; then
    errorcode 99
  fi;
  mount $DEVICE $MOUNTPOINT 1> /dev/null 2> /dev/null
}

# /* main */

# Process command line:
if [ $# -gt 0 ]; then # there are arguments to the command
  while [ $# -gt 0 ]; do
   # echo "params: $1"
   case "$1" in
   "--promptmode")
     MODE=`echo $2` ; shift 2 ;;
   "--srcpath")
     SRCPATH=`echo $2` ; shift 2 ;;
   "--mountpoint")
     MOUNTPOINT=`echo $2` ; shift 2 ;;
   "--target")
     ROOTDIR=`echo $2` ; shift 2 ;;
   "--device")
     DEVICE=`echo $2` ; shift 2 ;;
   "--series")
     SERIES=`echo $2` ; shift 2 ;;
   *)
     echo "Unrecognized option $1" ; shift 1 ;; 
   esac
  done
else
  exit 1;
fi
# Empty out temporary directories:
rm -rf $TMP/series $TMP/tagfiles
mkdir -p $TMP/series $TMP/tagfiles
# Create initial list of series to install:
# echo "SERIES: $SERIES"
# sleep 5
for tseries in $SERIES ; do
  echo $tseries | tr [A-Z] [a-z] >> $TMP/series/series.in
done
# Main loop:
while [ -r $TMP/series/series.in ]; do
  cat $TMP/series/series.in | while read series ; do
    series=$series
    echo "installing $series"
    installseries $series;
  done
  rm -f $TMP/series/series.in
  if [ -r $TMP/series/series.out ]; then
    mv $TMP/series/series.out $TMP/series/series.in
    if [ "$DEVICE" = "noremount" ]; then
      # we've done all we can here
      break
    else # see if there's anything we need on the next disc
      remount_disc
    fi
  fi
done

