#!/bin/sh

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

# This program loads Unix from Pilot files in the directory given by
# environment variable "PILOTDIR". Data files are held in the directory
# given by environment variable "DATADIR", memo files in "MEMODIR", and
# expenses in "CLAIMDIR".
#
# The options are:
# 
#   -a		upload address book
#   -d		upload date book
#   -e		upload expenses
#   -f		upload full set of files (default)
#   -h		print usage help
#   -m		upload memos
#   -t		upload todos

usage () {				# report use of program
  echo "usage: $prog [ -a(ddresses) | -d(ates) | -e(xpenses) | -f(ull) | \
                             -h(elp) | -m(emos) | -t(odos) ]"
  exit 1
}

setflags () {
  addr=$1;					# set address book flag
  date=$1;					# set date book flag
  exp=$1;					# set expenses flag
  memo=$1;					# set memo flag
  todo=$1;					# set todos flag
}

prog="`basename $0`"				# pilot command
pipars=""					# "get_pi" parameters
pifiles=""					# "pisave" files

if [ ! -d "$CLAIMDIR" -o ! -r "$CLAIMDIR" ]	# expense directory OK?
  then						# no - report error
    echo "$prog: data directory \"$CLAIMDIR\" not readable"
    exit 1
fi

if [ ! -d "$DATADIR" -o ! -r "$DATADIR" ]	# data directory OK?
  then						# no - report error
    echo "$prog: data directory \"$DATADIR\" not readable"
    exit 1
fi

if [ ! -d "$MEMODIR" -o ! -r "$MEMODIR" ]	# memo directory OK?
  then						# no - report error
    echo "$prog: data directory \"$MEMODIR\" not readable"
    exit 1
fi

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

if [ $# -gt 0 ]					# any parameters?
  then
    pars="$*"					# save parameters
    setflags 0;					# unset all flags
    for par in $pars				# analyse parameters
      do
	case $par in
	  -a) addr=1;;				# address book
	  -d) date=1;;				# date book
	  -e) exp=1;;				# expenses
	  -f) setflags 1;;			# full files
	  -h) usage;;				# help
	  -m) memo=1;;				# memos
	  -t) todo=1;;				# todos
	  -*) echo "$prog: unknown option \"$par\""; usage;;
	  *) echo "$prog: only \"-\" options allowed"; usage;;
	esac
      done
  else
    setflags 1					# set all flags by default 
fi

# set conversion parameters

if [ $addr = 1 ]				# process address book?
  then
    pipars="$pipars -a"				# make address book files
    pifiles="$pifiles AddressDB"		# load Unix with address book
fi

if [ $date = 1 ]				# process date book?
  then
    pipars="$pipars -d"				# make date book files
    pifiles="$pifiles DatebookDB"		# load Unix with date book
fi

if [ $exp = 1 ]					# process expenses?
  then
    pipars="$pipars -e"				# make expense book files
    pifiles="$pifiles ExpenseDB"		# load Unix with expense book
fi

if [ $memo = 1 ]				# process memos?
  then
    pipars="$pipars -m"				# make memo files
    pifiles="$pifiles MemoDB"			# load Unix with memos
fi

if [ $todo = 1 ]				# process todos?
  then
    pipars="$pipars -t"				# make todo file
    pifiles="$pifiles ToDoDB"			# load Unix with todo list
fi

# get and re-format files

pisave $pifiles					# load Unix from Pilot
get_pi $pipars					# convert files to Unix form

# move files to correct destinations

if [ $addr = 1 ]				# process address book?
  then
    > "$DATADIR/oaddrs"				# empty office addresses
    if [ -s Business.addr ]			# add business addresses?
      then
        cat Business.addr >> "$DATADIR/oaddrs"
    fi
    if [ -s QuickList.addr ]			# add quick list addresses?
      then
        cat QuickList.addr >> "$DATADIR/oaddrs"
    fi
    DATAFILE="$DATADIR/oaddrs" addrsort		# sort office addresses
    if [ -s Personal.addr ]			# add personal addresses?
      then
        mv Personal.addr "$DATADIR/haddrs"	# move home address file
        DATAFILE="$DATADIR/haddrs" addrsort	# sort home addresses
    fi
    rm -f Business.addr	QuickList.addr Personal.addr # remove files (if any)
    > "$DATADIR/uaddrs"				# initialise unfiled addresses
    for file in *.addr				# get remaining files
      do
	if [ -r "$file" -a -s "$file" ]		# file exists and non-empty?
	  then
	    cat "$file" >> "$DATADIR/uaddrs"	# add to unfiled
	fi
	rm -f "$file"				# delete file
      done
    if [ -s "$DATADIR/uaddrs" ]			# unfiled file non-empty?
      then 
        DATAFILE="$DATADIR/uaddrs" addrsort	# sort unfiled addresses
      else
        rm -f "$DATADIR/uaddrs"			# remove it
    fi
fi

if [ $date = 1 ]				# process date book?
  then
    mv Datebook "$DATADIR/calendar"		# move date book
    calsort					# sort appointments into order
fi

if [ $exp = 1 ]					# process expenses?
  then
    for file in *.exp
      do
        if [ -s "$file" ]			# non-empty expense file?
	  then mv "$file" "$CLAIMDIR"		# move to claim directory
	fi
      done
    rm -f *.exp
fi

if [ $memo = 1 ]				# process memos?
  then
    mv *.memo* "$MEMODIR"			# move memo files
fi

if [ $todo = 1 ]				# process todo list?
  then
    head -2 ToDo > "$DATADIR/todo"		# save todo list header
    tail +3 ToDo | sort >> "$DATADIR/todo"	# sort rest of todo list
    rm ToDo					# remove todo list
fi

exit 0
