[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]
(*
QT displays the time in natural English.
Example: It's twenty past seven.
*)
{$A+,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-}
{$M 1024,0,0}
program QueryTime;
uses Dos;
const
QNear: array[0..4] of string[11] = (
'',' just past',' just after',' nearly',' almost');
{You may wish to change naught to twelve.}
Numbers: array[0..12] of string[6] = ('naught',
'one','two','three','four','five','six','seven','eight','nine',
'ten', 'eleven', 'twelve');
REXX : String[30] = 'REXX - Mike Colishaw 1979, 85';
PASCAL : String[30] = 'Pascal - Brad Zavitsky 1995';
TWEAKS : String[30] = 'Tweaks - David Adamson 1995';
var
Hour, Min, Sec, S100: Word;
Out: string[79];
procedure Tell;
begin
Writeln('QT displays the time in natural english.');
end;
begin
Out := '';
if paramcount > 0 then Tell; {Describe the program}
Writeln;
GetTime(Hour, Min, Sec, S100); {Get the time from DOS}
{writeln(hour,':', min,':',sec); Un-comment for testing }
if Sec > 29 then inc(Min); {Where we are in 5 minute bracket}
Out := 'It''s' + QNear[Min mod 5]; {Start building the result}
if Min > 32 then Inc(Hour); {We are TO the hour}
inc(Min, 2); {Shift minutes to straddle a 5-minute point}
{For special case the result for Noon and midnight hours}
if ((hour mod 12) = 0) and ((min mod 60) <= 4) then
begin
if Hour = 12 then Writeln(Out, ' Noon.')
else Writeln(Out, ' Midnight.');
Halt;
end; {We are finished here}
Dec(Min, Min mod 5); {Find the nearest five minutes}
if Hour > 12 then Dec(Hour, 12); {Get rid of 24hour clock}
case Min of
5: Out := Out + ' five past ';
10: Out := Out + ' ten past ';
15: Out := Out + ' a quarter past ';
20: Out := Out + ' twenty past ';
25: Out := Out + ' twenty-five past ';
30: Out := Out + ' half past ';
35: Out := Out + ' twenty-five to ';
40: Out := Out + ' twenty to ';
45: Out := Out + ' a quarter to ';
50: Out := Out + ' ten to ';
55: Out := Out + ' five to ';
else
begin
Out := Out + ' ';
Min := 0;
end;
end; {Case}
Out := Out + Numbers[Hour];
if min = 0 then Out := Out + ' o''clock';
Writeln(Out,'.');
end.
[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]