|
Packit Service |
f629e6 |
# alarm.awk --- set an alarm
|
|
Packit Service |
f629e6 |
#
|
|
Packit Service |
f629e6 |
# Requires getlocaltime() library function
|
|
Packit Service |
f629e6 |
#
|
|
Packit Service |
f629e6 |
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
|
Packit Service |
f629e6 |
# May 1993
|
|
Packit Service |
f629e6 |
# Revised December 2010
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# usage: alarm time [ "message" [ count [ delay ] ] ]
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
BEGIN {
|
|
Packit Service |
f629e6 |
# Initial argument sanity checking
|
|
Packit Service |
f629e6 |
usage1 = "usage: alarm time ['message' [count [delay]]]"
|
|
Packit Service |
f629e6 |
usage2 = sprintf("\t(%s) time ::= hh:mm", ARGV[1])
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
if (ARGC < 2) {
|
|
Packit Service |
f629e6 |
print usage1 > "/dev/stderr"
|
|
Packit Service |
f629e6 |
print usage2 > "/dev/stderr"
|
|
Packit Service |
f629e6 |
exit 1
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
switch (ARGC) {
|
|
Packit Service |
f629e6 |
case 5:
|
|
Packit Service |
f629e6 |
delay = ARGV[4] + 0
|
|
Packit Service |
f629e6 |
# fall through
|
|
Packit Service |
f629e6 |
case 4:
|
|
Packit Service |
f629e6 |
count = ARGV[3] + 0
|
|
Packit Service |
f629e6 |
# fall through
|
|
Packit Service |
f629e6 |
case 3:
|
|
Packit Service |
f629e6 |
message = ARGV[2]
|
|
Packit Service |
f629e6 |
break
|
|
Packit Service |
f629e6 |
default:
|
|
Packit Service |
f629e6 |
if (ARGV[1] !~ /[[:digit:]]?[[:digit:]]:[[:digit:]]{2}/) {
|
|
Packit Service |
f629e6 |
print usage1 > "/dev/stderr"
|
|
Packit Service |
f629e6 |
print usage2 > "/dev/stderr"
|
|
Packit Service |
f629e6 |
exit 1
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
break
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# set defaults for once we reach the desired time
|
|
Packit Service |
f629e6 |
if (delay == 0)
|
|
Packit Service |
f629e6 |
delay = 180 # 3 minutes
|
|
Packit Service |
f629e6 |
if (count == 0)
|
|
Packit Service |
f629e6 |
count = 5
|
|
Packit Service |
f629e6 |
if (message == "")
|
|
Packit Service |
f629e6 |
message = sprintf("\aIt is now %s!\a", ARGV[1])
|
|
Packit Service |
f629e6 |
else if (index(message, "\a") == 0)
|
|
Packit Service |
f629e6 |
message = "\a" message "\a"
|
|
Packit Service |
f629e6 |
# split up alarm time
|
|
Packit Service |
f629e6 |
split(ARGV[1], atime, ":")
|
|
Packit Service |
f629e6 |
hour = atime[1] + 0 # force numeric
|
|
Packit Service |
f629e6 |
minute = atime[2] + 0 # force numeric
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# get current broken down time
|
|
Packit Service |
f629e6 |
getlocaltime(now)
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# if time given is 12-hour hours and it's after that
|
|
Packit Service |
f629e6 |
# hour, e.g., `alarm 5:30' at 9 a.m. means 5:30 p.m.,
|
|
Packit Service |
f629e6 |
# then add 12 to real hour
|
|
Packit Service |
f629e6 |
if (hour < 12 && now["hour"] > hour)
|
|
Packit Service |
f629e6 |
hour += 12
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# set target time in seconds since midnight
|
|
Packit Service |
f629e6 |
target = (hour * 60 * 60) + (minute * 60)
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# get current time in seconds since midnight
|
|
Packit Service |
f629e6 |
current = (now["hour"] * 60 * 60) + \
|
|
Packit Service |
f629e6 |
(now["minute"] * 60) + now["second"]
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# how long to sleep for
|
|
Packit Service |
f629e6 |
naptime = target - current
|
|
Packit Service |
f629e6 |
if (naptime <= 0) {
|
|
Packit Service |
f629e6 |
print "alarm: time is in the past!" > "/dev/stderr"
|
|
Packit Service |
f629e6 |
exit 1
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
# zzzzzz..... go away if interrupted
|
|
Packit Service |
f629e6 |
if (system(sprintf("sleep %d", naptime)) != 0)
|
|
Packit Service |
f629e6 |
exit 1
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# time to notify!
|
|
Packit Service |
f629e6 |
command = sprintf("sleep %d", delay)
|
|
Packit Service |
f629e6 |
for (i = 1; i <= count; i++) {
|
|
Packit Service |
f629e6 |
print message
|
|
Packit Service |
f629e6 |
# if sleep command interrupted, go away
|
|
Packit Service |
f629e6 |
if (system(command) != 0)
|
|
Packit Service |
f629e6 |
break
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
exit 0
|
|
Packit Service |
f629e6 |
}
|