#!/bin/sh
#
# Copyright 1993, 1994 Patrick Volkerding, Moorhead, Minnesota 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.
#

# Wed, 27 Apr 1994 00:06:50 -0700 (PDT)
# Optimization by David Hinds.

SOURCE_DIR=/var/adm/mount
umask 000
ASK="tagfiles"
if [ ! -d /usr/sbin ]; then # we must be on the bootdisk
 TARGET_DIR=/mnt
 TMP=/mnt/tmp
 if mount | grep "on /mnt" 1> /dev/null 2>&1 ; then # good
  echo > /dev/null
 else # bad
  echo
  echo
  echo "LinuxΥѡƥ /mnt ˥ޥȤޤǤϥ롼ȥǥ"
  echo "pkgtoolj ¹ԤǤޤ󡣰ʲ򼨤ޤ"
  echo "⤷롼ȥѡƥ(/) /dev/hda1 ǡext2fs ȤäƤʤ"
  echo "Τ褦ϤƤ"
  echo "mount /dev/hda1 /mnt -t ext2"
  echo
  echo "/dev/hda2  /usr ѡƥ˳Ƥʤ顢̤Ǥ:"
  echo "mount /dev/hda2 /mnt/usr -t ext2"
  echo
  echo "LinuxѡƥޥȤơcpkgtoojΩ夲ޤ礦"
  echo
  exit
 fi
 if [ ! -d $TMP ]; then
  mkdir -p $TMP
  chmod 1777 $TMP
 fi
else
 TARGET_DIR=/
 TMP=/tmp
fi
ADM_DIR=$TARGET_DIR/var/log
LOG=$TMP/PKGTOOL.REMOVED

keep_files() {
 while read FILE ; do
  if [ -f "$TARGET_DIR/$FILE" ]; then
    echo "  --> $FILE¾Υѥåˤޤذܤޤ" >> $LOG
  fi
 done
 }

keep_links() {
 while read LINK ; do
  echo "Duplicate link. ¹Ԥޤ: $LINK" >> $LOG
 done
}

delete_files() {
 while read FILE ; do
  if [ -f "$TARGET_DIR/$FILE" ]; then
    echo "  --> $FILEõޤ" >> $LOG
    rm -f $TARGET_DIR/$FILE
  fi
 done
 }

delete_links() {
 while read LINK ; do
  echo "Unique link. ¹Ԥޤ: $LINK" >> $LOG
 done
}

