#!/bin/sh
#
# alarm -- signal the end of units while be online -- (c) Holm Sieber
#

VERSION=2.1
DATE=29.03.1995

SOUNDPATH=/usr/local/lib/sound
PLAY=play

# function calculate takt

takt()
{
  DAY=`date +%w`
  HOUR=`date +%H`
  F=`date +%d%m`

  if [ $DAY -eq 0 -o $DAY -eq 6 ]
  then
    WZ=free
  else
    WZ=work
  fi

  if [ $F = 0101 -o $F = 0105 -o $F = 0310 -o $F = 2412 -o $F = 2512 \
    -o $F = 2612 -o $F = 3112 ]
  then
    WZ=free
  fi

  if [ $HOUR -lt 5 ]
  then DZ=1
  elif [ $HOUR -lt 9 ]
  then DZ=2
  elif [ $HOUR -lt 18 ]
  then DZ=3
  elif [ $HOUR -lt 21 ]
  then DZ=4
  else DZ=5
  fi

  if [ $WZ = free ]
  then
    case $DZ in
      1) TAKT=240 ;;
      2) TAKT=150 ;;
      3) TAKT=150 ;;
      4) TAKT=150 ;;
      5) TAKT=240 ;;
    esac
  else
    case $DZ in
      1) TAKT=240 ;;
      2) TAKT=150 ;;
      3) TAKT=90 ;;
      4) TAKT=150 ;;
      5) TAKT=240 ;;
    esac
  fi
}

# function signal

signal()
{
  if [ "$1" = "$2" ]
  then $PLAY $SOUNDPATH/ding.wav 2> /dev/null
  elif [ "$1" = "$3" ]
  then ( $PLAY $SOUNDPATH/ding.wav ; $PLAY $SOUNDPATH/ding.wav ) 2> /dev/null
  elif [ "$1" = "$4" ]
  then $PLAY $SOUNDPATH/akkord.wav 2> /dev/null
  else echo "error  --  unknown mode"
  fi
}

# main programm

# syntax

if [ ! "$*" ]
then
  echo "$0 -- Version $VERSION"
  echo "syntax:"
  echo "  $0 <device> [<time offset>]"
  echo "comments:"
  echo "  <device>        netdevice (ppp0, ppp1, etc.)"
  echo "  <time offset>   time for modem handshake, default 20s"
  exit 1
fi

# read parameters

DEVICE=$1

if [ "$2" ]
then
  OFFSET=$2
else
  OFFSET=20
fi

# kill other alarm program

if [ -r /var/run/alarm.pid ]
then
  kill `cat /var/run/alarm.pid` 1>&2 > /dev/null
  rm -f /var/run/alarm.pid
fi

echo $$ > /var/run/alarm.pid

# monitor netdevices to calculate start time

while [ ! "`/sbin/ifconfig | grep $DEVICE`" ]
do
  sleep 1
done
NEXT=`date +\%s`
NEXT=`expr $NEXT - $OFFSET`

# loop, while device open

COUNT=0

while :
do
  # count takts
  COUNT=`expr $COUNT + 1`
  # play takt number
  if [ -f $SOUNDPATH/$COUNT.wav ]
  then
    $PLAY $SOUNDPATH/$COUNT.wav 2> /dev/null
  fi
  # takt and alarm times
  takt
  NEXT=`expr $NEXT + $TAKT`
  ALARM="`expr $NEXT - 60` `expr $NEXT - 30` $NEXT"
  # loop over all signals
  for T in $ALARM
  do
    D=`date +\%s`
    sleep `expr $T - $D`
    if [ ! "`/sbin/ifconfig | grep $DEVICE`" ]
    then
      exit 0
    fi
    signal $T $ALARM
  done
done

