#!/bin/sh
# $Id: prep_use,v 2.8 1998/07/22 14:17:09 rf Exp $
#
# prep_use/not_use/what_use/remote_use/end_use           LST unpack utility
#
# Copyright (c) Ralf Flaxa, Linux Support Team Erlangen 1993-1996
#
# Depending on the name under which you call it can unpack, remote-unpack,
# delete and show the concerned group of files.
#
# This utility was build for the LST rootdisk and probably only
# makes sense in that context ;-)
#
MODE=`basename $0`
ARCHIV=/floppy
TARGET=/target
DEBUGFILE=/dev/tty8

FOR_ANALYSE="/bin/sysinfo"
FOR_NETCONF="/sbin/ifconfig /sbin/route"
FOR_NETDIAG="/bin/netstat /bin/ping"
FOR_KBD="/usr/bin/loadkeys /usr/lib/kbd/keytables/de-lat1.map"
FOR_BOX="/bin/box"
FOR_SINGLE="$FOR_ANALYSE $FOR_NETCONF"
FOR_MULTI="$FOR_BOX $FOR_ANALYSE $FOR_NETCONF"
FOR_LISA="/usr/lib/LST/libLSTall /usr/lib/LST/libLSTtext $FOR_BOX /bin/build_menu"
FOR_PREPARE="/sbin/mke2fs /sbin/badblocks"
FOR_NETLUXUS="$FOR_NETDIAG /usr/bin/telnet /usr/bin/ftp"
FOR_REPAIR="/sbin/e2fsck"
# FOR_RESCUE="/usr/bin/joe /usr/lib/joerc"
FOR_RESCUE="/usr/bin/ae /etc/ae.rc"
FOR_SELECT="/usr/lib/LST/pkgs.idx /usr/lib/LST/pkgs.db /usr/lib/LST/meta.db"
FOR_LSTLIBS="/usr/lib/LST/libLSTtext /usr/lib/LST/libLSTall"
FOR_INSTALL="$FOR_SELECT"
FOR_CALDERA_INSTALL="/bin/cpio /bin/rpmextr $FOR_SELECT"
FOR_RPM_INSTALL="/bin/cpio /bin/rpmextr /bin/rpm $FOR_SELECT"
# FOR_LILO="/sbin/lilo /boot/boot.b /boot/message /sbin/activate /boot/any_b.b /boot/any_d.b /boot/os2_d.b /boot/chain.b /etc/lilo.conf.in"
FOR_LILO="/sbin/lilo /boot/boot.b /boot/message /sbin/activate /boot/os2_d.b /boot/chain.b /etc/lilo.conf.in"
FOR_UMSDOS="/sbin/umssync"
FOR_PPP="/usr/sbin/pppd /usr/sbin/chat /usr/bin/ppp"
FOR_UNI="$FOR_NETCONF $FOR_PPP $FOR_NETLUXUS /bin/tar"
FOR_PCMCIA_PROBE="/sbin/probe"
FOR_PCMCIA_PROGS="/sbin/cardmgr /etc/rc.d/rc.pcmcia /etc/pcmcia/cdrom /etc/pcmcia/cis/3CXEM556.dat /etc/pcmcia/cis/PCMLM28.dat /etc/pcmcia/config /etc/pcmcia/config.opts /etc/pcmcia/ftl /etc/pcmcia/ide /etc/pcmcia/memory /etc/pcmcia/network /etc/pcmcia/scsi /etc/pcmcia/serial"
FOR_PCMCIA_MODULES="pcmcia_core.o aha152x_cs.o i82365.o fdomain_cs.o ibmtr_cs.o wavelan_cs.o xirc2ps_cs.o ftl_cs.o smc91c92_cs.o 3c574_cs.o pcnet_cs.o tcic.o fmvj18x_cs.o qlogic_cs.o iflash2+_mtd.o 3c589_cs.o netwave_cs.o iflash2_mtd.o nmclan_cs.o ds.o serial_cs.o sram_mtd.o ide_cs.o dummy_cs.o"
FOR_LOOP="/sbin/losetup"

check_ramdisk()
{
  if [ "`rdev` " = "/dev/ram / " -o "`rdev` " = "/dev/ram0 / " ]; then
    return 0
  else
    return 1
  fi
}

debug()
{
  echo "$MODE: $@" >> $DEBUGFILE
}

error()
{
  echo "$MODE: $@" >> $DEBUGFILE
  # the modules floppy is recognized by this subdirectory
  if [ ! -d /floppy/lib/modules ]; then
    umount /floppy >> $DEBUGFILE 2>&1
    umount /dev/fd0H1440 >> $DEBUGFILE 2>&1
    box --title "Error" --msg "$@ ; :DO_INSERT_MODULES_FLOPPY:" || return 1
    mount -r /dev/fd0H1440 /floppy
  fi
}

