Nautical bell: Difference between revisions

m
m (→‎{{header|Perl}}: Fix link: Perl 6 --> Raku)
m (→‎{{header|Wren}}: Minor tidy)
 
(12 intermediate revisions by 8 users not shown)
Line 17:
 
=={{header|AppleScript}}==
 
===Continuous repeat===
 
This version uses local time and speaks the bell rings using OS X's built-in speech synthesizer.
 
<langsyntaxhighlight lang="applescript">repeat
set {hours:h, minutes:m} to (current date)
if {0, 30} contains m then
Line 33 ⟶ 36:
end if
delay 60
end repeat</langsyntaxhighlight>
 
==='idle' handler===
 
For actions which are to be carried out at set intervals throughout the day, it's more usual to use a stay-open script applet with an 'idle' handler. When such an applet's launched, it sits there mostly doing nothing until it receives an 'idle' command from the system, whereupon it performs the actions in its 'idle' handler. If this handler returns a positive number (or something that can be interpreted as one), the system takes this as the number of seconds to wait before sending another 'idle' command to the applet. Otherwise the default is thirty seconds. This hogs the processor far less than having the script run on a continuous repeat. Unfortunately, depending on how busy the computer is at the time, 'idle' calls may be slightly delayed, so any time checks performed by the handler have to allow for this.
 
<syntaxhighlight lang="applescript">use AppleScript version "2.4" -- OS X 10.10 (Yosemite) or later
use framework "Foundation"
use scripting additions
 
property soundName : "Glass" -- The nearest system sound to a bell!
property leeway : 8 -- Number of seconds either side of the sounding time in which the bells are allowed to start.
property postNoreBritish : true -- 1, 2, 3, and 8 bells during last dog watch?
property halfHour : 30 * minutes
 
on idle
local m, d, t, elapsed, bells, bellSound
-- Get the month, day, and time (in seconds) of the current GMT date, shifted forward by 'leeway' seconds.
set {month:m, day:d, time:t} to (current date) + (leeway - (time to GMT))
-- How far is this into a half-hour?
set elapsed to t mod halfHour
-- If too far, just reset the idle and don't sound this time.
if (elapsed mod halfHour > 2 * leeway) then return halfHour - (elapsed - leeway)
-- Otherwise work out how many bells are required and sound them.
if ((t < halfHour) and (d is 1) and (month is January)) then
set bells to 16 -- New Year.
else
set bells to (t mod (4 * hours) div halfHour + 7) mod 8 + 1
if ((postNoreBritish) and (t > 18 * hours) and (t < 20 * hours)) then set bells to bells - 4
end if
set bellSound to current application's class "NSSound"'s soundNamed:(soundName)
repeat (bells div 2) times
repeat 2 times
tell bellSound to play()
delay 0.7
tell bellSound to |stop|()
end repeat
delay 1
end repeat
repeat bells mod 2 times
tell bellSound to play()
delay 0.7
tell bellSound to |stop|()
end repeat
-- Request another call in half an hour's time, less however long the above took.
return halfHour - (time of (current date)) mod halfHour
end idle</syntaxhighlight>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">NauticalBell(hh, mm){
Hr := 0, min := 30, Bells := [], pattern := []
Loop 8 ; genrate 8 patterns
Line 55 ⟶ 107:
Bells[00 ":" 00] := Bells[24 ":" 00] , numBells := Bells[hh ":" mm]
return {"bells": numBells, "pattern": Pattern[numBells]}
}</langsyntaxhighlight>
Example:<langsyntaxhighlight AutoHotkeylang="autohotkey">res := ""
loop, 24
{
Line 68 ⟶ 120:
}
MsgBox, 262144, , % "Time`tBells`tPattern`n" res
return</langsyntaxhighlight>
Outputs:<pre>Time Bells Pattern
00:00 8 ** ** ** **
Line 122 ⟶ 174:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f NAUTICAL_BELL.AWK
BEGIN {
Line 174 ⟶ 226:
return(new_str)
}
</syntaxhighlight>
</lang>
<p>Output:</p>
<pre>
Line 231 ⟶ 283:
Implementation corrected, sounds the system bell as per nautical standards, sounds bell as per local system time.
 
