#!/bin/sh
UNAME=`uname -a`
PATT=".*/\(.*\)"
DOCDIR=/usr/share/doc
TXT="$HOME/texts/localdoc"
_GETOPTS="RUu:d:p:l:vh"
Me=`basename $0`
Usage="Usage: $Me [-$_GETOPTS]"

# TODO update without remove

while getopts "$_GETOPTS" opt
do
  case $opt in
    R)	REMOVE=1 ;;
    U)	UPD=1 ;; 
    v)	VERB=1 ;;
    u)	UNAME="$OPTARG" ;;
    d)	DOCDIR="$OPTARG"; UNAME=manual ;;
    p)	PATT="$OPTARG"; UNAME=manual ;;
    l)	TXT="$OPTARG" ;;
    h)  echo "$Usage" >&2 ; exit 0 ;;
    *)	echo "Unknown key: '$opt'\n$Usage" >&2; exit 1 ;;
  esac
done

case "$UNAME" in
  manual)	# Manual setup
  ;;
  Linux*alt*)	# ALT Linux
  	DOCDIR=/usr/share/doc
	PATT=".*/\(.*\)-.*"
  ;;
  FreeBSD*) 	# FreeBSD
  	DOCDIR=/usr/local/share/doc
  ;;
  *)	# Other
  	DOCDIR=/usr/share/doc
  ;;
esac

test -z "$VERB" || echo "Proceeding ${REMOVE:+Remove }${UPD:+Update }
Uname:	$UNAME
DocDir:	$DOCDIR
Local:	$TXT
Match:	$PATT

" >&2

case "$REMOVE" in
  1)	# Relink
  	mkdir -p "$TXT"
	find "$TXT" -type l | xargs rm 2>/dev/null
	;;
esac

case "$UPD" in
  1)	# Relink
  	mkdir -p "$TXT"
	find "$DOCDIR" -maxdepth 1 -mindepth 1 | sort -r | while read D; do
	  L=`expr "$D" : "$PATT"`
	  test -z "$L" || if [ -L "$TXT/$L" ]; then
	    test -z "$VERB" || echo "Another version: `basename $D`" >&2
	    ln -s "$D" "$TXT/"
	  else
	    ln -s "$D" "$TXT/$L"
	  fi
	done
	;;
esac

find "$TXT/" -maxdepth 1 -mindepth 1 -type l | while read D; do
  test -d "$D/." || {
    test -z "$VERB" || echo "Old version: `basename $D`" >&2
    rm "$D"
  }
done