loop()
{
  if [ $# -eq 0 ]; then
    return
  fi
  for j in $* ; do
    while [ 1 ]; do
      case $MODE in
      prep_use)
	if [ ! -f $j ]; then
	  # remove any symlinks
	  rm -f $j
	fi
	if [ -f $j ]; then
 	  # nothing to be done
	  debug "$j was already unpacked ..."
	elif [ -f ${TARGET}$j ]; then
	  # symlink to TARGET
	  debug "symlink ${TARGET} to $j ..."
	  ln -sf ${TARGET}$j $j
	elif [ -f ${TARGET}${ARCHIV}$j ]; then
	  # symlink to TARGET/ARCHIV
	  debug "symlink ${TARGET}${ARCHIV}$j to $j ..."
	  ln -sf ${TARGET}${ARCHIV}$j $j
	elif [ -f $j.gz ]; then
	  # uncompress it
	  debug "uncompressing $j.gz to $j ..."
	  gzip -d $j.gz
	elif [ -f ${ARCHIV}$j ]; then
	  # symlink to ARCHIV
	  debug "symlink ${ARCHIV} to $j ..."
	  ln -sf ${ARCHIV}$j $j
	elif [ -f ${ARCHIV}$j.gz ]; then
	  # uncompress it from remote
	  debug "unpacking ${ARCHIV}$j.gz to $j ..."
	  mkdir -p ` dirname $j `
	  gzip -dc ${ARCHIV}$j.gz > $j
	  if [ -x ${ARCHIV}$j.gz ]; then
	    debug "doing chmod 755 on $j ..."
	    chmod 755 $j
	  else
	    debug "doing chmod 644 on $j ..."
	    chmod 644 $j
	  fi
	else
	  # error, we did not find it
	  error "$j file not found"
	fi
	;;
      end_use)
	if [ -f ${ARCHIV}$j -o -f ${ARCHIV}$j.gz ]; then
	  # we have a backup, so we can delete it
	  debug "removing $j and $j.gz (we have a backup) ..."
	  rm -f $j $j.gz
	elif [ -f $j ]; then
	  # we have no backup, so we compress it
	  debug "compressing $j ..."
	  gzip -9f $j
	fi
	;;
      not_use)
	# we don't need it
	debug "removing $j and $j.gz (we don't need it) ..."
	rm -f $j $j.gz
	;;
      show_use)
	echo "$j"
	;;
      esac
      break
    done
  done
}

check_ramdisk 
if [ $? -ne 0 ]; then
  # echo "$MODE can be safely used in a ramdisk only! aborting!"
  # exit 1
  exit 0
fi

while [ 1 ]; do
	if [ $# = 0 ]; then
		break
	elif [ "$1" = "SINGLE" ]; then
		loop "$FOR_SINGLE"
		shift 1
	elif [ "$1" = "MULTI" ]; then
		loop "$FOR_MULTI"
		shift 1
	elif [ "$1" = "KBD" ]; then
		loop "$FOR_KBD"
		shift 1
	elif [ "$1" = "BOX" ]; then
		loop "$FOR_BOX"
		shift 1
	elif [ "$1" = "LISA" ]; then
		loop "$FOR_LISA"
		shift 1
	elif [ "$1" = "PREPARE" ]; then
		loop "$FOR_PREPARE"
		shift 1
	elif [ "$1" = "REPAIR" ]; then
		loop "$FOR_REPAIR"
		shift 1
	elif [ "$1" = "RESCUE" ]; then
		loop "$FOR_RESCUE"
		shift 1
	elif [ "$1" = "NETCONF" ]; then
		loop "$FOR_NETCONF"
		shift 1
	elif [ "$1" = "NETLUXUS" ]; then
		loop "$FOR_NETLUXUS"
		shift 1
	elif [ "$1" = "SELECT" ]; then
		loop "$FOR_SELECT"
		shift 1
	elif [ "$1" = "INSTALL" ]; then
		loop "$FOR_INSTALL"
		shift 1
	elif [ "$1" = "CALDERA_INSTALL" ]; then
		loop "$FOR_CALDERA_INSTALL"
		shift 1
	elif [ "$1" = "RPM_INSTALL" ]; then
		loop "$FOR_RPM_INSTALL"
		shift 1
	elif [ "$1" = "LILO" ]; then
		loop "$FOR_LILO"
		shift 1
	elif [ "$1" = "LSTLIBS" ]; then
		loop "$FOR_LSTLIBS"
		shift 1
	elif [ "$1" = "UMSDOS" ]; then
		loop "$FOR_UMSDOS"
		shift 1
	elif [ "$1" = "PPP" ]; then
		loop "$FOR_PPP"
		shift 1
	elif [ "$1" = "UNI" ]; then
		loop "$FOR_UNI"
		shift 1
	elif [ "$1" = "PCMCIA_PROBE" ]; then
		loop "$FOR_PCMCIA_PROBE"
		shift 1
	elif [ "$1" = "PCMCIA" ]; then
		loop "$FOR_PCMCIA_PROGS"
		for curr in $FOR_PCMCIA_MODULES ; do
			loop /lib/modules/`uname -r`/pcmcia/$curr
		done
		shift 1
	elif [ "$1" = "LOOP" ]; then
		loop "$FOR_LOOP"
		shift 1
	else
		loop "$@"
		shift 1
	fi
done
return 0

