Nautical bell: Difference between revisions
m (minor fixups) |
m (added the REXX language. -- ~~~~) |
||
Line 8: | Line 8: | ||
[[Category: Date and time]] |
[[Category: Date and time]] |
||
=={{header|REXX}}== |
|||
<lang rexx>/*REXX pgm sounds "bells" (using PC speaker) when running (perpetually).*/ |
|||
echo= arg()\==0 /*echo time & bells if any args. */ |
|||
signal on halt /*allow a clean way to stop prog.*/ |
|||
t.1 = '00:30 01:00 01:30 02:00 02:30 03:00 03:30 04:00' |
|||
t.2 = '04:30 05:00 05:30 06:00 06:30 07:00 07:30 08:00' |
|||
t.3 = '08:30 09:00 09:30 10:00 10:30 11:00 11:30 12:00' |
|||
do forever; t=time(); ss=right(t,2); mn=right(t,2) /*times.*/ |
|||
ct=time('C') /*[↓] add leading zero.*/ |
|||
hhmmc=left( right( ct, 7, 0), 5) /*HH:MM (leading zero).*/ |
|||
if echo then say center(arg(1) ct, 79) /*echo arg1 with time ?*/ |
|||
if ss\==00 & mn\==00 & mn\==30 then /*wait for next min ? */ |
|||
do; call delay 60-ss; iterate; end /*delay fraction of min*/ |
|||
/*[↓] # bells to peel.*/ |
|||
do j=1 for 3 until $\==0; $=wordpos(hhmmc,t.j); end /*j*/ |
|||
if $\==0 & echo then say center($ "bells", 79) /*echo bells? */ |
|||
do k=1 for $; call sound 650,1; call delay 1+(k//2==0); end /*k*/ |
|||
/*[↑] peel and pause.*/ |
|||
call delay 60 /*ensure don't re-peel.*/ |
|||
end /*forever*/ |
|||
halt: /*stick a fork in it, we're done.*/ |
|||
</lang> |
|||
'''output''' when using the input of: <tt> the time is: </tt> |
|||
<pre style="overflow:scroll"> |
|||
the time is: 1:48pm |
|||
the time is: 1:49pm |
|||
the time is: 1:50pm |
|||
the time is: 1:51pm |
|||
the time is: 1:52pm |
|||
the time is: 1:53pm |
|||
the time is: 1:54pm |
|||
the time is: 1:55pm |
|||
the time is: 1:56pm |
|||
the time is: 1:57pm |
|||
the time is: 1:58pm |
|||
the time is: 1:59pm |
|||
the time is: 2:00pm |
|||
4 bells |
|||
the time is: 2:01pm |
|||
the time is: 2:02pm |
|||
∙ |
|||
∙ |
|||
∙ |
|||
</pre> |
Revision as of 19:51, 25 February 2013
The task is to write a small program that emulates a nautical bell producing a ringing bell pattern at certain times throughout the day.
The bell timing should be in accordance with Greenwich Mean Time, unless locale dictates otherwise.
It is permissible for the program to [Run as a daemon|daemonize], or to slave off a scheduler, and it is permissible to use alternative notification methods (such as producing a written notice "Two Bells Gone"), if these are more usual for the system type.
REXX
<lang rexx>/*REXX pgm sounds "bells" (using PC speaker) when running (perpetually).*/ echo= arg()\==0 /*echo time & bells if any args. */ signal on halt /*allow a clean way to stop prog.*/ t.1 = '00:30 01:00 01:30 02:00 02:30 03:00 03:30 04:00' t.2 = '04:30 05:00 05:30 06:00 06:30 07:00 07:30 08:00' t.3 = '08:30 09:00 09:30 10:00 10:30 11:00 11:30 12:00'
do forever; t=time(); ss=right(t,2); mn=right(t,2) /*times.*/ ct=time('C') /*[↓] add leading zero.*/ hhmmc=left( right( ct, 7, 0), 5) /*HH:MM (leading zero).*/ if echo then say center(arg(1) ct, 79) /*echo arg1 with time ?*/ if ss\==00 & mn\==00 & mn\==30 then /*wait for next min ? */ do; call delay 60-ss; iterate; end /*delay fraction of min*/
/*[↓] # bells to peel.*/ do j=1 for 3 until $\==0; $=wordpos(hhmmc,t.j); end /*j*/
if $\==0 & echo then say center($ "bells", 79) /*echo bells? */
do k=1 for $; call sound 650,1; call delay 1+(k//2==0); end /*k*/ /*[↑] peel and pause.*/ call delay 60 /*ensure don't re-peel.*/ end /*forever*/
halt: /*stick a fork in it, we're done.*/ </lang> output when using the input of: the time is:
the time is: 1:48pm the time is: 1:49pm the time is: 1:50pm the time is: 1:51pm the time is: 1:52pm the time is: 1:53pm the time is: 1:54pm the time is: 1:55pm the time is: 1:56pm the time is: 1:57pm the time is: 1:58pm the time is: 1:59pm the time is: 2:00pm 4 bells the time is: 2:01pm the time is: 2:02pm ∙ ∙ ∙