<syntaxhighlight lang="c">
<lang C>
#include<unistd.h>
#include<stdio.h>
Line 286 ⟶ 338:
}
 
</syntaxhighlight>
</lang>
 
=={{header|C++}}==
This version uses local time.
<langsyntaxhighlight lang="cpp">
#include <iostream>
#include <string>
Line 360 ⟶ 412:
}
//--------------------------------------------------------------------------------------------------
</syntaxhighlight>
</lang>
Output:
<pre>
Line 415 ⟶ 467:
=={{header|D}}==
This code uses local time instead of Greenwich Mean Time.
<langsyntaxhighlight lang="d">import std.stdio, core.thread, std.datetime;
 
class NauticalBell : Thread {
Line 464 ⟶ 516:
writeln(e.msg);
}
}</langsyntaxhighlight>
This output is from an actual test run.
<pre>
Line 515 ⟶ 567:
08:30:00 : 1 bell
09:00:00 : 2 bells</pre>
 
<syntaxhighlight lang="freebasic">Dim As Byte m = 0
For n As Byte = 0 To 23
If n = 23 Then
Print " 23" + ":30" + " = " + "7 bells"
Else
m += 1
Print ""; n Mod 23; ":30"; " ="; m; " bells"
End If
If n = 23 Then
Print " 00" + ":00" + " = " + "8 bells"
Else
m += 1
Print ""; (n Mod 23+1); ":00"; " ="; m; " bells"
If m = 8 Then m = 0
End If
Next n
Sleep</syntaxhighlight>
 
=={{header|FreeBASIC}}==
{{trans|Ring}}
<syntaxhighlight lang="vb">Dim As Byte m = 0
For n As Byte = 0 To 23
If n = 23 Then
Print " 23" + ":30" + " = " + "7 bells"
Else
m += 1
Print ""; n Mod 23; ":30"; " ="; m; " bells"
End If
If n = 23 Then
Print " 00" + ":00" + " = " + "8 bells"
Else
m += 1
Print ""; (n Mod 23+1); ":00"; " ="; m; " bells"
If m = 8 Then m = 0
End If
Next n
 
Sleep</syntaxhighlight>
 
=={{header|Go}}==
Provided your terminal bell is enabled, this should beep an appropriate number of times before displaying its output. It uses local time.
<langsyntaxhighlight lang="go">package main
 
import (
Line 564 ⟶ 655:
time.Sleep(1 * time.Second)
}
}</langsyntaxhighlight>
 
{{out}}
Line 579 ⟶ 670:
=={{header|Haskell}}==
This solution first creates a general way of scheduling tasks on a time interval, and then schedules a "ringing" task. If used in a terminal it will also produce noise. Local time is used.
<langsyntaxhighlight lang="haskell">
import Control.Concurrent
import Control.Monad
Line 658 ⟶ 749:
bellRinger = doWithScheduler (onInterval (30*60)) ringBells
 
</syntaxhighlight>
</lang>
 
{{out}}
Line 672 ⟶ 763:
{{trans|Raku}}
 
'''Solution''':<langsyntaxhighlight lang="j">require 'strings printf'
 
WATCH =: <;._1 ' Middle Morning Forenoon Afternoon Dog First'
Line 732 ⟶ 823:
end.
y
)</langsyntaxhighlight>
 
'''Examples''': Invoke <tt>shipsWatch 0</tt>; the output is identical to Raku's.
Line 741 ⟶ 832:
This code uses UTC time.
{{trans|D}}
<langsyntaxhighlight lang="java">import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
Line 790 ⟶ 881:
}
}
}</langsyntaxhighlight>
 
Sample output:
Line 801 ⟶ 892:
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">using Dates
 
