```Contributor: DAVID ADAMSON

(*
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.
```