#!/bin/sh

# "pisave"	K. J. Turner <kjt@cs.stir.ac.uk>	05/11/97

# This program saves files from the Pilot in the directory given by
# environment variable "PILOTDIR". The options are:
# 
#   -a		save all files (i.e. backup)
#   -d		save database (PDB) files only (default option)
#   -h		print usage help
#   -p		save program (PRC) files only
#   file ...	save named files only (use quotes for names with spaces,
#		omit suffix such as ".pdb" or ".prc")
#
# Note that only files already existing in "PILOTDIR" are handled for the
# -d and -p options. Filenames must be unique without suffixes.
# 
# It is assumed that environment variables "PILOTPORT" and "PILOTRATE" have
# already been set up or that the defaults are satisfactory.

usage () {				# report use of program
  echo "usage: $prog [ -a(ll) | -d(ata) | -h(elp) | -p(rogram) | file ... ]"
  exit 1
}

prog="`basename $0`"			# pilot command

echo "$prog: Pilot -> Unix"

if [ -d "$PILOTDIR" -a -r "$PILOTDIR" ]	# Pilot directory OK?
  then					# yes - change to it
    cd "$PILOTDIR"
  else					# no - report error
    echo "$prog: Pilot directory \"$PILOTDIR\" not readable"
    exit 1
fi

while [ $# -gt 0 ]			# analyse parameters
  do
    case $1 in
      -a) opt="all"; shift;;		# all files
      -d) opt="data"; shift;;		# data files
      -h) usage;;			# help
      -p) opt="prog"; shift;;		# program files
      -*) echo "$prog: unknown option \"$1\""; usage;;
      *)
        if [ "$opt" = "" ]		# option unset?
	  then opt="name"		# named files
	  else
	    echo "$prog: files not allowed for chosen option"
	    usage
	fi
	break;;
    esac
  done

if [ "$opt" = "" ]			# option unset?
  then opt="data"			# data files by default
fi

pars="";				# initialise transfer parameters

case $opt in				# analyse options
  all)					# all files?
    pars="-b $PILOTDIR";;		# backup to directory
  data)					# data files?
    for file in *.pdb			# process all database files
      do
        if [ "$file" != "*.pdb" ]	# a data file?
	  then				# strip suffix
	    par="`expr "$file" : '\(.*\)\.[^\.]*'`"
	    pars="$pars -f '$par'"	# fetch file
	fi
      done;;
  prog)					# program files?
    for file in *.prc			# process all program files
      do
        if [ "$file" != "*.prc" ]	# a program file?
	  then				# strip suffix
	    par="`expr "$file" : '\(.*\)\.[^\.]*'`"
	    pars="$pars -f '$par'"	# fetch file
	fi
      done;;
  name)					# command-line files?
    while [ $# -gt 0 ]			# process all command-line files
      do
        par="`basename \"$1\" .pdb`"	# strip off database suffix (if any)
	if [ "$par" = $1 ]		# no database suffix?
	  then
	    par="`basename $1 .prc`"	# strip off program suffix (if any)
	fi
	pars="$pars -f '$par'"		# fetch file
	shift
      done;;
esac

eval pilot-xfer $pars		# do transfer (eval for quotes)
