#!/bin/bash

#set -x

my_name=${0##*/}

hour="$1"

if test -z "$hour"
then echo "Usage: $my_name hour [minute] [message]" 1>&2
     exit 1
fi

case "$hour" in
     [0-1][0-9] | 2[0-3] ) ;;
     [0-9] ) hour="0$hour" ;;
     * ) echo "'$hour' : Not a valid hour ( 0 - 23 )" 1>&2
         exit 1 ;;
esac

case "$2" in
     [0-9] | [0-5][0-9] ) minute="$2"
                          shift 2
                          message="$*" ;;
     * ) shift 1
         message="$*"
         minute="" ;;
esac

if test -z "$minute"
then echo "Enter minute (random input or timeout after 10 seconds set minute to 0): "
     read -t 10 minute
     case "$minute" in
          [0-9] | [0-5][0-9] ) ;;
          * ) minute="0" ;;
     esac
fi

case "$minute" in
     [0-5][0-9] ) ;;
     [0-9] ) minute="0$minute" ;;
     * ) echo "'$minute' : Not a valid minute ( 0 - 59 )" 1>&2
         exit 1 ;;
esac 

alarm_time="$hour$minute"

echo "At $hour:$minute you get the xmessage $message"

background_stuff()
{ while true
  do current_time=$( date +%H%M )
     if test "$current_time" -ge "$alarm_time"
     then break
     fi
     sleep 30
  done
  xmessage -nearmouse -timeout 18000 "$hour:$minute $message"
  exit 0
}

background_stuff &

exit 0

