File : neartime.sp
$ spar neartime
It's almost a quarter to Nine at night
|
#!/usr/local/bin/spar
pragma annotate( summary, "neartime" )
@( description, "Display the time in a 'relaxed' format" )
@( description, "usage: neartime" )
@( see_also, "http://www.zazzybob.com/bin/neartime.html" )
@( author, "Ken O. Burtch" );
pragma license( unrestricted );
pragma restriction( no_external_commands );
procedure neartime is
procedure usage is
begin
put( "usage: " ) @ ( source_info.file );
command_line.set_exit_status( 0 );
end usage;
now : constant calendar.time := calendar.clock;
hour : natural := numerics.floor( calendar.seconds( now ) / 3600 );
minute : constant natural := numerics.floor( ( calendar.seconds( now ) - hour * 3600 ) / 60 );
nearbefore : string;
nearafter : string;
nearhour : string;
nearampm : string;
begin
-- Usage
if $# /= 0 then
usage;
return;
end if;
-- 12 Hour Time
if minute >= 38 then
-- add an hour
hour := @ + 1;
if hour >= 24 then
hour := 00;
end if;
end if;
-- Hour as English Text
case hour is
when 00|12|24 => nearhour := "Twelve" ;
when 01|13 => nearhour := "One" ;
when 02|14 => nearhour := "Two" ;
when 03|15 => nearhour := "Three" ;
when 04|16 => nearhour := "Four" ;
when 05|17 => nearhour := "Five" ;
when 06|18 => nearhour := "Six" ;
when 07|19 => nearhour := "Seven" ;
when 08|20 => nearhour := "Eight" ;
when 09|21 => nearhour := "Nine" ;
when 10|22 => nearhour := "Ten" ;
when 11|23 => nearhour := "Eleven" ;
when others =>
put_line( standard_error, "unknown time" );
end case;
-- Determine the time of day
if hour < 12 then
nearampm := "in the morning";
elsif hour < 17 then
nearampm := "in the afternoon";
elsif hour < 20 then
nearampm := "in the evening";
else
nearampm := "at night";
end if;
-- Approximate the minutes
if minute = 0 then
nearbefore := "exactly ";
nearafter := "o'clock ";
elsif minute < 8 then
nearbefore := "just after ";
nearafter := "o'clock ";
elsif minute < 15 then
nearbefore := "almost a quarter past ";
nearafter := "";
elsif minute = 15 then
nearbefore := "a quarter past ";
nearafter := "";
elsif minute < 23 then
nearbefore := "just after a quarter past ";
nearafter := "";
elsif minute < 30 then
nearbefore := "almost half past ";
nearafter := "";
elsif minute = 30 then
nearbefore := "exactly half past ";
nearafter := "";
elsif minute < 38 then
nearbefore := "just after half past ";
nearafter := "";
elsif minute < 45 then
nearbefore := "almost a quarter to ";
nearafter := "";
elsif minute < 53 then
nearbefore := "just after a quarter to ";
nearafter := "";
elsif minute <= 59 then
nearbefore := "almost ";
nearafter := "o'clock ";
end if;
-- Display the time
put_line( "It's " & nearbefore & nearhour & ' ' & nearafter & nearampm );
command_line.set_exit_status( 0 );
end neartime;
-- VIM editor formatting instructions
-- vim: ft=spar