"""
Line 842 ⟶ 933:
 
nauticalbelltask()
</langsyntaxhighlight> {{output}} <pre>
Nautical bell task starting -- next bell in 1201.726 seconds.
Nautical bell gong strikes 2 2 2
Line 867 ⟶ 958:
=={{header|Kotlin}}==
{{trans|Java}}
<langsyntaxhighlight lang="scala">// version 1.1.3
 
import java.text.DateFormat
Line 920 ⟶ 1,011:
}
}
}</langsyntaxhighlight>
 
Sample output:
Line 931 ⟶ 1,022:
</pre>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
Works on version 11.2 ARM, a bug prevents this from working on version 11.3 Win64.
<syntaxhighlight lang="mathematica">LocalSubmit[ScheduledTask[
 
<lang Mathematica>LocalSubmit[ScheduledTask[
EmitSound[Sound[Table[{
SoundNote["C",750/1000,"TubularBells"],SoundNote[None,500/1000,"TubularBells"]
},Mod[Round[Total[DateList[][[{4,5}]]{2,1/30}]],8,1]]]]
,DateObject[{_,_,_,_,_,30|0}]]]</langsyntaxhighlight>
 
=={{header|Nim}}==
{{trans|Phix}}
Using UTC time but the program can easily be adapted to use local time (replace <code>getTime().utc()</code> with <code>getTime().local()</code> or <code>now()</code>).
<syntaxhighlight lang="nim">import os, strformat, times
 
const
Watches = ["First", "Middle", "Morning", "Forenoon", "Afternoon", "First dog", "Last dog", "First"]
WatchEnds = [(0, 0), (4, 0), (8, 0), (12, 0), (16, 0), (18, 0), (20, 0), (23, 59)]
Bells = array[1..8, string](["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"])
Ding = "ding!"
 
 
proc nb(h, m: Natural) =
var bell = (h * 60 + m) div 30 mod 8
if bell == 0: bell = 8
let hm = (h, m)
var watch = 0
while hm > WatchEnds[watch]: inc watch
let plural = if bell == 1: ' ' else: 's'
var dings = Ding
for i in 2..bell:
if i mod 2 != 0: dings.add ' '
dings.add Ding
echo &"{h:02d}:{m:02d} {Watches[watch]:>9} watch {Bells[bell]:>5} bell{plural} {dings}"
 
 
proc simulateOneDay() =
for h in 0..23:
for m in [0, 30]:
nb(h, m)
nb(0, 0)
 
 
when isMainModule:
 
simulateOneDay()
 
while true:
let d = getTime().utc()
var m = d.second + (d.minute mod 30) * 60
if m == 0:
nb(d.hour, d.minute)
sleep((1800 - m) * 1000) # In milliseconds.</syntaxhighlight>
 
{{out}}
Same as Phix output.
 
=={{header|OoRexx}}==
{{trans|REXX}}
<langsyntaxhighlight lang="oorexx">/*REXX pgm beep's "bells" (using PC speaker) when running (perpetually).*/
Parse Arg msg
If msg='?' Then Do
Line 988 ⟶ 1,124:
Return res
 
halt:</langsyntaxhighlight>
 
=={{header|Perl}}==
{{trans|Raku}}
<langsyntaxhighlight lang="perl">use utf8;
binmode STDOUT, ":utf8";
use DateTime;
Line 1,035 ⟶ 1,171:
}
print "\n";
}</langsyntaxhighlight>
{{out}}
<pre style="height:35ex">00:30 Middle watch, One Bell Gone: ♪
Line 1,092 ⟶ 1,228:
instead of <code>date(DT_GMT)</code>.<br>
Uses a full-length sleep of up to 1800 seconds (half an hour), as it should.
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>constant watches = {"First","Middle","Morning","Forenoon","Afternoon","First dog","Last dog","First"},
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
watch_ends = {"00:00", "04:00", "08:00", "12:00", "16:00", "18:00", "20:00", "23:59"},
<span style="color: #008080;">constant</span> <span style="color: #000000;">watches</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"First"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Middle"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Morning"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Forenoon"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Afternoon"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"First dog"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Last dog"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"First"</span><span style="color: #0000FF;">},</span>
bells = {"One","Two","Three","Four","Five","Six","Seven","Eight"},
<span style="color: #000000;">watch_ends</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"00:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"04:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"08:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"12:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"16:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"18:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"20:00"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"23:59"</span><span style="color: #0000FF;">},</span>
ding = "ding!"
<span style="color: #000000;">bells</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"One"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Two"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Three"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Four"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Five"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Six"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Seven"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Eight"</span><span style="color: #0000FF;">},</span>
 
<span style="color: #000000;">ding</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"ding!"</span>
procedure nb(integer h,m)
integer bell = mod(floor((h*60+m)/30),8)
<span style="color: #008080;">procedure</span> <span style="color: #000000;">nb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">)</span>
if bell==0 then bell = 8 end if
<span style="color: #004080;">integer</span> <span style="color: #000000;">bell</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">floor</span><span style="color: #0000FF;">((</span><span style="color: #000000;">h</span><span style="color: #0000FF;">*</span><span style="color: #000000;">60</span><span style="color: #0000FF;">+</span><span style="color: #000000;">m</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">30</span><span style="color: #0000FF;">),</span><span style="color: #000000;">8</span><span style="color: #0000FF;">)</span>
string hm = sprintf("%02d:%02d",{h,m})
<span style="color: #008080;">if</span> <span style="color: #000000;">bell</span><span style="color: #0000FF;">==</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #000000;">bell</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">8</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
integer watch=1
<span style="color: #004080;">string</span> <span style="color: #000000;">hm</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%02d:%02d"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">})</span>
while hm>watch_ends[watch] do watch += 1 end while
<span style="color: #004080;">integer</span> <span style="color: #000000;">watch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span>
string plural = iff(bell==1?" ":"s")
<span style="color: #008080;">while</span> <span style="color: #000000;">hm</span><span style="color: #0000FF;">></span><span style="color: #000000;">watch_ends</span><span style="color: #0000FF;">[</span><span style="color: #000000;">watch</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">do</span> <span style="color: #000000;">watch</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
string dings = ding
<span style="color: #004080;">string</span> <span style="color: #000000;">plural</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bell</span><span style="color: #0000FF;">==</span><span style="color: #000000;">1</span><span style="color: #0000FF;">?</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">:</span><span style="color: #008000;">"s"</span><span style="color: #0000FF;">)</span>
for i=2 to bell do dings &= iff(mod(i,2)?" ":"")&ding end for
<span style="color: #004080;">string</span> <span style="color: #000000;">dings</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ding</span>
printf(1,"%s %9s watch %5s bell%s %s\n",
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #000000;">bell</span> <span style="color: #008080;">do</span> <span style="color: #000000;">dings</span> <span style="color: #0000FF;">&=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)?</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">:</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)&</span><span style="color: #000000;">ding</span> <span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
{hm,watches[watch],bells[bell],plural,dings})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s %9s watch %5s bell%s %s\n"</span><span style="color: #0000FF;">,</span>
end procedure
<span style="color: #0000FF;">{</span><span style="color: #000000;">hm</span><span style="color: #0000FF;">,</span><span style="color: #000000;">watches</span><span style="color: #0000FF;">[</span><span style="color: #000000;">watch</span><span style="color: #0000FF;">],</span><span style="color: #000000;">bells</span><span style="color: #0000FF;">[</span><span style="color: #000000;">bell</span><span style="color: #0000FF;">],</span><span style="color: #000000;">plural</span><span style="color: #0000FF;">,</span><span style="color: #000000;">dings</span><span style="color: #0000FF;">})</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
procedure simulate1day()
for h=0 to 23 do
<span style="color: #008080;">procedure</span> <span style="color: #000000;">simulate1day</span><span style="color: #0000FF;">()</span>
for m=0 to 30 by 30 do
<span style="color: #008080;">for</span> <span style="color: #000000;">h</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">23</span> <span style="color: #008080;">do</span>
nb(h,m)
<span style="color: #008080;">for</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">30</span> <span style="color: #008080;">by</span> <span style="color: #000000;">30</span> <span style="color: #008080;">do</span>
end for
<span style="color: #000000;">nb</span><span style="color: #0000FF;">(</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">)</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
nb(0,0) -- (again)
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end procedure
<span style="color: #000000;">nb</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (again)</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
simulate1day()
 
<span style="color: #000000;">simulate1day</span><span style="color: #0000FF;">()</span>
while 1 do
sequence d = date(DT_GMT)
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (no sleep() function)</span>
integer m = d[DT_SECOND] + mod(d[DT_MINUTE],30)*60
<span style="color: #008080;">while</span> <span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
if m=0 then
<span style="color: #004080;">sequence</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">date</span><span style="color: #0000FF;">(</span><span style="color: #004600;">DT_GMT</span><span style="color: #0000FF;">)</span>
nb(d[DT_HOUR],d[DT_MINUTE])
<span style="color: #004080;">integer</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #004600;">DT_SECOND</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+</span> <span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #004600;">DT_MINUTE</span><span style="color: #0000FF;">],</span><span style="color: #000000;">30</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">60</span>
end if
<span style="color: #008080;">if</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
sleep(30*60-m)
<span style="color: #000000;">nb</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #004600;">DT_HOUR</span><span style="color: #0000FF;">],</span><span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #004600;">DT_MINUTE</span><span style="color: #0000FF;">])</span>
end while</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #7060A8;">sleep</span><span style="color: #0000FF;">(</span><span style="color: #000000;">30</span><span style="color: #0000FF;">*</span><span style="color: #000000;">60</span><span style="color: #0000FF;">-</span><span style="color: #000000;">m</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 1,186 ⟶ 1,327:
=={{header|PL/I}}==
This program sounds the bell as well as displaying "gong" an appropriate number of times. It operates on local time.
<syntaxhighlight lang="pl/i">
<lang PL/I>
nautical: procedure options (main); /* 29 October 2013 */
declare (hour, t, i) fixed binary;
Line 1,201 ⟶ 1,342:
end;
end nautical;
</syntaxhighlight>
</lang>
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang PowerShell>
function Get-Bell
{
Line 1,284 ⟶ 1,425:
Get-Bell -Hour $_ -Minute 30
}
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 1,318 ⟶ 1,459:
=={{header|Python}}==
As well as typing output to stdout, this program plays a sound for each bell as the ␇ characters are printed (The spaces between the ␇ characters are mirrored as varying delays between each ring).
<langsyntaxhighlight lang="python">import time, calendar, sched, winsound
 
duration = 750 # Bell duration in ms
Line 1,380 ⟶ 1,521:
if __name__ == '__main__':
ships_bell()</langsyntaxhighlight>
{{out}}
<pre>00:00, First watch 8 bells ␇ ␇ ␇ ␇ ␇ ␇ ␇ ␇
Line 1,436 ⟶ 1,577:
that displays \a by playing the system bell, it will play the system bell.
 
<langsyntaxhighlight lang="racket">#lang racket
 
(require racket/date)
Line 1,493 ⟶ 1,634:
(wait-til s)
(format-and-print hours (add1 bells))))
</syntaxhighlight>
</lang>
 
This might produce the following output:
Line 1,512 ⟶ 1,653:
(formerly Perl 6)
 
Perl 6Raku uses [[wp:Coordinated_Universal_Time|UTC]] (GMT) time internally and by default. This will display the current UTC time and on the half hour, display a graphical representation of the bell. If run in a terminal with the system bell enabled, will also chime the system alarm bell.
 
<syntaxhighlight lang="raku" perl6line>my @watch = <Middle Morning Forenoon Afternoon Dog First>;
my @ordinal = <One Two Three Four Five Six Seven Eight>;
Line 1,554 ⟶ 1,695:
print "\n";
}
}</langsyntaxhighlight>
{{out}}
<pre>00:00 First watch, Eight Bells Gone: ♫ ♫ ♫ ♫
Line 1,620 ⟶ 1,761:
Also, some REXXes don't have a &nbsp; '''sound''' &nbsp; BIF, &nbsp; which produces sounds via the PC speaker,
&nbsp; so one is included &nbsp; <big> [[SOUND.REX|here]]. </big>
<langsyntaxhighlight lang="rexx">/*REXX program sounds "ship's bells" (using PC speaker) when executing (perpetually).*/
echo= ( arg()\==0 ) /*echo time and bells if any arguments.*/
signal on halt /*allow a clean way to stop the program*/
Line 1,643 ⟶ 1,784:
call delay 60; if rc\==0 then leave /*ensure we don't re─peel. */
end /*forever*/
halt: /*stick a fork in it, we're all done. */</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the input of: &nbsp; <big> <tt> the time is: </tt> </big>}}
<pre>
Line 1,668 ⟶ 1,809:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
# Project : Nautical bell
 
Line 1,689 ⟶ 1,830:
ok
next
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,743 ⟶ 1,884:
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">watches = [ "First", "Middle", "Morning", "Forenoon", "Afternoon", "First dog", "Last dog", "First" ]
watch_ends = [ "00:00", "04:00", "08:00", "12:00", "16:00", "18:00", "20:00", "23:59" ]
words = ["One","Two","Three","Four","Five","Six","Seven","Eight"]
Line 1,765 ⟶ 1,906:
end
sleep 1
end</langsyntaxhighlight>
 
{{out|Sample output}}
Line 1,821 ⟶ 1,962:
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "time.s7i";
include "duration.s7i";
Line 1,857 ⟶ 1,998:
flush(OUT);
end while;
end func;</langsyntaxhighlight>
 
{{out}}
Line 1,912 ⟶ 2,053:
 
=={{header|Tcl}}==
This code was originally based on the [[#Perl 6Raku|Perl 6Raku]] version, but with numerous adaptations, alterations and (some) corrections.
<langsyntaxhighlight lang="tcl"># More sophisticated versions are possible, such as playing a bell sample
# using the Snack library.
proc ringTheBell {} {
Line 1,987 ⟶ 2,128:
fconfigure stdout -buffering none
every 1000 nauticalBell
vwait forever; # Only needed if not running an event loop otherwise</langsyntaxhighlight>
{{out|Sample output}}
<pre>
Line 1,996 ⟶ 2,137:
18:30 Last dog watch, Five Bells Gone: ♫ ♫ ♪
</pre>
 
=={{header|Wren}}==
{{trans|Go}}
{{libheader|Wren-date}}
{{libheader|Wren-fmt}}
As Wren-cli currently has no way of telling what the local time is, we ask the user to input this when executing the script.
 
On my system (Ubuntu 20.04), the bell only rings once no matter how many \a's are concatenated togther, though it may be different on other systems.
<syntaxhighlight lang="wren">import "os" for Process
import "timer" for Timer
import "./date" for Date
import "./fmt" for Fmt
 
var watches = ["First", "Middle", "Morning", "Forenoon", "Afternoon", "Dog", "First"]
 
var args = Process.arguments
if (args.count == 0) {
System.print("Please enter current time in the format (24 hour clock): hh:mm:ss.")
return
}
 
var now = Date.parse(args[0], Date.isoTime)
while (true) {
var h = now.hour
var m = now.minute
var s = now.second
if ((m == 0 || m == 30) && s == 0) {
var bell = (m == 30) ? 1 : 0
var bells = (h*2 + bell) % 8
var watch = (h/4).floor + 1
if (bells == 0) {
bells = 8
watch = watch - 1
}
var sound = "\a" * bells
var pl = (bells != 1) ? "s" : ""
var w = watches[watch] + " watch"
if (watch == 5) {
if (bells < 5) {
w = "First " + w
} else {
w = "Last " + w
}
}
Fmt.lprint("$s$02d:$02d = $d bell$s : $s", [sound, h, m, bells, pl, w])
}
Timer.sleep(1000)
now = now.addSeconds(1)
}</syntaxhighlight>
 
{{out}}
<pre>
Similar to Go example.
</pre>
9,476

edits