# Conversion to 'comm' utility by Mark Wisdom.
remove_packages() {
 for package_name in $* 
 do
  if [ -r $ADM_DIR/packages/$package_name ]; then
   dialog --title "ѥåõƤޤ" --infobox "ѥå$package_nameõƤޤ¾˥󥹥ȡ\n\
줿ѥåƤȽʣʬõƤޤȤޤ\n\
顢ġΥեåƤޤΤᤳνˤϾ\n\
֤ݤޤ⤷νοʹԾǧä顢\n\
βۥ󥽡ؤơ'tail -f $TMP/PKGTOOL.REMOVED'\n\
ƤߤƤ" 9 70
   echo "$package_nameõ" >> $LOG
   if grep "./" $ADM_DIR/packages/$package_name 1> /dev/null 2>&1; then
    TRIGGER=".\/"
   else
    TRIGGER="FILE LIST:"
   fi
   echo "õե:" >> $LOG
   sed -n "/$TRIGGER/,/^$/p" < $ADM_DIR/packages/$package_name | sort -u > $TMP/delete_list
   # Pat's new-new && improved pre-removal routine.
   for DIR in $ADM_DIR/removed_packages $ADM_DIR/removed_scripts ; do
    if [ ! -d $DIR ] ; then mkdir -p $DIR ; chmod 755 $DIR ; fi
   done
   mv $ADM_DIR/packages/$package_name $ADM_DIR/removed_packages 1> /dev/null 2>&1
   # Look for duplicated links and leave them in place.
   if [ -r $ADM_DIR/scripts/$package_name ]; then
    cat $ADM_DIR/scripts/$package_name | grep 'rm -rf' | sort -u > $TMP/del_link_list
    mv $ADM_DIR/scripts/$package_name $ADM_DIR/removed_scripts 1> /dev/null 2>&1
    cat $ADM_DIR/scripts/* | grep 'rm -rf' | sort -u > $TMP/required_links
    comm -12 $TMP/del_link_list $TMP/required_links | keep_links
    comm -23 $TMP/del_link_list $TMP/required_links | delete_links
    comm -23 $TMP/del_link_list $TMP/required_links > $TMP/delscript
    ( cd $TARGET_DIR ; sh $TMP/delscript )
    rm -f $TMP/del_link_list $TMP/required_links $TMP/delscript
   fi
   cat $ADM_DIR/packages/* | sort -u > $TMP/required_files
   comm -12 $TMP/delete_list $TMP/required_files | keep_files
   comm -23 $TMP/delete_list $TMP/required_files | delete_files
   rm -f $TMP/delete_list
   rm -f $TMP/required_files
  else
   echo "Τ褦ʥѥåϤޤ$package_nameõǤޤ" >> $LOG
  fi
 done
}

# Here, we read the list of arguments passed to the pkgtool script.
if [ $# -gt 0 ]; then # there are arguments to the command
 while [ $# -gt 0 ]; do
  case "$1" in
  "-sets")
   DISK_SETS=`echo $2 | tr "[A-Z]" "[a-z]"` ; shift 2 ;;
  "-source_mounted")
   SOURCE_MOUNTED="always" ; shift 1 ;;
  "-ignore_tagfiles")
   ASK="never" ; shift 1 ;;
  "-tagfile")
   USETAG=$2 ; shift 2 ;;
  "-source_dir")
   SOURCE_DIR=$2 ; shift 2 ;;
  "-target_dir")
   TARGET_DIR=$2
   ADM_DIR=$TARGET_DIR/var/log
   shift 2 ;;
  "-source_device")
   SOURCE_DEVICE=$2 ; shift 2 ;;
  esac
 done
else  # there were no arguments, so we'll get the needed information from the
      # user and then go on.
 CMD_START="true"
 rm -f /tmp/SeT*
 while [ 0 ]; do
  dialog --title "Plamo Linuxѥåġ (pkgtool version 3.3.0)" \
--menu "\nPlamo Linuxѥåġؤ褦\n\
\nɤ򤷤ޤ\n" 17 74 6 \
"Current" "ȥǥ쥯ȥ꤫饤󥹥ȡ" \
"Other" "̤Υǥ쥯ȥ꤫饤󥹥ȡ" \
"Floppy" "եåԡ饤󥹥ȡ" \
"Remove" "󥹥ȡ뤵Ƥѥåõ" \
"View" "ѥåΥեΰ򸫤" \
"Exit" "ѥåġλ" 2> /tmp/reply
  if [ $? = 1 -o $? = 255 ]; then
   rm -f /tmp/reply
   exit
  fi
  REPLY="`cat /tmp/reply`"
  rm -f /tmp/reply
  if [ "$REPLY" = "Exit" ]; then
   exit
  fi
  if [ "$REPLY" = "View" ]; then
   dialog --title "" --infobox "ѥåġϥ󥹥ȡ뤵ƤѥåĴ١ꥹȤ\n\
뤿˥ƥ򥹥󤷤Ƥޤˤ\n\
1.`date +"%S"`E+`date +"%M"` BogoMipSecondsݤޤ" 7 70
   echo 'dialog --menu "ѥå򤷤Ƥ" 15 64 8 \' > /tmp/viewscr
   ls $ADM_DIR/packages | sed -e 's/.*/"&" "" \\/' >> /tmp/viewscr
   echo "2> /tmp/return" >> /tmp/viewscr
   while [ 0 ]; do
    . /tmp/viewscr
    if [ ! "`cat /tmp/return`" = "" ]; then
     dialog --title "ѥå: `cat /tmp/return`" --textbox "$ADM_DIR/packages/`cat /tmp/return`" \
     22 74 2> /dev/null
    else
     break 
    fi
   done
   rm -f /tmp/return /tmp/viewscr /tmp/tmpmsg
   chmod 755 /
   chmod 1777 /tmp
   continue
  fi  
  if [ "$REPLY" = "Remove" ]; then
   dialog --title "" --infobox "ѥåġϥ󥹥ȡ뤵줿ѥåĴ١\n\
ꥹȤ뤿˥ƥ򥹥󤷤Ƥޤ\n\
3.`date +"%S"`E+`date +"%M"`BogoMipSecondsޤ" 7 64
   cat << EOF > $TMP/rmscript

dialog --title "õѥå" --checklist "õѥå򤷤Ƥ\n\
ѥå򤹤ˤϥڡ򲡤Ƥ\n\
岼Υ륭Ѥȡ뤷Ƥ٤Ƥ\n\
ꥹȤ򸫤뤳ȤǤޤ" 22 60 13 \\
EOF
   for name in `ls $ADM_DIR/packages` ; do
    BLURB="`sed -n \"/$name:/{s/\\"//g;p;q;}\" $ADM_DIR/packages/$name | cut -b10-45`"
    echo " \"$name\" \"$BLURB\" off \\" >> $TMP/rmscript
   done 
   echo "2> /tmp/return" >> $TMP/rmscript
   cat /dev/null > $LOG
   chmod 700 $TMP/rmscript
   export ADM_DIR;
   $TMP/rmscript
   remove_packages `cat /tmp/return | tr -d "\042"`
   if [ "`cat $TMP/PKGTOOL.REMOVED`" = "" ]; then
    rm -f $TMP/PKGTOOL.REMOVED
   else
    dialog --title "ѥåξõλ" --msgbox "
ΥѥåϾõޤõ줿եεϿϡ\n\
$TMP: PKGTOOL.REMOVED˺Ƥޤѥåġ\n\
Υǥ쥯ȥõޤΤǡ漫ʬǾõƤ" 8 70
   fi
   rm -f $TMP/rmscript /tmp/return /tmp/tmpmsg /tmp/SeT*
   chmod 755 /
   chmod 1777 /tmp
   dialog --clear
   exit
  elif [ "$REPLY" = "Floppy" ]; then
   dialog --title "եåԡɥ饤֤" --menu "ɤΥեåԡɥ饤֤饤󥹥ȡ뤷ޤ" \
11 70 4 \
"/dev/fd0u1440" "1.44 MB ܤΥɥ饤" \
"/dev/fd1u1440" "1.44 MB ܤΥɥ饤" \
"/dev/fd0h1200" "1.2 MB ܤΥɥ饤" \
"/dev/fd1h1200" "1.2 MB ܤΥɥ饤" 2> /tmp/wdrive
   if [ $? = 1 ]; then
    dialog --clear
    exit
   fi
   SOURCE_DEVICE="`cat /tmp/wdrive`"
   rm -f /tmp/wdrive 
   cat << EOF > /tmp/tmpmsg

󥹥ȡ뤹ǥåȤ̾ϤƤ
ʣꤹϡڡǶڤäƤ㡧 a b oi x

Υǥ饤󥹥ȡ뤹ˤϡǤENTER
򲡤Ƥ

EOF
   dialog --title "եȥ" --inputbox "`cat /tmp/tmpmsg`" 13 70 2> /tmp/sets 
   DISK_SETS="`cat /tmp/sets`"
   rm -f /tmp/sets
   if [ "$DISK_SETS" = "" ]; then
    DISK_SETS="disk"
   else
    DISK_SETS=`echo $DISK_SETS | sed 's/ /#/g'`
    DISK_SETS="#$DISK_SETS"
   fi
   break;
  elif [ "$REPLY" = "Other" ]; then
   dialog --title "󥹥ȡ븵ǥ쥯ȥ" --inputbox "󥹥ȡ븵Υǥ쥯ȥ̾ϤƤ" 10 60 2> /tmp/pkgdir
   if [ $? = 1 ]; then
    rm -f /tmp/pkgdir /tmp/SeT*
    exit
   fi 
   SOURCE_DIR="`cat /tmp/pkgdir`"
   SOURCE_MOUNTED="always"
   DISK_SETS="disk" 
   chmod 755 $TARGET_DIR
   chmod 1777 $TARGET_DIR/tmp
   rm -f /tmp/pkgdir
   if [ ! -d $SOURCE_DIR ]; then
    dialog --title "ǥ쥯ȥ꤬Ĥޤ" --msgbox "
ꤵ줿ǥ쥯ȥ($SOURCE_DIR)Ĥޤ\n\
ǧƺĩ路Ƥ" \
10 70
    exit
   fi
   break;
  else # installing from current directory
   SOURCE_MOUNTED="always"
   SOURCE_DIR="$PWD"
   DISK_SETS="disk" 
   chmod 755 $TARGET_DIR
   chmod 1777 $TARGET_DIR/tmp
   break;
  fi 
 done
fi
if [ "$DISK_SETS" = "disk" ]; then
 ASK="always"
fi

for DIR in $ADM_DIR $ADM_DIR/packages $ADM_DIR/scripts $ADM_DIR/disk_contents
do
 if [ ! -d $DIR ]; then mkdir -p $DIR ; chmod 755 $DIR ; fi
done

if [ ! -d $ADM_DIR/mount -a ! -L $ADM_DIR/mount ]; then
 mkdir -p $ADM_DIR/mount ; chmod 755 $ADM_DIR/mount
fi

mount_the_source() {
 # is the source supposed to be mounted already?
 if [ "$SOURCE_MOUNTED" = "always" ]; then
  # The source should already be mounted, so we test it
  if [ ! -d $SOURCE_DIR ]; then # the directory is missing
   cat << EOF > /tmp/tmpmsg

ꤵ줿󥹥ȡ븵ΥǥХ˥Ǥޤ

/var/adm/mount˥ǥХޥȤƤ뤫ޤ
$SOURCE_DIRȻꤵ줿ǥ쥯ȥΥ֥ǥ쥯ȥˡ
Plamo LinuxΥǥåȤƤ¸ߤƤ뤫ǧ
Ƥ

EOF
   dialog --title "ޥȥ顼" --msgbox "`cat /tmp/tmpmsg`" 11 67
   rm -f /tmp/tmpmsg
   exit 1;
  fi
  return 0;
 fi
 dialog --title "ǥ" --menu "ǥ$1ENTER򲡤Ƥ" \
11 60 3 \
"Continue" "󥹥ȡ³Ԥޤ" \
"Skip" "ΥåȤΥ󥹥ȡ򥹥åפޤ" \
"Quit" "󥹥ȡȤߤޤ" 2> /tmp/reply
 if [ $? = 1 -o $? = 255 ]; then
  REPLY="Quit"
 else
  REPLY="`cat /tmp/reply`"
 fi
 rm -f /tmp/reply
 if [ "$REPLY" = "Skip" ]; then
  return 1;
 fi
 if [ "$REPLY" = "Quit" ]; then
   dialog --title "" --msgbox "եȥΥ󥹥ȡߤޤ" 5 50
   chmod 755 $TARGET_DIR
   chmod 1777 $TARGET_DIR/tmp
   exit 1;
 fi;
 # Old line:
 # mount -r -t msdos $SOURCE_DEVICE $SOURCE_DIR
 # New ones: (thanks to Andy Schwierskott!)
 go_on=y
 not_successfull_mounted=1
 while [ "$go_on" = y -a "$not_successfull_mounted" = 1 ]; do
  mount -r -t vfat $SOURCE_DEVICE $SOURCE_DIR
  not_successfull_mounted=$?
  if [ "$not_successfull_mounted" = 1 ]; then
   mount_answer=x
   while [ "$mount_answer" != "y" -a "$mount_answer" != "q" ] ; do
    dialog --title "ޥȼ" --menu "ǥ˥ޥȤǤޤǤ\n\
ƻԤޤߤޤ" 10 70 2 \
"Yes" "⤦٥ޥȤƤߤ" \
"No" "䡢" 2> /tmp/mntans
    mount_answer="`cat /tmp/mntans`"
    rm -f /tmp/mntans
    if [ "$mount_answer" = "Yes" ]; then
     mount_answer="y"
    else
     mount_answer="q"
    fi
   done
   go_on=$mount_answer
  fi
 done
 test $not_successfull_mounted = 0
}
umount_the_source() {
 if [ ! "$SOURCE_MOUNTED" = "always" ]; then
#  umount $SOURCE_DEVICE 1> /dev/null 2>&1
   umount $SOURCE_DIR 1> /dev/null 2>&1
 fi;
}
# The function below installs the package with the name $CURRENT_PACKAGE_NAME
# and with the DOS file extension .tgz
install_the_current_package() {
 rm -f $ADM_DIR/removed_packages/$CURRENT_PACKAGE_NAME
 rm -f $ADM_DIR/removed_scripts/$CURRENT_PACKAGE_NAME
 echo "ѥå̾:     $CURRENT_PACKAGE_NAME" > $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
 echo "̻ΥѥåΥ:     $COMPRESSED" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
 echo "󰵽̻ΥѥåΥ:     $UNCOMPRESSED" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
 BASE_DISK_NAME=`basename $PACKAGE_DIR/disk*`
 echo "ѥåν: $BASE_DISK_NAME" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
# echo "PACKAGE DESCRIPTION:" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
# if [ -r $PACKAGE_DIR/$BASE_DISK_NAME -a ! -d $PACKAGE_DIR/$BASE_DISK_NAME ]; then
#  grep "$CURRENT_PACKAGE_NAME:" $PACKAGE_DIR/$BASE_DISK_NAME | uniq >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
# fi
# pshort=`basename $PACKAGE_DIR`
 for index_file in $PACKAGE_DIR/disk* $PACKAGE_DIR/package_descriptions ; do
  if [ ! "$index_file" = "$PACKAGE_DIR/disk??*" ]; then
   if [ -r "$index_file" ]; then
    echo "ѥå:" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
    if cat $index_file | uniq | grep "$CURRENT_PACKAGE_NAME:" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME 2> /dev/null ; then
     break;
    fi
   fi
  fi
 done
 echo "FILE LIST:" >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
 # Pat's new-new pre-install cleanup routine.
 if [ -r $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME -a ! -d $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME ]; then
  cat $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME | grep 'rm -rf' | sort -u > $TMP/del_link_list
  if [ ! -d $ADM_DIR/removed_scripts ]; then
   mkdir $ADM_DIR/removed_scripts
  fi
  mv $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME $ADM_DIR/removed_scripts 1> /dev/null 2>&1
  cat $ADM_DIR/scripts/* | grep 'rm -rf' | sort -u > $TMP/required_links
  comm -12 $TMP/del_link_list $TMP/required_links | keep_links
  comm -23 $TMP/del_link_list $TMP/required_links | delete_links
  comm -23 $TMP/del_link_list $TMP/required_links > $TMP/delscript
  ( cd $TARGET_DIR ; sh $TMP/delscript )
  rm -f $TMP/del_link_list $TMP/required_links $TMP/delscript $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME
 fi
 # Install the package:
 >$TMP/tar-error
 (cd $TARGET_DIR; tar --overwrite -xzvf - ) < $PACKAGE_DIR/$CURRENT_PACKAGE_NAME.tgz >> $ADM_DIR/packages/$CURRENT_PACKAGE_NAME 2> $TMP/tar-error
 if [ ! "`filesize $TMP/tar-error`" = "0" ]; then # Package may be corrupt
  dialog --title "ѥå󥹥ȡ˥顼 \
$PACKAGE_DIR/$CURRENT_PACKAGE_NAME.tgz" \
   --msgbox "\n\
Υѥå򥤥󥹥ȡ˥顼ȯޤȤ\n\
Τޤ³ޤȤȡֽʥ顼פ\n\
⤷ޤ󡣥ѥåƤʤǧ塢ƥ\n\
ȡ뤷褤Ǥ礦ѥåFTPͳꤹ\n\
ϡɤκݤ'binary'⡼ɤꤷʤФʤ\n\
ޤ\n\
\n\
顼åǤʤʤ⤷ޤˡ\n\
`cat $TMP/tar-error` \n" 19 70
 fi
 chmod 644 $ADM_DIR/packages/$CURRENT_PACKAGE_NAME
 if [ -f $TARGET_DIR/install/doinst.sh ]; then
  # Executing installation script for package $CURRENT_PACKAGE_NAME... 
  (cd $TARGET_DIR; sh $TARGET_DIR/install/doinst.sh -install; )
  cp $TARGET_DIR/install/doinst.sh $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME
  chmod 755 $ADM_DIR/scripts/$CURRENT_PACKAGE_NAME
  # Clean up the mess...
  if [ -d $TARGET_DIR/install ]; then
   (cd $TARGET_DIR/install ; rm -r -f doin* 1> /dev/null 2>&1 )
   rmdir $TARGET_DIR/install 1> /dev/null 2>&1
  fi
 fi
 # Now we reload the shell hash table in case we've added something useful
 # to the command path:
 hash -r
 # Done installing package $CURRENT_PACKAGE_NAME.
}
install_disk() {
 mount_the_source $1
 if [ $? = 1 ]; then
  umount_the_source;
  return 1;
 fi
 CURRENT_DISK_NAME="$1"
 PACKAGE_DIR=$SOURCE_DIR
 if [ "$SOURCE_MOUNTED" = "always" -a ! "$DISK_SETS" = "disk" ]; then
   PACKAGE_DIR=$PACKAGE_DIR/$1
 fi

 #
 # look for tagfile for this series and copy into $TMP/tagfile
 #
 touch $TMP/tagfile
 if [ ! "$DISK_SETS" = "disk" ]; then
  if [ -r /tmp/SeTtagext ]; then
   if [ -r $PACKAGE_DIR/tagfile`cat /tmp/SeTtagext` ]; then
    cat $PACKAGE_DIR/tagfile`cat /tmp/SeTtagext` >> $TMP/tagfile
   else
    if [ -r $PACKAGE_DIR/tagfile ]; then
     cat $PACKAGE_DIR/tagfile >> $TMP/tagfile
    fi
   fi

  #
  # Do we need to follow a custom path to the tagfiles?
  #
  elif [ -r /tmp/SeTtagpath ]; then
   custom_path=`cat /tmp/SeTtagpath`
   short_path=`basename $PACKAGE_DIR`

   # If tagfile exists at the specified custom path, copy it over.
   if [ -r $custom_path/$short_path/tagfile ]; then
    cat $custom_path/$short_path/tagfile >> $TMP/tagfile

   else # well, I guess we'll use the default one then.
    if [ -r $PACKAGE_DIR/tagfile ]; then
     cat $PACKAGE_DIR/tagfile >> $TMP/tagfile
    fi
   fi
  #
  # We seem to be testing for this too often... maybe this code should
  # be optimized a little...
  # 
  elif [ -r $PACKAGE_DIR/tagfile ]; then
   cat $PACKAGE_DIR/tagfile >> $TMP/tagfile
  fi

  #
  # Execute menus if in QUICK mode:
  #
  if [ -r /tmp/SeTQUICK -a -r $PACKAGE_DIR/maketag ]; then
   if [ ! "$MAKETAG" = "" -a -r $PACKAGE_DIR/$MAKETAG ]; then # use alternate maketag
	# pshort=`basename $PACKAGE_DIR`
    sh $PACKAGE_DIR/$MAKETAG
   else    
    sh $PACKAGE_DIR/maketag
   fi
   if [ -r /tmp/SeTnewtag ]; then
    mv /tmp/SeTnewtag $TMP/tagfile
   fi
  fi

  #
  # Protect tagfile from hacker attack:
  #
  if [ -r $TMP/tagfile ]; then
   chmod 600 $TMP/tagfile
  fi

 fi #  ! "$DISK_SETS" = "disk" 

 # It's possible that the tagfile was specified on the command line.  If that's
 # the case, then we'll just override whatever we figured out up above.
 if [ ! "$USETAG" = "" ]; then
   cat $USETAG > $TMP/tagfile
 fi

 if [ "$1" = "single_disk" -o -r $PACKAGE_DIR/disk$1 ]; then
  CATALOG_FILE=`basename $PACKAGE_DIR/disk*`;
  if [ -r $PACKAGE_DIR/$CATALOG_FILE -a ! -d $PACKAGE_DIR/$CATALOG_FILE ]; then
   if grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE 1> /dev/null 2>&1 ; then
    # First we check for missing packages...
    for PKGTEST in `grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE | cut -b10- 2> /dev/null` ; do
     if [ ! -r $PACKAGE_DIR/$PKGTEST.tgz ]; then
      cat << EOF > /tmp/tmpmsg

ٹ!!!

ǥåե($CATALOG_FILE)Ĵ٤Ƥ顢
Υǥ(ǥ$1)ˤ٤ѥå($PKGTEST.tgz)
¸ߤʤȤ狼ޤΤޤޥ󥹥ȡ
³뤳ȤǽǤ줬פʥեǤäꤹ
ȡޥ󤬥֡ȤǤ뤫ݾڤǤޤ

EOF
      dialog --title "ե­" --msgbox \
"`cat /tmp/tmpmsg`" 15 73
     fi
    done # checking for missing packages
    # Now we test for extra packages
    ALLOWED="`grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE | cut -b10- 2> /dev/null`" 
    for PACKAGE_FILENAME in $PACKAGE_DIR/*.tgz; do
     BASE="`basename $PACKAGE_FILENAME .tgz`"
     if echo $ALLOWED | grep $BASE 1> /dev/null 2>&1 ; then
      GOOD="yup yup"
     else
      cat << EOF > /tmp/tmpmsg

ٹ!!!

ǥåե($CATALOG_FILE)Ĵ٤ƤȤ
Υѥå($BASE.tgz)Ĥޤ
Υѥå褳ˤ٤ΤʤΤɤޤ
SlackwareθŤСͳ褹ΤǤʤǧ
֥ȤǤϤȤꤨޤ

EOF
      dialog --title ";ʬʥե뤬Ĥޤ" \
--msgbox "`cat /tmp/tmpmsg`" 15 67 
      rm -f /tmp/tmpmsg
     fi
    done 
   fi
   cat $PACKAGE_DIR/$CATALOG_FILE > $ADM_DIR/disk_contents/$CATALOG_FILE
   chmod 644 $ADM_DIR/disk_contents/$CATALOG_FILE
  fi
  for PACKAGE_FILENAME in $PACKAGE_DIR/*.tgz; do
   if [ "$PACKAGE_FILENAME" = "$PACKAGE_DIR/*.tgz" ]; then
    continue;
   fi
   CURRENT_PACKAGE_NAME=`basename $PACKAGE_FILENAME .tgz`
   AddKey=""
   SkipKey=""
   if [ "$ASK" = "tagfiles" ]; then # -a ! "$DISK_SETS" = "disk" ]; then
    if grep "$CURRENT_PACKAGE_NAME:" $TMP/tagfile | sed -n '$ p' | grep ADD 1> /dev/null 2>&1 ; then
     AddKey="ADD"
    fi
    if grep "$CURRENT_PACKAGE_NAME:" $TMP/tagfile | sed -n '$ p' | grep SKP 1> /dev/null 2>&1 ; then
     SkipKey="SKIP"
    fi
   elif [ "$ASK" = "never" ]; then
    AddKey="ADD"
   else # ASK must equal always
    ASK="always"
    fi  
   if [ ! "$DISK_SETS" = "disk" ]; then
    if grep "$CURRENT_PACKAGE_NAME:" $TMP/tagfile | sed -n '$ p' | grep ADD > /dev/null 2> /dev/null ; then
     PRIORITY="[required]"
    elif grep "$CURRENT_PACKAGE_NAME:" $TMP/tagfile | sed -n '$ p' | grep REC > /dev/null 2> /dev/null ; then
     PRIORITY="[recommended]"
    elif grep "$CURRENT_PACKAGE_NAME:" $TMP/tagfile | sed -n '$ p' | grep OPT > /dev/null 2> /dev/null ; then
     PRIORITY="[optional]"
    elif grep "$CURRENT_PACKAGE_NAME:" $TMP/tagfile | sed -n '$ p' | grep SKP > /dev/null 2> /dev/null ; then
     PRIORITY="[skip]"
    else
     PRIORITY="[unknown]"
    fi
   fi
   PACKAGE_SIZE=`filesize $PACKAGE_FILENAME`
   if [ "$AddKey" = "ADD" ]; then
    # echo "Auto-installing package ==>$CURRENT_PACKAGE_NAME<==  Priority: $PRIORITY" > /tmp/tmpmsg
    echo > /tmp/tmpmsg
    # Print out the description text:
    CATALOG_FILE=`basename $PACKAGE_DIR/disk*`;
#    if [ -r $PACKAGE_DIR/$CATALOG_FILE -a ! -d $PACKAGE_DIR/$CATALOG_FILE ]; then
#     grep "$CURRENT_PACKAGE_NAME:" $PACKAGE_DIR/$CATALOG_FILE | cut -b11- 1>> /tmp/tmpmsg 2> /dev/null ;
#    else
#	 pshort=`basename $PACKAGE_DIR`
    for index_file in $PACKAGE_DIR/disk* $PACKAGE_DIR/package_descriptions ; do
     if [ ! "$index_file" = "$PACKAGE_DIR/disk??*" ]; then
      if [ -r "$index_file" ]; then
       cat $index_file | grep "$CURRENT_PACKAGE_NAME:" | cut -b11- 1>> /tmp/tmpmsg 2> /dev/null 
      fi
     fi
    done
#    fi
    COMPBYTES="`gzip -l $PACKAGE_DIR/$CURRENT_PACKAGE_NAME.tgz | sed -n '$ p' | cut -b1-9`"
    UNCOMPBYTES="`gzip -l $PACKAGE_DIR/$CURRENT_PACKAGE_NAME.tgz | sed -n '$ p' | cut -b10-19`"
    COMPRESSED="`expr $COMPBYTES / 1024` K"
    UNCOMPRESSED="`expr $UNCOMPBYTES / 1024` K"
    echo ": ̻: $COMPRESSED, 󰵽̻: $UNCOMPRESSED." >> /tmp/tmpmsg
    if [ ! "$PRIORITY" = "" ]; then
     PMSG="  Priority: $PRIORITY"
    else
     PMSG=""
    fi
    dialog --title "ư󥹥ȡ뤹ѥå ==>$CURRENT_PACKAGE_NAME<==$PMSG" --infobox "`cat /tmp/tmpmsg`" 15 75
    rm -f /tmp/tmpmsg
    install_the_current_package;
   elif [ "$SkipKey" != "SKIP" ]; then
    # echo "Package Name: ==>$CURRENT_PACKAGE_NAME<==  Priority: $PRIORITY" > /tmp/tmpmsg
    echo > /tmp/tmpmsg
    CATALOG_FILE=`basename $PACKAGE_DIR/disk*`;
    if [ -r $PACKAGE_DIR/$CATALOG_FILE -a ! -d $PACKAGE_DIR/$CATALOG_FILE ]; then
#    pshort=`basename $PACKAGE_DIR`
     grep "$CURRENT_PACKAGE_NAME:" $PACKAGE_DIR/$CATALOG_FILE | cut -b11- 1>> /tmp/tmpmsg 2> /dev/null ;
    fi
    COMPBYTES="`gzip -l $PACKAGE_DIR/$CURRENT_PACKAGE_NAME.tgz | sed -n '$ p' | cut -b1-9`"
    UNCOMPBYTES="`gzip -l $PACKAGE_DIR/$CURRENT_PACKAGE_NAME.tgz | sed -n '$ p' | cut -b10-19`"
    COMPRESSED="`expr $COMPBYTES / 1024` K"
    UNCOMPRESSED="`expr $UNCOMPBYTES / 1024` K"
    echo ": ̻: $COMPRESSED, 󰵽̻: $UNCOMPRESSED." >> /tmp/tmpmsg
    echo >> /tmp/tmpmsg
    echo "ѥå$CURRENT_PACKAGE_NAME򥤥󥹥ȡ뤷ޤ " >> /tmp/tmpmsg
    if [ ! "$PRIORITY" = "" ]; then
     PMSG="  Priority: $PRIORITY"
    else
     PMSG=""
    fi
    dialog --title "ѥå̾: ==>$CURRENT_PACKAGE_NAME<==$PMSG" --menu "`cat /tmp/tmpmsg`" 22 75 1 \
"Yes" "$CURRENT_PACKAGE_NAME򥤥󥹥ȡ" \
"No" "$CURRENT_PACKAGE_NAME ϥ󥹥ȡ뤷ޤ" \
"Quit" "եȥ󥹥ȡ" 2> /tmp/reply
    if [ $? = 1 -o $? = 255 ]; then
     echo "No  " > /tmp/reply
    fi
    REPLY="`cat /tmp/reply`"
    rm -f /tmp/reply /tmp/tmpmsg
    if [ "$REPLY" = "Yes" ]; then
     dialog --title "󥹥ȡ" --infobox "$CURRENT_PACKAGE_NAME򥤥󥹥ȡ" 3 50
     install_the_current_package;
    elif [ "$REPLY" = "Quit" ]; then
     umount_the_source;
     chmod 755 $TARGET_DIR
     chmod 1777 $TARGET_DIR/tmp
     exit 1;
    elif [ "$REPLY" = "No" ]; then
     dialog --title "å" --infobox "$CURRENT_PACKAGE_NAME򥹥åפƤޤ" 3 50
    fi
   fi
  done
  OUTTAHERE="false"
  if [ -r $PACKAGE_DIR/install.end ]; then
   OUTTAHERE="true"
  fi
  umount_the_source;
  if [ "$OUTTAHERE" = "true" ]; then
   return 1;
  fi
 else
  umount_the_source;
  if [ ! "$SOURCE_MOUNTED" = "always" ]; then
   cat << EOF > /tmp/tmpmsg

ǥ㤤ޤǥ($1)Ǥ뤫ǧ塢ĩ
뤳ȤǤޤΥǥåȤ򥹥åפ뤳ȤǤ
ޤ

EOF
   dialog --title "ǥ㤤ޤ" --menu "`cat /tmp/tmpmsg`" 15 70 2 \
"Retry" "ǥ$1٥ޥȤƤߤޤ" \
"Skip" "ΥǥåȤ򥹥åפޤ" 2> /tmp/reply
   if [ $? = 1 -o $? = 255 ]; then
    rm -f /tmp/reply /tmp/tmpmsg
    exit
   fi
   REPLY="`cat /tmp/reply`"
   rm -f /tmp/reply /tmp/tmpmsg
   if [ "$REPLY" = "Skip" ]; then
    return 1;
   else
    install_disk $1;
   fi
  else
   cat << EOF > /tmp/tmpmsg
ٹ:

󥹥ȡ븵ǥ쥯ȥ˥ǥå$SERIES_NAME
Ĥޤ󡣥åפޤ

EOF
   dialog --title "ǥåȤĤޤ" --msgbox "`cat /tmp/tmpmsg`" 10 65
   rm -f /tmp/tmpmsg
   return 1; 
  fi 
 fi;
}
install_disk_set() { # accepts one argument: the series name in lowercase.
 SERIES_NAME=$1
 CURRENT_DISK_NUMBER="1";
 while [ 0 ]; do
  install_disk $SERIES_NAME$CURRENT_DISK_NUMBER;
  if [ $? = 1 -o $? = 255 ]; then # install.end was found, or the user chose
        # to quit installing packages.
   return 0;
  fi
  CURRENT_DISK_NUMBER=`expr $CURRENT_DISK_NUMBER + 1`
 done;
}
if [ "$DISK_SETS" = "disk" ]; then
 install_disk single_disk;
 ASK="always"
else
 touch $TMP/tagfile
 chmod 600 $TMP/tagfile
 if echo $DISK_SETS | grep "#a#" 1> /dev/null 2>&1; then
  A_IS_NEEDED="true"
 else
  A_IS_NEEDED="false"
 fi
 while [ 0 ];
 do
  while [ 0 ]; # strip leading '#'s
  do
   if [ "`echo $DISK_SETS | cut -b1`" = "#" ]; then
    DISK_SETS="`echo $DISK_SETS | cut -b2-`"
   else
    break;
   fi
  done
  if [ "$A_IS_NEEDED" = "true" ]; then
   if [ "$TARGET_DIR" = "/" ]; then
    dialog --title "ٹ𡧽ʥȥ֥ȯ" \
--menu " *** ٹ ƥ¹˥ǥå A 򥤥󥹥ȡ뤷ľ\
ΤϸǤϤޤ󡣤ˤʤäƤ"\
11 70 3 \
"Abort" "եȥΥ󥹥ȡ" \
"Ignore" "ٹ̵뤷ȤˤåA򥤥󥹥ȡ뤹" \
"Skip" "åAϥåפ뤬¾ΥեȤΥ󥹥ȡϷ³" 2> /tmp/skip
    if [ $? = 1 -o $? = 255 ]; then
     exit
    fi
    WHATDO="`cat /tmp/skip`" 
    rm -f /tmp/skip
    if [ "$WHATDO" = "Abort" ]; then
     dialog --msgbox "..." 5 30
     A_IS_NEEDED="false"
     DISK_SETS=""
     continue;
    elif [ "$WHATDO" = "Skip" ]; then
     dialog --msgbox "åA򥹥å..." 5 30
     A_IS_NEEDED="false"
     continue;
    elif [ ! "$WHATDO" = "Ignore" ]; then
     continue; # unknown response
    fi
   fi
   cat << EOF > /tmp/tmpmsg

--- Installing disk series ==>a<==

EOF
   dialog --infobox "`cat /tmp/tmpmsg`" 5 45
   sleep 1
   rm -f /tmp/tmpmsg
   install_disk_set a;
   A_IS_NEEDED="false"
  fi
  count="1"
  if [ "`echo $DISK_SETS | cut -b$count`" = "" ]; then
   break; # we be done here :^)
  else
   count="2"
   while [ 0 ]; do
    if [ "`echo $DISK_SETS | cut -b$count`" = "" -o "`echo $DISK_SETS | cut -b$count`" = "#" ]; then
     count="`expr $count - 1`"
     break;
    else
     count="`expr $count + 1`"
    fi 
   done
  fi 
  diskset="`echo $DISK_SETS | cut -b1-$count`"
  count="`expr $count + 1`"
  DISK_SETS="`echo $DISK_SETS | cut -b$count-`"
  if [ "$diskset" = "a" ]; then
   continue; # we expect this to be done elsewhere
  fi

  if [ -r /tmp/SeTnewtag ]; then
      mv /tmp/SeTnewtag $TMP/tagfile
  fi

  # Protect tagfile from hacker attack:
  #
  # if [ -r $TMP/tagfile ]; then
  #   chmod 600 $TMP/tagfile
  # fi
  # install_disk_set xs;

  cat << EOF > /tmp/tmpmsg

Installing disk series ==>$diskset<==

EOF
  dialog --infobox "`cat /tmp/tmpmsg`" 5 45
  sleep 1
  rm -f /tmp/tmpmsg
  install_disk_set $diskset; 
 done
fi

if [ "$DISK_SETS" = "disk" -o "$CMD_START" = "true" ]; then
 if [ -r $TMP/tagfile ]; then
  rm $TMP/tagfile
 fi
fi
chmod 755 $TARGET_DIR $TARGET_DIR/var $TARGET_DIR/usr
chmod 1777 $TARGET_DIR/tmp
