program xage; {$c-,f-,m-}
type
byte=0..255;

date=record
       month:byte;
       day:byte;
       year:byte;
       end;

var
reference_date,current_date,birthday:date;
cont:char;
continue:boolean;

function age (current_date,birthday:date):real;
var
days_elapse_from_birth_to_current_date,years,days,months:integer;
years_of_age:byte;
months_of_age:real;
days_from_reference_to_current_date,days_birthday_to_reference:integer;




function elapse_time(date_to_use:date):integer;  {internal function}
var
pastdays:byte;

begin
years:=0;
days:=0;
years:= (date_to_use.year - reference_date.year);

case date_to_use.month of
1:      days:= 0;
2:      days:= 31;
3:      days:= 59;
4:      days:= 90;
5:      days:= 120;
6:      days:= 151;
7:      days:= 181;
8:      days:= 212;
9:      days:= 243;
10:     days:= 273;
11:     days:= 304;
12:     days:= 334;
end;

days:= days + date_to_use.day + (years div 4); {+ days so far in month
                                                 and correct for leap years}
days:= days + (years*365); {now add in days of years gone by}
{days should now = total days from date of test to reference year }
elapse_time:=days;
end; {of internal procedure elapse time}



begin { of function age}
years_of_age:=0;
months_of_age:=0;

days_from_reference_to_current_date:= elapse_time(current_date);
days_birthday_to_reference:= elapse_time(birthday);

days_elapse_from_birth_to_current_date:=
(days_from_reference_to_current_date - days_birthday_to_reference);

years_of_age:= days_elapse_from_birth_to_current_date div 365;
months_of_age:=
       (days_elapse_from_birth_to_current_date mod 365) div 30;

writeln('years and months of age are= ',years_of_age:3,months_of_age:5:3);
{debug}


if months_of_age > 9 then months_of_age:= months_of_age/100 else
                         months_of_age:= months_of_age/10;

{convert months of age to decimal representing number of months, not
fraction of year, eg. age = 12.5 means 12 years and 5 months}


age:= years_of_age + months_of_age;

end; {of procedure}


begin {of main program}
continue:= true;

reference_date.month:=1;
reference_date.day:=1;
reference_date.year:=40;

while continue do
       begin
       writeln(chr(27),'[2J',chr(27),'[1;1H'); {clear screen}
  writeln('Calculate the age of a patient given birth and current date.');

write('Enter current date as  mm, dd,  yy   ');
readln(current_date.month, current_date.day, current_date.year);

writeln;
write('Enter date of birth as mm, dd, yy  ');
readln(birthday.month, birthday.day, birthday.year);



writeln;
writeln;
writeln('Age is : ',age(current_date,birthday):2:2, ' years');

readln(cont);
if cont = chr(27) then continue:= false;
end; {of while}
end.